Java课程设计是必不可少的一个重要学习环节,Java程序设计的目的就是加深Java学习者对Java理论基础内容的理解和掌握。今天我们要讲的Java课程设计就是贪吃蛇的小程序设计,以下是具体讲解:

1、执行程序:程序启动的入口

package cn.hncu;

public?class?GreedySnake {

public static void main(String[] args) {

Model model=new Model(80,?50);

Control control=new Control(model);

View view=new View(model,control);

model.addObserver(view);

(new Thread(model)).start();

}

}

控制类:主要进行键盘的按键收集和传递

package cn.hncu;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

public class Control implements KeyListener{

Model model;

public Control(Model?model){

this.model=model;

}

public void keyPressed(KeyEvent?e){

//此方法收集按键

intkey=e.getKeyCode();

if(model.running){

switch (key) {

case KeyEvent.VK_UP:

model.changeDirection(model.up);

break;

caseKeyEvent.VK_DOWN:

model.changeDirection(model.down);

break;

case KeyEvent.VK_LEFT:

model.changeDirection(model.left);

break;

case KeyEvent.VK_RIGHT:

model.changeDirection(model.right);

break;

default:

break;

}

}

if (key==KeyEvent.VK_ENTER) {

model.reset();

}

}

public void keyReleased(KeyEvent?e) {

}

public void keyTyped(KeyEvent e) {

}

}

模型类:创建蛇身和蛇的运动方式的实现,用到了线程。

import java.util.Arrays;

import java.util.LinkedList;

import java.util.Observable;

import java.util.Random;

import javax.swing.JOptionPane;

public class Model extends Observable implements Runnable{

public static final int left=1;

publicstatic final int up=2;

public static final int right=3;

public?static?final?int?down=4;

public?boolean?coordinate[][];//用这个来当做界面的坐标

public?LinkedList?node=new?LinkedList();

public?int?direction=2;

boolean?running=false;

public?int?maxX,maxY;

Node?food;

public?int?sleeptime=200;

public?Model(int?maxX,int?maxY){

this.maxX=maxX;

this.maxY=maxY;

reset();

}

public?void?reset()?{

direction=this.up;

sleeptime=200;

coordinate=new?boolean[maxX][];

for?(int?i?=?0;?i?<?maxX ;?i++)?{

coordinate[i]=new?boolean[maxY];

Arrays.fill(coordinate[i],?false);

}

//initialize?the?Snake'body

int?initlenght=10;

node.clear();

for?(int?j?=?0;?j?<?initlenght ;?j++)?{

int?x=maxX/2+j;

int?y=maxY/2;

node.addLast(new?Node(x,y));

coordinate[x][y]=true;

}

food=createFood();

coordinate[food.x][food.y]=true;

}

public?boolean?move(){

Node?n=(Node)node.getFirst();

int?x=n.x;

int?y=n.y;

switch?(direction)?{

case?up:

y--;

break;

case?down:

y++;

break;

case?left:

x--;

break;

case?right:

x++;

break;

default:

break;

}

if?((x>=0&&x=0&&y

if?(coordinate[x][y])?{

if?(x==food.x&&y==food.y)?{

node.addFirst(food);

if?(sleeptime>35)?{

sleeptime-=20;

}

food=createFood();

coordinate[food.x][food.y]=true;

return?true;

}else?{

return?false;

}

}else?{

node.addFirst(new?Node(x,y));

coordinate[x][y]=true;

n=(Node)node.getLast();

node.removeLast();

coordinate[n.x][n.y]=false;

return?true;

}

}

return?false;

}

public?void?changeDirection(int?newdir){

if?(direction!=newdir)?{

direction=newdir;

}

}

public?Node?createFood()?{

int?x=0,y=0;

do?{

Random?r?=?new?Random();

x?=?r.nextInt(maxX);

y?=?r.nextInt(maxY);

}?while?(coordinate[x][y]);

return?new?Node(x,?y);

}

public?void?run()?{

running=true;

while(running){

try?{

Thread.sleep(sleeptime);

}?catch?(Exception?e)?{

break;

}

if?(move())?{

setChanged();

notifyObservers();

}else?{

JOptionPane.showMessageDialog(null,?"Game?Over");

break;

}

}

}

}

class?Node{//创建蛇身

public?int?x,y;

public?Node(int?x,int?y){

this.x=x;

this.y=y;

}

}

界面层:展现给用户看的,用图形界面展现蛇的运动

[java]?view plain?copy

import?java.awt.BorderLayout;

import?java.awt.Canvas;

import?java.awt.Color;

import?java.awt.Container;

import?java.awt.Graphics;

import?java.util.Iterator;

import?java.util.LinkedList;

import?java.util.Observable;

import?java.util.Observer;

import?javax.swing.JFrame;

import?javax.swing.JLabel;

import?javax.swing.JPanel;

public?class?View?extends?JFrame?implements?Observer{

Control?control;

Model?model;

Canvas?canvas;

public?static?final?int?canvasWidth=800,canvasHeight=500;

public?static?final?int?nodeWidth=10,nodeHeight=10;

public?View(Model?model,Control?control){

super("GreedySnake");

this.control=control;

this.model=model;

this.setLocation(400,?300);

this.setResizable(false);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

canvas=new?Canvas();

canvas.setSize(canvasWidth+1,?canvasHeight+1);

canvas.addKeyListener(control);

this.add(canvas,BorderLayout.NORTH);

JPanel?panel=new?JPanel();

this.add(panel,BorderLayout.SOUTH);

JLabel?label=new?JLabel("Enter?for?restart");

panel.add(label);

this.pack();

this.addKeyListener(control);??

this.setVisible(true);

}

public?void?repaint()?{

Graphics?g=canvas.getGraphics();

//    draw?background

g.setColor(Color.white);

g.fillRect(0,?0,?canvasWidth,?canvasHeight);

//      draw snake

g.setColor(Color.red);

LinkedList?node=model.node;

Iterator?it=node.iterator();

while(it.hasNext()){

Node?n=(Node)it.next();

drawNode(g,n);

}

//draw food

g.setColor(Color.black);

Node?n=model.food;

drawNode(g,n);

}

private?void?drawNode(Graphics?g,?Node?n)?{

g.fillOval(n.x*nodeWidth,?n.y*nodeHeight,?nodeWidth,?nodeHeight);

}

public?void?update(Observable?o,?Object?arg){

repaint();

}

}

以上就是Java课程设计贪吃蛇的全部详细讲解。大家应该都能看明白吧,还有什么不懂的,可以上博学谷在线学习。

java贪吃蛇课程设计报告_Java课程设计贪吃蛇讲解相关推荐

