免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

java貪吃蛇雙人代碼,java實(shí)現(xiàn)貪吃蛇

求java貪吃蛇的編程,并有注釋

J2ME貪吃蛇源代碼——200行左右,包含詳細(xì)注釋 package snake;import javax.microedition.midlet.*;

創(chuàng)新互聯(lián)公司是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十多年品質(zhì),值得信賴!

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{

/**存儲(chǔ)貪吃蛇節(jié)點(diǎn)坐標(biāo),其中第二維下標(biāo)為0的代表x坐標(biāo),第二維下標(biāo)是1的代表y坐標(biāo)*/

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

/**已經(jīng)使用的節(jié)點(diǎn)數(shù)量*/

int snakeNum;

/**貪吃蛇運(yùn)動(dòng)方向,0代表向上,1代表向下,2代表向左,3代表向右*/

int direction;

/*移動(dòng)方向*/

/**向上*/

private final int DIRECTION_UP = 0;

/**向下*/

private final int DIRECTION_DOWN = 1;

/**向左*/

private final int DIRECTION_LEFT = 2;

/**向右*/

private final int DIRECTION_RIGHT = 3;/**游戲區(qū)域?qū)挾?/

int width;

/**游戲區(qū)域高度*/

int height;/**蛇身單元寬度*/

private final byte SNAKEWIDTH = 4;/**是否處于暫停狀態(tài),true代表暫停*/

boolean isPaused = false;

/**是否處于運(yùn)行狀態(tài),true代表運(yùn)行*/

boolean isRun = true;/**時(shí)間間隔*/

private final int SLEEP_TIME = 300;

/**食物的X坐標(biāo)*/

int foodX;

/**食物的Y坐標(biāo)*/

int foodY;

/**食物的閃爍控制*/

boolean b = true;

/**Random對(duì)象*/

Random random = new Random();

public SnakeCanvas() {

//初始化

init();

width = this.getWidth();

height = this.getHeight();

//啟動(dòng)線程

new Thread(this).start();

}/**

* 初始化開(kāi)始數(shù)據(jù)

*/

private void init(){

//初始化節(jié)點(diǎn)數(shù)量

snakeNum = 7;

//初始化節(jié)點(diǎn)數(shù)據(jù)

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

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

snake[i][1] = 40;

}

//初始化移動(dòng)方向

direction = DIRECTION_RIGHT;

//初始化食物坐標(biāo)

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

//蛇身移動(dòng)

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

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

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

}//第一個(gè)單元格移動(dòng)

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;

}

}

/**

* 吃掉食物,自身增長(zhǎng)

*/

private void eatFood(){

//判別蛇頭是否和食物重疊

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

snakeNum++;

generateFood();

}

}

/**

* 產(chǎn)生食物

* 說(shuō)明:食物的坐標(biāo)必須位于屏幕內(nèi),且不能和蛇身重合

*/

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;

}

}

}

/**

* 判斷游戲是否結(jié)束

* 結(jié)束條件:

* 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:

//暫停和繼續(xù)

isPaused = !isPaused;

break;

}

}/**

* 線程方法

* 使用精確延時(shí)

*/

public void run(){

try{

while (isRun) {

//開(kāi)始時(shí)間

long start = System.currentTimeMillis();

if(!isPaused){

//吃食物

eatFood();

//移動(dòng)

move(direction);

//結(jié)束游戲

if(isGameOver()){

break;

}

//控制閃爍

b = !b;

}

//重新繪制

repaint();

long end = System.currentTimeMillis();

//延時(shí)

if(end - start SLEEP_TIME){

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

}

}

}catch(Exception e){}

}

}

求一段JAVA編寫的貪吃蛇小程序源代碼

用MVC方式實(shí)現(xiàn)的貪吃蛇游戲,共有4個(gè)類。運(yùn)行GreedSnake運(yùn)行即可。主要是觀察者模式的使用,我已經(jīng)添加了很多注釋了。

1、

