今天繼續來把遊戲完成!
下面是用WASD鍵來控制蛇的上下左右
void Input(){ //接收使用者輸入的訊息
if(kbhit()){ //控制蛇上下左右
switch(getch()){
case 'a':
direction = Left;
break;
case 'd':
direction = Right;
break;
case 'w':
direction = Up;
break;
case 's':
direction = Down;
break;
case 'p': //按下p暫停
direction = Stop;
break;
}
}
return;
}
以下是遊戲演算法,包含了蛇的移動、吃到錢幣身體會變長以及分數+1等等
void Algorithm(){ //包含遊戲演算法,更新畫面或式判斷遊戲
int prevX = tailX[0]; //前一個座標的x座標
int prevY = tailY[0];
int prev2X,prev2Y; //前前個座標的x座標
tailX[0]=x;
tailY[0]=y;
for(int i=1; i<nTail; i++){ //讓蛇往前移動一個位置
prev2X = tailX[i];
prev2Y = tailY[i];
tailX[i] = prevX;
tailY[i] = prevY;
prevX = prev2X;
prevY = prev2Y;
}
switch(direction){ //蛇頭移動位置
case Left:
x--;
break;
case Right:
x++;
break;
case Up:
y--;
break;
case Down:
y++;
break;
}
if(x >= width){ //從左邊出現
x = 0;
}
else if(x < 0){ //超出左邊,從右邊出來
x = width-1;
}
if(y >= height){ //從上面出現
y=0;
}
else if(y<0){ //從下面出現
y= height-1;
}
for(int i=0 ; i<nTail; i++){
if(tailX[i] == x && tailY[i] == y){
gameOver = 1; //碰到身體遊戲結束
cout << "\a";
return;
}
}
if(x == coinX && y == coinY){
score +=1; //吃到錢幣分數+1
coinX=rand()%(width - 1)+1;
coinY=rand()%(height - 1)+1; //重新產生錢幣
nTail++; //吃到錢幣身體變長
}
return;
}
最後我們主程式長這樣!
#include "snake.h"
int main(){
srand(time(NULL));
SetUp();
while(!gameOver){
Draw();
Input();
Algorithm();
}
return 0;
}
最後完成的畫面長這樣~
這一次的實作就到這邊~大家都超棒的!!!