📄 snakeview.cpp
字号:
m_Box[10][31]=PLAYER1COLOR;
m_player1.snake.pos[2].x=10;
m_player1.snake.pos[2].y=32;
m_Box[10][32]=PLAYER1COLOR;
}
void CSnakeView::InitPlayer2()
{
m_player2.snake.position=UP_POS;
m_player2.snake.len=3;
m_player2.snake.pos[0].x=39;
m_player2.snake.pos[0].y=30;
m_Box[39][30]=PLAYER2COLOR;
m_player2.snake.pos[1].x=39;
m_player2.snake.pos[1].y=31;
m_Box[39][31]=PLAYER2COLOR;
m_player2.snake.pos[2].x=39;
m_player2.snake.pos[2].y=32;
m_Box[39][32]=PLAYER2COLOR;
}
//**************************
long i,j;
int pos,ii,jj;
void CSnakeView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
//移动蛇一
if(m_Pause) return;
CClientDC dc(this);
if(m_player1.life>=1)
{
pos=m_player1.snake.position;
if(pos==0) {ii=0;jj=-1;}
else
if(pos==1) {ii=1;jj=0;}
else
if(pos==2) {ii=0;jj=1;}
else
{ii=-1;jj=0;}
i=m_player1.snake.pos[0].x;
j=m_player1.snake.pos[0].y;
if(i+ii>=50 || i+ii<0 || j+jj>=38 || j+jj<0)
{
m_player1.life--;
for(int m=m_player1.snake.len-1;m>=0;m--)
m_Box[m_player1.snake.pos[m].x][m_player1.snake.pos[m].y]=BACKCOLOR;
if (m_player1.life>=1) InitPlayer1();
else
//处理game over
{
if(m_GameMode==FALSE || m_player2.life<=0)
{
m_GameOver=TRUE;
m_mid.Open("lost.mid");
m_mid.Play();
}
}
Invalidate(FALSE);
}
else
//空格
if(m_Box[i+ii][j+jj]==BACKCOLOR)
{
m_Box[m_player1.snake.pos[m_player1.snake.len-1].x][m_player1.snake.pos[m_player1.snake.len-1].y]=BACKCOLOR;
DrawBox(&dc,m_player1.snake.pos[m_player1.snake.len-1].x,m_player1.snake.pos[m_player1.snake.len-1].y,BACKCOLOR);
for(int m=m_player1.snake.len-1;m>=1;m--)
m_player1.snake.pos[m]=m_player1.snake.pos[m-1];
m_player1.snake.pos[0].x+=ii;
m_player1.snake.pos[0].y+=jj;
m_Box[i+ii][j+jj]=PLAYER1COLOR;
DrawBox(&dc,i+ii,j+jj,PLAYER1COLOR);
}
else
//蚕
if(m_Box[i+ii][j+jj]==FOODCOLOR)
{
DrawBox(&dc,m_player1.snake.pos[m_player1.snake.len-1].x,m_player1.snake.pos[m_player1.snake.len-1].y,BACKCOLOR);
m_player1.snake.len++;
m_player1.score+=10;
if(m_player1.score>=m_tempplayer1score+500)
{
m_player1.life++;
m_tempplayer1score=m_player1.score;
m_wave.Close();
m_wave.Load("add.wav");
m_wave.Play();
}
m_LeftFood--;
for(int m=m_player1.snake.len-1;m>=1;m--)
m_player1.snake.pos[m]=m_player1.snake.pos[m-1];
m_player1.snake.pos[0].x+=ii;
m_player1.snake.pos[0].y+=jj;
m_Box[i+ii][j+jj]=PLAYER1COLOR;
DrawBox(&dc,i+ii,j+jj,PLAYER1COLOR);
DrawView();
if(m_LeftFood<=0)//过关
{
m_Stage++;
m_PassStage=TRUE;
m_Pause=TRUE;
if(m_Stage!=33)
m_mid.Open("pass.mid");
else m_mid.Open("win.mid");
m_mid.Play();
Invalidate(FALSE);
return;
}
}
else
//玩者二
if(m_Box[+ii][j+jj]==PLAYER2COLOR)
{
m_player1.life--;
m_player2.life--;
for(int m=m_player1.snake.len-1;m>=0;m--)
m_Box[m_player1.snake.pos[m].x][m_player1.snake.pos[m].y]=BACKCOLOR;
for(m=m_player2.snake.len-1;m>=0;m--)
m_Box[m_player2.snake.pos[m].x][m_player2.snake.pos[m].y]=BACKCOLOR;
if (m_player1.life>=1) InitPlayer1();
if (m_player2.life>=1) InitPlayer2();
//处理game over
if (m_player1.life<=0 && m_player2.life<=0)
{
m_GameOver=TRUE;
m_mid.Open("lost.mid");
m_mid.Play();
}
Invalidate(FALSE);
}
//障碍物,自已
else
{
m_player1.life--;
for(int m=m_player1.snake.len-1;m>=0;m--)
m_Box[m_player1.snake.pos[m].x][m_player1.snake.pos[m].y]=BACKCOLOR;
if (m_player1.life>=1) InitPlayer1();
else
//处理game over
if (m_player1.life<=0)
{
if(m_GameMode==FALSE || m_player2.life<=0)
{
m_GameOver=TRUE;
m_mid.Open("lost.mid");
m_mid.Play();
}
}
Invalidate(FALSE);
}
}
//****************************************************************
if(m_GameMode && m_player2.life>=1)
{
pos=m_player2.snake.position;
if(pos==0) {ii=0;jj=-1;}
else
if(pos==1) {ii=1;jj=0;}
else
if(pos==2) {ii=0;jj=1;}
else
{ii=-1;jj=0;}
i=m_player2.snake.pos[0].x;
j=m_player2.snake.pos[0].y;
if(i+ii>=50 || i+ii<0 || j+jj>=38 || j+jj<0)
{
m_player2.life--;
for(int m=m_player2.snake.len-1;m>=0;m--)
m_Box[m_player2.snake.pos[m].x][m_player2.snake.pos[m].y]=BACKCOLOR;
if (m_player2.life>=1) InitPlayer2();
else
//处理game over
{
if(m_GameMode==FALSE || m_player1.life<=0)
{
m_GameOver=TRUE;
m_mid.Open("lost.mid");
m_mid.Play();
}
}
Invalidate(FALSE);
}
else
//空格
if(m_Box[i+ii][j+jj]==BACKCOLOR)
{
m_Box[m_player2.snake.pos[m_player2.snake.len-1].x][m_player2.snake.pos[m_player2.snake.len-1].y]=BACKCOLOR;
DrawBox(&dc,m_player2.snake.pos[m_player2.snake.len-1].x,m_player2.snake.pos[m_player2.snake.len-1].y,BACKCOLOR);
for(int m=m_player2.snake.len-1;m>=1;m--)
m_player2.snake.pos[m]=m_player2.snake.pos[m-1];
m_player2.snake.pos[0].x+=ii;
m_player2.snake.pos[0].y+=jj;
m_Box[i+ii][j+jj]=PLAYER2COLOR;
DrawBox(&dc,i+ii,j+jj,PLAYER2COLOR);
}
else
//蚕
if(m_Box[i+ii][j+jj]==FOODCOLOR)
{
DrawBox(&dc,m_player2.snake.pos[m_player2.snake.len-1].x,m_player2.snake.pos[m_player2.snake.len-1].y,BACKCOLOR);
m_player2.snake.len++;
m_player2.score+=10;
if(m_player2.score>=m_tempplayer2score+500)
{
m_player2.life++;
m_tempplayer2score=m_player2.score;
}
m_LeftFood--;
for(int m=m_player2.snake.len-1;m>=1;m--)
m_player2.snake.pos[m]=m_player2.snake.pos[m-1];
m_player2.snake.pos[0].x+=ii;
m_player2.snake.pos[0].y+=jj;
m_Box[i+ii][j+jj]=PLAYER2COLOR;
DrawBox(&dc,i+ii,j+jj,PLAYER2COLOR);
DrawView();
if(m_LeftFood<=0)//过关
{
m_Stage++;
m_PassStage=TRUE;
m_Pause=TRUE;
if(m_Stage!=33)
m_mid.Open("pass.mid");
else m_mid.Open("win.mid");
m_mid.Play();
Invalidate(FALSE);
return;
}
}
else
//玩者二
if(m_Box[+ii][j+jj]==PLAYER1COLOR)
{
m_player1.life--;
m_player2.life--;
for(int m=m_player1.snake.len-1;m>=0;m--)
m_Box[m_player1.snake.pos[m].x][m_player1.snake.pos[m].y]=BACKCOLOR;
for(m=m_player2.snake.len-1;m>=0;m--)
m_Box[m_player2.snake.pos[m].x][m_player2.snake.pos[m].y]=BACKCOLOR;
if (m_player1.life>=1) InitPlayer1();
if (m_player2.life>=1) InitPlayer2();
//处理game over
if (m_player1.life<=0 && m_player2.life<=0)
{
m_GameOver=TRUE;
m_mid.Open("lost.mid");
m_mid.Play();
}
Invalidate(FALSE);
}
//障碍物,自已
else
{
m_player2.life--;
for(int m=m_player2.snake.len-1;m>=0;m--)
m_Box[m_player2.snake.pos[m].x][m_player2.snake.pos[m].y]=BACKCOLOR;
if (m_player2.life>=1) InitPlayer2();
else
//处理game over
if (m_player2.life<=0)
{
if(m_GameMode==FALSE || m_player1.life<=0)
m_GameOver=TRUE;
m_mid.Open("lost.mid");
m_mid.Play();
}
Invalidate(FALSE);
}
}
CView::OnTimer(nIDEvent);
}
void CSnakeView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(m_GameStart)
{
if(m_GameOver)
{
m_mid.Close();
int max;
if (m_player1.score>m_player2.score)
max=m_player1.score;
else
max=m_player2.score;
if(max>m_Hiscore)
{
m_Hiscore=max;
SaveHiscore();
}
m_GameStart=FALSE;
Invalidate();
return;
}
if(m_PassStage)
{
//加入初始化下一关数据
m_mid.Close();
if(m_Stage!=33)
InitGameDat();
else m_GameStart=FALSE;
Invalidate(FALSE);
return;
}
switch(nChar)
{
//控制蛇一
case 87:
case 119:
if(m_player1.snake.position!=2)
m_player1.snake.position=0;
break;
case 68:
case 100:
if(m_player1.snake.position!=3)
m_player1.snake.position=1;
break;
case 83:
case 115:
if(m_player1.snake.position!=0)
m_player1.snake.position=2;
break;
case 65:
case 97:
if(m_player1.snake.position!=1)
m_player1.snake.position=3;
break;
//控制蛇二
case VK_UP:
if(m_player2.snake.position!=2)
m_player2.snake.position=0;
break;
case VK_RIGHT:
if(m_player2.snake.position!=3)
m_player2.snake.position=1;
break;
case VK_DOWN:
if(m_player2.snake.position!=0)
m_player2.snake.position=2;
break;
case VK_LEFT:
if(m_player2.snake.position!=1)
m_player2.snake.position=3;
break;
case VK_ESCAPE://退出游戏
InitGameDat();
m_GameStart=FALSE;
KillTimer(IDT_MOVE);
Invalidate(FALSE);
break;
case VK_RETURN://暂停游戏
m_Pause=1-m_Pause;
Invalidate(FALSE);
break;
default:
break;
}
}
else
{
switch(nChar)
{
case VK_UP:
if(m_GameMode)
{
CClientDC dc(this);
CPen pen;
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,0));
dc.SelectObject(&brush);
dc.Ellipse(PLAYER2POSX-PLAYERPOSR,PLAYER2POSY-PLAYERPOSR,PLAYER2POSX+PLAYERPOSR,PLAYER2POSY+PLAYERPOSR);
pen.CreatePen(PS_SOLID,1,SELECTCOLOR);
dc.SelectObject(&pen);
brush.DeleteObject();
brush.CreateSolidBrush(SELECTCOLOR);
dc.SelectObject(&brush);
dc.Ellipse(PLAYER1POSX-PLAYERPOSR,PLAYER1POSY-PLAYERPOSR,PLAYER1POSX+PLAYERPOSR,PLAYER1POSY+PLAYERPOSR);
pen.DeleteObject();
brush.DeleteObject();
m_GameMode=FALSE;
}
break;
case VK_DOWN:
if(m_GameMode==FALSE)
{
CClientDC dc(this);
CPen pen;
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,0));
dc.SelectObject(&brush);
dc.Ellipse(PLAYER1POSX-PLAYERPOSR,PLAYER1POSY-PLAYERPOSR,PLAYER1POSX+PLAYERPOSR,PLAYER1POSY+PLAYERPOSR);
pen.CreatePen(PS_SOLID,1,SELECTCOLOR);
dc.SelectObject(&pen);
brush.DeleteObject();
brush.CreateSolidBrush(SELECTCOLOR);
dc.SelectObject(&brush);
dc.Ellipse(PLAYER2POSX-PLAYERPOSR,PLAYER2POSY-PLAYERPOSR,PLAYER2POSX+PLAYERPOSR,PLAYER2POSY+PLAYERPOSR);
pen.DeleteObject();
brush.DeleteObject();
m_GameMode=TRUE;
}
break;
case VK_ESCAPE:
PostQuitMessage(0);
break;
case VK_RETURN://进入游戏
m_Stage=1;
InitGameDat();
m_GameStart=TRUE;
Invalidate(FALSE);
CSnakeView::SetTimer(IDT_MOVE,m_Speed,NULL);
break;
default:
break;
}
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -