「贪吃蛇java」贪吃蛇Java开源代码

博主:adminadmin 2022-12-01 20:47:08 65

今天给各位分享贪吃蛇java的知识,其中也会对贪吃蛇Java开源代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

求java贪吃蛇的编程,并有注释

J2ME贪吃蛇源代码——200行左右,包含详细注释 package snake;import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;public class SnakeMIDlet extends MIDlet {

SnakeCanvas displayable = new SnakeCanvas();

public SnakeMIDlet() {

Display.getDisplay(this).setCurrent(displayable);

}public void startApp() {}public void pauseApp() {}public void destroyApp(boolean unconditional) {}}//文件名:SnakeCanvas.javapackage snake;import java.util.*;

import javax.microedition.lcdui.*;/**

* 贪吃蛇游戏

*/

public class SnakeCanvas extends Canvas implements Runnable{

/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/

int[][] snake = new int[200][2];

/**已经使用的节点数量*/

int snakeNum;

/**贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/

int direction;

/*移动方向*/

/**向上*/

private final int DIRECTION_UP = 0;

/**向下*/

private final int DIRECTION_DOWN = 1;

/**向左*/

private final int DIRECTION_LEFT = 2;

/**向右*/

private final int DIRECTION_RIGHT = 3;/**游戏区域宽度*/

int width;

/**游戏区域高度*/

int height;/**蛇身单元宽度*/

private final byte SNAKEWIDTH = 4;/**是否处于暂停状态,true代表暂停*/

boolean isPaused = false;

/**是否处于运行状态,true代表运行*/

boolean isRun = true;/**时间间隔*/

private final int SLEEP_TIME = 300;

/**食物的X坐标*/

int foodX;

/**食物的Y坐标*/

int foodY;

/**食物的闪烁控制*/

boolean b = true;

/**Random对象*/

Random random = new Random();

public SnakeCanvas() {

//初始化

init();

width = this.getWidth();

height = this.getHeight();

//启动线程

new Thread(this).start();

}/**

* 初始化开始数据

*/

private void init(){

//初始化节点数量

snakeNum = 7;

//初始化节点数据

for(int i = 0;i snakeNum;i++){

snake[i][0] = 100 - SNAKEWIDTH * i;

snake[i][1] = 40;

}

//初始化移动方向

direction = DIRECTION_RIGHT;

//初始化食物坐标

foodX = 100;

foodY = 100;

}protected void paint(Graphics g) {

//清屏

g.setColor(0xffffff);

g.fillRect(0,0,width,height);

g.setColor(0);//绘制蛇身

for(int i = 0;i snakeNum;i++){

g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);

}

//绘制食物

if(b){

g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);

}

}private void move(int direction){

//蛇身移动

for(int i = snakeNum - 1;i 0;i--){

snake[i][0] = snake[i - 1][0];

snake[i][1] = snake[i - 1][1];

}//第一个单元格移动

switch(direction){

case DIRECTION_UP:

snake[0][1] = snake[0][1] - SNAKEWIDTH;

break;

case DIRECTION_DOWN:

snake[0][1] = snake[0][1] + SNAKEWIDTH;

break;

case DIRECTION_LEFT:

snake[0][0] = snake[0][0] - SNAKEWIDTH;

break;

case DIRECTION_RIGHT:

snake[0][0] = snake[0][0] + SNAKEWIDTH;

break;

}

}

/**

* 吃掉食物,自身增长

*/

private void eatFood(){

//判别蛇头是否和食物重叠

if(snake[0][0] == foodX snake[0][1] == foodY){

snakeNum++;

generateFood();

}

}

/**

* 产生食物

* 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合

*/

private void generateFood(){

while(true){

foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))

/ SNAKEWIDTH * SNAKEWIDTH;

foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))

/ SNAKEWIDTH * SNAKEWIDTH;

boolean b = true;

for(int i = 0;i snakeNum;i++){

if(foodX == snake[i][0] snake[i][1] == foodY){

b = false;

break;

}

}

if(b){

break;

}

}

}

/**

* 判断游戏是否结束

* 结束条件:

* 1、蛇头超出边界

* 2、蛇头碰到自身

*/

private boolean isGameOver(){

//边界判别

if(snake[0][0] 0 || snake[0][0] (width - SNAKEWIDTH) ||

snake[0][1] 0 || snake[0][1] (height - SNAKEWIDTH)){

return true;

}

//碰到自身

for(int i = 4;i snakeNum;i++){

if(snake[0][0] == snake[i][0]

snake[0][1] == snake[i][1]){

return true;

}

}

return false;

}/**

* 事件处理

*/

