1
、邊墻(
Wall
)
該類規定遊戲的範圍大小。
2
、蛇類(
Snake
)
用該類生成壹個實例蛇
snake
3
、移動(
Move
)
該類用於實現對蛇的操作控制,即蛇頭方向的上下左右的移動操作。
4
、食物類(
Food
)
該類是遊戲過程中食物隨機產生的控制和顯示。
5
、判斷死亡(
Dead
)
該類是對遊戲過程中判斷玩家操作是否導致蛇的死亡,其中包括蛇頭咬食自己身體和蛇頭是否觸
及遊戲“邊墻”。
6
、蛇結點(
SnakeNode
)
該類是蛇吃下隨機產生的食物從而增加長度的控制類,其中包括蛇長度增加和尾部的變化。
7
、計分統計(
Score
)
該類由於玩家的遊戲成績記錄,及遊戲結束時的得分輸出。
...
部分函數及說明
1.Char menu();
/*
用於玩家選擇的遊戲速度,返回壹個
char
值
*/
2.DELAY(char ch1);
/*
用於控制遊戲速度
*/
3.void drawmap();
/*
繪制遊戲地圖函數
*
4
、
void menu()
/*
遊戲幫助信息的輸出
*
...
部分類細節解說
1
、蛇的構建
—
Snake
class Snake{
public:
int x[n]
int y[n];
int node;
//
蛇身長度
int direction;//
蛇運動方向
int
life;//
蛇生命,判斷死亡
}
2
、隨機食物
Food
利用
rand(
)函數進行隨機數產生,然後就行坐標定位
void Food(void){
...
int pos_x = 0;
int pos_y = 0;
pos_x = rand() % length;//x
坐標的確定
pos_y = rand() % (width-1);//y
坐標的確定
...
}
3
、蛇頭方向確定
利用
switch
語句進行方向確定
...
switch(){
case VK_UP:{
OutChar2.Y--;
y--;
break;
}
case VK_LEFT:{
OutChar2.Y++;
y++;
break;
}
case VK_DOWN:{
OutChar2.X---;
x--;
break;
}
case 'VK_RIGHT:{
OutChar2.X++;
x++;
break;
}
}
代碼
#include <iostream>
#include <ctime>
#include <conio.h>
#include <windows.h>
#include <time.h>
using namespace std;
int score=0,t=300,f=1;//
得分與時間間隔
/ms
(控制貪吃蛇的速度)
double ss=0,tt=0;//
統計時間所用參數
class Node
{
Node(): x(0), y(0), prior(0), next(0) { }
int x;
int y;
Node *prior;
Node *next;
friend class Snake;
};
class Snake
{
public:
Snake();
~Snake();
void output();
void move();
void change_point(char);
private:
Node *head;
Node *tail;
enum p{ UP
, RIGHT, DOWN, LEFT }point; //
方向
int food_x, food_y; //
食物的坐標
static const int N = 23;
int game[N][N];
void add_head(int, int); //
添加坐標為
a,b
的結點
void delete_tail(); //
刪除最後壹個結點
void greate_food(); //
產生食物
void gotoxy(int, int);
};
void menu();
//
遊戲操作菜單
int main()
{
system("color a");
//
初始
cmd
窗口顏色為黑(背景)淡綠(文字)
cout<<"\n\n\n\n\n\n
";
for(int i=0;i<23;i++)
{char star[]={"Welcome To Snake Game!"};
cout<<star[i];
Sleep(170);}
cout<<"\n\n
祝妳好運!
"<<endl;
Sleep(3000);
if(kbhit()){char kk=getch();if(kk==9)f=5;} //
如果執行,吃壹顆星加
5
分
system("cls");
Snake s;
menu();
system("color 1a");
s.output();
while (true)
{
char keydown = getch();
if(keydown==32)getch();
if(keydown==27)return 0;
s.change_point(keydown);
while (!kbhit())
{clock_t start,end;start=clock();
s.move();
s.output();
Sleep(t);
end=clock();tt=(double)(end-start)/CLOCKS_PER_SEC;ss+=tt;
cout<<"
時間:
"<<(int)ss;