1、年1月7日1、函数程序结构图 注释: 二、题目分析通过分析该程序基本需要以下几个类:Text(Main方法)、Snake(蛇)、Food(食物)、Yard(窗口)、Map(地图)、Node(节点)、PaintThread(线程)、Dir(方向)、KeyMonitor(键盘监听)。主要实现蛇运动的基本操作和一些事件反应、游戏分数的记录、暂停、重新开始、更改蛇蛇颜色,蛇的移动速度,地图、死亡模式的改变等功能。本程序运用Java语言知识,用面向对象的思维设计“贪吃蛇”游戏。3、结果分析运行程序出现游戏界面,蛇(Snake)头自动向前移动,用键盘的上(Up)下(Down)左(Left)右(Right)
2、键控制蛇头的移动方向。游戏窗体中在随机位置出现紫色的食物(Food)。1、每吃一个加5分2、默认撞墙不死3、默认速度34、默认地图15、默认普通蛇身6、默认30分提升一个速度档次7、默认每个速度都走完后更换地图并且速度恢复默认,积分归零功能键:1、按F1重新开始2、按空格键暂停/继续3、按1/2/3/4/5数字键设置蛇的移动速度(逐渐变快)4、按F2更换地图(3种)5、按F3普通蛇/彩蛇的切换6、按F4更换游戏模式(蛇撞到最外围为死亡还是从另一端返回) 该程序初步完成了“贪吃蛇”的游戏雏形,但是缺乏完善。比如:界面效果十分粗糙、屏幕闪烁、缺少声音等。但是,我们通过编写贪吃蛇,能更好的运用面向对
3、象的思维方式了,并学到了许多有用的经验。四、 附录(程序清单)1、 Snake.javaimport java.awt.Color;import java.awt.Graphics;import java.awt.event.KeyEvent;public class Snake Node head = null; Node tail = null; int size = 0; Yard y; Node n = new Node(1, 2, Dir.D); public Snake(Yard y) head = n; tail = n; size = 1; this.y = y; for(in
4、t i=0;i3;i+) this.Headadd(); public void Tailadd() Node node = null; switch (tail.dir) case L : node = new Node(tail.m+1, tail.n, tail.dir); break; case U : node = new Node(tail.m, tail.n+1, tail.dir); case R : node = new Node(tail.m-1, tail.n, tail.dir); case D : tail.next = node; node.pre = tail;
5、tail = node; size +; public void Deltail() if (size = 0) return; tail = tail.pre; tail.next = null; public void Headadd() switch (head.dir) case L: node = new Node(head.m - 1, head.n, head.dir); case U: node = new Node(head.m, head.n - 1, head.dir); case R: node = new Node(head.m + 1, head.n, head.d
6、ir); case D: node = new Node(head.m, head.n + 1, head.dir); node.next = head; head.pre = node; head = node; size+; public void draw(Graphics g) if (size = 0) move(); for (Node n = head; n != null; n = n.next) if(head=n) g.setColor(Color.BLUE); if(n.dir=Dir.L|n.dir=Dir.R) g.fillOval(n.m*Yard.B_WIDTH,
7、 n.n*Yard.B_WIDTH, Yard.B_WIDTH, Yard.B_WIDTH-3); else g.fillOval(n.m*Yard.B_WIDTH, n.n*Yard.B_WIDTH, Yard.B_WIDTH-3, Yard.B_WIDTH); else n.draw(g); public void Deadif() switch(Yard.STYLE) case 2: if (head.m 0 | head.n = (Yard.WIDTH / Yard.B_WIDTH) | head.n = (Yard.HEIGHT / Yard.B_WIDTH) y.stop(); c
8、ase 1: int cols = Yard.WIDTH / Yard.B_WIDTH; int rows = Yard.HEIGHT / Yard.B_WIDTH; if(head.m = cols) head.m = 0; else if (head.n = rows) head.n = 30/Yard.B_WIDTH; break; for (Node p = head.next; p ! p = p.next) if (head.m = p.m & head.n = p.n) switch (Yard.MAP) /地图1/地图2 for (int j = 10; j Yard.WIDT
9、H/Yard.B_WIDTH-10; j +) if(head.m=j&head.n=10) y.stop();head.n=20) case 3:/地图3 for (int j = 20; 26; if(head.m=Yard.WIDTH/Yard.B_WIDTH-10&head.n=j) for (int j = 5; 10; if(head.m=10& default: void move() Yard.MOVECHECK = true; Headadd(); Deltail(); Deadif(); public void eat(food e) if (y.f.getM() = y.
10、s.head.m & y.f.getN() = y.s.head.n) e.reAppear(); this.Tailadd(); y.setscore(y.getscore() + 5); public void keyPressed(KeyEvent e) int key = e.getKeyCode(); switch (key) case KeyEvent.VK_LEFT: if (head.dir != Dir.R) head.dir = Dir.L; case KeyEvent.VK_UP:= Dir.D) head.dir = Dir.U; case KeyEvent.VK_RIGHT:= Dir.L) head.dir = Dir.R; case KeyEvent.VK_DOWN:= Dir.U) head.dir = Dir.D;2、 Food.javaimport java.util.Ra
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1