当前位置:天才代写 > tutorial > C语言/C++ 教程 > c++ win32 API实现方块联机游戏过程

c++ win32 API实现方块联机游戏过程

2017-11-04 08:00 星期六 所属: C语言/C++ 教程 浏览:1197

副标题#e#

先简朴先容下本身的环境,2006年普通大专院校结业,结业后到了北京介入软 件测试的培训,今朝做ASP.NET网站安详等方面的测试。许多人都说技能欠好才去 做测试的,很不幸言中了,我其时我的环境确实是这样的,这或许也是许多做测 试的伴侣心中的一个老梗。纵然事情了,心中的梦魇一直没能撤除,所以抉择试 试本身到底能不能写点对象。在事情期间,自学SQLSERVER+ASP.NET 在事情一年 后正式参加网站开拓。

写俄罗斯方块联机游戏想法,源于到北京后的培训 经验,当时候的老师是一个在华为经验几年开拓履历和测试履历的好手,当他告 诉我说:“传闻你号称学过C++的时候”,我心里其实蛮忸怩的,因为 确实不懂。以后C++这对象,根基是心中不堪回顾的回想。也开始有想用C++写个 小对象的想法。直到最近终于付诸于现实。

大学时间进修了MFC,对 WINDOWS窗口的运行机制一窍不通,只会拖拖控件添加动静,是个准新手。于是开 始看一些关于那方面的书和视频,主要是 《Windows措施设计》和孙鑫老师的c++ 视频第一、二章节。相识面向工具的根基观念和WINDWOS窗口的动静机制等根基的 理论。有了这些基本后,脑壳里或许就有个模子,以为可以实现这个俄罗斯方块 游戏。开始实际写代码。

我坚信所有巨大的对象都是由最简朴的对象构成 的,我所有的编程思路和实现都是基于这个简朴的思路来做的。虽然这个游戏很 简朴,对付一些有履历的伴侣可以说是 一天半天就可以完成的,可是对付完全没 有windwos窗口编程的新手来说,这会是一个让人务实,让人摸索前进的思路。我 坚信在开拓举办中的所有坚苦或BUG都是因为一个很简朴的错误而呈现的。我能做 的就是不断的尝试和测试来实现。在这方面,测试的履历给了我不少的辅佐。让 我在呈现问题的时候,有大量的想法去测试寻找问题的缘由,+上本身的耐性,所 有的问题都迎刃而解。

c++ win32 API实现方块联机游戏进程


#p#副标题#e#

实际进程:

1 对话框: 最开始,什么都不想,要玩游戏就得有个窗口 。我用createwindow把内里大部门的窗口范例都组合测试了一边,最终才选定用 一个没有最大化最小化按钮、没有改变巨细边框的对话框窗口来实现。

2 游戏界面:用什么实现方块。有许多想法,用一张画好的图片,做方块格子,也 想过用按钮。最后想想就用一个彩色矩形代表一个方块最简朴。FillRect();

3 游戏方块: 接着用设计好游戏规格,方块巨细,游戏界面宽高。就用 FillRect()画个玄色矩形来暗示游戏方块。此刻想想其实成立一个子窗口做界 面是最利便的了 .

4 显示第一个方块:游戏对话框有了,游戏界面有了, 于是我试着在玄色矩形游戏界面中画第一个方块,是一个直条。这也是我第一次 打仗到WM_PAINT动静。第一次知道窗口的重绘。刚开始的时候,呈现许多的问题 ,不是只有直条就是只有游戏界面。在重绘函数内里有许多错误的代码,走了很 多湾路。光为了在游戏界面中画出一个直条我就画了两天,终于才大白重绘的原 理和根基的函数的利用。当我在游戏界面中呈现第一个直条的时候,我很是欢快 ,我以为这个是一个很好的开始,起码证明白我的要领在必然水平上是可行的。 意味着前面的事情都没白搭。给了我很大的激昂。