public void keyPressed(int keyCode){

int action = this.getGameAction(keyCode);

//改变方向

switch(action){

case UP:

if(direction != DIRECTION_DOWN){

direction = DIRECTION_UP;

}

break;

case DOWN:

if(direction != DIRECTION_UP){

direction = DIRECTION_DOWN;

}

break;

case LEFT:

if(direction != DIRECTION_RIGHT){

direction = DIRECTION_LEFT;

}

break;

case RIGHT:

if(direction != DIRECTION_LEFT){

direction = DIRECTION_RIGHT;

}

break;

case FIRE:

//暂停和继续

isPaused = !isPaused;

break;

}

}/**

* 线程方法

* 使用精确延时

*/

public void run(){

try{

while (isRun) {

//开始时间

long start = System.currentTimeMillis();

if(!isPaused){

//吃食物

eatFood();

//移动

move(direction);

//结束游戏

if(isGameOver()){

break;

}

//控制闪烁

b = !b;

}

//重新绘制

repaint();

long end = System.currentTimeMillis();

//延时

if(end - start SLEEP_TIME){

Thread.sleep(SLEEP_TIME - (end - start));

}

}

}catch(Exception e){}

}

}

java贪吃蛇国内现状怎么样

java贪吃蛇国内现状是热度慢慢淡下去了。贪吃蛇大作战就做到了,表现异常亮眼,曾经登上免费榜第一的位置。《贪吃蛇大作战》的流行,以及《球球大作战》的持续火爆,最核心的原因是,在手机上找到了一种适合实时多人对战的玩法,也和大环境下新生代玩家越来越注重游戏本身的乐趣有关。在PC端上我们可以玩LOL、DotA、穿越火线这样的实时对战游戏,我们享受与人斗的乐趣,将我们的荣誉融入其中。而在手机上能够给予相似感受的游戏一直并没有出现,而恰恰这种类型的游戏填补了这方面的空白。

贪吃蛇 java代码

自己写着玩的,很简单,你试一试哦...

主要用了javax.swing.Timer这个类:

import java.awt.*;

import javax.swing.*;

@SuppressWarnings("serial")

public class MainClass extends JFrame {

ControlSnake control;

Toolkit kit;

Dimension dimen;

public static void main(String[] args) {

new MainClass("my snake");

}

public MainClass(String s) {

super(s);

control = new ControlSnake();

control.setFocusable(true);

kit = Toolkit.getDefaultToolkit();

dimen = kit.getScreenSize();

add(control);

setLayout(new BorderLayout());

setLocation(dimen.width / 3, dimen.height / 3);// dimen.width/3,dimen.height/3

setSize(FWIDTH, FHEIGHT);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setResizable(false);

setVisible(true);

}

public static final int FWIDTH = 315;

public static final int FHEIGHT = 380;

}

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.Timer;

import java.util.Random;

@SuppressWarnings("serial")

public class ControlSnake extends JPanel implements ActionListener {

Random rand;

ArrayListPoint list, listBody;

String str, str1;

static boolean key;

int x, y, dx, dy, fx, fy, flag;

int snakeBody;

int speed;

public ControlSnake() {

snakeBody = 1;

str = "上下左右方向键控制 P键暂停...";

str1 = "现在的长度为:" + snakeBody;

key = true;

flag = 1;

speed = 700;

rand = new Random();

list = new ArrayListPoint();

listBody = new ArrayListPoint();

x = 5;

y = 5;

list.add(new Point(x, y));

listBody.add(list.get(0));

dx = 10;

dy = 0;

fx = rand.nextInt(30) * 10 + 5;// 2

fy = rand.nextInt(30) * 10 + 5;// 2

setBackground(Color.WHITE);

setSize(new Dimension(318, 380));

final Timer time = new Timer(speed, this);

time.start();

addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == 37) {

dx = -10;

dy = 0;

} else if (e.getKeyCode() == 38) {

dx = 0;

dy = -10;

} else if (e.getKeyCode() == 39) {

dx = 10;

dy = 0;

} else if (e.getKeyCode() == 40) {

dx = 0;

dy = 10;

} else if (e.getKeyCode() == 80) {

if (flag % 2 == 1) {

time.stop();

}

if (flag % 2 == 0) {

time.start();

}

flag++;

}

}

});

}