/*

* 程序名稱:貪食蛇

* 原作者:BigF

* 修改者:algo

* 說(shuō)明:我以前也用C寫過(guò)這個(gè)程序,現(xiàn)在看到BigF用Java寫的這個(gè),發(fā)現(xiàn)雖然作者自稱是Java的初學(xué)者,

* 但是明顯編寫程序的素養(yǎng)不錯(cuò),程序結(jié)構(gòu)寫得很清晰,有些細(xì)微得地方也寫得很簡(jiǎn)潔,一時(shí)興起之

* 下,我認(rèn)真解讀了這個(gè)程序,發(fā)現(xiàn)數(shù)據(jù)和表現(xiàn)分開(kāi)得很好,而我近日正在學(xué)習(xí)MVC設(shè)計(jì)模式,

* 因此嘗試把程序得結(jié)構(gòu)改了一下,用MVC模式來(lái)實(shí)現(xiàn),對(duì)源程序得改動(dòng)不多。

* 我同時(shí)也為程序增加了一些自己理解得注釋,希望對(duì)大家閱讀有幫助。

*/

package mvcTest;

/**

* @author WangYu

* @version 1.0

* Description:

* /pre

* Create on :Date :2005-6-13 Time:15:57:16

* LastModified:

* History:

*/

public class GreedSnake {

public static void main(String[] args) {

SnakeModel model = new SnakeModel(20,30);

SnakeControl control = new SnakeControl(model);

SnakeView view = new SnakeView(model,control);

//添加一個(gè)觀察者,讓view成為model的觀察者

model.addObserver(view);

(new Thread(model)).start();

}

}

-------------------------------------------------------------

2、

package mvcTest;

//SnakeControl.java

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

/**

* MVC中的Controler,負(fù)責(zé)接收用戶的操作,并把用戶操作通知Model

*/

public class SnakeControl implements KeyListener{

SnakeModel model;

public SnakeControl(SnakeModel model){

this.model = model;

}

public void keyPressed(KeyEvent e) {

int keyCode = e.getKeyCode();

if (model.running){ // 運(yùn)行狀態(tài)下,處理的按鍵

switch (keyCode) {

case KeyEvent.VK_UP:

model.changeDirection(SnakeModel.UP);

break;

case KeyEvent.VK_DOWN:

model.changeDirection(SnakeModel.DOWN);

break;

case KeyEvent.VK_LEFT:

model.changeDirection(SnakeModel.LEFT);

break;

case KeyEvent.VK_RIGHT:

model.changeDirection(SnakeModel.RIGHT);

break;

case KeyEvent.VK_ADD:

case KeyEvent.VK_PAGE_UP:

model.speedUp();

break;

case KeyEvent.VK_SUBTRACT:

case KeyEvent.VK_PAGE_DOWN:

model.speedDown();

break;

case KeyEvent.VK_SPACE:

case KeyEvent.VK_P:

model.changePauseState();

break;

default:

}

}

// 任何情況下處理的按鍵,按鍵導(dǎo)致重新啟動(dòng)游戲

if (keyCode == KeyEvent.VK_R ||

keyCode == KeyEvent.VK_S ||

keyCode == KeyEvent.VK_ENTER) {

model.reset();

}

}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}

}

-------------------------------------------------------------

3、

/*

*

*/

package mvcTest;

/**

* 游戲的Model類,負(fù)責(zé)所有游戲相關(guān)數(shù)據(jù)及運(yùn)行

* @author WangYu

* @version 1.0

* Description:

* /pre

* Create on :Date :2005-6-13 Time:15:58:33

* LastModified:

* History:

*/

//SnakeModel.java

import javax.swing.*;

import java.util.Arrays;

import java.util.LinkedList;

import java.util.Observable;

import java.util.Random;

/**

* 游戲的Model類,負(fù)責(zé)所有游戲相關(guān)數(shù)據(jù)及運(yùn)行

*/

