java贪吃蛇课程设计报告_Java课程设计贪吃蛇讲解
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课程设计贪吃蛇讲解相关推荐
- java qq课程设计报告_JAVA课程设计报告语音QQ仿真
JAVA课程设计报告语音QQ仿真 <Java 程序设计>课程设计报告 题 目: 语音 QQ 仿真 学 院:计算机科学与工程 专 业:物联网工程 学生姓名: xx 学 号: 13003701 ...
- java游戏课程设计报告_java课程设计报告游戏_相关文章专题_写写帮文库
时间:2019-05-14 00:00:44 作者:admin 课 程 设 计 课程名称 Java语言课程设计 题目名称 人事管理系统的设计与实现 学生学院 应用数学学院 专业班级 学 号 学生姓名 ...
- java文本编辑器课程设计报告_java课程设计报告 心得体会——计算器、文本编辑器.doc...
java课程设计报告 心得体会--计算器.文本编辑器.doc 还剩 24页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内 ...
- java的课程总结报告_java课程总结报告
java课程总结报告 java课程总结报告怎么写?相信很多人都想知道吧?以下是小编为您整理java课程总结报告的相关资料,欢迎阅读! java课程总结报告1 一开始想做计算器那个课题,原因很简单,就是 ...
- java点餐系统实验报告_JAVA课程实践报告 基于web的点餐系统毕业设计.doc
JAVA课程实践报告 基于web的点餐系统毕业设计 大连理工大学城市学院 JAVA课程实践报告 题目:基于web点餐系统 学院:计算机工程学院 班级:07软日3班 指导教师: 杨俊生 学生姓名:李杰伟 ...
- 图书借阅java设计报告_JAVA课程设计报告图书借阅系统.pdf
课 程 设 计 课程设计名称: java课程设计 专 业 班 级 : 计科10 级4 班 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计时间: 2012.6.18-2012.6.30 计 ...
- java坦克大战课设报告_java课程设计之坦克大战
本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...
- java简单计算器课程设计报告_JAVA课程设计之计算器设计报告
题 目: 计算器 院(系):xxx学院 年级专业:xxx班 学生姓名:xxx 指导老师:xx老师 开始时间:200x-xx-xx 完成时间:200x-xx-xx 目 录 1. 摘 要 2. 概要设计 ...
- java的课程总结报告_java课程总结
学号20145336 <Java程序设计>课程总结 每周读书笔记链接汇总 第一周读书笔记:http://www.cnblogs.com/20145336yang/p/5249013.htm ...
最新文章
- Java项目:垃圾分类查询管理系统(java+SSM+jsp+MySQL+bootstrap)
- 闭包,函数式编程学习小记
- union和union all有什么区别
- Ubuntu 14.04安装JDK1.8.0_25与配置环境变量
- Visual Studio 2017通过SSH支持Git
- 一起谈.NET技术,ASP.NET 请求处理流程
- b/s c/s结构的区别!
- 论程序员的核心竞争力
- layui自带验证体系:手机号验证、邮箱验证、必填项非空验证、数字验证(含代码、案例)
- C++开源矩阵计算工具——Eigen 在VS2005中的下载、配置与使用
- android学习笔记---48_实现软件国际化,实现文字国际化,和图片国际化
- 谷歌智能助理能同时听懂两种语言 超过同类产品
- 工业上 计算机控制系统分为哪两大类,控制仪表及装置——考试复习题
- Windows 7中配置IPv6需要注意的那点事
- 深入学习golang—channel
- jQuery UI Datepicker 选择时分秒
- Spring开篇介绍-如果没有Spring如何对外暴露一个接口
- 怎样用360查看计算机使用记录,电脑360浏览器历史记录怎么查看
- 通讯录号码不见了怎么办?手机联系人不见了怎么恢复?
- 《现代控制理论》刘豹 第一章重要知识点
热门文章
- linux扩容文件系统resize2fs,linux resize2fs命令设置方法
- 盈连科技:机器人打磨抛光“领头羊”
- 《大话处理器》连载——微架构(2) 顺溜流水线的深入分析
- Android的webview支持HTML5的离线应用功能
- Windows下载Android SDK以及安装
- 闽江学院和泉州师范学院计算机,即将更名“大学”!福建四个“学院”专业建设谁更好?...
- 统计浏览器使用百分比
- 挣脱浏览器的束缚(3) - 两个连接还不够“并行”
- 封闭开发终于结束了,回归我的博客,回归各个社区,回归“业余生活”....
- Java程序员周末时间搞锭银行信息管理系统毕业设计(java+springboot+mybatis+mysql+vue+elementui)等实现 免费源码+论文答辩资料获取