• 回答数

    3

  • 浏览数

    299

依我以希
首页 > 毕业论文 > java贪吃蛇游戏毕业论文

3个回答 默认排序
  • 默认排序
  • 按时间排序

蓝色晚风blue

已采纳

能。1、贪吃蛇简单些,而且可扩展的不少,方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。2、在这个游戏设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用c语言的图形库函数。3、在设计开发过程中,要对c语言的图形库函数有一定的了解,利用图形库函数实现一些功能。

350 评论

厦门混世小魔王

用MVC方式实现的贪吃蛇游戏,共有4个类。运行GreedSnake运行即可。主要是观察者模式的使用,我已经添加了很多注释了。1、/* * 程序名称:贪食蛇 * 原作者:BigF * 修改者:algo * 说明:我以前也用C写过这个程序,现在看到BigF用Java写的这个,发现虽然作者自称是Java的初学者, * 但是明显编写程序的素养不错,程序结构写得很清晰,有些细微得地方也写得很简洁,一时兴起之 * 下,我认真解读了这个程序,发现数据和表现分开得很好,而我近日正在学习MVC设计模式, * 因此尝试把程序得结构改了一下,用MVC模式来实现,对源程序得改动不多。 * 我同时也为程序增加了一些自己理解得注释,希望对大家阅读有帮助。 */package mvcTest;/** * @author WangYu * @version * Description: * * Create on :Date :2005-6-13 Time:15:57:16 * LastModified: * History: */public class GreedSnake { public static void main(String[] args) { SnakeModel model = new SnakeModel(20,30); SnakeControl control = new SnakeControl(model); SnakeView view = new SnakeView(model,control); //添加一个观察者,让view成为model的观察者 (view); (new Thread(model)).start(); }} -------------------------------------------------------------2、package mvcTest;// ;import ;/** * MVC中的Controler,负责接收用户的操作,并把用户操作通知Model */public class SnakeControl implements KeyListener{ SnakeModel model; public SnakeControl(SnakeModel model){ = model; } public void keyPressed(KeyEvent e) { int keyCode = (); if (){ // 运行状态下,处理的按键 switch (keyCode) { case : (); break; case : (); break; case : (); break; case : (); break; case : case : (); break; case : case : (); break; case : case : (); break; default: } } // 任何情况下处理的按键,按键导致重新启动游戏 if (keyCode == || keyCode == || keyCode == ) { (); } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { }}-------------------------------------------------------------3、/* * */package mvcTest;/** * 游戏的Model类,负责所有游戏相关数据及运行 * @author WangYu * @version * Description: * * Create on :Date :2005-6-13 Time:15:58:33 * LastModified: * History: */// .*;import ;import ;import ;import ;/** * 游戏的Model类,负责所有游戏相关数据及运行 */class SnakeModel extends Observable implements Runnable { boolean[][] matrix; // 指示位置上有没蛇体或食物 LinkedList nodeArray = new LinkedList(); // 蛇体 Node food; int maxX; int maxY; int direction = 2; // 蛇运行的方向 boolean running = false; // 运行状态 int timeInterval = 200; // 时间间隔,毫秒 double speedChangeRate = ; // 每次得速度变化率 boolean paused = false; // 暂停标志 int score = 0; // 得分 int countMove = 0; // 吃到食物前移动的次数 // UP and DOWN should be even // RIGHT and LEFT should be odd public static final int UP = 2; public static final int DOWN = 4; public static final int LEFT = 1; public static final int RIGHT = 3; public SnakeModel( int maxX, int maxY) { = maxX; = maxY; reset(); } public void reset(){ direction = ; // 蛇运行的方向 timeInterval = 200; // 时间间隔,毫秒 paused = false; // 暂停标志 score = 0; // 得分 countMove = 0; // 吃到食物前移动的次数 // initial matirx, 全部清0 matrix = new boolean[maxX][]; for (int i = 0; i < maxX; ++i) { matrix[i] = new boolean[maxY]; (matrix[i], false); } // initial the snake // 初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半 int initArrayLength = maxX > 20 ? 10 : maxX / 2; (); for (int i = 0; i < initArrayLength; ++i) { int x = maxX / 2 + i;//maxX被初始化为20 int y = maxY / 2; //maxY被初始化为30 //nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15] //默认的运行方向向上,所以游戏一开始nodeArray就变为: // [10,14]-[10,15]-[11,15]-[12,15]~~[19,15] (new Node(x, y)); matrix[x][y] = true; } // 创建食物 food = createFood(); matrix[][] = true; } public void changeDirection(int newDirection) { // 改变的方向不能与原来方向同向或反向 if (direction % 2 != newDirection % 2) { direction = newDirection; } } /** * 运行一次 * @return */ public boolean moveOn() { Node n = (Node) (); int x = ; int y = ; // 根据方向增减坐标值 switch (direction) { case UP: y--; break; case DOWN: y++; break; case LEFT: x--; break; case RIGHT: x++; break; } // 如果新坐标落在有效范围内,则进行处理 if ((0 <= x && x < maxX) && (0 <= y && y < maxY)) { if (matrix[x][y]) { // 如果新坐标的点上有东西(蛇体或者食物) if (x == && y == ) { // 吃到食物,成功 (food); // 从蛇头赠长 // 分数规则,与移动改变方向的次数和速度两个元素有关 int scoreGet = (10000 - 200 * countMove) / timeInterval; score += scoreGet > 0 ? scoreGet : 10; countMove = 0; food = createFood(); // 创建新的食物 matrix[][] = true; // 设置食物所在位置 return true; } else // 吃到蛇体自身,失败 return false; } else { // 如果新坐标的点上没有东西(蛇体),移动蛇体 (new Node(x, y)); matrix[x][y] = true; n = (Node) (); matrix[][] = false; countMove++; return true; } } return false; // 触到边线,失败 } public void run() { running = true; while (running) { try { (timeInterval); } catch (Exception e) { break; } if (!paused) { if (moveOn()) { setChanged(); // Model通知View数据已经更新 notifyObservers(); } else { (null, "you failed", "Game Over", ); break; } } } running = false; } private Node createFood() { int x = 0; int y = 0; // 随机获取一个有效区域内的与蛇体和食物不重叠的位置 do { Random r = new Random(); x = (maxX); y = (maxY); } while (matrix[x][y]); return new Node(x, y); } public void speedUp() { timeInterval *= speedChangeRate; } public void speedDown() { timeInterval /= speedChangeRate; } public void changePauseState() { paused = !paused; } public String toString() { String result = ""; for (int i = 0; i < (); ++i) { Node n = (Node) (i); result += "[" + + "," + + "]"; } return result; }}class Node { int x; int y; Node(int x, int y) { = x; = y; }} ------------------------------------------------------------4、package mvcTest;// .*;import .*;import ;import ;import ;import ;/** * MVC模式中得Viewer,只负责对数据的显示,而不用理会游戏的控制逻辑 */public class SnakeView implements Observer { SnakeControl control = null; SnakeModel model = null; JFrame mainFrame; Canvas paintCanvas; JLabel labelScore; public static final int canvasWidth = 200; public static final int canvasHeight = 300; public static final int nodeWidth = 10; public static final int nodeHeight = 10; public SnakeView(SnakeModel model, SnakeControl control) { = model; = control; mainFrame = new JFrame("GreedSnake"); Container cp = (); // 创建顶部的分数显示 labelScore = new JLabel("Score:"); (labelScore, ); // 创建中间的游戏显示区域 paintCanvas = new Canvas(); (canvasWidth + 1, canvasHeight + 1); (control); (paintCanvas, ); // 创建底下的帮助栏 JPanel panelButtom = new JPanel(); (new BorderLayout()); JLabel labelHelp; labelHelp = new JLabel("PageUp, PageDown for speed;", ); (labelHelp, ); labelHelp = new JLabel("ENTER or R or S for start;", ); (labelHelp, ); labelHelp = new JLabel("SPACE or P for pause", ); (labelHelp, ); (panelButtom, ); (control); (); (false); (); (true); } void repaint() { Graphics g = (); //draw background (); (0, 0, canvasWidth, canvasHeight); // draw the snake (); LinkedList na = ; Iterator it = (); while (()) { Node n = (Node) (); drawNode(g, n); } // draw the food (); Node n = ; drawNode(g, n); updateScore(); } private void drawNode(Graphics g, Node n) { ( * nodeWidth, * nodeHeight, nodeWidth - 1, nodeHeight - 1); } public void updateScore() { String s = "Score: " + ; (s); } public void update(Observable o, Object arg) { repaint(); }}-------------------------------------------------------------

225 评论

呆呆呆cat

贪吃蛇是一款经典的电子游戏,它通常用于基础编程教学。在Java中,您可以使用Java 2D图形编程技术来创建和渲染游戏画面。您还可以使用Java的键盘输入处理技术来捕获玩家的按键操作。此外,您可以使用Java的多线程技术来控制游戏的速度和动态。

269 评论

相关问答

  • html贪吃蛇游戏毕业论文

    能。1、贪吃蛇简单些,而且可扩展的不少,方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。2、在这个游戏设计中,牵涉到图形界面的显示与更新、数据的收集与更

    詹姆斯尐雪 4人参与回答 2023-12-11
  • 基于贪吃蛇java毕业论文

    学生课程设计(论文)题 目: 贪吃蛇游戏程序设计指导学生姓名: 学 号:200910801001所在院(系): 计算机学院专

    肖小月半仔 3人参与回答 2023-12-10
  • 贪吃蛇毕业论文c语言

    /* 贪吃蛇程序 by champking */#define N 200#include #include #include #define LEFT 0x4

    zoemai0505 7人参与回答 2023-12-05
  • js设计贪吃蛇游戏毕业论文

    贪吃蛇 Snake v2.4 body{ font-size:9pt; } table{

    天天开心好好好 4人参与回答 2023-12-09
  • 贪吃蛇游戏毕业论文设计

    2.1程序功能介绍贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物

    民辉窗帘布艺 4人参与回答 2023-12-10