5 设计方块基类: 有 了前面的基本,我就坚信可以完成。我以为方块基类是整个游戏的基本, 必然要 先确定好的,于是设计了一个4维的数组来表达7类方块20多种的变革。这样在游 戏中需要方块的数据的时候都可以从中提取。其实最开始的时候在这块想了许多 ,因为不确定后头到底要怎么样用到方块,继往开来的想了好久,既要思量到后 面的利用,又要只管简朴,最开始的时候还想用vector来实现,于是还顺便进修 了关于容器的内容,怎么利用怎么初始化等等。不外最后照旧否认了这个方案。

6 设计游戏类:其实不懂面向工具,只是以为,差异范例的要分块。你尽管提 供数据,我尽管操纵。于是就设计了游戏类。

其时也不知道游戏类内里到底需要什么要领,只是以为有些要领是必需要的。 好比 移动 下降 消行 游戏开始 游戏竣事 游戏暂停等。也不想那么多,一股脑 的都+上。

7 游戏运行机制:是游戏就要有开始,就要有竣事,要有运行。看别人的代码 都写的很好,一个死轮回就可以让游戏不断运行。我想往上套,始终也不可。只 能另想步伐。最后因为方块游戏的运行就是下降。所以我只要弄一个函数不断的 挪用下降,就能实现游戏运行的道理。至于什么时候下降遏制。那可以详细再写 。我以为这样是对的。最终找到了SETTIMMER来实现

#p#分页标题#e#

8 游戏算法实现:当我第一次看到,随机生成的方块,在游戏界面里渐渐下降 的时候…… 我心里谁人美啊…… 我知道我对了,胜 利在望了。接下的对象就是详细的游戏成果的写作,一切都顺利了很多,我只是 不断的测试+写+测试。完成。在写完之前我开始想着,下一步的实现。网络版

9 单机游戏完成: 所有的都完成,单机游戏终于完成后,本身也是不断的测 试,优化算法,这中间还呈现内存泄露的严重问题,也因祸得福相识了内存的基 本利用。直到修复问题。最终单机版的无bug版完成。我中间公司的项目也多了老 加班,就先放下了。

10 网络版的孕育: 07年同学在武汉,有个伴侣先容他去干开拓的事情。何处 的人说了,在一个月之内,假如开拓出一个网络版的俄罗斯方块游戏,那么OK, 来上班。我想起这见工作,于是我想着可否实现它。其实这照旧做一个测试的一 个心结。本身也有心思转开拓,所以抉择去实现这个。

11 网络版的实现进程: 因为整个游戏只有两个类,所有我以为给网络成果这 块+一个类。所有的网络成果都在哪里实现,在开拓的进程中发明,由于没有很好 的设计,导致在实现的时候呈现许多的抵牾。从而我也认识到设计和算法在软件 开拓中的重要性。跌跌撞撞的用WIndows socket利用UDP的协议实现了联机通讯, 中间专门先尝试几个通讯小例子,再把以为可用的代码用上,此刻根基的联机功 能都以实现。很想仿照腾讯QQ火拼俄罗斯游戏开拓游戏道具。但今朝也只逗留在 想的阶段。

#p#副标题#e#

游戏先容:

1 单机版和网络版并存

2 网络版:实此刻线用户及时状态显示,(空闲中 游戏中 离线)

3 网络版:邀请对方联机对战。若对方状态不行以邀请,则不能邀请

4 网络版:双人联机对战实现,可以看到对方及时的方块数据。游戏胜负按照 率先达到10000分的一方得胜

5 网络版道具利用: 酝酿中……

竣事语: 第一个C++ WIN232的措施,固然只是个小游戏,但也给了我一些信 心和激昂,但愿有时性能正式插手措施员阵营中来,今朝地位照旧测试事情,想 这下一步的开拓偏向该怎么走。但愿列位同仁多多指教,给点发起。多谢啦。

下载地点:http://download.csdn.net/source/727355

部门源码 :

Gameframe.h

