首页 > 代码库 > 贪吃蛇

贪吃蛇

  1 #include<Windows.h>  2 #include "resource.h"  3 #include <time.h>  4 typedef char boolean;  5 #define TRUE 1  6 #define FALSE 0  7   8   9  10  11  LRESULT CALLBACK MyWndProc(HWND, UINT, WPARAM, LPARAM); 12  13  typedef struct E{ 14     int h,l; 15     struct E *pnext; 16     struct E *plast; 17  }Apple,Snake,node; 18   19  Apple apple={5,6}; 20  Snake *top=NULL; 21  Snake *end=NULL; 22  23  24  25  26  27 HBITMAP h_back; 28 HBITMAP h_apple; 29 HBITMAP h_body; 30 HBITMAP h_l; 31 HBITMAP h_r; 32 HBITMAP h_u; 33 HBITMAP h_d; 34 int g_fx=1; 35 void add(int h,int l); 36 void initSnake(); 37 void show(HDC hdc); 38 void showApple(HDC hdc); 39 void showSnake(HDC hdc); 40  41 void pa(); 42 boolean iseat(); 43 void Newapple(); 44 boolean isziyao(); 45 boolean iszhuang(); 46  47  48  49  50  51  52 int WINAPI  WinMain(HINSTANCE hlnstance,HINSTANCE hPrelnstance, 53             LPSTR lpCmdLine,int nCmdShow){        //callback 54  55  56     //设计 57     HWND hwnd; 58     MSG  msg; 59     LPCSTR classname="牟柏旭"; 60     WNDCLASSEX ex; 61      62     ex.style=CS_HREDRAW | CS_VREDRAW; 63     ex.cbSize=sizeof(WNDCLASSEX); 64     ex.cbClsExtra=0; 65     ex.cbWndExtra=0; 66     ex.hbrBackground=CreateSolidBrush(RGB(171,171,226)); 67     ex.hCursor=NULL; 68     ex.hIcon=NULL; 69     ex.hIconSm=NULL; 70     ex.hInstance=hlnstance; 71     ex.lpszMenuName=0; 72     ex.lpszClassName=classname; 73     ex.lpfnWndProc=MyWndProc;  //消息过程函数  消息回调函数 74  75     //注册 76      RegisterClassEx(&ex); 77      //创建 78      hwnd= CreateWindow(classname,"mubaixu",WS_OVERLAPPEDWINDOW,50,50,620,630,NULL,NULL, 79             hlnstance,NULL); 80      SetTimer (hwnd, 1, 500, NULL) ; 81  82      //最后一个为是否创建多文档,比如code可以打开多个程序 83  84  85       ShowWindow(hwnd,nCmdShow); 86  87  88  89     h_back=LoadBitmap(hlnstance,MAKEINTRESOURCE(IDB_BITMAP1)); 90     h_apple=LoadBitmap(hlnstance,MAKEINTRESOURCE(IDB_BITMAP2)); 91     h_body=LoadBitmap(hlnstance,MAKEINTRESOURCE(IDB_BITMAP3)); 92     h_l=LoadBitmap(hlnstance,MAKEINTRESOURCE(IDB_BITMAP6)); 93     h_r=LoadBitmap(hlnstance,MAKEINTRESOURCE(IDB_BITMAP4)); 94     h_u=LoadBitmap(hlnstance,MAKEINTRESOURCE(IDB_BITMAP5)); 95     h_d=LoadBitmap(hlnstance,MAKEINTRESOURCE(IDB_BITMAP7)); 96     initSnake(); 97     srand((unsigned int )time(0)); 98       while(GetMessage(&msg,NULL,0,0)){ 99           100           TranslateMessage(&msg);101 102           DispatchMessage(&msg);103           //调用MyWndProc,系统调用104         105           //指定接收哪个窗口的消息,如果为NULL用于接收所有窗口106           // 后两个为过滤107       }108 109 110 111     return 0;112 }    113 114 int xx=200;115 LRESULT CALLBACK MyWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam){116 //    int x,y;117 118 119 //    char tx[10];120     //char ty[10];121     HDC hdc;122     //temp_hdc;123     //HBRUSH newbrush;124     //HBRUSH oldbrush;125     PAINTSTRUCT ps;126 127 //    HBITMAP hbitmap ;128 129     switch (Msg)130     {131 132     case WM_KEYDOWN:133             switch (wParam)134             {135                  case VK_UP:136                       g_fx=1;137                      break;138                  case VK_DOWN:139                        g_fx=3;140                      break;141                  case VK_RIGHT:142                      g_fx=0;143                      break;144                  case VK_LEFT:145                       g_fx=2;146                      break;147 148                 default:149                     break;150             }151         break;152 153     case WM_LBUTTONDOWN:154         /*hdc = GetDC (hWnd) ;155         156         Rectangle(hdc, 150,150,200,200);157         ReleaseDC (hWnd, hdc) ;*/158 159 160     /*    x = LOWORD (lParam) ;161         y = HIWORD (lParam) ;162         MessageBox (hWnd,itoa(x,tx,10),itoa(y,ty,10),MB_OKCANCEL);*/163         break;164 165 166     case WM_CLOSE:167         PostQuitMessage(0);168 169         break;170     171     case WM_PAINT:172         hdc = BeginPaint (hWnd, &ps) ;173 174         show(hdc);175 176         //Rectangle(hdc, 50,50,100,100);177         //hbitmap = CreateCompatibleBitmap (hdc, 100, 200) ;178         //temp_hdc = CreateCompatibleDC (hdc) ;179         //SelectObject(temp_hdc,h_back);    180         ////Rectangle(temp_hdc, 10,10,50,50);181     182         //BitBlt (hdc, 0,0, 600, 600, temp_hdc, 0, 0, SRCCOPY) ;183 184         //xx+=20;185         //Ellipse( hdc, xx, 300, xx+70, 340);186 187           EndPaint (hWnd, &ps) ;188         break;189 190     case WM_TIMER:191 192 193 194         pa();195         if(iseat()){196             Newapple();197             add(-20,-20);198         }199         if(isziyao()||iszhuang()){200             PostQuitMessage(0);201         }202 203         hdc = GetDC (hWnd) ;204             show(hdc);205         /*newbrush= CreateSolidBrush(RGB(171,171,226));//椭圆更新移动206         oldbrush=(HBRUSH)SelectObject(hdc,newbrush);207          Rectangle( hdc, 0, 0,600,600);208           209         DeleteObject(newbrush);210         SelectObject(hdc,oldbrush);211         xx+=20;212         Ellipse( hdc, xx, 300, xx+70, 340);213             Rectangle(hdc, 50,50,100,100);*/214         ReleaseDC (hWnd, hdc) ;215         break;216     default:217         break;218     }219     //系统默认的消息处理函数220     return DefWindowProc(hWnd,Msg,wParam,lParam);221 }222 223 224 225  void add(int h,int l){226       node * pnode=(node *)malloc(sizeof(node));227       pnode->h=h;228       pnode->l=l;229       pnode->plast=NULL;230       pnode->pnext=NULL;231       if(top==NULL){232         top=pnode;233       }234       else{235           pnode->plast=end;236           end->pnext=pnode;237       }238 239       end=pnode;240  }241 242 243  void initSnake(){244     int i;245      for( i=8;i<=10;i++){246          add(i,10);247      }248 249  }250 251  void show(HDC hdc){252     HDC temp_hdc;253     temp_hdc = CreateCompatibleDC (hdc) ;254     SelectObject(temp_hdc,h_back);    255     256     BitBlt (hdc, 0,0, 600, 600, temp_hdc, 0, 0, SRCCOPY) ;257     DeleteObject(temp_hdc);258     showApple( hdc);259     showSnake( hdc);260  }261  void showApple(HDC hdc){262     HDC temp_hdc;263     temp_hdc = CreateCompatibleDC (hdc) ;264     SelectObject(temp_hdc,h_apple);    265     266     BitBlt (hdc, apple.l*30+30,apple.h*30+30, 30, 30, temp_hdc, 0, 0, SRCCOPY) ;267     DeleteObject(temp_hdc);268  }269  void showSnake(HDC hdc){270     HDC temp_hdc;271     Snake *ptop=top;272     temp_hdc = CreateCompatibleDC (hdc) ;273     switch (g_fx)274     {275 276     case 0:277         SelectObject(temp_hdc,h_r);    278         break;279     case 1:280         SelectObject(temp_hdc,h_u);    281         break;282     case 2:283         SelectObject(temp_hdc,h_l);    284         break;285     case 3:286         SelectObject(temp_hdc,h_d);    287         break;288     default:289         break;290     }291 292     293     BitBlt (hdc, top->l*30+30,top->h*30+30  , 30, 30, temp_hdc, 0, 0, SRCCOPY) ;294     DeleteObject(temp_hdc);295 296     297     temp_hdc = CreateCompatibleDC (hdc) ;298     SelectObject(temp_hdc,h_body);    299     ptop=ptop->pnext;300     while(ptop){301         302         BitBlt (hdc, ptop->l*30+30,ptop->h*30+30  , 30, 30, temp_hdc, 0, 0, SRCCOPY) ;303         ptop=ptop->pnext;304     }305     DeleteObject(temp_hdc);306 307  }308 309  void pa(){310     Snake *jend=end;311     while(jend->plast!=NULL)312     {313         jend->h=jend->plast->h;314         jend->l=jend->plast->l;315 316         jend=jend->plast;317     }318     switch(g_fx)319      {320      case 0:321          top->l++;322          break;323      case 1:324          top->h--;325          break;326      case 2:327          top->l--;328          break;329      case 3:330          top->h++;331          break;332 333      }334  }335  boolean iseat(){336      if(top->h==apple.h &&top->l==apple.l )337          return TRUE;338      return FALSE;339  }340  void Newapple(){341      apple.l=rand()%18;342      apple.h=rand()%18;343  }344  boolean isziyao(){345      Snake *pbody=top->pnext;346      while(pbody!=NULL){347          if(top->h==pbody->h &&top->l==pbody->l )348              return TRUE;349          pbody=pbody->pnext;350      }351     return FALSE;352  }353  boolean iszhuang(){354      if(top->h>17||top->l<0||top->l>17||top->h<0)355     {356         return TRUE;357     }358      return FALSE;359  }

资源文件

//{{NO_DEPENDENCIES}}// Microsoft Visual C++ 生成的包含文件。// 供 win32.rc 使用//#define IDB_BITMAP1                     101#define IDB_BITMAP2                     102#define IDB_BITMAP3                     103#define IDB_BITMAP4                     104#define IDB_BITMAP5                     105#define IDB_BITMAP6                     106#define IDB_BITMAP7                     107// Next default values for new objects// #ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE        108#define _APS_NEXT_COMMAND_VALUE         40001#define _APS_NEXT_CONTROL_VALUE         1001#define _APS_NEXT_SYMED_VALUE           101#endif#endif

 

 

技术分享

 

贪吃蛇