public void paint(Graphics g) {

g.setColor(Color.WHITE);

g.fillRect(0, 0, 400, 400);

g.setColor(Color.DARK_GRAY);

g.drawLine(3, 3, 305, 3);

g.drawLine(3, 3, 3, 305);

g.drawLine(305, 3, 305, 305);

g.drawLine(3, 305, 305, 305);

g.setColor(Color.PINK);

for (int i = 0; i listBody.size(); i++) {

g.fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9);

}

g.fillRect(x, y, 9, 9);

g.setColor(Color.ORANGE);

g.fillRect(fx, fy, 9, 9);

g.setColor(Color.DARK_GRAY);

str1 = "现在的长度为:" + snakeBody;

g.drawString(str, 10, 320);

g.drawString(str1, 10, 335);

}

public void actionPerformed(ActionEvent e) {

x += dx;

y += dy;

if (makeOut() == false) {

JOptionPane.showMessageDialog(null, "重新开始......");

speed = 700;

snakeBody = 1;

x = 5;

y = 5;

list.clear();

list.add(new Point(x, y));

listBody.clear();

listBody.add(list.get(0));

dx = 10;

dy = 0;

}

addPoint(x, y);

if (x == fx y == fy) {

speed = (int) (speed * 0.8);//速度增加参数

if (speed 200) {

speed = 100;

}

fx = rand.nextInt(30) * 10 + 5;// 2

fy = rand.nextInt(30) * 10 + 5;// 2

snakeBody++;// 2

} // 2

repaint();

}

public void addPoint(int xx, int yy) {

// 动态的记录最新发生的50步以内的移动过的坐标

// 并画出最新的snakeBody

if (list.size() 100) {//蛇身长度最长为100

list.add(new Point(xx, yy));

} else {

list.remove(0);

list.add(new Point(xx, yy));

}

if (snakeBody == 1) {

listBody.remove(0);

listBody.add(0, list.get(list.size() - 1));

} else {

listBody.clear();

if (list.size() snakeBody) {

for (int i = list.size() - 1; i 0; i--) {

listBody.add(list.get(i));

}

} else {

for (int i = list.size() - 1; listBody.size() snakeBody; i--) {

listBody.add(list.get(i));

}

}

}

}

public boolean makeOut() {

if ((x 3 || y 3) || (x 305 || y 305)) {

return false;

}

for (int i = 0; i listBody.size() - 1; i++) {

for (int j = i + 1; j listBody.size(); j++) {

if (listBody.get(i).equals(listBody.get(j))) {

return false;

}

}

}

return true;

}

}

怎么包装贪吃蛇项目

思路:

首先你要有一条贪吃蛇,哎,就是玩儿。

1.先用Java敲一个贪吃蛇小游戏的程序。

2.把Java程序打包成jar文件包,把jar包打包成exe应用程序

知道思路以后,接下来按照我的详细步骤走,能少踩坑,别问我怎么知道的!!!

一、Java“敲一个”贪吃蛇小游戏

废话不多说,本篇主要讲从java项目到exe应用程序,Java项目的代码在我上传的资源当中——代码-greedy snack.zip

二、将项目打成jar包

如何打包成jar包?

1.手动打可直接执行的jar包(本次不使用)2. 使用intellij idea工具打可直接执行的jar包

1) 打开项目

2)点击 File — 选择 Project Structure,找到“Artifacts” 点击 “+” 选择“JAR” —“Empty”。

3) Name栏可以填入自定义的名字,Output ditectory选择jar包生成目标目录,Available Elements里双击需要添加到jar包的文件,即可添加到左边的jar包目录,如图:

4)点击Create Manifest,选择放置MANIFEST.MF的文件路径,直接默认项目根目录就行,点击OK。

5) 点击Main Class后面选择按钮, 弹出框中选择需要运行程序入口main函数,点击OK,点击OK。

6) 点击菜单中“Build” - "Build Artifacts", 双击弹出框中待生成jar包下面的build即可,如下图

7)至此使用Intellij idea生成可直接执行jar包就完成了。

8)查看生成的jar包,并运行jar包。命令行运行jar包

java -jar xxx.jar

复制代码

三、打包成为exe应用程序

这里首先你要有:

上面生成的jar包 greedy snack.jar

工具:exe4j,一个将jar转换成exe的工具 链接:… 提取码:ijdv

1)安装exe4j,打开安装好的exe4j,进行注册