#include "GameNet.h"
#ifndef _GAMEFRAME_H_
#define _GAMEFRAME_H_

using namespace std;
#define SingleRect 30 //单个方块巨细

#define FRAME_L 15 //主界面的起点坐标 L
#define FRAME_T 15 //主界面的起点坐标 T

#define NEXT_L   SingleRect*10+FRAME_L+15 //下一个方块的 起点座标 L
#define NEXT_T   FRAME_T //下一个方块的起点座标 T

#define MAIN_SIZE_R SingleRect*10+FRAME_L //主界面x_x
#define MAIN_SIZE_B SingleRect*20+FRAME_T //主界面y_y

#define NEXT_SIZE_R SingleRect*4+NEXT_L+20 //下一个方块 x_x
#define NEXT_SIZE_B SingleRect*4+NEXT_T+20 //下一个方块 y_y

class Gameframe:public GameNet
{
public:
    Gameframe();
    virtual ~Gameframe();
    void Draw_Frame(HDC hDC,HWND

hwnd,HBRUSH G_brush); //重绘主框架
    void Draw_Next(HDC hDC,HWND hwnd,HBRUSH G_brush);  ////重绘下一个方块框架
    void Draw_Message(HDC hDC,HWND hwnd,HBRUSH G_brush);  //重绘下一个方块框架
    void Draw_Child(HDC hDC,HWND hwnd,HBRUSH G_brush);  //重绘子窗口
    void Game_Start(); //开始游戏
    bool G_Stop; //游戏是否暂停
    bool Game_Over(); //判定游戏是否竣事
    void Game_Run(); //开始运行,设定下落时间
    void Game_Down(); //方块下落
    void Game_Change(); //方块变形
    bool Game_Move(int i); //方块移动
    void Game_Stop();
    void Game_Restart();
    void Game_Sound(unsigned short int sound);
    bool Down_end;
    bool Space_on;
    char G_Path[100]; //游戏路径
protected:
    void Next_Rand(); //生成下一个方块
    RECT N; //下一个方块界面
    RECT F; //主界面
    RECT Active_Rect; //方块勾当界面
    RECT Total; //得分界面
    RECT re; //
    unsigned short int Actvie_bottom; //勾当方块的最下 面
    Square squ; //界说一个方块的工具
    short int Next_A; //下一个方块范例
    short int
Next_B; //下一个方块详细形状
    short int Frame_A; //当前方块范例
    short int Frame_B; //当前方块详细形状
    short int Move; //移动格子数
    short int Down; //下降个数
    short int Now_Cake[4][2]; //新方块 0横坐标 1纵坐标
    short int Old_Cake[4][2]; //旧方块 0横坐标 1纵坐标
    short int Top; //有方块的最高点
    bool Gframe[10][20]; //10横坐标  20 纵坐标
    unsigned short int G_Level;
    int Rect_Falling; //下落时间差
    short int Gframe_Color[10][20]; //主游戏方块颜色
    short int Rect_Color; //当前方块颜色
    short int Rect_Color_N; //下一个方块颜色
    COLORREF G_BasicColor[7]; //方块颜色基本
    bool Game_Active(int Event); //方块事件处理惩罚
    bool Game_DelRect(); //消行算法
private:
};
#endif
 Gamefrme.cpp

#include "Gameframe.h"