class SnakeModel extends Observable implements Runnable {

boolean[][] matrix; // 指示位置上有沒(méi)蛇體或食物

LinkedList nodeArray = new LinkedList(); // 蛇體

Node food;

int maxX;

int maxY;

int direction = 2; // 蛇運(yùn)行的方向

boolean running = false; // 運(yùn)行狀態(tài)

int timeInterval = 200; // 時(shí)間間隔,毫秒

double speedChangeRate = 0.75; // 每次得速度變化率

boolean paused = false; // 暫停標(biāo)志

int score = 0; // 得分

int countMove = 0; // 吃到食物前移動(dòng)的次數(shù)

// UP and DOWN should be even

// RIGHT and LEFT should be odd

public static final int UP = 2;

public static final int DOWN = 4;

public static final int LEFT = 1;

public static final int RIGHT = 3;

public SnakeModel( int maxX, int maxY) {

this.maxX = maxX;

this.maxY = maxY;

reset();

}

public void reset(){

direction = SnakeModel.UP; // 蛇運(yùn)行的方向

timeInterval = 200; // 時(shí)間間隔,毫秒

paused = false; // 暫停標(biāo)志

score = 0; // 得分

countMove = 0; // 吃到食物前移動(dòng)的次數(shù)

// initial matirx, 全部清0

matrix = new boolean[maxX][];

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

matrix[i] = new boolean[maxY];

Arrays.fill(matrix[i], false);

}

// initial the snake

// 初始化蛇體,如果橫向位置超過(guò)20個(gè),長(zhǎng)度為10,否則為橫向位置的一半

int initArrayLength = maxX 20 ? 10 : maxX / 2;

nodeArray.clear();

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

int x = maxX / 2 + i;//maxX被初始化為20

int y = maxY / 2; //maxY被初始化為30

//nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]

//默認(rèn)的運(yùn)行方向向上,所以游戲一開(kāi)始nodeArray就變?yōu)椋?/p>

// [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]

nodeArray.addLast(new Node(x, y));

matrix[x][y] = true;

}

// 創(chuàng)建食物

food = createFood();

matrix[food.x][food.y] = true;

}

public void changeDirection(int newDirection) {

// 改變的方向不能與原來(lái)方向同向或反向

if (direction % 2 != newDirection % 2) {

direction = newDirection;

}

}

/**

* 運(yùn)行一次

* @return

*/

public boolean moveOn() {

Node n = (Node) nodeArray.getFirst();

int x = n.x;

int y = n.y;

// 根據(jù)方向增減坐標(biāo)值

switch (direction) {

case UP:

y--;

break;

case DOWN:

y++;

break;

case LEFT:

x--;

break;

case RIGHT:

x++;

break;

}

// 如果新坐標(biāo)落在有效范圍內(nèi),則進(jìn)行處理

if ((0 = x x maxX) (0 = y y maxY)) {

if (matrix[x][y]) { // 如果新坐標(biāo)的點(diǎn)上有東西(蛇體或者食物)

if (x == food.x y == food.y) { // 吃到食物,成功

nodeArray.addFirst(food); // 從蛇頭贈(zèng)長(zhǎng)

// 分?jǐn)?shù)規(guī)則,與移動(dòng)改變方向的次數(shù)和速度兩個(gè)元素有關(guān)

int scoreGet = (10000 - 200 * countMove) / timeInterval;

score += scoreGet 0 ? scoreGet : 10;

countMove = 0;

food = createFood(); // 創(chuàng)建新的食物

matrix[food.x][food.y] = true; // 設(shè)置食物所在位置

return true;

} else // 吃到蛇體自身,失敗

return false;

} else { // 如果新坐標(biāo)的點(diǎn)上沒(méi)有東西(蛇體),移動(dòng)蛇體

nodeArray.addFirst(new Node(x, y));

matrix[x][y] = true;

n = (Node) nodeArray.removeLast();

matrix[n.x][n.y] = false;

countMove++;

return true;

}

}

return false; // 觸到邊線,失敗

}

