1 / 15
文档名称:

毕业设计思路.doc

格式:doc   大小:4,640KB   页数:15页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

毕业设计思路.doc

上传人:久阅文学 2022/4/6 文件大小:4.53 MB

下载得到文件列表

毕业设计思路.doc

文档介绍

文档介绍:毕业设计思路
身体由多个格子组成,需要一个链表集合存储,定义一个LinkedList类型的集合命名为snakeBody,存储类型为格子类型Square的对象;蛇有一个长度,定义一个int型的变量Length同的位置设置成true。
同蛇与食物相同,石头类应该具有显示功能drawMe(),传入参数Graphics g。

完善以上功能之后就可以在逻辑处理类Logic中先搭建简单的处理关系,以保证蛇,食物,石头可以显示出来;Snake snake = new Sanke();Food food = new Food();Stone stone = new Stone(1);先显示地图1作为测试。
在显示面板类DisplayPanel中创建构造函数传入Logic的实例对象;重写
paint方法,paint()() () () ;运行可显示效果,看到蛇,食物,石头已经显示到面板中。
逻辑关系处理
做好的蛇还不会移动,接下来就来实现此功能:
蛇要在每隔一段时间移动一个格子。蛇要移动,还要在没有死亡之前一直移动,主函数所启动的主线程的任务是启动窗体以及在内存中创建好所需要的资源,这里必需另开一个新的线程。开启线程的方法有两种,这里选择实现Runnable接口的方法,让Logic implements Runnable,实现run()方法,由于蛇要不停的运动在蛇的move方法之外加入while(true),蛇每隔一段时间会自动移动一格,(300),经过多次运行测试得出的时间;在主函数MainOfGreedySnake中创建线程thread t = new Thread(logic);运行观察效果,会发现蛇依旧不会移动,这是因为显示面板中的paint函数需要重新被调用才会重新绘制图形,在DisplayPanel的paint最后加上repaint();再次运行,蛇已经可以自己移动。
现在的蛇依然可以移动,但不受控制,会移动出边界,因此需要在蛇移动之后判断蛇是否移出边界,将此功能封装成函数,显然应该定义在蛇类中,命名为isOverBand(),函数所需的功能即判断蛇头是否移出边界,若是则将蛇头的坐标更换为另一边界的坐标,实现了蛇在规定范围内自动移动。

蛇可以自动移动,但仍然还不受控制,后面将实现键盘控制蛇移动方向:
键盘控制蛇移动方向,也即是每按下一个键,通过某种响应,让蛇的方向改变,很容易想到Java GUI开发中提供的事件监听机制,但问题在于事件监听机制是针对GUI组件设计的,这就需要将蛇的方向和主函数创建的JFrame联系到一起,主函数中需要创建Logic实例对象,Logic中有创建蛇对象,可以直接在主函数的JFrame上添加***,关于***的创建这里为了以后添加更多功能不至于关系复杂化,采用匿名内部类的方法为
JFrame添加***,JFrame jf = new JFrame();(new KeyListener(){}),***里面重写keyPressed()功能函数,利用switch(){case}()方法改变方向。
到这里程序调试运行方向以然可以控制,但按照规定,蛇不能向相反方向运行,在改变方向的时候应该做一个判断,新传入的方向值若和snake对象中方向值相同的话,snake方向值不做改变,加以判断之后,蛇的运行轨迹同想象中的运行规则几乎没有差别了,但是还有一个小小的bug存在,就是如果蛇向下移动的话,在下一次移动触发前,先按下向左,在按下向上,蛇还会向相反的方向移动,对于这个问题的解决首先要找到问题的根源,如果蛇向下移动的时候,先按下向左的方向,蛇的direction会被赋值为向左,但在蛇下一次移动之前,又按下向上的方向键,在判断方向的时候,向上的方向与向左的方向值不是相反方向,又会被赋值,这就导致了相反方向仍然会存在的可能性,关于此问题的解决,可以定义两个方向值,一个用于保存蛇移动之前的方向,命名为oldDirection,一个用于保存蛇移动之后的方向,命名为newDirection,在做方向判断的时候,拿新来的方向跟oldDirection向比较,方向不相反,把新传入的方向值副给newDirection,在蛇移动一次之后,再将newDirection赋值给oldDirection,这样便解决了无效方向的问题。
解决了控制蛇移动的问题之后,应该为程序设