贪吃蛇游戏的Java实现过程(教程)
贪吃蛇是一款十分经典的小游戏,对初入coding的朋友来说,拿贪吃蛇这样一个案例来练手十分合适,并不高的难度和成功后的成就感都是学习所必须的。下面达内java培训(java.tedu.cn)专家为大家准备的这个游戏的编码思路(来源互联网),作者逐步分析实现的整个过程。
让我们逐一分析。首先,整个游戏最基本的元素是地图。在java中用于绘图的类是swing和awt,在这里主要用到swing类。swing中用于窗口显示的类有JFrame及其子类。JFrame可以直接添加组件,但其本质是将组件添加到JFrame中的一个默认面板里,为了代码清晰,我会使用JPanel面板来绘制全部的动画,之后再将面板添加到JFrame窗体之中即可。
我们可能会疑惑于贪吃蛇的蛇身,它是由什么组成的?如何实现移动?我们可以把贪吃蛇的蛇身理解成一个集合,它有固定的起始元素,代表游戏一开始时的蛇身。当贪吃蛇吃到点时,集合就添加一个元素,蛇的长度就加一。那么,集合中的元素是什么呢?要理解这个问题,首先得关注蛇身移动所处的环境。在JFrame窗体中,是由X、Y轴坐标对位置进行区分。
贪吃蛇的蛇身可以看做是一个一个联系紧密的点,在坐标轴上显示出来。每当朝某个方向移动时,蛇的坐标就按照某个规律变化。例如,我们操控贪吃蛇向上移动时,蛇的全体坐标的Y轴就减一;如果蛇的第一个坐标与蛇身的某个坐标重合,就代表贪吃蛇碰到自己;如果蛇的第一个坐标碰到了边界,蛇就撞墙。这就是贪吃蛇的本质。我们来建立蛇身上每一个点的对象,蛇身就是由一个一个这样的对象所组成的:
	 
 
接下来我们要给每一个蛇身上的点设置范围,因为贪吃蛇有移动范围的限制,超过某个距离或者长度,就会越界导致游戏的终止。经过考虑,我们将范围设置在:
	 
 
接着,我们需要一个集合,用来存储蛇身上的各个点。我们需要定义一个变量,用来表示随机出现的点(贪吃蛇的目标),并且定义一个变量Length用来表示蛇的长度。代码如下:
	 
 
定义类的成员变量之后,我们开始定义构造方法,这样在构造mainMap的对象后程序就会开始运行。我们需要在构造方法中给集合添加一些元素,代表初始蛇身,也需要使用一个方法,用来创造随机点。代码如下:
	 
 
createNode是创造随机点的方法,让我们思考一下:创造随机点有哪些要求?首先,随机点的范围肯定不能超出限制,否则游戏将无法继续;其次,随机点不能出现在蛇身上,也就是随机点的坐标不能和蛇身体上的任意坐标相同,否则就会出现BUG。按照此要求,我们创作出代码如下:
	 
 
接下来是我们进行游戏中至关重要的一点,就是对蛇的移动进行控制。我们使用“wsad”或者键盘上的“上下左右”来控制蛇身的移动变化。这其中的原理想必很多人都能马上想到:监听器。这里我们要设置监听器的对象不再是一个按钮,一个标签,而是整个面板。我们要对整个面板增加一个键盘监听器,用来监听自己在键盘上的动作。这里我们统一一下,用”↑↓←→”来控制方向。当我们使用键盘捕捉到相应的动作后,该如何继续呢?该如何编写事件的处理?
我们来翻阅一下API。查看API中的KeyListener,我们可以查到KeyEvent,他有静态的常量用来表示键盘上相应的点触。VK_UP代表上箭头,VK_DOWN代表下箭头,VK_LEFT代表左箭头,VK_RIGHT代表右箭头。我们马上可以联想到:通过getKeyCode方法获取到键盘事件,和四个常量进行比较,如果符合,就可以按照对应的方向调用方法,来移动蛇身。我们可以定义一个Move()方法,并且定义一个变量direction代表方向,通过对direction不同的赋值传递给Move(),来对蛇身产生不同的移动效果。接下来贴代码:
	 
 
	 
 
通过以上代码,我们已经初步搭建了贪吃蛇的基本逻辑框架。我们造出了蛇身,设置了按键后的蛇身移动的规律,也设置了蛇移动的范围。我们先给出总览的代码,这样有助于查漏补缺:
	 
 
	 
 
以上就是达内java培训(java.tedu.cn)专家带领大家共同完成的步骤,如果全部实现并且加以理解,那么其实整个贪吃蛇的整体思路基本已经是掌握了。
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!
Java开发高端课程免费试学
大咖讲师+项目实战全面提升你的职场竞争力
- 海量实战教程
- 1V1答疑解惑
- 行业动态分析
- 大神学习路径图
相关推荐
更多 
							 
									2024-07-01
 
							
							
						 
							 
									2024-04-08
 
							
							
						 
            Java开班时间
