java版贪吃蛇小游戏

合集下载

java版的贪吃蛇毕业论文

java版的贪吃蛇毕业论文

j a v a版的贪吃蛇毕业论文Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】贪吃蛇姓名:摘要:本文用J2SE实现大家耳熟能详的一个贪吃蛇游戏来综合运用所学知识,本游戏运用软件工程思想(螺旋模型),打好游戏主体框架,JAVA的面向对象思想,封装类,接口等概念,来完成本游戏,打到综合运用知识的目的。

⑴.本游戏开发平台:WINXP;⑵.JAVA开发环境: +Eclipse;⑶.开发语言:J2SE关键词:中央控制器;游戏面板;食物;蛇;石头The Greed SnakeAbstract: In this paper, J2SE implementation of a Snake game familiar to the integrated use of what they have learned, this game is the use of software engineering thinking (spiral model), the main framework of the fight game, JAVA object-oriented thinking, wrapper classes, interface concepts to complete this game, hitting the integrated use of knowledge and purpose.⑴. The game development platform: WINXP;⑵. JAVA Development Environment: + Eclipse;⑶. Development Languages: J2SEKeywords:Controller;GamePanel;Food;Snake;Ground前言贪吃蛇游戏背景:蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征。

贪吃蛇(HTML小游戏使用JavaScript开发)

贪吃蛇(HTML小游戏使用JavaScript开发)

贪吃蛇(HTML小游戏使用JavaScript开发)贪吃蛇:HTML小游戏使用JavaScript开发在游戏界,贪吃蛇是非常经典和受欢迎的一款小游戏。

它的简单和上瘾性使得无数玩家沉迷其中。

今天,我们将学习如何使用HTML和JavaScript来开发一个贪吃蛇的小游戏。

一、游戏的基本思路贪吃蛇的游戏规则非常简单明了。

玩家控制蛇的移动,通过吃食物来不断增长蛇的长度。

当蛇碰到墙壁或者自己的身体时,游戏结束。

游戏的目标是使蛇长得尽可能长,挑战自己的最高得分。

二、HTML布局首先,我们需要在HTML文件中创建游戏画布。

这个画布将用于显示游戏的界面。

我们可以通过HTML的"canvas"元素来实现。

```html<!DOCTYPE html><html><head><title>贪吃蛇</title><style>#gameCanvas {border: 1px solid black;}</style></head><body><canvas id="gameCanvas" width="400" height="400"></canvas><script>// 在这里编写JavaScript代码</script></body></html>```上面的代码中,我们创建了一个宽高为400像素的画布,并给它设置了一个边框。

三、JavaScript逻辑接下来,我们需要使用JavaScript来实现游戏的逻辑。

我们将使用一个JavaScript类来表示贪吃蛇,并在其中实现移动、吃食物等功能。

```javascript<script>class SnakeGame {constructor(canvasId) {this.canvas = document.getElementById(canvasId);this.context = this.canvas.getContext("2d");this.snake = new Snake();this.food = new Food();// 在这里添加事件监听器,监听用户的方向键输入this.gameLoop();}// 游戏主循环gameLoop() {// 清空画布this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); // 更新蛇的位置this.snake.update();// 绘制蛇和食物this.snake.draw(this.context);this.food.draw(this.context);// 在下一帧时再次调用游戏主循环requestAnimationFrame(() => this.gameLoop()); }}class Snake {constructor() {// 在这里初始化蛇的位置和长度等信息}update() {// 在这里更新蛇的位置和长度等信息}draw(context) {// 在这里使用context绘制蛇的形状}}class Food {constructor() {// 在这里初始化食物的位置等信息}draw(context) {// 在这里使用context绘制食物的形状}}// 创建一个名为"game"的SnakeGame实例const game = new SnakeGame("gameCanvas");</script>```在上面的代码中,我们创建了一个`SnakeGame`类来表示游戏,`Snake`类来表示蛇,和`Food`类来表示食物。