//////////////////////////////////////////////////////////////////////< br /> // Gameframe Class
//////////////////////////////////////////////////////////////////////< br /> int Move_temp;
extern HINSTANCE h_inst;
extern HWND hwnd;
extern HWND
U_hwnd; //用户列表
void Gameframe::Draw_Next(HDC hDC,HWND hwnd,HBRUSH G_brush)// 重绘下一个方块框架主游戏框架+内容
{
    N.left=Total.left;
    FillRect(hDC,&N,G_brush);
    FillRect(hDC,&Total,G_brush);

    SetDCBrushColor(hDC,G_BasicColor[Rect_Color_N]);
    for(int c=0;c<4;c++)
    {
        for(int d=0;d<4;d++)
        {
            if(1==squ.Nextframe[Next_A][Next_B] [d][c])
            {
                SetRect (&re,NEXT_L+c*30+1+10,NEXT_T+d*30+1+10,NEXT_L+c*30+29+10,NEXT_T+d*3 0+29+10);
                FillRect (hDC,&re,G_brush);
            }
        }
    }
    char szChar[25];
    sprintf(szChar,"%d   VS   % d",Game_Point,Child_Point);
    unsigned short int count=0,i=0;
    while(szChar[i] != '\0')
    {
        count++;
        i++;
    }
    TextOut(hDC,NEXT_L+20,NEXT_T+185,szChar,count);
}
void Gameframe::Draw_Frame(HDC hDC,HWND hwnd,HBRUSH G_brush)//主游戏框架+内容
{
    SetDCBrushColor(hDC,RGB(0,0,0));
    FillRect(hDC,&F,G_brush);
    for(unsigned short int o=0;o<10;o++)
    {
        for(unsigned short int p=0;p<20;p++)
        {
            if(1==Gframe[o][p])
            {
                SetDCBrushColor (hDC,G_BasicColor[Gframe_Color[o][p]]);
 SetRect (&re,FRAME_L+o*30+1,FRAME_T+p*30+1,FRAME_L+o*30+29,FRAME_T+p*30+29) ;
                FillRect (hDC,&re,G_brush);
            }
        }
    }
    if(G_Over)
    {
       if(G_Level>9)
       {
           G_Level=1;
           TextOut (hDC,FRAME_L+100,FRAME_T+270,"通关了!锋利",strlen("             "));
       }
       else
       {
           if(!Arrive)
           {
               TextOut (hDC,FRAME_L+100,FRAME_T+270,"GAME OVER",strlen("GAME OVER"));
           }
           else
           {
               TextOut (hDC,FRAME_L+100,FRAME_T+270,"YOU'RE WINNER",strlen ("YOU'RE WINNER"));
           }
       }
    }
}
void Gameframe::Draw_Message(HDC hDC,HWND hwnd,HBRUSH G_brush)
{
    SetDCBrushColor(hDC,RGB(255,255,255));
    SetTextColor(hDC,RGB(0,0,0));
    FillRect(hDC,&Info,G_brush);
    DrawText(hDC,InfoChar,strlen (InfoChar),&Info,DT_LEFT);
}
void Gameframe::Draw_Child(HDC hDC,HWND hwnd,HBRUSH G_brush)
{
    SetDCBrushColor(hDC,RGB(0,0,0));
    SetRect(&re,0,0,200,400);
    FillRect(hDC,&re,G_brush);
    for(unsigned short int o=0;o<10;o++)
    {
        for(unsigned short int
p=0;p<20;p++)
        {
            if(0!=Child_Frame[o][p])
            {
                SetDCBrushColor (hDC,G_BasicColor[Child_Frame[o][p]-1]);
                SetRect (&re,o*20+1,p*20+1,o*20+19,p*20+19);
                FillRect (hDC,&re,G_brush);
            }
        }
    }
}
Gameframe::Gameframe()
{
    //主游戏框初始化
    SetRect (&F,FRAME_L,FRAME_T,MAIN_SIZE_R,MAIN_SIZE_B);
    SetRect (&N,NEXT_L,NEXT_T,NEXT_SIZE_R,NEXT_SIZE_B); //下一个框
    SetRect (&Total,NEXT_L,NEXT_T+170,NEXT_SIZE_R,NEXT_SIZE_B+80); //得分框
    SetRect (&Info,NEXT_SIZE_R+FRAME_L+FRAME_L,FRAME_T+400+20,NEXT_SIZE_R+FRAME _L+FRAME_L+200,FRAME_T+400+20+100); //动静框

    G_BasicColor[0] = RGB(220, 39, 75); // 红
    G_BasicColor[1] = RGB(232, 123, 20); // 橙
    G_BasicColor[2] = RGB(200, 200, 102); // 黄
    G_BasicColor[3] = RGB(51, 204, 102); // 绿
    G_BasicColor[4] = RGB(0, 143, 224); // 蓝
    G_BasicColor[5] = RGB(153, 153, 204); // 青
    G_BasicColor[6] = RGB(204, 204, 204); // 灰

    getcwd(G_Path,80);
    strcat(G_Path,"\\resource\\Wav\\"); //得到资源路径
    G_NET=false;
    this->Game_Restart();
}
Gameframe::~Gameframe()
{
    squ.~Square();
}
void Gameframe::Game_Start()
{
    //游戏开始
    Next_Rand();
    unsigned short int left=0,top=0,right=0,bottom=0;
    for(unsigned short int h=0;h<4;h++)
    {
if(left>Now_Cake[h][0])
        {
            left=Now_Cake[h][0];
        }
        if(right<Now_Cake[h][0])
        {
            right=Now_Cake[h][0];
        }
        if(bottom<Now_Cake[h][1])
        {
            bottom=Now_Cake[h][1];
        }
        Actvie_bottom=bottom+1;
        SetRect (&Active_Rect,FRAME_L+left*30+90,FRAME_T+top*30,FRAME_L+right*30+30 +90,FRAME_T+bottom*30+30);
    }

    if(Game_Over())
    {
        if(G_NET)
        {
            if(!Arrive)
            {
                SendSelect(8); //游戏未完成
            }
            Game_Run();
            return;
        }
        G_start=false;
        G_Over=true;
        Rect_Falling=1000;
        Next_Rand();
        Game_Sound(2);
        KillTimer(hwnd,TIMER_ID);
        InvalidateRect(hwnd,NULL,false);
    }
    else
    {
        InvalidateRect (hwnd,&Active_Rect,false);
        InvalidateRect(hwnd,&N,false);
        Game_Run();
    }
}
bool Gameframe::Game_Over()
{
    if(G_Over)
    {
        return G_Over;

 }
    for(unsigned short int a=0;a<4;a++)
    {
        if(1==Gframe[Now_Cake[a][0]][Now_Cake[a] [1]])//判定游戏是否竣事(新方块生成时是否已经有方块)
        {
            G_Over=true;
        }
        else
        {
            Gframe[Now_Cake[a][0]][Now_Cake[a] [1]]=1;
            Gframe_Color[Now_Cake[a][0]] [Now_Cake[a][1]]=Rect_Color;
        }
    }
    if(G_Over)
    {
        return G_Over;
    }
    else
    {
        for(unsigned short int b=0;b<4;b++)
        {
            Gframe[Now_Cake[b][0]][Now_Cake[b] [1]]=1;
        }
        return G_Over;
    }
    return G_Over;
}
void Gameframe::Game_Run()//游戏运行
{
    if(G_Over)//游戏竣事
    {
        KillTimer(hwnd,TIMER_ID);
        if(G_NET)
        {
            G_NET=false;
            G_start=false;
            SendSelect(11); //通知所有在耳目自 己的状态
            ::SendMessage (U_hwnd,WM_COMMAND,LBN_SELCHANGE,0);
            if(Arrive)//本身达到可能对方游戏竣事
            {
               Game_Sound(7);
            }
else
            {
               Game_Sound(2); //对方达到可能 本身游戏竣事
            }
            InvalidateRect (hwnd,&F,false);
            return;
        }
    }
    else
    {
        if(!G_NET)//单机游戏
        {
            G_Level=Game_Point/1000;
            if(G_Level<10)//游戏是否通关
            {
                Rect_Falling=1000- G_Level*100;
                SetTimer (hwnd,TIMER_ID,Rect_Falling,NULL);
            }
            else
            {
                G_start=false;
                G_Over=true;
                Game_Sound(7);
                Rect_Falling=1000;
                KillTimer(hwnd,TIMER_ID);
                InvalidateRect (hwnd,NULL,false);
            }
        }
        else
        {
            SetTimer (hwnd,TIMER_ID,NET_SPEED,NULL); //对战运行速度
        }
    }
}
void Gameframe::Game_Stop()//暂停
{
    G_Stop=true;
    KillTimer(hwnd,TIMER_ID);
}
bool Gameframe::Game_Move(int i)
{
    Move_temp=i;
if(Game_Active(2))
    {
       if(1==i)
       {
          Active_Rect.right=Active_Rect.right+i*30;
          InvalidateRect (hwnd,&Active_Rect,false);
          Active_Rect.left=Active_Rect.left+i*30;
       }
       else
       {
          Active_Rect.left=Active_Rect.left+i*30;
          InvalidateRect (hwnd,&Active_Rect,false);
          Active_Rect.right=Active_Rect.right+i*30;
       }
       return true;
    }
    else
    {
        return false;
    }
}
void Gameframe::Game_Down()//下落
{
    if(G_Over)
    {
        Game_Run();
    }
    if(Down<19)
    {
        Down=Down+1; //变形时,需要利用纵坐标
    }
    else
    {
        Down=0; //变形时,需要利用纵坐标
    }
   if(Game_Active(1))
   {
      Down_end=true; // 是否可以持续下落和重绘时是否 需要刷新下一个方块
      Active_Rect.bottom=Active_Rect.bottom+30; //在 本来方块基本上增加下一行更新面积
      Actvie_bottom=Actvie_bottom+1;
      if(!Space_on)
      {
          InvalidateRect (hwnd,&Active_Rect,false);
      }
      Active_Rect.top=Active_Rect.top+30; //刷新后将 上方也增加一行
   }
   else
   {
       Game_Sound(4);
if(G_NET)
       {
           SendSelect(5);
       }
       Space_on=false;
       if(!Game_DelRect())//消行算分。
       {
          InvalidateRect(hwnd,&F,false);
       }
       Down_end=false; //不能下落了。
       Game_Start(); //从头开始生成方块。
   }
}
void Gameframe::Game_Change()//变形
{
    Frame_B=Frame_B+1;
    if(6==Frame_A||5==Frame_A||2==Frame_A)//4种范例的方 块
    {
        if(Frame_B>3)
        {
            Frame_B=0;
        }
    }
    else
    {
        if(Frame_B>1)
        {
            Frame_B=0;
        }
    }
    if(Game_Active(3))//变形是否乐成
    {
        Game_Sound(6);
        InvalidateRect (hwnd,&Active_Rect,false);
        short int left=0,top=0,right=0,bottom=0,k=0;
        for(short int h=0;h<4;h++)
        {
            if(left>Now_Cake[h][k])
            {
                left=Now_Cake[h][k];
            }
            if(right<Now_Cake[h][k])
            {
                right=Now_Cake[h] [k];

#p#副标题#e#

#p#分页标题#e#

}
            if(bottom<Now_Cake[h][k+1])
            {
                bottom=Now_Cake[h][k+1];
            }
            if(top>Now_Cake[h][k+1])
            {
                top=Now_Cake[h][k+1];
            }
        }
        Actvie_bottom=bottom+1;
        SetRect (&Active_Rect,FRAME_L+left*30,FRAME_T+top*30,FRAME_L+right*30+30,FR AME_T+bottom*30+30);
        InvalidateRect (hwnd,&Active_Rect,false);
    }
    else
    {
        if(6==Frame_A||5==Frame_A||2==Frame_A)//变形 失败,返回本来的样子
        {
            if(Frame_B>=1)
            {
                Frame_B=Frame_B-1;
            }
            else
            {
                Frame_B=Frame_B+3;
            }
        }
        else
        {
            if(Frame_B>=1)
            {
                Frame_B=Frame_B-1;
            }
            else
            {
                Frame_B=Frame_B+1;
            }
        }
        InvalidateRect(hwnd,&F,false);
    }
}
bool Gameframe::Game_DelRect()
{
    int del=0,Count=0;
    bool re=false;
    for(short int a=19;a>=Top;a--)
    {
        for(short int b=0;b<10;b++)
        {
            if(1==Gframe[b][a])
            {
                del=del+1;
            }
        }
        if(10==del)
        {
            Count=Count+1;
            for(a;a>=0;a--)
            {
                if(0==a)//只要有消行。那么最 顶层必然是空的
                {
                    for(short int d=0;d<10;d++)
                    {
                        Gframe[d] [a]=false;
                        Gframe_Color[d][a]=0;
                    }
                }
                else
                {
                    for(short int c=0;c<10;c++)
                    {
                        Gframe[c] [a]=Gframe[c][a-1];
                        Gframe_Color[c][a]=Gframe_Color[c][a-1];
                    }
  }
            }
            a=20; //不能便是十九。因为要举办a-- 操纵
            Top=Top+1;
        }
        del=0;
    }
    switch(Count)
    {
    case 1:
        re=true;
        Game_Sound(5);
        Game_Point=Game_Point+100;
        InvalidateRect(hwnd,NULL,false); //写在外面 在游戏竣事时看不到下一块方块
        break;
    case 2:
        re=true;
        Game_Sound(5);
        Game_Point=Game_Point+300;
        InvalidateRect(hwnd,NULL,false);
        break;
    case 3:
        re=true;
        Game_Sound(5);
        Game_Point=Game_Point+500;
        InvalidateRect(hwnd,NULL,false);
        break;
    case 4:
        re=true;
        Game_Sound(5);
        Game_Point=Game_Point+800;
        InvalidateRect(hwnd,NULL,false);
        break;
    default:
        break;
    }
    if(G_NET)
    {
        if(Count>0)
        {
            SendInfo[1]=Count; //消了几行
            SendSelect(6);
            if
(Game_Point>=Aim)
            {
                SendSelect(7);
            }
        }
    }
    return re;
}
void Gameframe::Game_Restart()
{
    /**********初始化界面为0,暗示没有方块*********/
    for(unsigned short int a1=0;a1<20;a1++)
    {
        for(unsigned short int b1=0;b1<10;b1++)
        {
            Gframe[b1][a1]=0; //暗示没有方块
            Gframe_Color[b1][a1]=0; //游戏颜色 都初始化为0
            Child_Frame[b1][a1]=0;
        }
    }
    /**********初始化当前勾当方块位置,暗示没有方块 *********/
    for(unsigned short int j=0;j<4;j++)
    {
        for(unsigned short int k=0;k<2;k++)
        {
            Now_Cake[j][k]=0;
            Old_Cake[j][k]=0;
        }
    }
    /******初始化第一个NEXT和主界面的第一个方块 ********/

    struct _timeb timebuffer;
    _ftime(&timebuffer);
    unsigned short int tem=timebuffer.millitm;
    unsigned short int a=tem%7;
    short int b=0;
    srand(tem);
    if(6==a||5==a||2==a)
    {
        b=timebuffer.millitm%4;
    }
    else
    {
        b=timebuffer.millitm%2;
 }
    Frame_A=Next_A=a;
    Frame_B=Next_B=b;
    Rect_Color=Rect_Color_N=rand()%7;
    /************************************************/
    Down_end=true; //默承认以下落
    Rect_Falling=1000; //游戏下落时间
    G_start=false; //游戏还没开始
    G_Over=false; //游戏未竣事
    G_Stop=false; //游戏未暂停
    Arrive=false; //没有到达方针
    Top=19; //默认为方块的最底层
    Game_Point=0; //分数起点为0
    Child_Point=0; //对方分数起点为0
    Down=0; //下降格数
    Move=0; //移动格数
    G_Level=0; //默认是0级
    Space_on=false; //默认不按下空格键

     InvalidateRect(hwnd,NULL,false);
}
bool Gameframe::Game_Active(int Event)
{
  return ture;
}

 

    关键字:

天才代写-代写联系方式