首页 > 代码库 > 贪吃蛇
贪吃蛇
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
贪吃蛇
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。