public void run() {

running = true;

while (running) {

try {

Thread.sleep(timeInterval);

} catch (Exception e) {

break;

}

if (!paused) {

if (moveOn()) {

setChanged(); // Model通知View數(shù)據(jù)已經(jīng)更新

notifyObservers();

} else {

JOptionPane.showMessageDialog(null,

"you failed",

"Game Over",

JOptionPane.INFORMATION_MESSAGE);

break;

}

}

}

running = false;

}

private Node createFood() {

int x = 0;

int y = 0;

// 隨機(jī)獲取一個(gè)有效區(qū)域內(nèi)的與蛇體和食物不重疊的位置

do {

Random r = new Random();

x = r.nextInt(maxX);

y = r.nextInt(maxY);

} while (matrix[x][y]);

return new Node(x, y);

}

public void speedUp() {

timeInterval *= speedChangeRate;

}

public void speedDown() {

timeInterval /= speedChangeRate;

}

public void changePauseState() {

paused = !paused;

}

public String toString() {

String result = "";

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

Node n = (Node) nodeArray.get(i);

result += "[" + n.x + "," + n.y + "]";

}

return result;

}

}

class Node {

int x;

int y;

Node(int x, int y) {

this.x = x;

this.y = y;

}

}

------------------------------------------------------------

4、

package mvcTest;

//SnakeView.java

import javax.swing.*;

import java.awt.*;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.Observable;

import java.util.Observer;

/**

* MVC模式中得Viewer,只負(fù)責(zé)對(duì)數(shù)據(jù)的顯示,而不用理會(huì)游戲的控制邏輯

*/

public class SnakeView implements Observer {

SnakeControl control = null;

SnakeModel model = null;

JFrame mainFrame;

Canvas paintCanvas;

JLabel labelScore;

public static final int canvasWidth = 200;

public static final int canvasHeight = 300;

public static final int nodeWidth = 10;

public static final int nodeHeight = 10;

public SnakeView(SnakeModel model, SnakeControl control) {

this.model = model;

this.control = control;

mainFrame = new JFrame("GreedSnake");

Container cp = mainFrame.getContentPane();

// 創(chuàng)建頂部的分?jǐn)?shù)顯示

labelScore = new JLabel("Score:");

cp.add(labelScore, BorderLayout.NORTH);

// 創(chuàng)建中間的游戲顯示區(qū)域

paintCanvas = new Canvas();

paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);

paintCanvas.addKeyListener(control);

cp.add(paintCanvas, BorderLayout.CENTER);

// 創(chuàng)建底下的幫助欄

JPanel panelButtom = new JPanel();

panelButtom.setLayout(new BorderLayout());

JLabel labelHelp;

labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.NORTH);

labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.CENTER);

labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.SOUTH);

cp.add(panelButtom, BorderLayout.SOUTH);

mainFrame.addKeyListener(control);

mainFrame.pack();

mainFrame.setResizable(false);

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

mainFrame.setVisible(true);

}

void repaint() {

Graphics g = paintCanvas.getGraphics();

//draw background

g.setColor(Color.WHITE);

g.fillRect(0, 0, canvasWidth, canvasHeight);

// draw the snake

g.setColor(Color.BLACK);

LinkedList na = model.nodeArray;

Iterator it = na.iterator();

while (it.hasNext()) {

Node n = (Node) it.next();

drawNode(g, n);

}

// draw the food

g.setColor(Color.RED);

Node n = model.food;

drawNode(g, n);

updateScore();

}

private void drawNode(Graphics g, Node n) {

g.fillRect(n.x * nodeWidth,

n.y * nodeHeight,

nodeWidth - 1,

nodeHeight - 1);

}

public void updateScore() {

String s = "Score: " + model.score;

labelScore.setText(s);

}

public void update(Observable o, Object arg) {

repaint();

}

}

希望采納

求貪吃蛇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?{??

public?static?final?int?WIDTH?=?800,?HEIGHT?=?600,?SLEEPTIME?=?20,?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())?{??

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

}??

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

