大橙子网站建设,新征程启航

为企业提供网站建设、域名注册、服务器等服务

java贪吃蛇代码在哪里 java贪吃蛇代码详解

贪吃蛇 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;

}

}

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

public

class

Snake

implements

Data//蛇类实现了data接口

{

public

Snake()

{

array.add(new

Point(10,

10));//

array.add(new

Point(10,

11));//

array.add(new

Point(10,

12));//

array.add(new

Point(10,

13));//

array.add(new

Point(10,

14));//这五句话是构造一个蛇,这条蛇由五个坐标点连成

currentFlag

=UPFLAG

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

lifeFlag

=

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

}

public

void

move()//蛇的运动函数

{

tair

=

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

-

1);//得到蛇的尾巴

int

len

=

array.size()

-

2;

for(int

i

=

len;

i

=

0;

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

{

Point

leftPoint

=

(Point)array.get(i);

Point

rightPoint

=

(Point)array.get(i

+

1);

rightPoint.x

=

leftPoint.x;

rightPoint.y

=

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

}

}

public

void

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

{

if(currentFlag

==

RIGHTFLAG

||

currentFlag

==

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

{

return;

}

move();

Point

point

=

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

//得到蛇头部

point.x

=

point.x

-

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

point.y

=

point.y;

if(point.x

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

{

lifeFlag

=

false;

}

currentFlag

=

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

}

java贪吃蛇代码注释求解

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

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:可以看作蛇运动的速度

* L = 1,R = 2, U = 3, D = 4 左右上下代码

*/

public static final int WIDTH = 800, HEIGHT = 600, SLEEPTIME = 200, L = 1,R = 2, U = 3, D = 4;

BufferedImage offersetImage= new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_3BYTE_BGR);;

Rectangle rect = new Rectangle(20, 40, 15 * 50, 15 * 35);

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

//映射上下左右4个键位

case KeyEvent.VK_LEFT:

snake.dir = L;

break;

case KeyEvent.VK_RIGHT:

snake.dir = R;

break;

case KeyEvent.VK_UP:

snake.dir = U;

break;

case KeyEvent.VK_DOWN:

snake.dir = D;

}

}

});

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

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setVisible(true);

//启动线程,开始执行

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

}

public void paint(Graphics g) {

Graphics2D g2d = (Graphics2D) offersetImage.getGraphics();

g2d.setColor(Color.white);

g2d.fillRect(0, 0, WIDTH, HEIGHT);

g2d.setColor(Color.black);

g2d.drawRect(rect.x, rect.y, rect.width, rect.height);

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

if (snake.hit(node)) {

createNode();

}

snake.draw(g2d);

node.draw(g2d);

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

}

class ThreadUpadte implements Runnable {

public void run() {

//无限重绘画面

while (true) {

try {

Thread.sleep(SLEEPTIME);

repaint(); //

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

/**

* 创建食物

*/

public void createNode() {

//随机食物的出现位置

int x = (int) (Math.random() * 650) + 50,y = (int) (Math.random() * 500) + 50;

Color color = Color.blue;

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

}

public static void main(String args[]) {

new InterFace();

}

}

/**

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

*/

class Node {

int x, y, width = 15, height = 15;

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 void draw(Graphics2D g2d) {

g2d.setColor(color);

g2d.drawRect(x, y, width, height);

}

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;

nodes.add(new Node(20 + 150, 40 + 150));

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

addNode();

return true;

}

}

return false;

}

public void draw(Graphics2D g2d) {

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

nodes.get(i).draw(g2d);

}

move();

}

public void move() {

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

addNode();

}

public synchronized void addNode() {

Node nodeTempNode = nodes.get(0);

//如果方向

switch (dir) {

case InterFace.L:

//判断是否会撞墙

if (nodeTempNode.x = 20) {

nodeTempNode = new Node(20 + 15 * 50, nodeTempNode.y);

}

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

nodeTempNode.y));

break;

case InterFace.R:

//判断是否会撞墙

if (nodeTempNode.x = 20 + 15 * 50 - nodeTempNode.width) {

nodeTempNode = new Node(20 - nodeTempNode.width, nodeTempNode.y);

}

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

nodeTempNode.y));

break;

case InterFace.U:

//判断是否会撞墙

if (nodeTempNode.y = 40) {

nodeTempNode = new Node(nodeTempNode.x, 40 + 15 * 35);

}

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

break;

case InterFace.D:

//判断是否会撞墙

if (nodeTempNode.y = 40 + 15 * 35 - nodeTempNode.height) {

nodeTempNode = new Node(nodeTempNode.x,40 - nodeTempNode.height);

}

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

break;

}

}

}

求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代码在哪有?

import java.util.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

