发布时间:2025-12-10 23:08:25 浏览次数:2
方案设计
首先初始化背景,使用全局二维数组map[][]表示实体内容,设置边界条件,即数组边界设置为WALL:
//初始化墙for(inti=0;i<ROW;i++){map[i][0]=map[i][COL-1]=WALL;}for(intj=0;j<COL;j++){map[0][j]=map[ROW-1][j]=WALL;} 游戏启动时设置蛇在map数组中的位置,用全局一维数组snake保存蛇位置信息。
食物设置
在map数组内找到一格空地放置食物。为了防止每次产生的随机数相同,初始化时种子设置为time,同时这里注意出现死循环。
voidcreate_food(){introw,col;intcnt=100;do{cnt--;row=rand()%(ROW-1)+1;col=rand()%(COL-1)+1;}while(map[row][col]!=SPACE&&cnt);map[row][col]=FOOD;} 蛇移动方案
1、空地
移动方向前方为空地,删除蛇尾,空地置为蛇头:
caseSPACE:map[snake[SnakeSize-1].X][snake[SnakeSize-1].Y]=SPACE;//原蛇尾位置置空for(inti=SnakeSize-1;i>0;i--)//蛇尾到蛇头整体移动一位{snake[i]=snake[i-1];}map[snake[0].X][snake[0].Y]=SNAKE;//原蛇头位置设置为蛇身snake[0]=next;//下一个位置设置为蛇头map[snake[0].X][snake[0].Y]=HEAD;//更新mapbreak; 2、食物
更新分数及蛇尺寸信息,下一位置设置为蛇头,同时新生成食物。
caseFOOD:for(inti=SnakeSize;i>0;i--)//蛇尾到蛇头整体移动一位{snake[i]=snake[i-1];}map[snake[0].X][snake[0].Y]=SNAKE;//蛇头置蛇snake[0]=next;//将下一个位置赋值给蛇头score++;//分数加一SnakeSize++;//蛇尺寸加一map[snake[0].X][snake[0].Y]=HEAD;//更新mapcreate_food();break; 3、墙/蛇身/蛇头
下一位置非SPACE时游戏结束。
方向控制
读取键盘中断,忽略大小写,这里注意一点就是蛇往右运动的时候选择往左是无效操作,即忽略反向运动的命令。
主流程用while(1)死循环:
while (1){t2 = GetTickCount();DrawMap();if(kbhit())//获取键盘敲击事件{ChangeDir(); //根据输入字符设置运动方向creep(); //根据下一位置做出决策t2 = GetTickCount();t1 = t2;}if (t2 - t1 > time_interval) //这里是为了保证即使用户不操作,time_interval超时后蛇同样能前进一个位置{creep();t1 = t2;}}
“C语言实现的贪吃蛇游戏代码分享”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注本站网站,小编将为大家输出更多高质量的实用文章!