Win32 控制台贪吃蛇游戏






3.35/5 (18投票s)
Win32 控制台中的贪吃蛇游戏
- 下载源码 - 57.1 KB (Visual C++ 6.0 项目文件)

引言
贪吃蛇游戏是一个广受欢迎的游戏。它已经被制作了无数次,并且可以在任何设备上玩。贪吃蛇的变种运行在手机到大型机等各种设备上,并且贪吃蛇已经用大多数主流编程语言编写,从 BASIC、C/C++、Pascal、Java、C# 到其他任何语言。今天,我们将看看一个用 C/C++ 编写的贪吃蛇游戏,它设计用于在 Win32 控制台中运行,使用文本字符。
那么,贪吃蛇是什么以及它是如何工作的呢?我们的贪吃蛇只是一个文本字符,在屏幕上指定的边界内移动,吞噬随机放置在该边界内的苹果。我们的蛇将其 x y 坐标与苹果的坐标进行比较,以查看是否发生了碰撞,也就是说,如果我们的蛇吃掉了苹果。如果是,则该苹果被移除,并在指定的边界内随机放置一个新的苹果,我们的蛇就会
进行身体移植,它被延长了。我们所需要做的就是处理用户的键盘命令并绘制蛇。我们将使用 <LEFT>、<RIGHT>、<UP> 和 <DOWN> 键来控制蛇。
所以让我们开始吧。
我们像往常一样,通过创建一个项目和一个类开始,然后我们继续通过使用成员来体现该类。我们选择不在头文件中定义和体现我们的成员函数,我们只是将原型放在一个单独的文件中。
项目文件是
CSnake_main.cpp | 主文件 |
CSnake.cpp | 类定义和方法体文件 |
CSnake.h | 类声明文件 |
我们将把变量、原型和函数头文件的声明放在 CSnake.h 中。
class CSnake
{
public:
int snakeXLocation[201];
int snakeYLocation[201];
int color_background, color_border , color_apple ,
color_normal , color_snake ; // colors
int snake, prvSnake, snake_Enlongment ;
int randomX, randomY, apple ;
int level ;
int score ;
char playAgain;
int i, j;
int centerX, centerY;
int x, y, oldX, oldY;
int lines, columns;
char c;
int direction, difficulty;
public:
CSnake();
CSnake( int i);
~CSnake();
public:
void Settings();
void Game_Main();
void game_Canvas();
void initsnake();
void check_collision();
void keyPressed();
void Display_snake();
void check_Snake_Location();
void Create_Apples();
void Check_Apples();
void Remove_Apple();
void Game_Over();
void Display();
void gotoxy(int x, int y);
void clrscr();
void setcolor(WORD color);
void clrbox(unsigned char x1,unsigned char y1,
unsigned char x2,unsigned char y2,unsigned char bkcol);
void box(unsigned x,unsigned y,unsigned sx,unsigned sy,
unsigned char col,unsigned char col2,char text_[]);
void putbox(unsigned x1,unsigned y1,unsigned x2,unsigned y2,
unsigned char texcol,unsigned char frcol,
unsigned char bkgcol,char bheader[]);
};
并在 CSnake.cpp 中让贪吃蛇复活。
现在让我们来看看 CSnake.cpp 中包含的一些重要方法。
Create_Apples() 方法
Create_Apples()
方法创建一个新的苹果并将其随机放置在指定的边界内。
/***************************
* create apples *
****************************/
void CSnake::Create_Apples()
{
setcolor(color_apple);
randomX= ( rand()% columns )+ centerX ;
randomY= ( rand()% lines)+ centerY ;
for(i=1;i<=snake;i++)
{
if((randomX==snakeXLocation[i])&&(randomY==snakeYLocation[i])) Create_Apples();
}
gotoxy(randomX,randomY); printf("%c",770);
if(score==1)getch();
}
Check_Apples() 方法
Check_Apples()
方法将蛇的位置与苹果的位置进行比较,如果它们发生了碰撞,蛇就会进行身体移植,它会被延长,苹果被移除,并在边界内随机放置一个新的苹果。
/***************************
* check apples *
****************************/
void CSnake::Check_Apples()
{
if((snakeXLocation[1]==randomX)&&(snakeYLocation[1]==randomY))
{
apple++;
Remove_Apple();
snake+=snake_Enlongment;
Create_Apples();
}
}
Display_snake() 方法
Display_snake()
方法在 for
循环中绘制蛇并延长蛇的身体。 Display_snake()
还打印出分数以及剩余的苹果数量。
/***************************
* display snake *
****************************/
void CSnake::Display_snake()
{
for(i=snake;i>=0;i--)
{
gotoxy(snakeXLocation[i],snakeYLocation[i]);
if(i==0)
{
setcolor(color_background);
printf("%c",177);
}else setcolor(color_snake);
if(i==1) printf("%c",178);
if((i!=0)&&(i!=1)) printf("%c",219);
}
setcolor (color_normal);
gotoxy(centerX-1,centerY+lines+2);
printf("level: %2.d",level);
gotoxy(centerX-1,centerY+lines+2+1);
printf(" apple(s) :%2.d/%2.d ",apple,(((lines*columns)/30)+6));
setcolor (color_background);
}
keyPressed() 方法
keyPressed()
方法只获取用户从键盘发出的命令并设置蛇的方向。使用 <LEFT>、<RIGHT>、<UP> 和 <DOWN> 键来控制蛇。
/***************************
* keypressed *
****************************/
void CSnake::keyPressed()
{
if(kbhit())
{ //
c=getch();
switch(c)
{
case RIGHT :
if(direction!=3)
{
x++ ;
direction=1;
}else x-- ;
break;
case LEFT:
if(direction!=1)
{
x-- ;
direction=3;
}else x++ ;
break;
case DOWN :
if(direction!=2)
{
y++ ;
direction=4;
}else y-- ;
break;
case UP :
if(direction!=4)
{
y-- ;
direction=2;
}else y++ ;
break;
case SPACE : getch() ; break;
}
}
}
主文件
最后,CSnake_main.cpp 文件是我们为类创建一个实例并运行我们的贪吃蛇游戏的地方。
#include "CSnake.h"
int main()
{
CSnake *snake = new CSnake(1);
return 0;
}
感谢阅读。