在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
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){
//此方法收集按键
int key=e.getKeyCode();
if (model.running) {
switch (key) {
case KeyEvent.VK_UP:
model.changeDirection(model.up);
break;
case KeyEvent.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;
public static 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<maxX)&&(y>=0&&y<maxY))?{
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编程开发好就业吗?是不是真的如网上各种文章说的一样,Java开发工程师就业市场人才缺口非常大呢?其实在小编看来,现在的Java就业市场可以总结为两句话:就业机会多,但就业门槛正在不断提升!现在开始学习Java编程开发是否好就业,已经不仅仅是市场需求所决定的,更重要的是通过学习对知识的掌握的程度是否能够与企业招聘需求想匹配。
4457
2020-07-24 16:14:52
进阶Java中级程序员学习路线知识点汇总
企业对于中级程序员的任职要求:有两年以上Java开发经验,熟悉设计模式;熟练使用MySQL或Oracle数据库,熟练使用tomcat应用程序服务器;熟悉hibernate,spring,struts或ibatis 等主流技术框架;使用eclipse、svn、cvs、pl/sql等工具;有丰富的J2EE开发经验;有工业信息化开发经验或熟悉Modbus、OPC协议者优先。
5971
2020-08-28 16:11:03
成为Java高级开发工程师实操项目有哪些?
初级Java程序员和高级程序员间的差别就是职业技能和项目实战经验,高级程序员实操过的Java项目越多对于技术的提升越快越受企业欢迎,Java实战项目大致分为游戏类、管理系统、计费系统三类。
4019
2021-04-09 14:47:20
我做了10年程序员 最后Java架构师弯道超车
我想继续在IT行业里工作,而为了让职业生涯更长一些,站在行业技术的制高点去竞争,那就需要换一个赛道上升一个维度,这样我的胜率会提升很多!
2583
2022-05-27 11:48:29
自己适不适合当一名Java程序员,从这几点判断
随着互联网的迅猛发展,编程开始进入越来越多人的视野,Java作为后端语言的扛把子,自然身价暴涨,成为了新生代年轻人最热衷的职业选择之一。来,干了这杯“Java”!
2725
2022-10-21 18:46:07
热门文章
- 前端是什么
- 前端开发的工作职责
- 前端开发需要会什么?先掌握这三大核心关键技术
- 前端开发的工作方向有哪些?
- 简历加分-4步写出HR想要的简历
- 程序员如何突击面试?两大招带你拿下面试官
- 程序员面试技巧
- 架构师的厉害之处竟然是这……
- 架构师书籍推荐
- 懂了这些,才能成为架构师 查看更多
扫描二维码,了解更多信息
