java版贪吃蛇代码 java贪吃蛇代码具有登入功能

java贪吃蛇代码注释求解

import java.awt.Color;

成都创新互联成立于2013年,先为浦江等服务建站,浦江等地企业,进行企业商务咨询服务。为浦江企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

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 贪吃蛇的代码

package games;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

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 int blockSpace = 2;// 块之间的间隔

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)

initOther();

}

}

});

this.setBounds(300, 300, 400, 400);

this.setVisible(true);

}

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

private void makeFood() {

int x = 40 + (int) (random() * 30) * 12;

int y = 10 + (int) (random() * 30) * 12;

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

}

// 做一些初始化的工作

private void initOther() {

dir = Direction.EAST;

sleepTime = 500;

my = new MySnake();

makeFood();

total = 3;

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

if (total == 6) {

round = 2;

sleepTime = 300;

} else if (total == 10) {

round = 3;

sleepTime = 200;

} else if (total == 15) {

round = 4;

sleepTime = 100;

} else if (total == 18) {

round = 5;

sleepTime = 50;

} else if (total == 20) {

round = 6;

sleepTime = 20;

} else if (total 21) {

round = 7;

sleepTime = 15;

}

}

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

public void paintComponent(Graphics g) {

g.setColor(Color.PINK);

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

g.setColor(Color.BLACK);

g.drawRect(40, 10, 358, 360);

if (go) {

my.move();

my.draw(g);

g.setFont(new Font("黑体", Font.BOLD, 20));

g.drawString("您的得分:" + (total * 10) + " 第" + round + "关", 40,

400);

} else {

g.setFont(new Font("黑体", Font.BOLD, 20));

g.drawString("游戏结束,按回车(ENTER)键重玩!", 40, 440);

}

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

list.add(new Rectangle(160 + 24, 130, 10, 10));

list.add(new Rectangle(160 + 12, 130, 10, 10));

list.add(new Rectangle(160, 130, 10, 10));

}

// 蛇移动的方法

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

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.NORTH) {

Rectangle rec = list.get(0);

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

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

list.add(0, rec1);

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

Rectangle rec = list.get(0);

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

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

list.add(0, rec1);

}

if (isEat()) {

handleRound();

makeFood();

} else {

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

if (dir == Direction.EAST) {

if (temp.x == 388)

return true;

else {

Rectangle comp = new Rectangle(temp.x + 12, temp.y, 10, 10);

for (Rectangle rec : list) {

if (rec.contains(comp))

return true;

}

}

return false;

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

if (temp.x == 40)

return true;

else {

Rectangle comp = new Rectangle(temp.x - 12, temp.y, 10, 10);

for (Rectangle rec : list) {

if (rec.contains(comp))

return true;

}

}

return false;

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

if (temp.y == 10)

return true;

else {

Rectangle comp = new Rectangle(temp.x, temp.y - 12, 10, 10);

for (Rectangle rec : list) {

if (rec.contains(comp))

return true;

}

}

return false;

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

if (temp.y == 358)

return true;

else {

Rectangle comp = new Rectangle(temp.x, temp.y + 12, 10, 10);

for (Rectangle rec : list) {

if (rec.contains(comp))

return true;

}

}

return false;

} else {

return false;

}

}

// 把自己画出来

public void draw(Graphics g) {

for (Rectangle rec : list) {

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.setBounds(300, 300, 500, 500);

jf.setVisible(true);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

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

enum Direction {

EAST, SOUTH, WEST, NORTH;

}

高手帮忙解释一下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版贪吃蛇代码 java贪吃蛇代码具有登入功能
标题网址:http://bzwzjz.com/article/ddoiodj.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 高端网站设计 重庆外贸网站建设 定制网站制作 成都做网站建设公司 手机网站建设 网站设计 网站制作 营销网站建设 四川成都网站制作 成都响应式网站建设 营销型网站建设 自适应网站建设 成都网站建设公司 成都网站设计 商城网站建设 成都网站设计 营销网站建设 网站建设方案 成都商城网站建设 网站建设方案 成都网站设计 网站制作报价