当前位置:文档之家› java贪吃蛇课程设计

java贪吃蛇课程设计

1设计目的1.1背景近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。

JBuilder是Borland公司用于快速开发Java应用的一款优秀的集成开发环境,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。

“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。

本文基于Java技术和JBuilder开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。

整个游戏程序分为二个功能模块,六个类模块,实现了游戏的开始、暂停、结束。

通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。

本文在介绍Java相关技术和国外发展现状的基础上,对“贪吃蛇”游戏的整个生命周期的各个开发阶段进行了详细地介绍。

首先,分析了开发本游戏软件的可行性,重点分析本设计所采用的技术的可行性。

其次,从游戏主界面等几方面,分析了本游戏的功能需求;从可使用性和安全性方面分析了属性需求。

然后,进行了游戏的概要设计和详细设计,这也是本文的重点。

概要设计给出二个功能模块的主框架以及六个类模块的函数调用关系;详细设计介绍了Java2标准运行环境的配置,重点给出各个类模块的程序流程图以及UML图,列表介绍了各个类包含的变量、使用的方法,展示了游戏的界面。

为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。

1.2目标本软件是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,空格键暂停或继续游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。

2 总体设计2.1 设计思路本系统主要是完成贪吃蛇游戏的基本操作。

用户可以自己练习和娱乐。

本系统需要满足以下几点要求:(1) 利用方向键来改变蛇的运行方向。

(2) 空格键暂停或继续游戏,并在随机的地方产生食物。

(3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。

2.2设计说明本系统共包括1个java源文件和7个类文件。

1.类之间的关系如图2.1所示。

图2.1类之间的关系2.java源文件及其功能如表所示。

表2.2java源文件及其功能3关键技术3.1 关键技术及实现程序关键在于表示蛇的图形及蛇的移动。

用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。

移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。

食物的出现与消失也是画矩形块和覆盖矩形块。

3.2 设计原理1.主类SnakeGame主类为此程序的入口,定义了SnakeFrame的对象frame,开始运行此程序。

2.类SnakeFrame(1)成员变量见表3.1表3.1主要成员变量(2)方法见表3.2表3.2主要方法3.类Snake(1)成员变量见表3.3(2)方法见表3.44.类Node(1)成员变量见表3.55.类SnakePanel此类为画蛇的面板类,是实现红蓝间隔画蛇身算法的类。

6.类StatusRunnable此类为线程的子类,实现记录状态的功能。

7.类SnakeRunnable此类为线程的子类,实现蛇运动以及记录分数的功能。

4 程序流程4.1系统结构图如图4.1所示图4.1系统结构图5主要源代码1.记录状态的代码classStatusRunnable implements Runnable {publicStatusRunnable(Snake snake, JLabelstatusLabel, JLabelscoreLabel) { this.statusLabel = statusLabel;this.scoreLabel = scoreLabel;this.snake = snake;}public void run() {String sta = "";String spe = "";while (true) {switch (snake.status) {caseSnake.RUNNING:sta = "Running";break;caseSnake.PAUSED:sta = "Paused";break;caseSnake.GAMEOVER:sta = "GameOver";break;}statusLabel.setText(sta);scoreLabel.setText("" + snake.score);try {Thread.sleep(100);} catch (Exception e) {}}}privateJLabelscoreLabel;privateJLabelstatusLabel;private Snake snake;2.蛇运动以及记录分数的代码classSnakeRunnable implements Runnable { publicSnakeRunnable(Snake snake, Component component) { this.snake = snake;ponent = component;}public void run() {while (true) {try {snake.move();component.repaint();Thread.sleep(snake.speed);} catch (Exception e) {}}}private Snake snake;private Component component;}class Snake {booleanisRun;ArrayList<Node> body;Node food;intderection;int score;int status;int speed;public static final int SLOW = 500; public static final int MID = 300; public static final int FAST = 100; public static final int RUNNING = 1; public static final int PAUSED = 2; public static final int GAMEOVER = 3; public static final int LEFT = 1; public static final int UP = 2; public static final int RIGHT = 3; public static final int DOWN = 4;public Snake() {speed = Snake.SLOW;score = 0;isRun = false;status = Snake.PAUSED;derection = Snake.RIGHT;body = new ArrayList<Node>();body.add(new Node(60, 20));body.add(new Node(40, 20));body.add(new Node(20, 20));makeFood();}}3.在随机的地方产生食物的代码public void makeFood() {Node node = new Node(0, 0); booleanisInBody = true;int x = 0, y = 0;int X = 0, Y = 0;inti = 0;while (isInBody) {x = (int) (Math.random() * 15); y = (int) (Math.random() * 20); X = x * Node.W;Y = y * Node.H;for (i = 0; i<body.size(); i++) {if (X == body.get(i).x && Y == body.get(i).y)break;}if (i<body.size())isInBody = true;elseisInBody = false;}food = new Node(X, Y);}4.改变运行方向的代码public void changeDerection(intnewDer) {if (derection % 2 != newDer % 2)derection = newDer;}public void move() {if (isEaten()) {body.add(0, food);score += 10;makeFood();} else if (isCollsion()){isRun = false;status = Snake.GAMEOVER;} else if (isRun) {Node node = body.get(0); int X = node.x;int Y = node.y;switch (derection) {case 1:X -= Node.W; break;case 2:Y -= Node.H; break;case 3:X += Node.W; break;case 4:Y += Node.H; break;}body.add(0, new Node(X, Y));body.remove(body.size() - 1);}}}6 运行结果6.1各功能界面截图1.贪吃蛇游戏的基本运行界面(1)生成初始界面:图6.1 初始界面(2)游戏菜单栏:图6.2 游戏菜单栏(3)速度菜单栏:图6.3 速度菜单栏2.程序开始运行界面(1)鼠标点击New Game按钮,开始游戏(红色方块为食物,蓝黄相间为初始的蛇体):图6.4游戏初始界面(2)按空格键,游戏开始运行,蛇开始移动,并且吃到一次食物即红色方块后就变成蛇体:图6.5游戏开始运行界面(3)按方向键改变蛇的运行方向,并且碰壁后从新开始游戏,红色方块随机地方产生:图6.6 游戏运行界面6.2 心得体会虽然系统的基本功能都已实现,但还是存在系统不稳定等多个问题尚待解决。

相关主题