小白小白特别白~~
c语言贪吃蛇其实在网上可以找到很多的资源。但是因为用的是mac,windows.h和conio.h找不到,所以里面很多函数用不了。在网上找了很久,才慢慢写完。在这里记录一下,欢迎感谢各位大佬指点👏
目录
笔记
用的IDE是codelite。游戏是为了在mac的terminal上80x24的界面展示写的。
一些没有实现或者有待改进的地方:
- 当游戏结束时,整个程序就结束了。没有按某个键,重新开始的功能。
- terminal上的光标有点妨碍最终的显示效果。
- 如果玩家在蛇身运动的中途按键,系统依然会读取而且存储下来。
下面👇是游戏最终实现结果:
游戏大纲
代码
注意!下面的一些函数(例如:gotoxy)是在conio.h的头文件下面的。这个头文件在mac里面是不能直接用的。我是找到了别人写的myconio 然后下载了下来。
1. 初始化界面和蛇身
效果展示:游戏刚开始的界面,蛇身初始向下
蛇身用了一个结构体数组。假设了蛇身长度不会超过20.
//terminal的大小:80x24
#define ROW 24
#define COL 80
#define SROW 4//SROW: starting row. 这里是用来标记界面最上面那一行
#define maxSnakeLen 20//蛇身长度最大值
struct coordinates{
int x;
int y;
}snake[maxSnakeLen];
使用gotoxy就可以选择在terminal的哪一个具体位置打印,省去了全部清屏的麻烦。
void initialize(int score, int life, int snakeLen){
//打印游戏边界
//横向边界
for(int j = 1; j <= COL; j++){
gotoxy(j, SROW);
printf("|");
gotoxy(j,ROW);
printf("|");
}
//竖向边界
for(int i = SROW+1; i < ROW; i++){
gotoxy(1, i);
printf("|");
gotoxy(COL, i);
printf("|");
}
//打印score和life
//在网上找到了怎么在mac terminal更改色彩的办法。
gotoxy(4, SROW-1);
printf("\e[32mscore: %2d\e[0m",score);//绿色
gotoxy(COL-9, SROW-1);
printf("\e[32mlife: %d\n\e[0m", life);
//初始化蛇身
//蛇尾
snake[0].y = 12;
snake[0].x = 39;
//初始化蛇身为竖向
for(int i = 0; i < snakeLen; i++){
gotoxy(snake[0].x, snake[0].y+i);
if(i == snakeLen - 1){
//蛇头
printf("■");
}
else{
printf("\e[35m■\e[0m");//蛇身
}
if(i != 0){
//记录蛇身的坐标
snake[i].x = snake[0].x;
snake[i].y = snake[0].y+i;
}
}
}
2. 清屏
在网上看到过system(“cls”);但是在我的mac上还是不能用。所以自己写了一个清屏的函数
void clearBoard(){
for(int y = 3; y < 25; y++){
for(int x = 1; x < 81; x++){
gotoxy(x,y);
printf(" ");
}
}
}
3. 蛇身运动
蛇身按照当前的方向前进。
蛇身前进的原理:
- 创建新的蛇头(向当前的方向,在原来的蛇头位置向前一格)
- 原来的蛇头现在变为蛇身
- 原来的蛇尾消失
struct coordinates{
int x;
int y;
}prevTail;//previous tail
void snakeMoving(char direction, int snakeLen){
//清除原来的蛇尾
gotoxy(snake[0].x, snake[</