贪吃蛇
简单的做一个贪吃蛇程序
#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" : " "));
}
}
}