如何做打开程序出现联机检查程序/游戏

c++&win32&API实现方块联机游戏历程
c++&win32&API实现方块联机游戏历程
  先简单介绍下自己的情况,2006年普通大专院校毕业,毕业后到了北京参加软件测试的培训,目前做ASP.NET网站安全等方面的测试。很多人都说技术不好才去做测试的,很不幸言中了,我当时我的情况确实是这样的,这大概也是很多做测试的朋友心中的一个老梗。即使工作了,心中的梦魇一直没能除去,所以决定试试自己到底能不能写点东西。在工作期间,自学SQLSERVER+ASP.NET 在工作一年后正式参与网站开发。
  写俄罗斯方块联机游戏想法,源于到北京后的培训经历,那时候的老师是一个在华为经历几年开发经验和测试经验的高手,当他告诉我说:“听说你号称学过C++的时候”,我心里其实蛮惭愧的,因为确实不懂。从此C++这东西,基本是心中不堪回首的回忆。也开始有想用C++写个小东西的想法。直到最近终于付诸于现实。
  大学时间学习了MFC,对WINDOWS窗口的运行机制一窍不通,只会拖拖控件添加消息,是个准新手。于是开始看一些关于那方面的书和视频,主要是 《Windows程序设计》和孙鑫老师的c++视频第一、二章节。了解面向对象的基本概念和WINDWOS窗口的消息机制等基本的理论。有了这些基础后,脑袋里大概就有个模型,觉得可以实现这个俄罗斯方块游戏。开始实际写代码。
  我坚信所有复杂的东西都是由最简单的东西组成的,我所有的编程思路和实现都是基于这个简单的思路来做的。当然这个游戏很简单,对于一些有经验的朋友可以说是 一天半天就可以完成的,但是对于完全没有windwos窗口编程的新手来说,这会是一个让人务实,让人探索前进的思路。我坚信在开发进行中的所有困难或BUG都是因为一个很简单的错误而出现的。我能做的就是不停的实验和测试来实现。在这方面,测试的经验给了我不少的帮助。让我在出现问题的时候,有大量的想法去测试寻找问题的缘由,+上自己的耐心,所有的问题都迎刃而解。
  实际过程:
  1 对话框: 最开始,什么都不想,要玩游戏就得有个窗口。我用createwindow把里面大部分的窗口类型都组合测试了一边,最终才选定用一个没有最大化最小化按钮、没有改变大小边框的对话框窗口来实现。
  2 游戏界面:用什么实现方块。有很多想法,用一张画好的图片,做方块格子,也想过用按钮。最后想想就用一个彩色矩形代表一个方块最简单。FillRect();
  3 游戏方块: 接着用设计好游戏规格,方块大小,游戏界面宽高。就用FillRect()画个黑色矩形来表示游戏方块。现在想想其实建立一个子窗口做界面是最方便的了 .
  4 显示第一个方块:游戏对话框有了,游戏界面有了,于是我试着在黑色矩形游戏界面中画第一个方块,是一个直条。这也是我第一次接触到WM_PAINT消息。第一次知道窗口的重绘。刚开始的时候,出现很多的问题,不是只有直条就是只有游戏界面。在重绘函数里面有很多错误的代码,走了很多湾路。光为了在游戏界面中画出一个直条我就画了两天,终于才明白重绘的原理和基本的函数的使用。当我在游戏界面中出现第一个直条的时候,我非常兴奋,我觉得这个是一个很好的开始,起码证明了我的方法在一定程度上是可行的。意味着前面的工作都没白费。给了我很大的鼓舞。
  5 设计方块基类: 有了前面的基础,我就坚信可以完成。我觉得方块基类是整个游戏的基础, 一定要先确定好的,于是设计了一个4维的数组来表达7类方块20多种的变化。这样在游戏中需要方块的数据的时候都可以从中提取。其实最开始的时候在这块想了很多,因为不确定后面到底要怎么样用到方块,承前启后的想了很久,既要考虑到后面的使用,又要尽量简单,最开始的时候还想用vector来实现,于是还顺便学习了关于容器的内容,怎么使用怎么初始化等等。不过最后还是否定了这个方案。
  6& 设计游戏类:其实不懂面向对象,只是觉得,不同类型的要分块。你只管提供数据,我只管操作。于是就设计了游戏类。
  当时也不知道游戏类里面到底需要什么方法,只是觉得有些方法是必须要的。比如 移动 下降 消行 游戏开始 游戏结束 游戏暂停等。也不想那么多,一股脑的都+上。
  7& 游戏运行机制:是游戏就要有开始,就要有结束,要有运行。看别人的代码都写的很好,一个死循环就可以让游戏不停运行。我想往上套,始终也不行。只能另想办法。最后因为方块游戏的运行就是下降。所以我只要弄一个函数不停的调用下降,就能实现游戏运行的原理。至于什么时候下降停止。那可以具体再写。我觉得这样是对的。最终找到了SETTIMMER来实现
  8& 游戏算法实现:当我第一次看到,随机生成的方块,在游戏界面里缓缓下降的时候…… 我心里那个美啊…… 我知道我对了,胜利在望了。接下的东西就是具体的游戏功能的写作,一切都顺利了许多,我只是不停的测试+写+测试。完成。在写完之前我开始想着,下一步的实现。网络版
  9&& 单机游戏完成: 所有的都完成,单机游戏终于完成后,自己也是不停的测试,优化算法,这中间还出现内存泄露的严重问题,也因祸得福了解了内存的基本使用。直到修复问题。最终单机版的无bug版完成。我中间公司的项目也多了老加班,就先放下了。
  10& 网络版的孕育: 07年同学在武汉,有个朋友介绍他去干开发的工作。那边的人说了,在一个月之内,如果开发出一个网络版的俄罗斯方块游戏,那么OK,来上班。我想起这见事情,于是我想着能否实现它。其实这还是做一个测试的一个心结。自己也有心思转开发,所以决定去实现这个。
  11& 网络版的实现过程: 因为整个游戏只有两个类,所有我觉得给网络功能这块+一个类。所有的网络功能都在那里实现,在开发的过程中发现,由于没有很好的设计,导致在实现的时候出现很多的矛盾。从而我也认识到设计和算法在软件开发中的重要性。跌跌撞撞的用WIndows socket使用UDP的协议实现了联机通讯,中间专门先实验几个通讯小例子,再把觉得可用的代码用上,现在基本的联机功能都以实现。很想模仿腾讯QQ火拼俄罗斯游戏开发游戏道具。但目前也只停留在想的阶段。
  游戏介绍:
  1& 单机版和网络版并存
  2& 网络版:实现在线用户实时状态显示,(空闲中 游戏中 离线)
  3& 网络版:邀请对方联机对战。若对方状态不可以邀请,则不能邀请
  4& 网络版:双人联机对战实现,可以看到对方实时的方块数据。游戏胜负根据率先到达10000分的一方获胜
  5& 网络版道具使用: 酝酿中……
  结束语: 第一个C++ WIN232的程序,虽然只是个小游戏,但也给了我一些信心和鼓舞,希望有机会能正式加入程序员阵营中来,目前职位还是测试工作,想这下一步的开发方向该怎么走。希望各位同仁多多指教,给点建议。多谢啦。
  下载地址:
  部分源码:
  Gameframe.h
  #include "GameNet.h"#ifndef _GAMEFRAME_H_#define _GAMEFRAME_H_
  #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_S//游戏是否暂停&&& 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_&&& bool Space_&&& char G_Path[100];//游戏路径protected:&&& void Next_Rand();//生成下一个方块&&& RECT N;//下一个方块界面&&& RECT F;//主界面&&& RECT Active_R//方块活动界面&&& RECT T//得分界面&&& RECT//&&& unsigned short int Actvie_//活动方块的最下面&&& S//定义一个方块的对象&&& short int Next_A;//下一个方块类型&&& short intNext_B;//下一个方块具体形状&&& short int Frame_A;//当前方块类型&&& short int Frame_B;//当前方块具体形状&&& short int M//移动格子数&&& short int D//下降个数&&& short int Now_Cake[4][2];//新方块 0横坐标 1纵坐标&&& short int Old_Cake[4][2];//旧方块 0横坐标 1纵坐标&&& short int T//有方块的最高点&&& bool Gframe[10][20];//10横坐标& 20 纵坐标&&& unsigned short int G_L&&& int Rect_F&&& //下落时间差&&& short int Gframe_Color[10][20];//主游戏方块颜色&&& short int Rect_C//当前方块颜色&&& short int Rect_Color_N;//下一个方块颜色&&& COLORREF G_BasicColor[7];//方块颜色基础&&& bool Game_Active(int Event);//方块事件处理&&& bool Game_DelRect();//消行算法private:};#endif&Gamefrme.cpp
  #include "Gameframe.h"
  //////////////////////////////////////////////////////////////////////// Gameframe Class//////////////////////////////////////////////////////////////////////int Move_extern HINSTANCE h_extern HWNDextern HWNDU_//用户列表void Gameframe::Draw_Next(HDC hDC,HWND hwnd,HBRUSH G_brush)// 重绘下一个方块框架主游戏框架+内容{&&& N.left=Total.&&& 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*30+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 intp=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=&&& 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();&&&&&&&&&&&&&&&&&& }&&&&&&& G_start=&&&&&&& G_Over=&&&&&&& 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_O
  }&&& for(unsigned short int a=0;a&4;a++)&&& {&&&&&&& if(1==Gframe[Now_Cake[a][0]][Now_Cake[a][1]])//判断游戏是否结束(新方块生成时是否已经有方块)&&&&&&& {&&&&&&&&&&& G_Over=&&&&&&& }&&&&&&& else&&&&&&& {&&&&&&&&&&& Gframe[Now_Cake[a][0]][Now_Cake[a][1]]=1;&&&&&&&&&&& Gframe_Color[Now_Cake[a][0]][Now_Cake[a][1]]=Rect_C&&&&&&& }&&& }&&& if(G_Over)&&& {&&&&&&& return G_O&&& }&&& else&&& {&&&&&&& for(unsigned short int b=0;b&4;b++)&&&&&&& {&&&&&&&&&&& Gframe[Now_Cake[b][0]][Now_Cake[b][1]]=1;&&&&&&& }&&&&&&& return G_O&&& }&&& return G_O}void Gameframe::Game_Run()//游戏运行{&&& if(G_Over)//游戏结束&&& {&&&&&&& KillTimer(hwnd,TIMER_ID);&&&&&&& if(G_NET)&&&&&&& {&&&&&&&&&&& G_NET=&&&&&&&&&&& G_start=&&&&&&&&&&& SendSelect(11);//通知所有在线人自己的状态&&&&&&&&&&& ::SendMessage(U_hwnd,WM_COMMAND,LBN_SELCHANGE,0);&&&&&&&&&&& if(Arrive)//自己到达或者对方游戏结束&&&&&&&&&&& {&&&&&&&&&&&&&& Game_Sound(7);&&&&&&&&&&& }else&&&&&&&&&&& {&&&&&&&&&&&&&& Game_Sound(2);//对方到达或者自己游戏结束&&&&&&&&&&& }&&&&&&&&&&& InvalidateRect(hwnd,&F,false);&&&&&&&&&&&&&&&&&& }&&& }&&& 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=&&&&&&&&&&&&&&& G_Over=&&&&&&&&&&&&&&& 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=&&& 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;&&&&&& }&&&&&&&&& }&&& else&&& {&&&&&&&&&& }}void Gameframe::Game_Down()//下落{&&& if(G_Over)&&& {&&&&&&& Game_Run();&&& }&&& if(Down&19)&&& {&&&&&&& Down=Down+1;//变形时,需要使用纵坐标&&& }&&& else&&& {&&&&&&& Down=0;//变形时,需要使用纵坐标&&& }&& if(Game_Active(1))&& {&&&&& Down_end=// 是否可以连续下落和重绘时是否需要刷新下一个方块&&&&& 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=&&&&&& if(!Game_DelRect())//消行算分。&&&&&& {&&&&&&&&& InvalidateRect(hwnd,&F,false);&&&&&& }&&&&&& Down_end=//不能下落了。&&&&&& 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];
  }&&&&&&&&&&& 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,FRAME_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=&&& for(short int a=19;a&=Ta--)&&& {&&&&&&& 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]=&&&&&&&&&&&&&&&&&&&&&&& 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=&&&&&&& Game_Sound(5);&&&&&&& Game_Point=Game_Point+100;&&&&&&& InvalidateRect(hwnd,NULL,false);//写在外面在游戏结束时看不到下一块方块&&&&&&&&&& case 2:&&&&&&& re=&&&&&&& Game_Sound(5);&&&&&&& Game_Point=Game_Point+300;&&&&&&& InvalidateRect(hwnd,NULL,false);&&&&&&&&&& case 3:&&&&&&& re=&&&&&&& Game_Sound(5);&&&&&&& Game_Point=Game_Point+500;&&&&&&& InvalidateRect(hwnd,NULL,false);&&&&&&&&&& case 4:&&&&&&& re=&&&&&&& Game_Sound(5);&&&&&&& Game_Point=Game_Point+800;&&&&&&& InvalidateRect(hwnd,NULL,false);&&&&&&&&&& default:&&&&&&&&&& }&&& if(G_NET)&&& {&&&&&&& if(Count&0)&&&&&&& {&&&&&&&&&&& SendInfo[1]=C//消了几行&&&&&&&&&&& SendSelect(6);&&&&&&&&&&& if(Game_Point&=Aim)&&&&&&&&&&& {&&&&&&&&&&&&&&& SendSelect(7);&&&&&&&&&&& }&&&&&&& }&&& }&&&}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 _&&& _ftime(&timebuffer);&&& unsigned short int tem=timebuffer.&&& 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=//默认可以下落&&& Rect_Falling=1000;//游戏下落时间&&& G_start=//游戏还没开始&&& G_Over=//游戏未结束&&& G_Stop=//游戏未暂停&&& Arrive=//没有达到目标&&& Top=19;//默认为方块的最底层&&& Game_Point=0;//分数起点为0&&& Child_Point=0;//对方分数起点为0&&& Down=0;//下降格数&&& Move=0;//移动格数&&& G_Level=0;//默认是0级&&& Space_on=//默认不按下空格键
  InvalidateRect(hwnd,NULL,false);}bool Gameframe::Game_Active(int Event){&}
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 联机检查并关闭该程序 的文章

 

随机推荐