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. Java项目:垃圾分类查询管理系统(java+SSM+jsp+MySQL+bootstrap)
  2. 闭包,函数式编程学习小记
  3. union和union all有什么区别
  4. Ubuntu 14.04安装JDK1.8.0_25与配置环境变量
  5. Visual Studio 2017通过SSH支持Git
  6. 一起谈.NET技术,ASP.NET 请求处理流程
  7. b/s c/s结构的区别!
  8. 论程序员的核心竞争力
  9. layui自带验证体系:手机号验证、邮箱验证、必填项非空验证、数字验证(含代码、案例)
  10. C++开源矩阵计算工具——Eigen 在VS2005中的下载、配置与使用
  11. android学习笔记---48_实现软件国际化,实现文字国际化,和图片国际化
  12. 谷歌智能助理能同时听懂两种语言 超过同类产品
  13. 工业上 计算机控制系统分为哪两大类,控制仪表及装置——考试复习题
  14. Windows 7中配置IPv6需要注意的那点事
  15. 深入学习golang—channel
  16. jQuery UI Datepicker 选择时分秒
  17. Spring开篇介绍-如果没有Spring如何对外暴露一个接口
  18. 怎样用360查看计算机使用记录,电脑360浏览器历史记录怎么查看
  19. 通讯录号码不见了怎么办?手机联系人不见了怎么恢复?
  20. 《现代控制理论》刘豹 第一章重要知识点

热门文章

  1. linux扩容文件系统resize2fs,linux resize2fs命令设置方法
  2. 盈连科技:机器人打磨抛光“领头羊”
  3. 《大话处理器》连载——微架构(2) 顺溜流水线的深入分析
  4. Android的webview支持HTML5的离线应用功能
  5. Windows下载Android SDK以及安装
  6. 闽江学院和泉州师范学院计算机,即将更名“大学”!福建四个“学院”专业建设谁更好?...
  7. 统计浏览器使用百分比
  8. 挣脱浏览器的束缚(3) - 两个连接还不够“并行”
  9. 封闭开发终于结束了,回归我的博客,回归各个社区,回归“业余生活”....
  10. Java程序员周末时间搞锭银行信息管理系统毕业设计(java+springboot+mybatis+mysql+vue+elementui)等实现 免费源码+论文答辩资料获取