[C语言]简单实现小游戏——贪吃蛇

贪吃蛇
简单的做一个贪吃蛇程序

#include<windows.h>
#include<conio.h>
#include<ctype.h>

int main() {
	int  headX = 0, headY = 0;//头坐标
	int len = 4;//蛇的长度
	int map[900] = { 0 };//地图 30*30,储存地图每个位置的元素
	char derection = 'D';//方向
	char inputBuffer = 'D';
	int i = 0;//循环变量
	//初始化随机种子
	//动态分配,返回随机地址
	//system():输出dos命令	mode修改窗口大小
	system("mode con cols=60 lines=30");
	srand((unsigned)malloc(!system("mode con:cols = 60 lines = 30")));
	//字符横纵比0.5 = 60 / 30
	//-1为食物标记
	//sleep延时
	for (map[rand() % 900] = -1; 1; Sleep(100)) {
		//头文件<conio.h>提供
		//_kbhit 检测键盘输入
		//_getch 获取一个字符
		//头文件<ctype.h>提供 toupper 大写 toUpper
		if (_kbhit() && (inputBuffer = toupper(_getch()))) {
		//if (_kbhit() && (inputBuffer = _getch()) && inputBuffer < 97 ? inputBuffer == 32 : 1) {
			//判断移动矛盾 不能从左走变成右走
			if (derection == 'W' && inputBuffer != 'S' ||
				derection == 'A' && inputBuffer != 'D' ||
				derection == 'S' && inputBuffer != 'W' ||
				derection == 'D' && inputBuffer != 'A'
				) {
				derection = inputBuffer;
			}
		}
		//判断撞墙 移动
		if (derection == 'W' && --headY < 0  ||
			derection == 'A' && --headX < 0  ||
			derection == 'S' && ++headY == 30||
			derection == 'D' && ++headX == 30 
			) {
			exit(0);
		}
		//一维数组的图 求头坐标
		//headX + headY * 30
		//利用短路	经过空地,跳过
		//如果 大于蛇身,退出
		//其他情况是有食物,蛇身+1
		if (map[headX + headY * 30] && (map[headX + headY * 30] > 0 ? exit(0), 1 : ++len)) {
			//map[i] = -1 表明此处有食物
			//!(map[i] = -1) > 0 表明这个点没有食物
			//判断食物新位置是不是空地

			for (i = rand() % 900; map[i] || !(map[i] = -1); i = rand() % 900);
			//不断尝试生成食物 直到成功生成
		}
		else {
			for (i = 0; i < 900; i++) {
				map[i] > 0 ? map[i] -= 1 : 0;// 遍历地图	所有蛇身点的值减去1
				//蛇尾巴更新为空地 0
			}
		}
		system("cls");//清屏
		map[headX + headY * 30] = len;//移动头
		for(i = 0; i < 900; i++){//图像化
			_cputs(map[i] > 0 ? "()" : (map[i] ? "00" : "  "));
		}
	}
}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值