mac下的c语言贪吃蛇

这篇博客记录了在Mac OS下使用C语言编写贪吃蛇游戏的过程,由于mac缺少`windows.h`和`conio.h`头文件,作者通过自定义库实现了终端界面的控制。博客内容包括游戏初始化、清屏、蛇身运动、食物生成、游戏循环及方向键控制、居中打印和玩家成绩记录等关键部分的详细解释,同时指出了程序存在的问题和改进空间。
摘要由CSDN通过智能技术生成

小白小白特别白~~
c语言贪吃蛇其实在网上可以找到很多的资源。但是因为用的是mac,windows.h和conio.h找不到,所以里面很多函数用不了。在网上找了很久,才慢慢写完。在这里记录一下,欢迎感谢各位大佬指点👏

笔记

用的IDE是codelite。游戏是为了在mac的terminal上80x24的界面展示写的。
一些没有实现或者有待改进的地方:

  • 当游戏结束时,整个程序就结束了。没有按某个键,重新开始的功能。
  • terminal上的光标有点妨碍最终的显示效果。
  • 如果玩家在蛇身运动的中途按键,系统依然会读取而且存储下来。

下面👇是游戏最终实现结果:
代码最终实现结果。terminal大小:80x24

游戏大纲

Created with Raphaël 2.2.0 提醒用户输入用户名 展示游戏页面 根据方向键控制蛇身 吃到食物,蛇身加长,score加一 碰到蛇身或者墙,life减一 life为0时,游戏结束 记录玩家username和score

代码

注意!下面的一些函数(例如: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[</
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值