注册码:L-g782dn2d-1f1yqxx1rv1sqd

2) 点击 Next, 选择JAVA转EXE

3) Next,填入自定义的名字和生成目标文件目录

4) 继续Next,选择启动模式、设置程序名称和程序图标

5) 下方有个选项,需要设置打包后的程序兼容32和64位系统。

勾选,然后Next。

6)然后Next,直到出现如下界面,开始选择jar包以及配置

在VM参数配置的地方加上:-Dfile.encoding=utf-8

添加jar包

设置启动类

Next 配置JRE

Next 选择 Client VM

7)Next 直到如下图界面

桌面多了一个贪吃蛇小游戏3.0.exe文件,至此我们就成功的做出了一个Java贪吃蛇小游戏的exe应用程序

Java 编写贪吃蛇游戏的大体思路是什么?

楼主没有看到蛇移动的本质,蛇虽然是分成很多块,但他们还是一个整体,每一块的移动都和上一块有关,所以不需要对每一块都进行判断。\x0d\x0a原理:\x0d\x0a把蛇身体的每一块看成一个对象(对象存储该块的坐标和相关信息),作为节点存储在线性链表中,再设置一个变量标志蛇的方向(通过按键可以改变)。一般人都是让每一个节点等于他指向的下一个节点,并让头节点改变位置来实现转弯和移动,这个算法复杂度太高(O(n)),实际上只要做两步操作,插入一个头节点,删除一个尾节点就可以了,新插入的头节点位置根据蛇当前的方向决定 用一个数组将蛇头的行径记录下来,然后第二段的下一个方格设置为蛇头走过的方格,这样子蛇走过的路径都是前一段走过的,最后将跟着蛇头走了,比如\x0d\x0a蛇身的路径\x0d\x0a for(int i=snakeLength-1;i0;i--){\x0d\x0arows[i]=rows[i-1];//依次将蛇前面一段走过行的路段赋值给蛇的下一段\x0d\x0acols[i]=cols[i-1];//依次将蛇前面一段走过列的路段赋值给蛇的下一段\x0d\x0a}\x0d\x0afor(int i=1;i

用java开发的大型游戏有哪些

Java开发的大型游戏有:俄罗斯方块、超级泡泡龙、贪吃蛇、钻石情迷、祖玛等。学习Java开发推荐千锋教育,教育培训业务分为大学生技能培训和职后技能培训;高校服务业务主要提供校企合作全解决方案与定制服务;企业服务业务主要为企业提供专业化综合服务,值得信赖。

用java开发的大型游戏有以下几个:

1、俄罗斯方块(Tetris)

经典的益智游戏,几乎是世界上最有影响力的益智游戏之一,游戏本身也很简单,只要不断消减掉落的方块就可以了。这个游戏被模仿了很多个版本,我这里的是EA出的疯狂俄罗斯方块(Tetris Mania)。

2、超级泡泡龙(Super Bubble Bobble)

Taito公司开发的游戏,主角是两只绿色和蓝色的小恐龙,通过吐出泡泡来消减屏幕上的彩球,游戏本身简单易学、妙趣横生,女孩子玩起来会上瘾的。

3、贪吃蛇(Retro Snaker)

诺基亚手机上的一个元老级游戏,这个游戏短小精悍,很具可玩性,特别适合在手机上玩。据称,已经有超过十亿人玩过这个游戏。

4、钻石情迷(Bejeweled)

一个很好玩的益智游戏,有点像“对对碰”,游戏规则很简单,移动相邻的两个钻石,使任一排产生有三个或以上的相同钻石,即消去,上面的钻石靠重力落下。

5、祖玛(Zuma)

一款休闲益智游戏,玩法很像QQ龙珠,将中间吐出来的珠子向着周围连环滚出的同色珠子射打,够三个就能炸裂消除,简单有趣。

想要了解更多有关Java开发的相关信息,推荐咨询千锋教育。千锋教育总部位于北京,目前已在20个城市成立分公司,现有教研讲师团队300余人。公司目前已与国内20000余家IT相关企业建立人才输送合作关系,每年培养泛IT人才近2万人,十年间累计培养超10余万泛IT人才,累计向互联网输出免费教学视频950余套,累积播放量超9800万余次,实力强大,值得选择。

贪吃蛇java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于贪吃蛇Java开源代码、贪吃蛇java的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-01,除非注明,否则均为首码项目网原创文章,转载请注明出处。