public class SnakeGame{

public static void main(String[] args){

SnakeFrame frame = new SnakeFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

//----------记录状态的线程

class StatusRunnable implements Runnable{

public StatusRunnable(Snake snake,JLabel statusLabel,JLabel scoreLabel){

this.statusLabel = statusLabel;

this.scoreLabel = scoreLabel;

this.snake = snake;

}

public void run(){

String sta = "";

String spe = "";

while(true){

switch(snake.status){

case Snake.RUNNING:

sta = "Running";break;

case Snake.PAUSED:

sta = "Paused";break;

case Snake.GAMEOVER:

sta = "GameOver";break;

}

statusLabel.setText(sta);

scoreLabel.setText(""+snake.score);

try{

Thread.sleep(100);

}

catch(Exception e){

}

}

}

private JLabel scoreLabel;

private JLabel statusLabel;

private Snake snake;

}

//----------蛇运动以及记录分数的线程

class SnakeRunnable implements Runnable{

public SnakeRunnable(Snake snake,Component component){

this.snake = snake;

this.component = component;

}

public void run(){

while(true){

try{

snake.move();

component.repaint();

Thread.sleep(snake.speed);

}

catch(Exception e){

}

}

}

private Snake snake;

private Component component;

}

class Snake{

boolean isRun;//---------是否运动中

ArrayListNode body;//-----蛇体

Node food;//--------食物

int derection;//--------方向

int score ;

int status;

int speed;

public static final int SLOW = 500;

public static final int MID = 300;

public static final int FAST = 100;

public static final int RUNNING = 1;

public static final int PAUSED = 2;

public static final int GAMEOVER = 3;

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 Snake(){

speed = Snake.SLOW;

score = 0;

isRun = false;

status = Snake.PAUSED;

derection = Snake.RIGHT;

body = new ArrayListNode();

body.add(new Node(60,20));

body.add(new Node(40,20));

body.add(new Node(20,20));

makeFood();

}

//------------判断食物是否被蛇吃掉

//-------如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉

private boolean isEaten(){

Node head = body.get(0);

if(derection == Snake.RIGHT (head.x+Node.W) == food.xhead.y == food.y )

return true;

if(derection == Snake.LEFT (head.x-Node.W) == food.xhead.y == food.y )

return true;

if(derection == Snake.UP head.x == food.x(head.y-Node.H) == food.y )

return true;

if(derection == Snake.DOWN head.x == food.x(head.y+Node.H) == food.y )

return true;

else return false;

}

//----------是否碰撞

private boolean isCollsion(){

Node node = body.get(0);

//------------碰壁

if(derection == Snake.RIGHT node.x == 280)

return true;

if(derection == Snake.UP node.y == 0)

return true;

if(derection == Snake.LEFT node.x == 0)

return true;

if(derection == Snake.DOWN node.y == 380)

return true;

//--------------蛇头碰到蛇身

Node temp = null;

int i = 0;

for(i = 3;ibody.size();i++)

{

temp = body.get(i);

if(temp.x == node.x temp.y==node.y)

break;

}

if(i body.size())

return true;

else return false;

}

//-------在随机的地方产生食物

public void makeFood(){

Node node = new Node(0,0);

boolean isInBody = true;

int x = 0,y = 0;

int X = 0,Y = 0;

int i = 0;

while(isInBody){

x = (int)(Math.random()*15);

y = (int)(Math.random()*20);

X = x*Node.W;

Y = y*Node.H;

for(i = 0;i body.size();i ++){

if( X == body.get(i).x Y == body.get(i).y)

break;

}

if(i body.size())

isInBody = true;

else

isInBody = false;

}

food = new Node(X,Y);

}

//---------改变运行方向

public void changeDerection(int newDer){

if(derection%2 != newDer%2)//-------如果与原来方向相同或相反,则无法改变

derection = newDer;

}

public void move(){

if(isEaten()){//-----如果食物被吃掉

body.add(0,food);//--------把食物当成蛇头成为新的蛇体

score += 10;

makeFood();//--------产生食物

}

else if(isCollsion())//---------如果碰壁或自身

{

isRun = false;

status = Snake.GAMEOVER;//-----结束

}

else if(isRun){//----正常运行(不吃食物,不碰壁,不碰自身)

Node node = body.get(0);

int X = node.x;

int Y = node.y;

//------------蛇头按运行方向前进一个单位

switch(derection){

case 1:

X-=Node.W;

break;

case 2:

Y-=Node.H;

break;

case 3:

X+=Node.W;

break;

case 4:

Y+=Node.H;

break;

}

body.add(0,new Node(X,Y));

//---------------去掉蛇尾

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

}

}

}

//---------组成蛇身的单位,食物

class Node

{

public static final int W = 20;

public static final int H = 20;

int x;

int y;

public Node(int x,int y){

this.x = x;

this.y = y;

}

}

//------画板

class SnakePanel extends JPanel{

Snake snake;

public SnakePanel(Snake snake){

this.snake = snake;

}

public void paintComponent(Graphics g){

super.paintComponent(g);

Node node = null;

for(int i = 0;i snake.body.size();i++){//---红蓝间隔画蛇身

if(i%2 == 0)

g.setColor(Color.blue);

else g.setColor(Color.yellow);

node = snake.body.get(i);

g.fillRect(node.x,node.y,node.H,node.W);//*******************试用*********************

}

node = snake.food;

g.setColor(Color.red);

g.fillRect(node.x,node.y,node.H,node.W);

}

}

class SnakeFrame extends JFrame{

private JLabel statusLabel;

private JLabel speedLabel;

private JLabel scoreLabel;

private JPanel snakePanel;

private Snake snake;

private JMenuBar bar;

JMenu gameMenu;

JMenu helpMenu;

JMenu speedMenu;

JMenuItem newItem;

JMenuItem pauseItem;

JMenuItem beginItem;

JMenuItem helpItem;

JMenuItem aboutItem;

JMenuItem slowItem;

JMenuItem midItem;

JMenuItem fastItem;

public SnakeFrame(){

init();

ActionListener l = new ActionListener(){

public void actionPerformed(ActionEvent e){

if(e.getSource()==pauseItem)

snake.isRun = false;

if(e.getSource()==beginItem)

snake.isRun = true;

if(e.getSource()==newItem)

{ newGame();

}

//------------菜单控制运行速度

if(e.getSource()==slowItem)

{

snake.speed = Snake.SLOW;

speedLabel.setText("Slow");

}

if(e.getSource()==midItem)

{

snake.speed = Snake.MID;

speedLabel.setText("Mid");

}

if(e.getSource()==fastItem)

{

snake.speed = Snake.FAST;

speedLabel.setText("Fast");

}

}

};

pauseItem.addActionListener(l);

beginItem.addActionListener(l);

newItem.addActionListener(l);

aboutItem.addActionListener(l);

slowItem.addActionListener(l);

midItem.addActionListener(l);

fastItem.addActionListener(l);

addKeyListener(new KeyListener(){

public void keyPressed(KeyEvent e){

switch(e.getKeyCode()){

//------------方向键改变蛇运行方向

case KeyEvent.VK_DOWN://

snake.changeDerection(Snake.DOWN);

break;

case KeyEvent.VK_UP://

snake.changeDerection(Snake.UP);

break;

case KeyEvent.VK_LEFT://

snake.changeDerection(Snake.LEFT);

break;

case KeyEvent.VK_RIGHT://

snake.changeDerection(Snake.RIGHT);

break;

//空格键,游戏暂停或继续

case KeyEvent.VK_SPACE://

if(snake.isRun == true)

{snake.isRun = false;snake.status = Snake.PAUSED;break;}

if(snake.isRun == false)

{snake.isRun = true; snake.status = Snake.RUNNING;break;}

}

}

public void keyReleased(KeyEvent k){

}

public void keyTyped(KeyEvent k){

}

});

}

private void init(){

speedLabel = new JLabel();

snake = new Snake();

setSize(380,460);

setLayout(null);

this.setResizable(false);

bar = new JMenuBar();

gameMenu = new JMenu("Game");

newItem= new JMenuItem("New Game");

gameMenu.add(newItem);

pauseItem = new JMenuItem("Pause");

gameMenu.add(pauseItem);

beginItem = new JMenuItem("Continue");

gameMenu.add(beginItem);

helpMenu = new JMenu("Help");

aboutItem = new JMenuItem("About");

helpMenu.add(aboutItem);

speedMenu = new JMenu("Speed");

slowItem = new JMenuItem("Slow");

fastItem = new JMenuItem("Fast");

midItem = new JMenuItem("Middle");

speedMenu.add(slowItem);

speedMenu.add(midItem);

speedMenu.add(fastItem);

bar.add(gameMenu);

bar.add(helpMenu);

bar.add(speedMenu);

setJMenuBar(bar);

statusLabel = new JLabel();

scoreLabel = new JLabel();

snakePanel = new JPanel();

snakePanel.setBounds(0,0,300,400);

snakePanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));

add(snakePanel);

statusLabel.setBounds(300,25,60,20);

add(statusLabel);

scoreLabel.setBounds(300,20,60,20);

add(scoreLabel);

JLabel temp = new JLabel("状态");

temp.setBounds(310,5,60,20);

add(temp);

temp = new JLabel("分数");

temp.setBounds(310,105,60,20);

add(temp);

temp = new JLabel("速度");

temp.setBounds(310,55,60,20);

add(temp);

speedLabel.setBounds(310,75,60,20);

add(speedLabel);

}

private void newGame(){

this.remove(snakePanel);

this.remove(statusLabel);

this.remove(scoreLabel);

speedLabel.setText("Slow");

statusLabel = new JLabel();

scoreLabel = new JLabel();

snakePanel = new JPanel();

snake = new Snake();

snakePanel = new SnakePanel(snake);

snakePanel.setBounds(0,0,300,400);

snakePanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));

Runnable r1 = new SnakeRunnable(snake,snakePanel);

Runnable r2 = new StatusRunnable(snake,statusLabel,scoreLabel);

Thread t1 = new Thread(r1);

Thread t2 = new Thread(r2);

t1.start();

t2.start();

add(snakePanel);

statusLabel.setBounds(310,25,60,20);

add(statusLabel);

scoreLabel.setBounds(310,125,60,20);

add(scoreLabel);

}

}


新闻标题:java贪吃蛇代码在哪里 java贪吃蛇代码详解
文章分享:http://dzwzjz.com/article/doopscg.html
在线咨询
服务热线
服务热线:028-86922220
TOP