java课程设计贪吃蛇小程序 附代码(2)

java课程设计贪吃蛇小程序 附代码(2)
}
public void keyPressed(KeyEvent e) {//按键响应
int keyCode=e.getKeyCode();
if(stat==1) switch(keyCode){
case KeyEvent.VK_UP:if(direction!=SOUTH) direction=NORTH;break;
游戏主界面模块:
游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、游戏速度控制按钮、暂停游戏按钮、重新开始游戏按钮以及游戏排行榜按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。
游戏控制模块:
这个模块是游戏的中心环节,主要完成控制游戏的速度、暂停、重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。
本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为: 游戏主界面模块、游戏控制模块以二个模块。
性能:
本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
自定义类说明
图3-1程序运行图
当蛇没有吃到食物且碰到边界或碰撞到自己的身体时,游戏结束,此时得分为0。如果想重新开始即按ENTER或S键,运行结果如图3-2所示:
图3-2程序结束图
程序异常处理
在蛇的运行线程过程中,当蛇撞到墙或自己的身体时,将抛出一个Exception类的异常对象,然后使用try-catch去捕捉这个异常,
2、课程设计的具体要求:
(1)界面美观大方,操作简单便捷,按键布局美观。

使用Java制作贪吃蛇游戏

使用Java制作贪吃蛇游戏
熟 悉 软 件 开 发 流程 的 目的 。
【 关键词】 J a v a ; E c l i p s e ; “ 贪吃 蛇” 游戏
近年来 . J a v a 作为一种新的编程语言 。 以其 简单性 、 可移植性 和平 i f ( g a me O v e r ) { 台无 关性等优点 . 得到 了广泛 地应用 . 特别是 J a v a与万维 网的完美结 la f g = f a l s e ; 合. 使其成 为网络 编程 和嵌入式编程领域 的首选编程语言 。 E c l i p s e 是 】 个 开放源代 码的 、 基于 J a y a 的可扩展开发平 台 . 同时它也是是著名 的跨平 台的 自由集 成开发环境 . 它 以其友 好的开发界 面、 强大 的组 件 支持等优点 . 得到广大程序员 的接受 和认可 。 J 贪吃蛇是 人们手 机中是一个很 常见 的一个 经典小游戏 . 人们对 它 } 并不陌生 . 在 紧张的现实生活 中给人们带来 了不少的乐趣 . 编写这个 通过在循环体 中设置每休眠 2 0 0毫秒则重画一次 界面 . 使 得界面 不断更新 . 当蛇移动时产生一个动画 的效果 。 贪吃蛇小游戏能让人 们在业余 时间里适 当的放松 . 保持好 的心态 。 在这个程序 中我采用 了 J a v a中 的图形 用户界面技术 .同时 引入 3 ) 绘 制 游 戏 界 面 了线 程来 编写。本次设计主要是对我之前所学 J a v a 知识 的一个巩 固 , p u b l i c v o i d p a i n t ( G r a p h i c s { 不仅 提高了我综合运 用以前 所学知识 的能力 . 同时也锻炼 了我 的实际 C o l o r c = g . g e t C o l o r 0 ; 动手 能力 整个游戏代码 简单易懂 . 用户在娱 乐的同时也可 以简单 的 g . s e t C o l o r ( C o l o r . c y a n ) ; 看一 下代码 . 有助 于初涉 J a v a者语 言水平 的提高。 g . i f l l R e c t ( O , 0 , RO WS B L OC K _ S I Z E, C O L S B L O C K _ S I Z E ) ; 贪吃蛇 的核心算法是如何实现移动和吃掉食 物 . 在当前运动方 向 g . s e t C o l o r ( C o l o r . b l a c k ) ; 上头指针所指的位置之前 添加一个节 点 , 然后删 除尾节 点 , 最后把链 f o r ( i n t i = l ; i < R O WS ; i + + ) { 表中的所有 节点依次 画出来 . 这样就可 以达 到移动的效果 。对是否吃 g . d r a w L i n e ( 0 , B L O C K _ S I Z E i , R O WS B L O C K _ S I Z E , OCK S 到食 物, 需要对 蛇和食物进行 碰撞检 测 . 检测 未碰撞 在一起则 只需要 BL I Z E* i ) ; 执行移 动操作 . 碰撞在一起时表示吃到食物 。 则 只需把食 物人队即可 , ) 即在 蛇的节 点链 表上再添加 一个节 点 , 从而达到身体增长 的效果 。 f o r ( i n t i = 1 ; i < C O L S ; i + + ) { 本次设计 的重 点之处在于 编程思想 的形 成 . 设计 图像 界面 . 产生 g . d r a w L i n e( i B L O C K _ S I Z E , 0 , B L O C K _ S I Z E i , C OL S 随机食 物及其 位置 。 难点在于程序编写中 , 整个程序框架的架构。 这就 BL OCK S I Z E ) ; 要求 我们不仅要对这个游戏 的玩 法特别 熟悉 . 而且还要熟 练掌握 J a v a } , , 每次重 画时 . 判 断蛇是否 吃到蛋 语言 。 实现贪 吃蛇的四个类模块 , 分别为游戏界 面 、 蛇、 食物和方 向。其 s . e a t ( e ) ; , 份 别 把 蛇 和 食 物 画 出来 具体设计 如下 :

贪吃蛇代码详解

贪吃蛇代码详解
}
}
private class SnakeDriver implements Runnable{
/*线程*/
public void run() {
// TODO Auto-generated method stub
while(life){
move();//不停的调用move的方法
/*循环所有的监听器*/
for(int x=0;x<Global.WIDTH;x++){
for(int y=0;y<Global.HIGHT;y++){
if(rocks[x][y]==1){
g.setColor(Color.DARK_GRAY);
g.fill3DRect(x*Global.CELL_SIZE,y*Global.CELL_SIZE, 20, 20, true);
public void newFood(Point p){
this.setLocation(p);
}
public boolean isSnakeEatFood(Snake snake){
System.out.println("Food's isSnakeEatFood");
return this.equals(snake.getHead());
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//蛇死的方法
void die(){
life=false;
}
private int [][] rocks=new int[Global.WIDTH] [Global.HIGHT];

JAVA贪吃蛇游戏设计文档

JAVA贪吃蛇游戏设计文档

《JA V A贪吃蛇游戏设计》目录《JA V A贪吃蛇游戏设计》 (1)目录 (1)摘要 (2)一.系统开发环境 (2)1.1 开发工具 (2)1.2 应用环境 (3)二.java介绍 (3)2.1java语言的特点 (3)2.2JA V A的主要特性 (4)2.3选题的意义 (5)2.4研究现状 (5)2.5研究目的 (6)三.系统需求分析 (6)3.1 需求分析 (6)3.2 可行性分析 (6)四.设计方案论证 (7)4.1设计思路 (7)4.2设计方法 (7)五.系统概要设计 (11)5.1 设计目标 (11)5.2 系统功能模块 (11)六.系统详细设计 (12)6.1 程序设计 (12)6.2 各功能界面截图 (15)七.系统测试 (20)7.1 测试的意义 (20)7.2 测试过程 (21)7.3 测试结果 (21)7.4设计体会 (21)7.5设计总结 (21)八.参考文献 (22)九.附录 (22)摘要近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。

JBuilder是Borland公司用于快速开发Java应用的一款优秀的集成开发环境,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。

“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。

本文基于Java技术和JBuilder开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。

整个游戏程序分为二个功能模块,六个类模块,实现了游戏的开始、暂停、结束。

通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。

本文在介绍Java相关技术和国内外发展现状的基础上,对“贪吃蛇”游戏的整个生命周期的各个开发阶段进行了详细地介绍。

首先,分析了开发本游戏软件的可行性,重点分析本设计所采用的技术的可行性。

JAVA开放性实验报告贪吃蛇

JAVA开放性实验报告贪吃蛇

JAVA开放性实验报告贪吃蛇实验目的:本实验旨在利用Java语言实现一个经典的贪吃蛇游戏,通过实践提升对面向对象程序设计的理解和应用能力,加深对Java语言的熟练程度,并提高解决问题的能力和编程实践经验。

实验内容:1.设计游戏界面:通过Java中的Swing库实现游戏窗口的设计,包括游戏区域、游戏开始按钮、得分显示等。

2.实现游戏逻辑:设计贪吃蛇的移动规则,食物的生成和吃掉判定,碰撞检测等游戏逻辑。

同时实现游戏的主循环,控制游戏的进行。

3.实现键盘控制:通过监听键盘事件,实现玩家控制贪吃蛇的移动方向。

4.设计游戏机制:设置游戏的难度等级,增加贪吃蛇的移动速度、食物生成间隔等参数,使游戏更具挑战性。

5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。

玩家可以选择重新开始游戏或退出。

实验步骤:1.设计游戏界面:创建一个JFrame窗口,在窗口中添加游戏画布,开始按钮和得分显示等组件。

2.实现游戏逻辑:设计Snake类和Food类,表示贪吃蛇和食物。

通过ArrayList存储贪吃蛇的身体节点,并实现移动、吃食物等方法。

3.实现键盘控制:通过实现KeyListener接口来监听键盘事件,根据按键控制贪吃蛇的移动方向。

4.设计游戏机制:设置贪吃蛇的移动速度、食物生成间隔等参数,根据难度级别逐步增加,使游戏更具挑战性。

5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。

提供重新开始游戏和退出游戏的选项。

实验结果:经过实验设计和编码实现,成功完成了Java贪吃蛇游戏的开发。

游戏界面美观,操作流畅,游戏逻辑完整,玩家能够通过控制贪吃蛇吃到食物并获得得分。

随着游戏的进行,贪吃蛇会不断变长,玩家需要避开障碍,控制蛇头移动,体验游戏的乐趣和挑战。

实验总结:通过本次实验,我深入学习了Java语言的面向对象编程思想和应用,掌握了Swing库的使用方法,加深了对Java语言的理解和应用。

JAVA小程序—贪吃蛇源代码

JAVA小程序—贪吃蛇源代码

JAVA贪吃蛇源代码SnakeGame。

javapackage SnakeGame;import javax.swing。

*;public class SnakeGame{public static void main( String[]args ){JDialog。

setDefaultLookAndFeelDecorated( true ); GameFrame temp = new GameFrame();}}Snake.javapackage SnakeGame;import java。

awt.*;import java。

util。

*;class Snake extends LinkedList{public int snakeDirection = 2;public int snakeReDirection = 4;public Snake(){this。

add( new Point( 3, 3 ));this。

add(new Point(4, 3 ));this.add( new Point(5,3 ) );this。

add( new Point(6,3 ) );this。

add(new Point(7,3 ));this。

add( new Point( 8,3 ) );this。

add( new Point( 9, 3 ));this。

add( new Point( 10,3 ));}public void changeDirection( Point temp, int direction ) {this。

snakeDirection = direction;switch(direction ){case 1://upthis.snakeReDirection = 3;this。

add( new Point(temp.x,temp.y - 1 ));break;case 2://rightthis。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

辅助类 Coordinate.java复制代码package com.nn.util;/***坐标点*/public class Coordinate {public int x;public int y;public Coordinate(int newX, int newY) { x = newX;y = newY;}public boolean equals(Coordinate other) { if (x == other.x && y == other.y) {return true;}return false;}@Overridepublic String toString() {return "Coordinate: [" + x + "," + y + "]";}}复制代码接口Direction复制代码package com.nn.entity;public interface Direction {public class Dir{public static final int UP = 1;public static final int DOWN = 2;public static final int LEFT = 3;public static final int RIGHT = 4;}}复制代码实体类Snake.java复制代码package com.nn.entity;import java.util.ArrayList;import com.nn.entity.Direction.Dir; import com.nn.util.Coordinate;public class Snake{//小方块x坐标private int x;//小方块y坐标private int y;//宽度public static final int TILE_W = 10;//高度public static final int TILE_H = 10;//下一个方向private int mNextDirection = Dir.RIGHT;//游戏是否结束private boolean isEnd;//存放贪吃蛇private ArrayList<Coordinate> mSnakeTrail = new ArrayList<Coordinate>();//存放豆子private ArrayList<Coordinate> mAppleList = new ArrayList<Coordinate>();public Snake(){initNewGame();}//初始化新游戏public void initNewGame(){//初始化蛇身mSnakeTrail.add(new Coordinate(5, 7));mSnakeTrail.add(new Coordinate(6, 7));mSnakeTrail.add(new Coordinate(7, 7));mSnakeTrail.add(new Coordinate(8, 7));mSnakeTrail.add(new Coordinate(9, 7));mSnakeTrail.add(new Coordinate(10, 7));//初始化豆子mAppleList.add(new Coordinate(20,3));//设置初始状态为falseisEnd = false;}public ArrayList<Coordinate> getmSnakeTrail() { return mSnakeTrail;}public ArrayList<Coordinate> getmAppleList() { return mAppleList;}public boolean isEnd() {return isEnd;}public int getmNextDirection() {return mNextDirection;}public void setEnd(boolean isEnd) {this.isEnd = isEnd;}}复制代码frame类继承JFrame SnakeFrame.java复制代码package com.nn.ui;import java.awt.Dimension;import java.awt.Toolkit;import javax.swing.JFrame;/***游戏界面*/public class SnakeFrame extends JFrame{private static final long serialVersionUID = 1L;//宽度private static final int width = 530;//高度private static final int height = 450;//高度偏移量private static final int offset = 15;public SnakeFrame(){init();}/*** 初始化游戏界面*/private void init(){this.setTitle("Java版贪吃蛇_1.0");//frame的高度宽度this.setSize(width, height);//窗口居中显示Toolkit toolkit = Toolkit.getDefaultToolkit();Dimension screen = toolkit.getScreenSize();int w = screen.width;int h = screen.height;//计算左上角坐标点的x y值this.setLocation((w-this.getWidth())/2, (h-this.getHeight())/2-offset);//设置默认关闭的操作this.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置窗口大小不可改变this.setResizable(false);//设置可见性this.setVisible(true);this.setLayout(null);}}复制代码panel j继承JPanel SnakePanel.java复制代码package com.nn.ui;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;import javax.swing.JButton;import javax.swing.JPanel;import com.nn.control.PlayControl;import com.nn.entity.Snake;import com.nn.util.Coordinate;public class SnakePanel extends JPanel{private static final long serialVersionUID = 1L;//panel的宽度private static final int width = 400;//panel的高度private static final int height = 400;//坐标点xprivate static final int x = 10;//坐标点yprivate static final int y = 10;//方块尺寸private static final int SIZE = 10;//是否开启网格private boolean isOpen = false; private Snake snake;//开启作弊private JButton girdButton; private JButton aboutButton;//暂停继续按钮private JButton PauseButton;//重新开始游戏private JButton StartButton;public Snake getSnake() {return snake;}private ArrayList<Coordinate> mSnakeTrail = null; private ArrayList<Coordinate> mAppleList = null;public SnakePanel() {snake = new Snake();this.setLayout(null);StartButton = new JButton("重新开始");StartButton.setLocation(420,100);StartButton.setSize(90,26);this.add(StartButton);PauseButton = new JButton("暂停游戏");PauseButton.setLocation(420, 150);PauseButton.setSize(90,26);this.add(PauseButton);girdButton = new JButton("开启网格");girdButton.setLocation(420, 200);girdButton.setSize(90,26);this.add(girdButton);aboutButton = new JButton("关于游戏");aboutButton.setLocation(420, 250);aboutButton.setSize(90,26);this.add(aboutButton);girdButton.addActionListener(new GirdActionListener());aboutButton.addActionListener(new AboutActionListerner());}class GirdActionListener implements ActionListener{ int i = 1;public void actionPerformed(ActionEvent e) {if(i%2==1){girdButton.setText("关闭网格");isOpen = false;i++;}else if(i%2==0){girdButton.setText("开启网格");isOpen = true;i++;}}}class AboutActionListerner implements ActionListener{public void actionPerformed(ActionEvent e) {}}@Overridepublic void paintComponent(Graphics g) {super.paintComponent(g);creatGameWindow(g);if(snake.isEnd()){paintWords(g);}//将焦点定在Jpanel上this.requestFocus();}/*** 安装玩家控制器* @param control*/public void setGameControl(PlayControl control){ this.addKeyListener(control);}private void creatGameWindow(Graphics g) {g.setColor(Color.BLACK);g.drawRect(x, y, width, height);g.setColor(Color.WHITE);g.fillRect(x+1, y+1, width-1, height-1);g.setColor(Color.GRAY);/***************test******************/paintLine(g);/***************test******************/mSnakeTrail = snake.getmSnakeTrail();mAppleList = snake.getmAppleList();if(mSnakeTrail==null){return;}g.setColor(Color.BLACK);for(int i=0;i<mSnakeTrail.size();i++){g.fillRect(this.x+mSnakeTrail.get(i).x*SIZE, this.y+mSnakeTrail.get(i).y*SIZE,Snake.TILE_W, Snake.TILE_H);}//画豆子g.fillRect(this.x+mAppleList.get(0).x*SIZE, this.y+mAppleList.get(0).y*SIZE, Snake.TILE_W,Snake.TILE_H);}//画网格private void paintLine(Graphics g){for(int i = 1;i < 40;i++){g.drawLine(this.x, i*10+this.y, 400+this.x, i*10+this.y);}for(int i = 1;i < 40;i++){g.drawLine(i*10+this.x,this.y,i*10+this.x,400+this.y);}}//结束提示private void paintWords(Graphics g){Font font = new Font("宋体", Font.BOLD, 64);g.setFont(font);g.setColor(Color.RED);g.drawString("游戏结束",60,220);}}复制代码最关键的类控制类PlayControl.java复制代码package com.nn.control;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.ArrayList;import java.util.Random;import com.nn.entity.Direction.Dir;import com.nn.ui.SnakePanel;import com.nn.util.Coordinate;public class PlayControl implements KeyListener{private SnakePanel panel;//蛇头在list中索引private int headIndex;/*** 贪吃蛇列表*/ArrayList<Coordinate> mSnakeTrail;/** 豆子列表*/private ArrayList<Coordinate> mAppleList;//新产生的豆子Coordinate newCoordinate;private int mNextDirection;//是否绘制出结束提示private boolean isDraw = false;private Random random = new Random();public PlayControl(SnakePanel panel){this.panel = panel;mSnakeTrail = panel.getSnake().getmSnakeTrail();mAppleList = panel.getSnake().getmAppleList();mNextDirection = panel.getSnake().getmNextDirection();headIndex = mSnakeTrail.size()-1;Thread thread = new Thread(runnable);thread.start();}//响应键盘按下事件public void keyPressed(KeyEvent e) {if(isDraw){return;}switch (e.getKeyCode()) {case KeyEvent.VK_UP:if(mNextDirection!=Dir.DOWN){mNextDirection = Dir.UP;//moveUp();}break;case KeyEvent.VK_DOWN:if(mNextDirection!=Dir.UP){mNextDirection = Dir.DOWN;//moveDown();}break;case KeyEvent.VK_LEFT:if(mNextDirection!=Dir.RIGHT){mNextDirection = Dir.LEFT;//moveLeft();}break;case KeyEvent.VK_RIGHT:if(mNextDirection!=Dir.LEFT){mNextDirection = Dir.RIGHT;//moveRight();}break;}}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e) {}//向上移动private void moveUp(){if(!isEndGame()){//每移动一次先在头部加一块list增加一个元素mSnakeTrail.add(newCoordinate(mSnakeTrail.get(headIndex).x, mSnakeTrail.get(headIndex).y-1));//如果判断吃到豆子if(isEat()){//吃到豆子的处理afterEatApple();}//否则移除第一个元素else {mSnakeTrail.remove(0);}//重新绘制panel.repaint();}}//向下移动private void moveDown(){if(!isEndGame()){mSnakeTrail.add(new Coordinate(mSnakeTrail.get(headIndex).x, mSnakeTrail.get(headIndex).y+1));if(isEat()){afterEatApple();}else {mSnakeTrail.remove(0);}panel.repaint();}}//向左移动private void moveLeft(){if(!isEndGame()){mSnakeTrail.add(new Coordinate(mSnakeTrail.get(headIndex).x-1, mSnakeTrail.get(headIndex).y));if(isEat()){afterEatApple();}else {mSnakeTrail.remove(0);}panel.repaint();}}//向右移动private void moveRight(){if(!isEndGame()){mSnakeTrail.add(new Coordinate(mSnakeTrail.get(headIndex).x+1, mSnakeTrail.get(headIndex).y));if(isEat()){afterEatApple();}else {mSnakeTrail.remove(0);}panel.repaint();}}//增加一个坐标点到存放蛇的list 添加到list的末尾private void afterEatApple(){//每增加一个索引值加1 重新开始游戏时要回复初始值headIndex++;mAppleList.add(newCoordinate(random.nextInt(40), random.nextInt(40)));mAppleList.remove(0);newCoordinate = mAppleList.get(0);//System.out.println("蛇身长度:"+mSnakeTrail.size());}//判断蛇是否吃到豆子private boolean isEat(){returnmSnakeTrail.get(mSnakeTrail.size()-1).equals(mAppleLis t.get(0));}//判断是否到边界或者碰到自己的身体private boolean isEndGame(){int x = mSnakeTrail.get(headIndex).x;int y = mSnakeTrail.get(headIndex).y;if(touchBody()||x<0||x>39||y<0||y>39){afterEndGame();return true;}return false;}//碰到自己身体private boolean touchBody(){for(int i =0;i<mSnakeTrail.size()-1;i++){if(mSnakeTrail.get(headIndex).equals(mSnakeTrail.get(i)) ){return true;}}return false;}//游戏结束处理private void afterEndGame(){mSnakeTrail.remove(headIndex);panel.getSnake().setEnd(true);panel.repaint();this.isDraw = true;}Runnable runnable = new Runnable() {public void run() {moveRight();while(!isEndGame()){if(mNextDirection==Dir.UP) moveUp();else if(mNextDirection==Dir.DOWN) moveDown();else if(mNextDirection==Dir.LEFT) moveLeft();else if(mNextDirection==Dir.RIGHT) moveRight();try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}}};}复制代码最后是测试类SnakeTest.java复制代码package com.nn.main;import com.nn.control.PlayControl;import com.nn.ui.SnakeFrame;import com.nn.ui.SnakePanel;/**java版贪吃蛇小游戏*启动游戏**/public class SnakeTest {public static void main(String[] args) {SnakeFrame frame = new SnakeFrame();SnakePanel panel = new SnakePanel();PlayControl playControl = new PlayControl(panel);panel.setGameControl(playControl);//setContentPane()把panel设置为JFrame的内容面板frame.setContentPane(panel);}}31 / 31。

相关文档
最新文档