  1. java qq课程设计报告_JAVA课程设计报告语音QQ仿真

    JAVA课程设计报告语音QQ仿真 <Java 程序设计>课程设计报告 题 目: 语音 QQ 仿真 学 院:计算机科学与工程 专 业:物联网工程 学生姓名: xx 学 号: 13003701 ...

  2. java游戏课程设计报告_java课程设计报告游戏_相关文章专题_写写帮文库

    时间:2019-05-14 00:00:44 作者:admin 课 程 设 计 课程名称 Java语言课程设计 题目名称 人事管理系统的设计与实现 学生学院 应用数学学院 专业班级 学 号 学生姓名 ...

  3. java文本编辑器课程设计报告_java课程设计报告 心得体会——计算器、文本编辑器.doc...

    java课程设计报告 心得体会--计算器.文本编辑器.doc 还剩 24页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内 ...

  4. java的课程总结报告_java课程总结报告

    java课程总结报告 java课程总结报告怎么写?相信很多人都想知道吧?以下是小编为您整理java课程总结报告的相关资料,欢迎阅读! java课程总结报告1 一开始想做计算器那个课题,原因很简单,就是 ...

  5. java点餐系统实验报告_JAVA课程实践报告 基于web的点餐系统毕业设计.doc

    JAVA课程实践报告 基于web的点餐系统毕业设计 大连理工大学城市学院 JAVA课程实践报告 题目:基于web点餐系统 学院:计算机工程学院 班级:07软日3班 指导教师: 杨俊生 学生姓名:李杰伟 ...

  6. 图书借阅java设计报告_JAVA课程设计报告图书借阅系统.pdf

    课 程 设 计 课程设计名称: java课程设计 专 业 班 级 : 计科10 级4 班 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计时间: 2012.6.18-2012.6.30 计 ...

  7. java坦克大战课设报告_java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...

  8. java简单计算器课程设计报告_JAVA课程设计之计算器设计报告

    题 目: 计算器 院(系):xxx学院 年级专业:xxx班 学生姓名:xxx 指导老师:xx老师 开始时间:200x-xx-xx 完成时间:200x-xx-xx 目 录 1. 摘 要 2. 概要设计 ...

  9. java的课程总结报告_java课程总结

    学号20145336 <Java程序设计>课程总结 每周读书笔记链接汇总 第一周读书笔记:http://www.cnblogs.com/20145336yang/p/5249013.htm ...

最新文章

  1. Nature:拟南芥根系微生物组的结构
  2. Linux / Server 端收到 SIGPIPE 信号的原因
  3. .NET Core中的验证组件FluentValidation的实战分享
  4. qt中实现绘制图形与截图
  5. spring自动注入模型
  6. 使用百度EasyDL训练自己的图像识别模型
  7. (2021.10.25-10.31)小结
  8. ps海报合成教程_怎样合成创意环保海报图片的PS教程
  9. 模拟题 czy的后宫
  10. 根据订单id查询该订单和商品信息
  11. JavaScript 中的“黑话”,你知多少?
  12. mysql 怎样解锁表_mysql一键解锁表
  13. c#怎么在github上快速找到相关的开源项目
  14. ExcelDNA的入门使用
  15. TRACY自己学英语的5W三七法则
  16. 20160227.CCPP体系详解(0037天)
  17. Nacos作为配置中心,bootstrap.properties没有生效
  18. 关于Roberts算子,Sobel算子,Prewitt算子的简单原理计算,附python代码
  19. 一个意外错误使你无法删除该文件夹。【错误0x80070091:目录不是空的】Bandizip压缩软件解决方法
  20. Qt之线程的开始暂停恢复停止

热门文章

  1. 一步步教你实现微信小程序自定义组件
  2. 一、导入——机器视觉的硬件要求
  3. java excel多选_excel宏选择多行
  4. colab + cuda
  5. 电脑系统更新后,连不上网
  6. mysql期中考试题及答案_MySQL数据库考试题与答案
  7. 微信小程序中报错:TypeError: Cannot read property ‘openid‘ of null
  8. 官方指定Visual studio 2015卸载工具
  9. 程序名称:麦弗逊悬架硬点布置 根据设计输入,布置麦弗逊悬架硬点坐标,匹配转向拉杆断开点,匹配车轮外倾角和前束值
  10. 主从数据库部署(centos7)