网站首页 > 文章中心 > 其它

java贪吃蛇代码及界面

作者:小编 更新时间:2023-10-18 13:48:47 浏览量:183人看过

Java贪吃蛇的界面背景代码怎么写

这是一个最基本的界面,下面又不会的地方去查API

java贪吃蛇代码及界面-图1

import java.awt.*;

import javax.swing.*;

public class View {

JFrame frame;

Container c;

JLabel backgound;

JButton start;

JLabel help;

public void first(){

frame=new JFrame("我的贪吃蛇");

c=frame.getContentPane();

java贪吃蛇代码及界面-图2

c.setLayout(null);

backgound=new JLabel();

c.add(backgound);

backgound.setLayout(null);

start=new JButton();

start.setCursor(new Cursor(Cursor.HAND_CURSOR));

start.setBorder(null);

start.setContentAreaFilled(false);

backgound.add(start);

help = new JLabel();

help.setText("游戏帮助");

help.setForeground(Color.black);

help.setFont(f1);

backgound.add(help);

frame.setResizable(false);

frame.setVisible(true);

}

求一份java 贪吃蛇的代码

package games;

import java.awt.event.*;

import java.util.*;

import static java.lang.Math.*;//静态导入

/*

* 此类是贪吃蛇的简单实现方法

* 自己可以加入在开始时的设置,比如

* 选关,初始的蛇的长度等等

*/

public class Snake extends JPanel {

private static final long serialVersionUID = 1L;

private Direction dir;// 要走的方向

private int blockWidth = 10;// 块大小

private long sleepTime;// 重画的进间间隔

private MySnake my;

private int total;// 代表蛇的长度

private Rectangle food;// 代表蛇的食物

private volatile boolean go;

private int round;// 表示第几关

public Snake(JFrame jf) {

initOther();

// 为顶级窗口类JFrame添加事件处理函数

jf.addKeyListener(new KeyAdapter() {

public void keyReleased(KeyEvent ke) {

int code = ke.getKeyCode();

if (code == KeyEvent.VK_RIGHT) {

if (dir != Direction.WEST)

dir = Direction.EAST;

else if (code == KeyEvent.VK_LEFT) {

if (dir != Direction.EAST)

dir = Direction.WEST;

else if (code == KeyEvent.VK_UP) {

if (dir != Direction.SOUTH)

dir = Direction.NORTH;

else if (code == KeyEvent.VK_DOWN) {

if (dir != Direction.NORTH)

dir = Direction.SOUTH;

} else if (code == KeyEvent.VK_ENTER) {

if (!go)

});

this.setVisible(true);

// 随机生成一个食物的位置

private void makeFood() {

food = new Rectangle(x, y, 10, 10);

// 做一些初始化的工作

private void initOther() {

my = new MySnake();

makeFood();

round = 1;

new Thread(new Runnable() {

public void run() {

go = true;

while (go) {

try {

Thread.sleep(sleepTime);

repaint();

} catch (Exception exe) {

exe.printStackTrace();

}).start();

// 处理多少关的函数

private void handleRound() {

} else if (total == 10) {

sleepTime = 100;

// 把自己的组件全部画出来

public void paintComponent(Graphics g) {

g.setColor(Color.PINK);

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

g.setColor(Color.BLACK);

if (go) {

my.move();

my.draw(g);

} else {

g.setColor(Color.RED);

g.fillRect(food.x, food.y, food.width, food.height);

private class MySnake {

private ArrayListRectangle list;

public MySnake() {

list = new ArrayListRectangle();

// 蛇移动的方法

public void move() {

if (isDead()) {

go = false;

return;

if (dir == Direction.EAST) {

Rectangle rec = list.get(0);

Rectangle rec1 = new Rectangle(rec.x

+ (blockWidth + blockSpace), rec.y, rec.width,

rec.height);

list.add(0, rec1);

} else if (dir == Direction.WEST) {

- (blockWidth + blockSpace), rec.y, rec.width,

} else if (dir == Direction.NORTH) {

Rectangle rec1 = new Rectangle(rec.x, rec.y

- (blockWidth + blockSpace), rec.width, rec.height);

} else if (dir == Direction.SOUTH) {

+ (blockWidth + blockSpace), rec.width, rec.height);

if (isEat()) {

handleRound();

list.remove(list.size() - 1);

// 判断是否吃到了食物

private boolean isEat() {

if (list.get(0).contains(food)) {

total++;

return true;

} else

return false;

// 判断是否死了,如果碰壁或者自己吃到自己都算死了

private boolean isDead() {

Rectangle temp = list.get(0);

else {

for (Rectangle rec : list) {

if (rec.contains(comp))

if (temp.y == 10)

// 把自己画出来

public void draw(Graphics g) {

g.fillRect(rec.x, rec.y, rec.width, rec.height);

public static void main(String arsg[]) {

JFrame jf = new JFrame("贪吃蛇");

Snake s = new Snake(jf);

jf.getContentPane().add(s, BorderLayout.CENTER);

jf.setVisible(true);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// 定义一个枚举,在此也可以用接口或者常量值代替

enum Direction {

EAST, SOUTH, WEST, NORTH;

Java贪吃蛇的界面背景的代码怎么写

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

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

public SnakeMIDlet() {

}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 snakeNum;

int direction;

/*移动方向*/

/**向上*/

private final int DIRECTION_UP = 0;

/**向下*/

private final int DIRECTION_DOWN = 1;

/**向左*/

/**向右*/

int width;

/**游戏区域高度*/

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

boolean isPaused = false;

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

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

/**食物的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(){

//初始化节点数量

//初始化节点数据

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

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

//初始化移动方向

direction = DIRECTION_RIGHT;

//初始化食物坐标

foodX = 100;

foodY = 100;

}protected void paint(Graphics g) {

//清屏

g.setColor(0xffffff);

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

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

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;

case DIRECTION_LEFT:

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

case DIRECTION_RIGHT:

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

/**

* 吃掉食物,自身增长

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))

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

b = false;

* 判断游戏是否结束

* 结束条件:

* 1、蛇头超出边界

private boolean isGameOver(){

//边界判别

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

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

//碰到自身

java贪吃蛇代码及界面-图3

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

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

* 事件处理

public void keyPressed(int keyCode){

int action = this.getGameAction(keyCode);

//改变方向

switch(action){

case UP:

if(direction != DIRECTION_DOWN){

direction = DIRECTION_UP;

case DOWN:

if(direction != DIRECTION_UP){

direction = DIRECTION_DOWN;

case LEFT:

if(direction != DIRECTION_RIGHT){

direction = DIRECTION_LEFT;

case RIGHT:

if(direction != DIRECTION_LEFT){

case FIRE:

//暂停和继续

isPaused = !isPaused;

* 线程方法

* 使用精确延时

public void run(){

try{

while (isRun) {

//开始时间

long start = System.currentTimeMillis();

if(!isPaused){

//吃食物

eatFood();

//移动

move(direction);

//结束游戏

if(isGameOver()){

//控制闪烁

b = !b;

//重新绘制

long end = System.currentTimeMillis();

//延时

if(end - start SLEEP_TIME){

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

}catch(Exception e){}

java贪吃蛇代码注释求解

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Rectangle;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.image.BufferedImage;

import java.util.ArrayList;

import java.util.List;

import javax.swing.JFrame;

public class InterFace extends JFrame {

* WIDTH:宽

* HEIGHT:高

* SLEEPTIME:可以看作蛇运动的速度

Snake snake;

Node node;

public InterFace() {

//创建"蛇"对象

snake = new Snake(this);

//创建"食物"对象

createNode();

this.setBounds(100, 100, WIDTH, HEIGHT);

//添加键盘监听器

this.addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent arg0) {

System.out.println(arg0.getKeyCode());

switch (arg0.getKeyCode()) {

case KeyEvent.VK_LEFT:

snake.dir = L;

case KeyEvent.VK_RIGHT:

snake.dir = R;

case KeyEvent.VK_UP:

snake.dir = U;

case KeyEvent.VK_DOWN:

snake.dir = D;

this.setTitle("贪吃蛇 0.1 By : Easy");

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

//启动线程,开始执行

new Thread(new ThreadUpadte()).start();

public void paint(Graphics g) {

//如果蛇碰撞(吃)到食物,则创建新食物

if (snake.hit(node)) {

g.drawImage(offersetImage, 0, 0, null);

class ThreadUpadte implements Runnable {

//无限重绘画面

while (true) {

Thread.sleep(SLEEPTIME);

repaint(); //

} catch (InterruptedException e) {

e.printStackTrace();

* 创建食物

public void createNode() {

//随机食物的出现位置

Color color = Color.blue;

node = new Node(x, y, color);

public static void main(String args[]) {

new InterFace();

* 节点类(包括食物和蛇的身躯组成节点)

class Node {

Color color;

public Node(int x, int y, Color color) {

this(x, y);

this.color = color;

public Node(int x, int y) {

this.x = x;

this.y = y;

this.color = color.black;

public Rectangle getRect() {

return new Rectangle(x, y, width, height);

* 蛇

class Snake {

public ListNode nodes = new ArrayListNode();

InterFace interFace;

int dir=InterFace.R;

public Snake(InterFace interFace) {

this.interFace = interFace;

addNode();

* 是否碰撞到食物

* @return true 是 false 否

public boolean hit(Node node) {

//遍历整个蛇体是否与食物碰撞

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

if (nodes.get(i).getRect().intersects(node.getRect())) {

move();

nodes.remove((nodes.size() - 1));

public synchronized void addNode() {

Node nodeTempNode = nodes.get(0);

//如果方向

switch (dir) {

case InterFace.L:

//判断是否会撞墙

nodes.add(0, new Node(nodeTempNode.x - nodeTempNode.width,

nodeTempNode.y));

case InterFace.R:

nodes.add(0, new Node(nodeTempNode.x + nodeTempNode.width,

case InterFace.U:

nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y - nodeTempNode.height));

case InterFace.D:

nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y + nodeTempNode.height));

高手帮忙解释一下JAVA 贪食蛇游戏中蛇的代码

public

class

Snake

implements

Data//蛇类实现了data接口

{

Snake()

array.add(new

Point(10,

①.0));//

①.1));//

currentFlag

=UPFLAG

;//当前的运动方向设为向上

lifeFlag

=

true;//当前蛇的生命设为活着

void

move()//蛇的运动函数

tair

(Point)array.get(array.size()

-

①.);//得到蛇的尾巴

int

len

array.size()

for(int

i

len;

0;

i--)//这个for循环把蛇的每一个点都坐标偏移即运动了

Point

leftPoint

(Point)array.get(i);

rightPoint

(Point)array.get(i

+

①.);

rightPoint.x

leftPoint.x;

rightPoint.y

leftPoint.y;//每一个右边的点等于其左边的点,像蛇那样的一缩一张的运动

moveHeadLeft()//把蛇的头部转向左边

if(currentFlag

==

RIGHTFLAG

||

LEFTFLAG)//如果运动方向设为向左或向右则不执行

point

(Point)(array.get(0));

//得到蛇头部

point.x

①.;//蛇头部横坐标减一,纵坐标不变

point.y

point.y;

if(point.x

LEFT)//如果蛇头部不能再左,就不执行

false;

LEFTFLAG;//将蛇运动方向改为左

以上就是土嘎嘎小编为大家整理的java贪吃蛇代码及界面相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章