当前位置:文档之家› java简单贪吃蛇代码

java简单贪吃蛇代码

/*

* 贪吃蛇

*/

import java、awt、*; //包含文件import javax、swing、*;

import java、awt、event、*;

public class GreedSnack extends JFrame{

int i,j;

WH_panel panel; //定义WH_panel的实例JMenuBar wh_bar; //定义菜单实例

public GreedSnack() //构造函数

{

super("贪吃蛇--game--"); //框架名称

Container c=getContentPane(); //获得框架容器

setBounds(200, 200, 620, 465); //设置frame的大小

c、setLayout(null); //设置框架布局

wh_bar=new JMenuBar(); //定义菜单实例

setJMenuBar(wh_bar); //设置菜单

JMenu[]m={new JMenu("文件"),new JMenu("编辑")}; //主菜单

JMenuItem[][]mi={ //下拉菜单项

{new JMenuItem("开始"),new JMenuItem("退出")}, //设计菜单的内容

{new JMenuItem("分数"),new JMenuItem("记录分")}

};

for(i=0;i

{

wh_bar、add(m[i]); //添加下拉菜单

for(j=0;j

{

m[i]、add(mi[i][j]); //添加

} //for } //for

mi[0][0]、addActionListener(new ActionListener() //设置菜单监听

{

public void actionPerformed(ActionEvent e) //

{

try

{

panel、thread、start(); //开始线程

panel、right(); //直接执行right函数}

catch(Exception ee){} //对线程进行捕获错误}

});

addKeyListener(new KeyAdapter()

{

public void keyPressed(KeyEvent e) //键盘监听

{

if(e、getKeyCode()==KeyEvent、VK_LEFT) //监听左键

panel、left(); //执行left函数if(e、getKeyCode()==KeyEvent、VK_RIGHT) //监听右键

panel、right(); //执行right函数if(e、getKeyCode()==KeyEvent、VK_UP) //监听上键

panel、up(); //执行up函数if(e、getKeyCode()==KeyEvent、VK_DOWN) //监听下键

panel、down(); //执行down函数

} //键盘事件

public void keyTyped(KeyEvent e) {}

public void keyReleased(KeyEvent e) {}

});

panel=new WH_panel();

panel、setLayout(null); //panel布局

c、add(panel); //添加panel

}

public static void main(String args[]) //主函数

{

GreedSnack app=new GreedSnack(); //设置frame的实例

app、setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE); //关闭窗口

app、setVisible(true); //设置成可见} //main

} //greedsnack class WH_panel extends JPanel implements Runnable //panel函数

{

Thread thread; //定义线程

int x=0,y=0,wh_direct=0; //设置变量

int food_x=60,food_y=80; //初始食物的位置int d_l,d_r,d_u,d_d; //定义行使方向int i,j,wh_stop;

int food_date; //定义食物数int [][]wh_array=new int[30][20]; //定义数组

public WH_panel() //构造函数

{

this、setBounds(0, 0,600,400); //设置panel的大小

thread=new Thread(this); //创建线程thread

for(i=0;i<30;i++) //给数组付初值

{

for(j=0;j<20;j++) //列标小于20

{

wh_array[i][j]=0; //将数组赋为0 } //for } //for } //WH_panel() public void left() //left函数

{

if(d_r!=3) //假设现在向右行进

{

wh_direct=1; //wh_direct为1

d_l=1; //标记左不能运行

d_r=3;

d_u=0; //标记上可以运行

d_d=0; //标记下可以运行}

else //假设现在不就是向右行进

{

d_l=0; //向左可以运行

}

}

public void right() //右键函数

{

if(d_l!=1) //假设现在向左行进

{

wh_direct=2; //wh_direct为2

d_l=1;

d_r=3; //向右不可以运行

d_u=0; //向上可以运行

d_d=0; //向下可以运行}

else //假设没有向左行进

{

d_r=0; //向右可以运行}

}

public void up() //向上键函数

{

if(d_d!=7) //假设现在向下行进

{

wh_direct=3; //wh_direct为3

d_u=5; //向上不可以运行

d_d=7;

d_l=0; //向左可以行进

d_r=0; //向右可以运行}

else //假设现在没有向下运行{

d_u=0; //可以向上行进}

}

public void down() //向下键的函数

{

if(d_u!=5) //如果现在向上运行{

wh_direct=4; //wh_direct为4

d_u=5;

d_d=7; //现在不可向下行进

d_r=0; //现在可向右行进

d_l=0; //现在向左行进}

else //如果现在没有向上行进{

d_d=0; //可以向下行进}

}

public void run() //线程函数

{

while(true) //while循环

{

if(wh_direct==1) //向左方

{

if(x>=20&&y>=0&&x<=580&&y<=380) //规定范围

if(wh_array[x/20-1][y/20]!=0) //当下一个有蛇身

{

wh_stop=1; //wh_stop=1 }

x=x-20; //x坐标减小变化

wh_run();

}

if(wh_direct==2) //向右方

{

if(x>=0&&y>=0&&x<=560&&y<=380) //规定范围

if(wh_array[x/20+1][y/20]!=0) //当下一个有蛇身

{

wh_stop=1; //wh_stop=1 }

x=x+20; //x坐标增大变化

wh_run();

}

if(wh_direct==3) //向上方

{

if(x>=0&&y>=20&&x<=580&&y<=380) //规定范围

if(wh_array[x/20][y/20-1]!=0) //当下一个有蛇身

{

wh_stop=1; //wh_stop=1 }

y=y-20; //y坐标减小变化

wh_run();

}

if(wh_direct==4) //向下方

{

if(x>=0&&y>=0&&x<=580&&y<=360) //规定范围

if(wh_array[x/20][y/20+1]!=0) //当下一个有蛇身

{

wh_stop=1; //wh_stop=1 }

y=y+20; //y坐标增大变化

wh_run();

}

if(food_x==x&&food_y==y) //蛇头的坐标与食物相同

{

food_x=((int)(Math、random()*30))*20; //随机食物坐标X

food_y=((int)(Math、random()*20))*20; //随机食物坐标Y

repaint(); //刷新绘图

food_date=food_date+1; //食物数进行自加}

if(x==600||y==400||x<0||y<0||wh_stop==1) //到达边界跳出循环

{

break;

}

}

}

public void wh_run() //蛇身行进函数{

/*

* 此函数为贪吃蛇的重点函数,实现蛇身的各种变化,主要思路就是:

* 将面板分割成20X30的数组,并将其初始值赋为0,每次将蛇头

* 值赋为1,然后对数组非0的数进行加1操作,若数组内的值大于

* 蛇本身应有的长度,就将其值改为0,最后对数组不为0的进行绘

* 图。

*/

if(x>=0&&y>=0&&x<=580&&y<=380) //当坐标满足数组范围时{

wh_array[x/20][y/20]=1; //此时蛇头数组值为1 }

for(i=0;i<30;i++) //检测整个数组{

for(j=0;j<20;j++) //y小于20

{

if(wh_array[i][j]!=0) //如果数组中含有不为0的值

{

wh_array[i][j]=wh_array[i][j]+1; //对其加1操作} //if } //for } //for

repaint(); //从绘窗口

wh_sleep(200); //睡眠

for(i=0;i<30;i++) //给数组付初值{

for(j=0;j<20;j++) //y小于20

{

if(wh_array[i][j]>food_date+1) //若蛇身长度大于食物数加1

{

wh_array[i][j]=0; //将值变为0 } //if } //for } //for

} //wh_run() protected void paintComponent(Graphics g) //绘图函数

{

g、setColor(Color、getHSBColor(0, 0, 200)); //panel背景颜色

g、fillRect(0, 0, this、getWidth(), this、getHeight());

for(i=0;i<30;i++) //检测数组

{

for(j=0;j<20;j++) //y坐标小于20

{

if(wh_array[i][j]!=0) //在wh_array不为0时

{

g、setColor(Color、BLUE); //蛇身颜色

g、fillRect(20*i, 20*j, 20, 20); //画蛇身

g、setColor(Color、lightGray); //蛇身外框颜色

g、drawRect(20*i, 20*j, 20, 20); //蛇身外框

} //if } //for } //for

g、setColor(Color、RED); //食物颜色

g、fillOval(food_x,food_y,20,20); //画食物

if(x==600||y==400||x<0||y<0||wh_stop==1) //当蛇撞墙时

{

g、setColor(Color、getHSBColor(0, 0, 200)); //panel背景颜色

g、fillRect(0, 0, this、getWidth(), this、getHeight()); //画矩形充当背景

g、setColor(Color、BLACK); //设置字符串颜色

g、drawString("game over", 250, 150); //输出game over

} //if }

//paintComponent

public static void wh_sleep(long millis) //自定义sleep函数

{

try

{

Thread、sleep(millis); //调用线程休眠} //try

catch(InterruptedException e) //捕获错误

{

System、err、println(""+e);

e、printStackTrace(); //输出错误

} //catch } //wh_sleep

}

用java编写的贪吃蛇游戏代码

用Java编写的贪吃蛇代码 下面是我用java编写的一个贪吃蛇游戏源代码.我个人是比较喜欢玩游戏的,所以学习编程二年多了,很想做个游戏程序,由于能力有限,一直没能做好,后来突然看同学在手机上玩“贪吃蛇”,故想做出来,其一是因为此游戏界面容易设计,算法也比较简单,今天我就把我程序的代码和算法介绍一下,顺便把程序界面皮肤设计说一下...... 程序中一个关于游戏信息的类如下,由于类的说明在程序中写的很清楚了,就不再多解释了:#include "time.h" //方向定义 const CPoint UP(CPoint(0,-1)); const CPoint DOWN(CPoint(0,1)); const CPoint LEFT(CPoint(-1,0)); const CPoint RIGHT(CPoint(1,0)); //速度快慢定义 const int HIGH = 75; const int NORMAL = 180; const int SLOW = 300; const int MAX = 80; //表示转向数 const int LENGTH = 10; class GameMsg { public: GameMsg(void) : m_icon(0)

{ InitGame(); } void InitGame(int up = VK_UP, int down = VK_DOWN, int left = VK_LEFT, int right = VK_RIGHT) { srand((unsigned)time(NULL)); m_gameSpeed = NORMAL; m_speedNum = 2; m_snakeNum = 4; for(int i=0; i

Java贪吃蛇报告

J a v a贪吃蛇报告 Revised final draft November 26, 2020

《Java高级编程》课程报告 第xx小组:贪吃蛇游戏项目 小组成员及分工 一、实验环境 操作系统:Windows 7 编程环境:Eclipse、JDK 二、实验内容与完成情况 (主要介绍项目总体功能分析与说明。) 贪吃蛇小游戏的JAVA程序是利用上↑、下↓、左←、右→方向键来改变蛇的运动方向,按空键暂停游戏,按enter键重新开始。长按某个方向键后,蛇的运动速度会加快,在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常进行游戏。以不同的速度和不同方向吃到食物所获得的分数也不相同。 窗口功能说明:设计了三个窗口,分别是游戏主窗口,主菜单窗口,模式选择窗口。菜单栏分别为:游戏菜单(重新开始)和帮助菜单以及返回(返回主菜单)。其中,按返回菜单按钮后会显示主菜单,其包括游戏开始、设置、退出游戏三项按钮选择;如果按

“设置”按钮会进入“模式选择”窗口。而模式选择窗口菜单包括了初级、中级、高级、返回按钮。 1、功能1(主菜单窗口) (1)主菜单窗口主要是提供“游戏开始”、“设置”和“退出”按钮。“游戏开始”按钮按下后会进入“游戏主窗口”开始游戏;“设置”按钮是调用 “模式选择”窗口对游戏贪吃蛇的速度进行设置;“退出”按钮按下则会 直接退出游戏。 (2)功能1实现的流程图 实现的效果图如下: (3)功能1(主菜单窗口)代码: package Swing; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; public class setMenu extends JFrame { private int speed1 = 200; public static int speed = 200; // static int speed = 20; private JPanel contentPane; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { setMenu frame = new setMenu(speed); frame.SsetMenu(frame); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); }

java版贪吃蛇小游戏

辅助类 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; } @Override public 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坐标

java贪吃蛇设计文档

姓名:XXXXXX 学号:XXXXXX

目录 1 引言 (5) 1.1 编写目的 (5) 1.2 项目背景 (5) 1.3 开发工具和语言 (6) 1.4 术语说明 (6) 1.4.1 数据结构 (6) 1.4.2 类 (6) 2 概要设计 (7) 2.1 目标 (7) 2.2 运行环境 (8) 2.3 总体设计 (8) 2.3.1 游戏设计思路 (8) 2.3.2 算法中的基本概念 (9) 2.3.3 游戏结构 (9) 2.3.4 游戏整体流程 (9) 3 数据结构设计 (10) 3.1 蛇、石头、食物的表示 (10) 3.2 蛇的移动 (10) 3.3 存储蛇身的数据结构 (11)

3.5 如何显示蛇身 (11) 3.6 蛇身的移动方向 (12) 3.7 吃到食物判定 (12) 4 类的设计 (12) 4.1 设计 (12) 4.1.1 GamePanel类 (12) 4.1.2 Snake类 (13) 4.1.3 Food类 (13) 4.1.4 Ground类 (13) 4.1.5 Controller类 (13) 4.1.6 Mouse类 (13) 4.2 通过事件监听建立联系 (13) 5 详细设计 (13) 5.1 controller包 (14) 5.1.1 Controller类 (14) 5.2 mouse包 (14) 5.2.1 Mouse类 (14) 5.3 entities包 (15)

5.3.2 Ground类 (15) 5.3.3 Snake类 (16) 5.4 game包 (17) 5.4.1 Game类 (17) 5.5 listener包 (17) 5.5.1 Snakelistener类 (17) 5.6 util包 (17) 5.6.1 Global类 (17) 5.7 view包 (17) 5.7.1 GamePanel类 (17) 5.8 sound包 (18) 5.8.1 Sound类 (18) 6 UI设计 (18)

java贪吃蛇课程设计

1设计目的 1.1背景 近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。JBuilder是Borland公司用于快速开发Java应用的一款优秀的集成开发环境,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。 “贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本文基于Java技术和JBuilder开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。整个游戏程序分为二个功能模块,六个类模块,实现了游戏的开始、暂停、结束。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。 本文在介绍Java相关技术和国外发展现状的基础上,对“贪吃蛇”游戏的整个生命周期的各个开发阶段进行了详细地介绍。首先,分析了开发本游戏软件的可行性,重点分析本设计所采用的技术的可行性。其次,从游戏主界面等几方面,分析了本游戏的功能需求;从可使用性和安全性方面分析了属性需求。然后,进行了游戏的概要设计和详细设计,这也是本文的重点。概要设计给出二个功能模块的主框架以及六个类模块的函数调用关系;详细设计介绍了Java2标准运行环境的配置,重点给出各个类模块的程序流程图以及UML图,列表介绍了各个类包含的变量、使用的方法,展示了游戏的界面。为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。 1.2目标 本软件是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,空格键暂停或继续游戏,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。 2 总体设计 2.1 设计思路 本系统主要是完成贪吃蛇游戏的基本操作。用户可以自己练习和娱乐。本系统需要满足以下几点要求: (1) 利用方向键来改变蛇的运行方向。 (2) 空格键暂停或继续游戏,并在随机的地方产生食物。 (3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。 2.2设计说明 本系统共包括1个java源文件和7个类文件。

Java实现贪吃蛇

项目效果图: 源代码: import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import https://www.doczj.com/doc/f513523820.html,ponentAdapter; import https://www.doczj.com/doc/f513523820.html,ponentEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.*; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; /* author: 蒋冰*/

Java贪吃蛇游戏源代码

import java.awt.Color; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.KeyStroke; public class 贪吃蛇extends JFrame implements ActionListener, KeyListener,Runnable { /** * */ private static final long serialVersionUID = 1L; private JMenuBar menuBar; private JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu; private JMenuItem kaiShiYouXi,exitItem,zuoZheItem,fenShuItem; private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan; private int length = 6; private Toolkit toolkit; private int i,x,y,z,objectX,objectY,object=0,growth=0,time;//bojectX,Y private int m[]=new int[50]; private int n[]=new int[50]; private Thread she = null; private int life=0; private int foods = 0; private int fenshu=0;

java课程设计贪吃蛇

JAVA设计贪吃蛇游戏 1.课程设计目的 《JA V A程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JA V A程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。 2.设计方案论证 2.1设计思路 贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。在此只实现游戏的游戏主界面模块、游戏控制模块。并且只是实现移动速度、暂停、重新开始等功能。 游戏主界面模块: 游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、游戏速度控制按钮、暂停游戏按钮、重新开始游戏按钮以及游戏排行榜按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。 游戏控制模块: 这个模块是游戏的中心环节,主要完成控制游戏的速度、暂停、重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。 本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为: 游戏主界面模块、游戏控制模块以二个模块。 性能: 本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。

用java实现简单贪食蛇游戏

一、功能简介 可以通过面板上的按钮和键盘上的“+”,“-”实现加速,减速。 可以通过面板上的按钮和键盘上的“r“来实现重新开始游戏。 可以在面板上通过复选框选择游戏模式(挑战模式,普通模式)。 二、运行结果截图

二、代码 1、地图 package snake; importjava.io.BufferedReader; importjava.io.File; importjava.io.FileNotFoundException; import java.io.FileReader;//读取字符文件类FileReader importjava.io.IOException; public class map {

int[][] map=new int[20][20]; intsnakeX,snakeY; intfoodX,foodY; public map(int level){ String filepath="mapc/"+level+".txt"; File file = new File(filepath); FileReaderfr = null;//利用FileReader流来读取一个文件中的数据 BufferedReaderbr = null;//字符读到缓存里 try { fr = new FileReader(file); br = new BufferedReader(fr); for (inti = 0; i< 20; i++){ String line = br.readLine();//以行为单位,一次读一行利用BufferedReader的readLine,读取分行文本 byte[] point = line.getBytes();//将字符串转换为字节数组 for (int j = 0; j < 20; j++) { map[i][j] = point[j] - 48;// 根据ASCall码表要减掉30H(十进制的48) if(map[i][j]==3){ snakeX=i; snakeY=j; } if(map[i][j]==5){ foodX=i; foodY=j; } } } } catch (FileNotFoundException e){ e.printStackTrace();//深层次的输出异常调用的流程 } catch (IOException e){ e.printStackTrace();//深层次的输出异常调用的流程 } catch(NullPointerException e){ e.printStackTrace();//深层次的输出异常调用的流程 } finally { if (br == null){ try{

JAVA程序源代码(贪吃蛇)

贪吃蛇源代码 将Location、LocationRO、SnakeFrame、SnakeModel、SnakePanel放到命名为snake的文件夹里,主函数MainApp放到外面运行主函数即可实现。 主函数 package snake; import javax.swing.*; import snake.*; public class MainApp { public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); SnakeFrame frame=new SnakeFrame(); frame.setSize(350,350); frame.setResizable(false); frame.setLocation(330,220); frame.setTitle("贪吃蛇"); frame.setVisible(true); } } package snake; public class Location { private int x; private int y; Location(int x,int y){ this.x=x; this.y=y; } int getX(){ return x; } int getY(){ return y; } void setX(int x){ this.x=x; }

void setY(int y){ this.y=y; } public boolean equalOrRev(Location e){ return ((e.getX()==getX())&&(e.getY()==getY())) ||((e.getX()==getX())&&(e.getY()==-1*getY())) ||((e.getX()==-1*getX())&&(e.getY()==getY())); } public boolean equals(Location e){ return(e.getX()==getX())&&(e.getY()==getY()); } public boolean reverse(Location e){ return ((e.getX()==getX())&&(e.getY()==-1*getY())) ||((e.getX()==-1*getX())&&(e.getY()==getY())); } } package snake; public class LocationRO{ private int x; private int y; LocationRO(int x,int y){ this.x=x; this.y=y; } int getX(){ return x; } int getY(){ return y; } public boolean equalOrRev(LocationRO e){ return ((e.getX()==getX())&&(e.getY()==getY())) ||((e.getX()==getX())&&(e.getY()==-1*getY())) ||((e.getX()==-1*getX())&&(e.getY()==getY())); } public boolean equals(LocationRO e){ return(e.getX()==getX())&&(e.getY()==getY()); }

最新java简单贪吃蛇代码

/* * 贪吃蛇 */ import java.awt.*; //包含文件 import javax.swing.*; import java.awt.event.*; public class GreedSnack extends JFrame{ int i,j; WH_panel panel; //定义WH_panel的实例JMenuBar wh_bar; //定义菜单实例 public GreedSnack() //构造函数 { super("贪吃蛇--game--"); //框架名称 Container c=getContentPane(); //获得框架容器 setBounds(200, 200, 620, 465); //设置frame的大小 c.setLayout(null); //设置框架布局 wh_bar=new JMenuBar(); //定义菜单实例 setJMenuBar(wh_bar); //设置菜单 JMenu[]m={new JMenu("文件"),new JMenu("编辑")}; //主菜单 JMenuItem[][]mi={ //下拉菜单项 {new JMenuItem("开始"),new JMenuItem("退出")}, //设计菜单的内容 {new JMenuItem("分数"),new JMenuItem("记录分")} }; for(i=0;i

java课程设计贪吃蛇游戏设计

前言 Java最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景。于是改造了Oak,以“Java”的名称正式发布。 Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。 与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。 Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

Java编写的贪吃蛇游戏代码

贪吃蛇:看了传智博客的视频整理出来的代码Snake类 package snake; import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.util.HashSet; import java.util.LinkedList; import java.util.Set; public class Snake { //定义方向的常量 public static final int UP=-1; public static final int DOWN=1; public static final int LEFT=2; public static final int RIGHT=-2; private int oldDirection,newDirection; private Point oldTail; private boolean life; private LinkedList body=new LinkedList(); //蛇的坐标 private Set listener=new HashSet(); //蛇没身体要初始化 public Snake(){ init(); } public void init(){ //显示区最中间点 int x=Global.WIDTH/2; int y=Global.HEIGHT/2; //初始化身体节点 for(int i=0;i<3;i++){ //添加节点 body.addLast(new Point(x--,y));//蛇头在右边默认方向为右 oldDirection=newDirection=RIGHT;

java 贪吃蛇算法分析和代码

贪吃蛇是一款非常经典的手机游戏。它有很多算法,这里详细分析一种比较优秀的算法。 首先介绍下主要用到的七个类: ●WormMain:最主要的类,控制所有其它类的运行和销毁。 ●WormPit:处理键盘输入事件并实例化Worm类和WormFood类的。 ●Worm:抽象了贪吃蛇的属性和动作 ●WormFood:抽象了食物的属性和动作 ●WormScore:用来纪录分数的类 ●WormLink:抽象了蛇身上的一段,保存了这段的坐标、方向和所有状态。 ●WormException:处理异常类 基本概念介绍 节:一条蛇可以看成有许多正方形的“小格子”拼凑成,我把它称作节。节是蛇身上最小的单位。 段:当许多节连成一条直线,我称它为段。上图的贪吃蛇只有一段,如果它拐弯就变成两段。 链表:用来保存每一段的状态,链表的元素单位是段。且链表的最后一个元素表示蛇的头部段。 坐标系:MIDP中的坐标以左上角那点为(0,0),向右则x递增,向下则y递增。 Worm类 一条完整的贪吃蛇是由一段一段组成的。链表中保存的第一个元素是蛇的尾巴段,最后一个元素是蛇的头部段。当蛇运动的时候,它头部段增加一节而尾段减少一节。如果它吃到了食物,尾部段就不减少一节。也就是说,蛇是从头部段开始长的。 下面的代码段显示了Worm类保存的各种属性: /* 贪吃蛇可能移动的方向 */ public final static byte DOWN = 2; public final static byte LEFT = 4;

public final static byte RIGHT = 6; public final static byte UP = 8; // 贪吃蛇的当前方向 private byte currentDirection; // 保存贪吃蛇每一段的列表 private Vector worm = new Vector(5, 2); // 是否需要更新状态 private boolean needUpdate; // 是否在运动中 private boolean moveOnNextUpdate; // 是否吃到食物 private boolean hasEaten; // 贪吃蛇的初始位置、长度和方向 private final static int INIT_X = 3; private final static int INIT_Y = 8; private final static int INIT_LEN = 8; private final static byte INIT_DIR = RIGHT; 下面重点介绍下Worm类中的几个方法: public void setDirection(byte direction) 这个方法用来改变贪吃蛇运动的方向,只能90度。看下面的实现代码:if ((direction != currentDirection) && !needUpdate) { // 取出列表中的最后一个元素(蛇的头部) WormLink sl = (WormLink)https://www.doczj.com/doc/f513523820.html,stElement();

贪吃蛇JAVA设计报告

第一章绪论 开发的背景 随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。 贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。 虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。 开发的目的 在如今社会,人们的工作学习压力逐渐增大,生活节奏逐渐加快,大多数人没有足够的时间去休闲娱乐,放松自己。这款小型的手机游戏,可以让我们随时随地都能享受游戏,。让我们从繁重的日常生活中解脱出来。 游戏的主界面应该力求美观,爽心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该做到易懂、易操作,以给玩家一个很好的游戏环境。 开发的意义 通过这个游戏可以使玩贪吃蛇的人感到心情轻松,愉悦。使心情得以舒畅,让工作的压力可以得到缓解。给大家一个愉悦的游戏环境。

开发工具简介 Sun Microsystems公司在推出Java语言的同时,推出了一套开发工具JDK。Sun提供的基于字符模式的Java开发工具包JDK: Java开发工具(JDK)是许多Java专家最初使用的开发环境。Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。 Java源程序编写借助于记事本,Editpuls,UltraEdit等第三方编辑工具。 所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心Java API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。JDK 是整个Java的核心,包括了Java运行环境(Java RuntimeEnvirnment),一堆Java工具和Java基础的类库。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。 JDK里面是java类库和java的语言规范,它提供的是无论你用何种开发软件写java程序都必须用到的类库和java语言规范.没有jdk,你的java程序根本就不能用。 最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM 公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比SunJDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。 第二章需求分析 需求分析 本游戏主要是完成贪吃蛇游戏的基本操作。本游戏需要满足以下几点要求: (1) 利用方向键来改变蛇的运行方向。 (2) 在随机的地方产生食物。 (3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。 可行性分析 贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。 贪吃蛇的核心算法是如何实现移动和吃掉食物,在没有碰到食物的时候,把当前运动方向上的下个节

贪吃蛇代码 [Java实现贪吃蛇游戏【代码】]

package com.huai;import Java.awt.Color;import java.awt.Graphics;import java.awt.Point;import java.util.HashSet;import java.util.LinkedList;import java.util.Set;import com.huai.listener.SnakeListener;import com.huai.util.Constant;public class Snake { //和蛇的监听器有关Set snakeListener=new HashSet(); //用链表保存蛇的身体节点 LinkedList body=new LinkedList (); private boolean life=true; //默认速度为400ms private int speed=400; private Point lastTail=null; private boolean pause=false; //定义各个方向 public static final int UP=1; public static final int DOWN=-1; public static final int LEFT=2; public static final int RIGHT=-2; int newDirection=RIGHT; int oldDirection=newDirection; public Snake(){ initial(); } public void initial(){ //先清空所有的节点 body.removeAll(body); int x=Constant.WIDTH/2; int y=Constant.HEIGHT/2; //蛇的默认长度为7 for(int i=0; i < 7; i++){ body.add(new Point(x--, y)); } } public void setSpeed(int speed){ this.speed=speed; } public void setLife(boolean life){ this.life=life; } public boolean getLife(){ return this.life; } public boolean getPause(){ return this.pause; } public void setPause(boolean pause){ this.pause=pause; } public void move(){ //蛇移动的实现 所采用的数据结构为蛇尾删除一个节点,蛇头增加一个节点。 System.out.println("snake move"); if(!(oldDirection + newDirection==0)){ oldDirection=newDirection; } lastTail=body.removeLast(); int x=body.getFirst().x; int y=body.getFirst().y; switch(oldDirection){ case UP: y--; break; case DOWN: y++; break; case LEFT: x--; break; case RIGHT: x++; break; } Point point=new Point(x, y); body.addFirst(point); } //当吃到一个食物的时候,把删掉的蛇尾节点增加回来public void eatFood(){ System.out.println("snake eat food"); body.addLast(lastTail); } public boolean isEatItself(){ for(int i=2; i < body.size(); i++){ if(body.getFirst().equals(body.get(i))){ return true; } } return false; } public void drawMe(Graphics g){ System.out.println("draw snake"); //循环打印蛇 的各个身体节点 for(Point p:body){ if(p.equals(body.getFirst())){ //当是蛇头的时候,就设置颜色为橘色 g.setColor(Color.orange); }else{ g.setColor(Color.pink); } g.fill3DRect(p.x * Constant.CELL_SIZE, p.y * Constant.CELL_SIZE, Constant.CELL_SIZE, Constant.CELL_SIZE, true); } } public void changeDirection(int direction){ System.out.println("snake changeDirection"); this.newDirection=direction; } //内部类,新增一个游戏线程public class DriveSnake implements Runnable{ @Override public void run() { while(life){ if(!pause){ //只要让蛇不动就可以暂停游戏 move(); } //监听蛇每次移 动的情况for(SnakeListener listener : snakeListener){ listener.snakeMove(Snake.this); } try { Thread.sleep(speed); } catch (InterruptedException e) { e.printStackTrace(); } } } } public void startMove(){ new Thread(new DriveSnake()).start(); } //增加监听器的方法 public void addSnakeListener(SnakeListener listener){ if(listener !=null){ snakeListener.add(listener); } } //返回蛇的第一 个身体节点 public Point getHead(){ return body.getFirst(); } //返回蛇的所有身体

相关主题
文本预览
相关文档 最新文档