ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

贪吃蛇游戏

2020-12-08 20:32:15  阅读:216  来源: 互联网

标签:显示 蛇头 游戏 snick 身体 贪吃蛇 移动 蛇身


此博客链接:

1.分析

1.1贪吃蛇游戏规则

要求蛇头吃小球,每吃一个小球后,蛇身就变长一点,当蛇头碰到蛇身时,游戏结束。

1.2分析

根据作业要求,蛇能转换方向,自动前进,碰撞检测,随机障碍。 这里的每个要求都可以细分为小的任务,大的方向可以按照显示蛇,自动前进,转换方向,碰撞检测,随机障碍的顺序进行编程。

2.设计

2.1技术原型

  1. 先在屏幕能够显示一个符号。
  2. 控制单个符号移动。
  3. 增加符号长度。
  4. 控制多个符号移动,后面的符号跟着前面的符号移动。

2.2需求实现

  1. 以#代表边界。使用双重循环判断边界条件,在边界显示墙。
  2. 以@代表蛇头,+代表蛇的身体。以*代表豆子。
  3. 使用w,s,a,d,按键控制上下左右四个方向移动蛇。
  4. 移动蛇身,先移动头部,在移动身体,这里需要注意不是整体移动,是需要一个动态移动。
  5. 检测蛇能移动的边界。
  6. 检测蛇吃到豆子。
  7. 当蛇吃到豆子后,蛇身增长。

3关键技术

3.1蛇身和蛇头移动

  3.1.1说明

                当蛇头移动时,蛇身应该随着蛇头的移动而移动,这里是把第一节蛇身移动到蛇头的位置,把蛇身的第二节移动到蛇身的第一节,依次类             推, 就感觉蛇身在随着蛇头的移动而移动。

 3.1.2代码

        for(k=len;k>1;k--)
	{
		snick[k][0]=snick[k-1][0];
		snick[k][1]=snick[k-1][1];
	}

3.2显示蛇身

  3.2.1说明

           显示蛇身时,需要判断蛇头是朝那个方向移动的,因为蛇向左移动时,需要先显示蛇的最后一节尾巴;蛇向右移动时,需要先显示蛇的第一节尾巴,还需要注意在显示完蛇身后,需要把横坐标加一。

  3.2.2代码

	          if(der=='r'){
		    	for(k=len+1;k>=1;k--){              
			       if((snick[k][0]==j)&&(snick[k][1]==i))
			       {
                                         printf("*");
					 j++;
			       }
			}
		   }
		   else	if(der=='l')
		   {
			    for(k=1;k<len+1;k++){              
			        if((snick[k][0]==j)&&(snick[k][1]==i))
				{
                                         printf("*");
					 j++;
				}
			    }
		  }
		   else 
		   {
			   for(k=1;k<len+1;k++){              
			        if((snick[k][0]==j)&&(snick[k][1]==i))
				{
                                         printf("*");
					 j++;
				}
			   }
		   }

4.测试及调试代码

4.1测试1

说明

显示边框时,边框和符号在同一行的位置,边框会超出边界显示。

动图

 

调试

经过调试,发现在输出身体时,没有把横坐标向前移动一个位置,导致后面不满足条件时,就输出一个空格,所有有几个身体就会多输出几个空格。

4.2测试2

说明

一开始我单纯使用的空格和换行显示的蛇头,在显示身体时,遍历身体的长度,然后显示身体,但是这里有二个问题,当改变蛇头位置时,身体会整体跟着蛇头变,并没有先头动,身体沿着蛇头经过的路径运动。

修改

一开始想着把蛇身的坐标存到一个二维数组中,然后把蛇头的坐标赋值给数组中第一个数,当蛇移动时,依次把前面的值赋值给后面,就可以看起来效果是蛇移动一样。

设计

技术原型

  1. 用二维数组显示多个字符。下图问题
  2. 控制字符移动。这里有问题,解释如问题3所示。
  3. 增加字符长度。

忘记输出空格时判断。

 

需求

  1. 显示一个蛇头,一个蛇身,边框。
  2. 移动蛇头和蛇身,通过按键控制蛇头移动,然后把前面蛇身的值赋值给后面的蛇身,但是这需要注意两点,1)先把蛇头的位置记录下来,2)蛇身向前移动时,要先移动身体,在把蛇头的值赋值给第一个蛇身,要不第一个蛇身的值会被蛇头覆盖,蛇身会少一节。
  3. 蛇吃到一个豆子后,蛇身增加一节。
  4. 使蛇自动移动。
  5. 判断游戏结束。

4.3测试3

说明

使用按键移动蛇

测试

按键测试,使用按键,使字符移动。但是字符只能每次移动两个位置,而且按任意键都能移动。

修改

最后发现是把判断输入的是哪个按键语句写成了赋值语句。

 

4.4测试4

说明

移动蛇身体时,发现当蛇向下移动时,蛇身体会少一个。

调试

发现是显示蛇身体时,是从头后面第一个身体开始遍历显示的,当蛇向左移动时,在遍历身体中,找到蛇身第一节时,就显示了,但是蛇身后面的几节就显示不了。

修改

给蛇左右移动时,添加方向判断,如果是向左移动,则从蛇的最后一节身体开始遍历,如果蛇向右移动,则从蛇头后的第一节蛇身开始遍历。

4.5测试

说明

蛇自动移动。

调试

  1. 蛇是斜着移动的。

修改

当蛇自动移动时,把向左移动和向右移动的横坐标写成了纵坐标改变。

5.psp

 

标签:显示,蛇头,游戏,snick,身体,贪吃蛇,移动,蛇身
来源: https://www.cnblogs.com/ping2yingshi/p/14105476.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有