/*這是一個(gè)雙人貪吃蛇游戲

*玩家一 A S D W 控制方向

*玩家二 上下左右 控制方向

*當(dāng)某玩家無(wú)路可走的時(shí)候既輸

*/

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class HsGame extends JFrame {

HsGame(String str) {

// 設(shè)置主面版

this.setTitle(str);

this.setSize(910, 630);

this.setLocation(50, 50);

MyPanel mp = new MyPanel();

this.add(mp);

this.addKeyListener(mp);

new Thread(mp).start();

}

// 主線程

public static void main(String[] args) {

HsGame m = new HsGame("貪吃蛇競(jìng)技版");

m.setVisible(true);

}

}

class MyPanel extends JPanel implements Runnable, KeyListener {

int[][] s1 = new int[180][120];

int[][] s2 = new int[180][120];

int x1 = 40;

int y1 = 60;

int x2 = 140;

int y2 = 60;

// 設(shè)置線程休眠時(shí)間

int sleep = 50;

// 設(shè)置初始方向

int fangxiang1 = 2;

int fangxiang2 = 0;

// 構(gòu)造函數(shù)

MyPanel() {

// 初始化界面

for (int ix = 0; ix 180; ix++) {

for (int iy = 0; iy 120; iy++) {

s1[ix][iy] = 0;

s2[ix][iy] = 0;

}

}

// 設(shè)置邊界

// 上下邊界

for (int ix = 0; ix 180; ix++) {

s1[ix][0] = 1;

s1[ix][119] = 1;

s2[ix][0] = 1;

s2[ix][119] = 1;

}

// 左右邊界

for (int iy = 0; iy 120; iy++) {

s1[0][iy] = 1;

s1[179][iy] = 1;

s2[0][iy] = 1;

s2[179][iy] = 1;

}

}

// 畫板

public void paint(Graphics g) {

// 顯示玩家一

g.setColor(Color.red);

for (int ix = 0; ix 180; ix++) {

for (int iy = 0; iy 120; iy++) {

if (s1[ix][iy] == 1) {

g.fillRect(ix * 5, iy * 5, 5, 5);

}

}

}

// 顯示玩家二

g.setColor(Color.blue);

for (int ix = 0; ix 180; ix++) {

for (int iy = 0; iy 120; iy++) {

if (s2[ix][iy] == 1) {

g.fillRect(ix * 5, iy * 5, 5, 5);

}

}

}

// 畫出邊界

g.setColor(Color.black);

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

g.fillRect(i * 5, 0, 5, 5);

g.fillRect(i * 5, 119 * 5, 5, 5);

}

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

g.fillRect(0, i * 5, 5, 5);

g.fillRect(179 * 5, i * 5, 5, 5);

}

}

public void run() {

while (true) {

switch (fangxiang1) {

case 0:

x1--;

break;

case 1:

y1--;

break;

case 2:

x1++;

break;

case 3:

y1++;

}

switch (fangxiang2) {

case 0:

x2--;

break;

case 1:

y2--;

break;

case 2:

x2++;

break;

case 3:

y2++;

}

// 判斷死活

if (s1[x1][y1] == 1 || s2[x1][y1] == 1) {

// 彈出player2勝利對(duì)話框

JOptionPane.showMessageDialog(null,

"player 2 win!",

"Game Over !", JOptionPane.ERROR_MESSAGE);

// 結(jié)束游戲

System.exit(0);

} else {

s1[x1][y1] = 1;

}

if (s2[x2][y2] == 1 || s1[x2][y2] == 1) {

// 彈出player1勝利對(duì)話框

JOptionPane.showMessageDialog(null,

"player 1 win!",

"Game Over !", JOptionPane.ERROR_MESSAGE);

// 結(jié)束游戲

System.exit(0);

} else {

s2[x2][y2] = 1;

}

try {

Thread.sleep(sleep);

} catch (Exception e) {

e.printStackTrace();

}

// 重畫

this.repaint();

}

}

public void keyTyped(KeyEvent e) {

}

