五子棋.docx
- 文档编号:27032692
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:20
- 大小:83.98KB
五子棋.docx
《五子棋.docx》由会员分享,可在线阅读,更多相关《五子棋.docx(20页珍藏版)》请在冰豆网上搜索。
五子棋
#include"stdafx.h"
#include"Snake.h"
#include"mmsystem.h"
#include
#include
#pragmacomment(lib,"winmm.lib")
#include
/////////////////////////////////窗口句柄声明////////////////////////////////
HWNDhWnd;
/////////////////////////////////界面控件句柄声明////////////////////////////////
HWNDhSpeed,hScor
e,hLong;
/////////////////////////////////位图声明////////////////////////////////
HBITMAPbmp[3],ButtonBmp[3],ziBmp[5];
/////////////////////////////////蛇头坐标声明////////////////////////////////
intHeadX,HeadY;
/////////////////////////////////前进方向声明////////////////////////////////
intDirection;
enum{
left=0,
right,
down,
up,
};
/////////////////////////////////前进速度////////////////////////////////
intx=400;
/////////////////////////////////游戏开始及标志声明////////////////////////////////
boolStart=false;
voidGameStart();
/////////////////////////////////建立数组地图////////////////////////////////
#defineXMax30
#defineYMax19
intmap[XMax][YMax];
/////////////////////////////////蛇身节点数和最大蛇身长度//////////////////////////////
intLong=4;
intLongBF;
#defineMaxLong100
/////////////////////////////////建立贪食蛇对象////////////////////////////////
Snakea[MaxLong];
std:
:
map
/////////////////////////////////消息回调处理////////////////////////////////
LRESULTCALLBACKGameProc(HWND,UINT,WPARAM,LPARAM);
/////////////////////////////////计时器////////////////////////////////
inttime=0;
/////////////////////////////////食物数量及坐标////////////////////////////////
intfood=1;
intFoodX=15;
intFoodY=8;
/////////////////////////////////界面变量、界面刷新函数////////////////////////////////
voidshuaxin();
charScore[10];
charSpeed[10];
charLongc[10];
//////////////////////////////////////////////////////////////////////////////////////////
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
MSGmsg;
WNDCLASSEXwcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC)GameProc;
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(hInstance,"IDI_MYICON");
wcex.hIconSm=LoadIcon(hInstance,"IDI_MYICON");
wcex.hCursor=LoadCursor(hInstance,"IDI_MYCUR");
wcex.hbrBackground=(HBRUSH)(COLOR_MENUTEXT);
wcex.lpszMenuName=NULL;
wcex.lpszClassName="lujian";
wcex.hIconSm=NULL;
RegisterClassEx(&wcex);
hWnd=CreateWindow(
"lujian",
"贪食蛇*小剑制作*",
WS_MINIMIZEBOX|WS_SYSMENU,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
wcex.hInstance,
NULL
);
//MoveWindow(hWnd,100,100,1080,596,true);
MoveWindow(hWnd,0,100,1020,597,true);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
hScore=CreateWindow("STATIC",NULL,ES_READONLY|WS_CHILD|WS_VISIBLE,901,120,112,25,hWnd,NULL,hInstance,NULL);
hSpeed=CreateWindow("STATIC",NULL,ES_READONLY|WS_CHILD|WS_VISIBLE,901,248,112,25,hWnd,NULL,hInstance,NULL);
hLong=CreateWindow("STATIC",NULL,ES_READONLY|WS_CHILD|WS_VISIBLE,901,185,112,25,hWnd,NULL,hInstance,NULL);
shuaxin();
bmp[0]=(HBITMAP)LoadImage(NULL,"bmp//背景.bmp",IMAGE_BITMAP,30,30,LR_LOADFROMFILE);
bmp[1]=(HBITMAP)LoadImage(NULL,"bmp//方块(红).bmp",IMAGE_BITMAP,30,30,LR_LOADFROMFILE);
bmp[2]=(HBITMAP)LoadImage(NULL,"bmp//方块(紫).bmp",IMAGE_BITMAP,30,30,LR_LOADFROMFILE);
ButtonBmp[0]=(HBITMAP)LoadImage(NULL,"bmp//按钮.bmp",IMAGE_BITMAP,100,42,LR_LOADFROMFILE);
ButtonBmp[1]=(HBITMAP)LoadImage(NULL,"bmp//按钮1.bmp",IMAGE_BITMAP,100,42,LR_LOADFROMFILE);
ButtonBmp[2]=(HBITMAP)LoadImage(NULL,"bmp//界面.bmp",IMAGE_BITMAP,120,597,LR_LOADFROMFILE);
ziBmp[0]=(HBITMAP)LoadImage(NULL,"bmp//小.bmp",IMAGE_BITMAP,31,29,LR_LOADFROMFILE);
ziBmp[1]=(HBITMAP)LoadImage(NULL,"bmp//剑.bmp",IMAGE_BITMAP,31,29,LR_LOADFROMFILE);
ziBmp[2]=(HBITMAP)LoadImage(NULL,"bmp//作.bmp",IMAGE_BITMAP,31,29,LR_LOADFROMFILE);
ziBmp[3]=(HBITMAP)LoadImage(NULL,"bmp//品.bmp",IMAGE_BITMAP,31,29,LR_LOADFROMFILE);
ziBmp[4]=(HBITMAP)LoadImage(NULL,"bmp//界面底.bmp",IMAGE_BITMAP,120,329,LR_LOADFROMFILE);
GameStart();
HDChdc,mdc;
hdc=:
:
GetDC(hWnd);
mdc=:
:
CreateCompatibleDC(hdc);
:
:
SelectObject(mdc,ButtonBmp[0]);
:
:
BitBlt(hdc,910,30,146,42,mdc,0,0,SRCCOPY);
:
:
SelectObject(mdc,ButtonBmp[2]);
:
:
BitBlt(hdc,900,0,120,597,mdc,0,0,SRCCOPY);
:
:
ReleaseDC(hWnd,hdc);
:
:
DeleteObject(mdc);
while(true)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
returnmsg.wParam;
}
voidshuaxin()
{
sprintf(Score,"%d分",Long-4);
SetWindowText(hScore,Score);
sprintf(Speed,"%d",Long-3);
SetWindowText(hSpeed,Speed);
sprintf(Longc,"%d节",Long);
SetWindowText(hLong,Longc);
}
voidGameStart()
{
HDChdc,mdc;
hdc=:
:
GetDC(hWnd);
mdc=:
:
CreateCompatibleDC(hdc);
:
:
SelectObject(mdc,bmp[0]);
for(inti=0;i for(intj=0;j { map[i][j]=0; : : BitBlt(hdc,i*30,j*30,30,30,mdc,0,0,SRCCOPY); } : : SelectObject(mdc,bmp[1]); : : BitBlt(hdc,0,0,30,30,mdc,0,0,SRCCOPY); : : BitBlt(hdc,30,0,30,30,mdc,0,0,SRCCOPY); : : BitBlt(hdc,2*30,0,30,30,mdc,0,0,SRCCOPY); : : BitBlt(hdc,3*30,0,30,30,mdc,0,0,SRCCOPY); : : SelectObject(mdc,bmp[2]); : : BitBlt(hdc,15*30,8*30,30,30,mdc,0,0,SRCCOPY); : : ReleaseDC(hWnd,hdc); : : DeleteObject(mdc); map[0][0]=1; map[1][0]=1; map[2][0]=1; map[3][0]=1; map[15][8]=2; Direction=right; HeadX=3; HeadY=0; for(i=0;i { SHE[i]=a[i]; } SHE[0].SnakeX=3; SHE[0].SnakeY=0; SHE[1].SnakeX=2; SHE[1].SnakeY=0; SHE[2].SnakeX=1; SHE[2].SnakeY=0; SHE[3].SnakeX=0; SHE[3].SnakeY=0; Long=4; shuaxin(); } voidLastGo() { map[SHE[Long-1].SnakeX][SHE[Long-1].SnakeY]=0; for(inti=Long-2;i>=0;i--) { SHE[i+1].SnakeX=SHE[i].SnakeX; SHE[i+1].SnakeY=SHE[i].SnakeY; } SHE[0].SnakeX=HeadX; SHE[0].SnakeY=HeadY; } LRESULTCALLBACKGameProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam) { HDChdc,mdc; hdc=: : GetDC(hWnd); mdc=: : CreateCompatibleDC(hdc); switch(message) { caseWM_KEYDOWN: if(wParam==VK_DOWN) { if(Direction! =up) Direction=down; } if(wParam==VK_LEFT) { if(Direction! =right) Direction=left; } if(wParam==VK_RIGHT) { if(Direction! =left) Direction=right; } if(wParam==VK_UP) { if(Direction! =down) Direction=up; } break; caseWM_LBUTTONDOWN: if(LOWORD(lParam)>910&&LOWORD(lParam)<1056&&HIWORD(lParam)>30&&HIWORD(lParam)<76) { PlaySound("sound//开始.wav",NULL,SND_FILENAME); Start=true; GameStart(); } break; caseWM_MOUSEMOVE: if(LOWORD(lParam)>910&&LOWORD(lParam)<1056&&HIWORD(lParam)>30&&HIWORD(lParam)<76) { HDChdc,mdc; hdc=: : GetDC(hWnd); mdc=: : CreateCompatibleDC(hdc); : : SelectObject(mdc,ButtonBmp[1]); : : BitBlt(hdc,910,30,146,42,mdc,0,0,SRCCOPY); : : ReleaseDC(hWnd,hdc); : : DeleteObject(mdc); } else { HDChdc,mdc; hdc=: : GetDC(hWnd); mdc=: : CreateCompatibleDC(hdc); : : SelectObject(mdc,ButtonBmp[0]); : : BitBlt(hdc,910,30,146,42,mdc,0,0,SRCCOPY); : : ReleaseDC(hWnd,hdc); : : DeleteObject(mdc); } break; caseWM_DESTROY: PostQuitMessage(0); break; caseWM_CLOSE: ExitProcess(0); break; caseWM_CREATE: SetTimer(hWnd,1,x,NULL); break; caseWM_TIMER: : : SelectObject(mdc,ziBmp[4]); : : BitBlt(hdc,900,270,129,329,mdc,0,0,SRCCOPY); for(inti=0;i<4;i++) { intxx; xx=900+rand()%90; intyy; yy=280+rand()%220; : : SelectObject(mdc,ziBmp[i]); : : BitBlt(hdc,xx,yy,31,29,mdc,0,0,SRCCOPY); } if(Start) { LongBF=Long; time++; if(food==0) { loop3: time=0; FoodX=rand()%30; FoodY=rand()%19; if(map[FoodX][FoodY]==0) { map[FoodX][FoodY]=2; food++; } else gotoloop3; } if(time%40==0) { if(food==1) { map[FoodX][FoodY]=0; food--; loop1: FoodX=rand()%30; FoodY=rand()%19; if(map[FoodX][FoodY]==0) { map[FoodX][FoodY]=2; food++; } else gotoloop1; } else { loop2: FoodX=rand()%30; FoodY=rand()%19; if(map[FoodX][FoodY]==0) { map[FoodX][FoodY]=2; food++; } else gotoloop2; } } switch(Direction) { caseright: if((HeadX+1)*30<899) { if(map[HeadX+1][HeadY]==1) { Start=false; PlaySound("sound//碰撞.wav",NULL,SND_FILENAME|SND_ASYNC); MessageBox(0,"悟空~~~怎么搞的? 师傅不是叫你别乱撞自己么? ","撞墙罗",MB_OK); break; } if(map[HeadX+1][HeadY]==2) { Long++; food--; shuaxin(); if(Long-LongBF==1) { x-=10; SetTimer(hWnd,1,x,NULL); } } PlaySound("sound//转换.wav",NULL,SND_FILENAME); map[++HeadX][HeadY]=1; LastGo(); } else { Start=false; PlaySound("sound//碰撞.wav",NULL,SND_FILENAME|SND_ASYNC); MessageBox(0,"悟空~~~怎么搞的? 师傅不是叫你别乱撞墙么? ","撞墙罗",MB_OK); } break; caseleft: if((HeadX-1)*30>=0) { if(map[HeadX-1][HeadY]==1) { Start=false; PlaySound("sound//碰撞.wav",NULL,SND_FILENAME|SND_ASYNC); MessageBox(0,"悟空~~~怎么搞的? 师傅不是叫你别乱撞自己么? ","撞墙罗",MB_OK); break; } if(map[HeadX-1][HeadY]==2) { Long++; food--; shuaxin(); if(Long-LongBF==1) { x-=10; SetTimer(hWnd,1,x,NULL); } } PlaySound("sound//转换.wav",NULL,SND_FILENAME); map[--HeadX][HeadY]=1; LastGo(); } else { Start=false; PlaySound("sound//碰撞.wav",NULL,SND_FILENAME|SND_ASYNC); MessageBox(0,"悟空~~~怎么搞的? 师傅不是叫你别乱撞墙么? ","撞墙罗",MB_OK); } break; casedown: if((HeadY+1)*30<570) { if(map[HeadX][HeadY+1]==1) { Start=false; PlaySound("sound//碰撞.wav",NULL,SND_FILENAME|SND_ASYNC); MessageBox(0,"悟空~~~怎么搞的? 师傅不是叫你别乱撞自己么? ","撞墙罗",MB_OK); break; } if(map[HeadX][HeadY+1]==2) { Long++; food-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