char map[ROW][LINE];创建二维数组,用于地图的构建
scanf("%d",&line);接收键盘信息并赋值给 line
printf("%c",map[i][j]);打印地图。
food_x = rand()%ROW+1;创建一个随机值赋值给横坐标 head_x。
food_y = rand()%LINE+1; 创建一个随机值赋值给纵坐标 head_y。
if(direct=='a'){ if(ch=='d'){ continue; }}控制蛇身不能反向移动。
snake[head_x-1][head_y]=++head_v;控制头部永远在数组最末即视觉上的第一个。
for(int i=0;i<times;i++){ }根据 times 调节缓存来控制蛇的移动速度。
五、 功能扩展
void createNoFood(char map[ROW][LINE],int snake[ROW][LINE]){
int nofood_x = 0;
int nofood_y = 0;
while(map[nofood_x][nofood_y]=='#'||snake[nofood_x]
[nofood_y]!=0){
nofood_x = rand()%ROW+1;
nofood_y = rand()%LINE+1;
}
map[nofood_x][nofood_y] = '*';
}
创建不能吃的食物(毒物),即吃后会死亡,当吃下一个食物后调用该
函数即与下一个食物一同生成。位置与食物一样随机生成,并且可以不消失
的存在屏幕中不消失。意味着游戏越深入,行走受限制越大,越容易死。
if(count==10){
printf("get achievement:MVP.\n");
}
if(count==30){
printf("get achievement:GOD LIKE.\n");
createMap(map);
createFood(map,snake);
}
当吃够十个食物后会提示得到了 MVP 的称号,并获得系统奖励食物‘$’,吃
掉后可以获得 4 积分。当吃够三十个食物的时候得到 GOD LIKE 的称号,并且
作为奖励,系统会清空当前界面的所有毒物,不再出现,在接下来的两步之内
同样会获得系统奖励食物‘$’。这样设计的原因是经过测试,当吃到 50 个食物
后将逐渐陷入必死局的两难境地,所以帮助清空一次可以增长游戏时间。
游戏结束后,会输出所获得过的称号。
六、 源码分析
利用 while(1)接收键盘事件;
if(head_x==0||head_x==ROW-1||head_y==0||head_y==LINE-1)因为墙的
坐标是数组的第一和最后一列、行,又因为数组从 0 计数,所以最后一行一列的坐
标均需-1。
因为方向只有 wasd,并且上下左右按键也给赋予了对应的 wasd,所以可以通过
switch(direct)来判断和执行移动。
评论0