public void keyPressed(KeyEvent e) {

// 玩家一控制

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

if (fangxiang1 != 2) {

fangxiang1 = 0;

System.out.println("player 1 left");

}

}

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

if (fangxiang1 != 3) {

fangxiang1 = 1;

System.out.println("player 1 up");

}

}

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

if (fangxiang1 != 0) {

fangxiang1 = 2;

System.out.println("player 1 right");

}

}

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

if (fangxiang1 != 1) {

fangxiang1 = 3;

System.out.println("player 1 down");

}

}

// 玩家二控制

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

if (fangxiang2 != 2) {

fangxiang2 = 0;

System.out.println("player 2 left");

}

}

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

if (fangxiang2 != 3) {

fangxiang2 = 1;

System.out.println("player 2 up");

}

}

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

if (fangxiang2 != 0) {

fangxiang2 = 2;

System.out.println("player 2 right");

}

}

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

if (fangxiang2 != 1) {

fangxiang2 = 3;

System.out.println("player 2 down");

}

}

}

public void keyReleased(KeyEvent e) {

}

}

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:可以看作蛇運(yùn)動(dòng)的速度

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

//創(chuàng)建"蛇"對(duì)象

snake = new Snake(this);

//創(chuàng)建"食物"對(duì)象

createNode();

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

//添加鍵盤監(jiān)聽(tīng)器

this.addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent arg0) {

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

switch (arg0.getKeyCode()) {

//映射上下左右4個(gè)鍵位

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

//啟動(dòng)線程,開(kāi)始執(zhí)行

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

//如果蛇碰撞(吃)到食物,則創(chuàng)建新食物

if (snake.hit(node)) {

createNode();

}

snake.draw(g2d);

node.draw(g2d);

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

}

class ThreadUpadte implements Runnable {

public void run() {

//無(wú)限重繪畫面

while (true) {

try {

Thread.sleep(SLEEPTIME);

repaint(); //

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

/**

* 創(chuàng)建食物

*/

public void createNode() {

//隨機(jī)食物的出現(xiàn)位置

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

}

}

/**

* 節(jié)點(diǎn)類(包括食物和蛇的身軀組成節(jié)點(diǎn))

*/

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

//遍歷整個(gè)蛇體是否與食物碰撞

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:

//判斷是否會(huì)撞墻

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:

//判斷是否會(huì)撞墻

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:

//判斷是否會(huì)撞墻

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:

//判斷是否會(huì)撞墻

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.*;//靜態(tài)導(dǎo)入

/*

* 此類是貪吃蛇的簡(jiǎn)單實(shí)現(xiàn)方法

* 自己可以加入在開(kāi)始時(shí)的設(shè)置,比如

* 選關(guān),初始的蛇的長(zhǎng)度等等

*/

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;// 重畫的進(jìn)間間隔

private MySnake my;

private int total;// 代表蛇的長(zhǎng)度

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

private volatile boolean go;

private int round;// 表示第幾關(guān)

public Snake(JFrame jf) {

initOther();

// 為頂級(jí)窗口類JFrame添加事件處理函數(shù)

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

}

// 隨機(jī)生成一個(gè)食物的位置

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

}

// 處理多少關(guān)的函數(shù)

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;

}

}

// 把自己的組件全部畫出來(lái)

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 + "關(guān)", 40,

400);

} else {

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

g.drawString("游戲結(jié)束,按回車(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));

}

// 蛇移動(dòng)的方法

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;

}

}

// 把自己畫出來(lái)

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

}

}

// 定義一個(gè)枚舉,在此也可以用接口或者常量值代替

enum Direction {

EAST, SOUTH, WEST, NORTH;

}

當(dāng)前題目:java貪吃蛇雙人代碼,java實(shí)現(xiàn)貪吃蛇
當(dāng)前鏈接:http://m.newbst.com/article48/phhehp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)網(wǎng)站策劃自適應(yīng)網(wǎng)站軟件開(kāi)發(fā)域名注冊(cè)ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)