- 
                    北京 丨 10月31日 火速抢座
- 
                    上海 丨 10月31日 火速抢座
- 
                    广州 丨 10月31日 火速抢座
- 
                    兰州 丨 10月31日 火速抢座
- 
                    杭州 丨 10月31日 火速抢座
- 
                    南京 丨 10月31日 火速抢座
- 
                    沈阳 丨 10月31日 火速抢座
- 
                    大连 丨 10月31日 火速抢座
- 
                    长春 丨 10月31日 火速抢座
- 
                    哈尔滨 丨 10月31日 火速抢座
- 
                    济南 丨 10月31日 火速抢座
- 
                    青岛 丨 10月31日 火速抢座
- 
                    烟台 丨 10月31日 火速抢座
- 
                    西安 丨 10月31日 火速抢座
- 
                    天津 丨 10月31日 火速抢座
- 
                    石家庄 丨 10月31日 火速抢座
- 
                    保定 丨 10月31日 火速抢座
- 
                    郑州 丨 10月31日 火速抢座
- 
                    合肥 丨 10月31日 火速抢座
- 
                    太原 丨 10月31日 火速抢座
- 
                    苏州 丨 10月31日 火速抢座
- 
                    武汉 丨 10月31日 火速抢座
- 
                    成都 丨 10月31日 火速抢座
- 
                    重庆 丨 10月31日 火速抢座
- 
                    厦门 丨 10月31日 火速抢座
- 
                    福州 丨 10月31日 火速抢座
- 
                    珠海 丨 10月31日 火速抢座
- 
                    南宁 丨 10月31日 火速抢座
- 
                    东莞 丨 10月31日 火速抢座
- 
                    贵阳 丨 10月31日 火速抢座
- 
                    昆明 丨 10月31日 火速抢座
- 
                    洛阳 丨 10月31日 火速抢座
- 
                    临沂 丨 10月31日 火速抢座
- 
                    潍坊 丨 10月31日 火速抢座
- 
                    运城 丨 10月31日 火速抢座
- 
                    呼和浩特丨10月31日 火速抢座
- 
                    长沙 丨 10月31日 火速抢座
- 
                    南昌 丨 10月31日 火速抢座
- 
                    宁波 丨 10月31日 火速抢座
- 
                    深圳 丨 10月31日 火速抢座
- 
                    大庆 丨 10月31日 火速抢座
 
					 
								 【热点话题】
						【热点话题】
					 
					 
								 
								 
                     
                     
             
             
             
             
                     
                     
                     
                     
                     
                    



 
				 
				 
				 
				 400-111-8989
				400-111-8989
			 
				 lihm@tedu.cn
				lihm@tedu.cn
			
 
	

 
			 
			 
			 
			 
			
			 
					 
					 
				 
					 
					