五子棋.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:
:
mapSHE;
/////////////////////////////////消息回调处理////////////////////////////////
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;ifor(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-