貪吃蛇java代碼(貪吃蛇java代碼怎樣使速度加快)

本文目錄一覽:

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設計遊戲:貪吃蛇遊戲

用MVC方式實現的貪吃蛇遊戲,共有4個類。運行GreedSnake運行即可。主要是觀察者模式的使用,我已經添加了很多注釋了。

1、

/*

* 程序名稱:貪食蛇

* 原作者:BigF

* 修改者:algo

* 說明:我以前也用C寫過這個程序,現在看到BigF用Java寫的這個,發現雖然作者自稱是Java的初學者,

* 但是明顯編寫程序的素養不錯,程序結構寫得很清晰,有些細微得地方也寫得很簡潔,一時興起之

* 下,我認真解讀了這個程序,發現數據和表現分開得很好,而我近日正在學習MVC設計模式,

* 因此嘗試把程序得結構改了一下,用MVC模式來實現,對源程序得改動不多。

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

*/

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

//添加一個觀察者,讓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,負責接收用戶的操作,並把用戶操作通知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){ // 運行狀態下,處理的按鍵

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:

}

}

// 任何情況下處理的按鍵,按鍵導致重新啟動遊戲

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類,負責所有遊戲相關數據及運行

* @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類,負責所有遊戲相關數據及運行

*/

class SnakeModel extends Observable implements Runnable {

boolean[][] matrix; // 指示位置上有沒蛇體或食物

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

Node food;

int maxX;

int maxY;

int direction = 2; // 蛇運行的方向

boolean running = false; // 運行狀態

int timeInterval = 200; // 時間間隔,毫秒

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

boolean paused = false; // 暫停標誌

int score = 0; // 得分

int countMove = 0; // 吃到食物前移動的次數

// 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; // 蛇運行的方向

timeInterval = 200; // 時間間隔,毫秒

paused = false; // 暫停標誌

score = 0; // 得分

countMove = 0; // 吃到食物前移動的次數

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

// 初始化蛇體,如果橫向位置超過20個,長度為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]

//默認的運行方向向上,所以遊戲一開始nodeArray就變為:

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

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

matrix[x][y] = true;

}

// 創建食物

food = createFood();

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

}

public void changeDirection(int newDirection) {

// 改變的方向不能與原來方向同向或反向

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

direction = newDirection;

}

}

/**

* 運行一次

* @return

*/

public boolean moveOn() {

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

int x = n.x;

int y = n.y;

// 根據方向增減坐標值

switch (direction) {

case UP:

y–;

break;

case DOWN:

y++;

break;

case LEFT:

x–;

break;

case RIGHT:

x++;

break;

}

// 如果新坐標落在有效範圍內,則進行處理

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

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

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

nodeArray.addFirst(food); // 從蛇頭贈長

// 分數規則,與移動改變方向的次數和速度兩個元素有關

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

score += scoreGet 0 ? scoreGet : 10;

countMove = 0;

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

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

return true;

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

return false;

} else { // 如果新坐標的點上沒有東西(蛇體),移動蛇體

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數據已經更新

notifyObservers();

} else {

JOptionPane.showMessageDialog(null,

“you failed”,

“Game Over”,

JOptionPane.INFORMATION_MESSAGE);

break;

}

}

}

running = false;

}

private Node createFood() {

int x = 0;

int y = 0;

// 隨機獲取一個有效區域內的與蛇體和食物不重疊的位置

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,只負責對數據的顯示,而不用理會遊戲的控制邏輯

*/

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

// 創建頂部的分數顯示

labelScore = new JLabel(“Score:”);

cp.add(labelScore, BorderLayout.NORTH);

// 創建中間的遊戲顯示區域

paintCanvas = new Canvas();

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

paintCanvas.addKeyListener(control);

cp.add(paintCanvas, BorderLayout.CENTER);

// 創建底下的幫助欄

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

}

}

————————————————————-

哪位能告訴我貪吃蛇遊戲的全部代碼?

//package main;

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStreamReader;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

public class TanChiShe implements KeyListener,ActionListener{

/**

* @param args

*/

int max = 300;//蛇長最大值

final int JianJu = 15; //設定蛇的運動網格間距(窗口最大32*28格)

byte fangXiang = 4; //控制蛇的運動方向,初始為右

int time = 500; //蛇的運動間隔時間

int jianTime = 2;//吃一個減少的時間

int x,y;//蛇的運動坐標,按網格來算

int x2,y2;//暫存蛇頭的坐標

int jiFenQi = 0;//積分器

boolean isRuned = false;//沒運行才可設級別

boolean out = false;//沒開始運行?

boolean run = false;//暫停運行

String JiBie = “中級”;

JFrame f = new JFrame(“貪吃蛇 V1.0”);

JPanel show = new JPanel();

JLabel Message = new JLabel(“級別:中級 蛇長:5 時間500ms 分數:00”);

// JButton play = new JButton(“開始”);

JLabel sheTou;

JLabel shiWu;

JLabel sheWei[] = new JLabel[max];

static int diJi = 4; //第幾個下標的蛇尾要被加上

ImageIcon shang = new ImageIcon(“tuPian\\isSheTouUp.png”);//產生四個上下左右的蛇頭圖案

ImageIcon xia = new ImageIcon(“tuPian\\isSheTouDown.png”);

ImageIcon zhuo = new ImageIcon(“tuPian\\isSheTouLeft.png”);

ImageIcon you = new ImageIcon(“tuPian\\isSheTouRight.png”);

JMenuBar JMB = new JMenuBar();

JMenu file = new JMenu(“開始遊戲”);

JMenuItem play = new JMenuItem(” 開始遊戲 “);

JMenuItem pause = new JMenuItem(” 暫停遊戲 “);

JMenu hard = new JMenu(“遊戲難度”);

JMenuItem gao = new JMenuItem(“高級”);

JMenuItem zhong = new JMenuItem(“中級”);

JMenuItem di = new JMenuItem(“低級”);

JMenu about = new JMenu(” 關於 “);

JMenuItem GF = new JMenuItem(“※高分榜”);

JMenuItem ZZ = new JMenuItem(“關於作者”);

JMenuItem YX = new JMenuItem(“關於遊戲”);

JMenuItem QK = new JMenuItem(“清空記錄”);

static TanChiShe tcs = new TanChiShe();

public static void main(String[] args) {

// TanChiShe tcs = new TanChiShe();

tcs.f();

}

public void f(){

f.setBounds(250,100,515,530);

f.setLayout(null);

f.setAlwaysOnTop(true);//窗口始終保持最前面

f.setBackground(new Color(0,0,0));

f.setDefaultCloseOperation(0);

f.setResizable(false);

f.setVisible(true);

// f.getContentPane().setBackground(Color.BLACK);

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);//退出程序

}

});

f.setJMenuBar(JMB);

JMB.add(file);

file.add(play);

file.add(pause);

JMB.add(hard);

hard.add(gao);

hard.add(zhong);

hard.add(di);

JMB.add(about);

about.add(GF);

GF.setForeground(Color.blue);

about.add(ZZ);

about.add(YX);

about.add(QK);

QK.setForeground(Color.red);

f.add(show);

show.setBounds(0,f.getHeight()-92,f.getWidth(),35);

// show.setBackground(Color.green);

// f.add(play);

// play.setBounds(240,240,80,25);

play.addActionListener(this);

pause.addActionListener(this);

gao.addActionListener(this);

zhong.addActionListener(this);

di.addActionListener(this);

GF.addActionListener(this);

ZZ.addActionListener(this);

YX.addActionListener(this);

QK.addActionListener(this);

show.add(Message);

Message.setForeground(Color.blue);

f.addKeyListener(this);

// show.addKeyListener(this);

play.addKeyListener(this);

sheChuShi();

}

public void sheChuShi(){//蛇初始化

sheTou = new JLabel(you);//用向右的圖來初始蛇頭

f.add(sheTou);

sheTou.setBounds(JianJu*0,JianJu*0,JianJu,JianJu);

// System.out.println(“ishere”);

shiWu = new JLabel(“■”);

f.add(shiWu);

shiWu.setBounds(10*JianJu,10*JianJu,JianJu,JianJu);

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

sheWei[i] = new JLabel(“■”);

f.add(sheWei[i]);

sheWei[i].setBounds(-1*JianJu,0*JianJu,JianJu,JianJu);

}

while(true){

if(out == true){

yunXing();

break;

}

try{

Thread.sleep(200);

}catch(Exception ex){

ex.printStackTrace();

}

}

}

public void sheJiaChang(){//蛇的長度增加

if(diJi max){

sheWei[++diJi] = new JLabel(new ImageIcon(“tuPian\\isSheWei.jpg”));

f.add(sheWei[diJi]);

sheWei[diJi].setBounds(sheWei[diJi-1].getX(),sheWei[diJi-1].getY(),JianJu,JianJu);

// System.out.println(“diJi “+diJi);

}

}

public void pengZhuanJianCe(){//檢測蛇的碰撞情況

if(sheTou.getX()0 || sheTou.getY()0 ||

sheTou.getX()f.getWidth()-15 || sheTou.getY()f.getHeight()-105 ){

gameOver();

// System.out.println(“GameOVER”);

}

if(sheTou.getX() == shiWu.getX() sheTou.getY() == shiWu.getY()){

out: while(true){

shiWu.setLocation((int)(Math.random()*32)*JianJu,(int)(Math.random()*28)*JianJu);

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

if(shiWu.getX()!= sheWei[i].getX() shiWu.getY()!=sheWei[i].getY()

sheTou.getX()!=shiWu.getX() sheTou.getY()!= shiWu.getY()){//如果食物不在蛇身上則退出循環,產生食物成功

break out;

}

}

}

sheJiaChang();

// System.out.println(“吃了一個”);

if(time100 ){

time -= jianTime;

}

else{}

Message.setText(“級別:”+JiBie+” 蛇長:”+(diJi+2)+” 時間:”+time+”ms 分數:”+(jiFenQi+=10)+””);

}

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

if(sheTou.getX() == sheWei[i].getX() sheTou.getY() == sheWei[i].getY()){

gameOver();

// System.out.println(“吃到尾巴了”);

}

}

}

public void yunXing(){

while(true){

while(run){

if(fangXiang == 1){//上

y-=1;

}

if(fangXiang == 2){//下

y+=1;

}

if(fangXiang == 3){//左

x-=1;

}

if(fangXiang == 4){//右

x+=1;

}

x2 = sheTou.getX();

y2 = sheTou.getY();

sheTou.setLocation(x*JianJu,y*JianJu); //設置蛇頭的坐標 網格數*間隔

for(int i=diJi;i=0;i–){

if(i==0){

sheWei[i].setLocation(x2,y2);

// System.out.println(i+” “+sheTou.getX()+” “+sheTou.getY());

}

else{

sheWei[i].setLocation(sheWei[i-1].getX(),sheWei[i-1].getY());

// System.out.println(i+” “+sheWei[i].getX()+” “+sheWei[i].getY());

}

}

pengZhuanJianCe();

try{

Thread.sleep(time);

}catch(Exception e){

e.printStackTrace();

}

}

Message.setText(“級別:”+JiBie+” 蛇長:”+(diJi+2)+” 時間:”+time+”ms 分數:”+(jiFenQi+=10)+””);

try{

Thread.sleep(200);

}catch(Exception e){

e.printStackTrace();

}

}

}

public void gameOver(){//遊戲結束時處理

int in = JOptionPane.showConfirmDialog(f,”遊戲已經結束!\n是否要保存分數”,”提示”,JOptionPane.YES_NO_OPTION);

if(in == JOptionPane.YES_OPTION){

// System.out.println(“YES”);

String s = JOptionPane.showInputDialog(f,”輸入你的名字:”);

try{

FileInputStream fis = new FileInputStream(“GaoFen.ini”);//先把以前的數據讀出來加到寫的數據前

InputStreamReader isr = new InputStreamReader(fis);

BufferedReader br = new BufferedReader(isr);

String s2,setOut = “”;

while((s2=br.readLine())!= null){

setOut =setOut+s2+”\n”;

}

FileOutputStream fos = new FileOutputStream(“GaoFen.ini”);//輸出到文件流

s = setOut+s+”:”+jiFenQi+”\n”;

fos.write(s.getBytes());

}catch(Exception e){}

}

System.exit(0);

}

public void keyTyped(KeyEvent arg0) {

// TODO 自動生成方法存根

}

public void keyPressed(KeyEvent arg0) {

// System.out.println(arg0.getSource());

if(arg0.getKeyCode() == KeyEvent.VK_UP){//按上下時方向的值相應改變

if(fangXiang != 2){

fangXiang = 1;

// sheTou.setIcon(shang);//設置蛇的方向

}

// System.out.println(“UP”);

}

if(arg0.getKeyCode() == KeyEvent.VK_DOWN){

if(fangXiang != 1){

fangXiang = 2;

// sheTou.setIcon(xia);

}

// System.out.println(“DOWN”);

}

if(arg0.getKeyCode() == KeyEvent.VK_LEFT){//按左右時方向的值相應改變

if(fangXiang != 4){

fangXiang = 3;

// sheTou.setIcon(zhuo);

}

// System.out.println(“LEFT”);

}

if(arg0.getKeyCode() == KeyEvent.VK_RIGHT){

if(fangXiang != 3){

fangXiang = 4;

// sheTou.setIcon(you);

}

// System.out.println(“RIGHT”);

}

}

public void keyReleased(KeyEvent arg0) {

// TODO 自動生成方法存根

}

public void actionPerformed(ActionEvent arg0) {

// TODO 自動生成方法存根

JMenuItem JI = (JMenuItem)arg0.getSource();

if(JI == play){

out = true;

run = true;

isRuned = true;

gao.setEnabled(false);

zhong.setEnabled(false);

di.setEnabled(false);

}

if(JI == pause){

run = false;

}

if(isRuned == false){//如果遊戲還沒運行,才可以設置級別

if(JI == gao){

time = 200;

jianTime = 1;

JiBie = “高級”;

Message.setText(“級別:”+JiBie+” 蛇長:”+(diJi+2)+” 時間:”+time+”ms 分數:”+jiFenQi);

}

if(JI == zhong){

time = 400;

jianTime = 2;

JiBie = “中級”;

Message.setText(“級別:”+JiBie+” 蛇長:”+(diJi+2)+” 時間:”+time+”ms 分數:”+jiFenQi);

}

if(JI == di){

time = 500;

jianTime = 3;

JiBie = “低級”;

Message.setText(“級別:”+JiBie+” 蛇長:”+(diJi+2)+” 時間:”+time+”ms 分數:”+jiFenQi);

}

}

if(JI == GF){

try{

FileInputStream fis = new FileInputStream(“GaoFen.ini”);

InputStreamReader isr = new InputStreamReader(fis);

BufferedReader br = new BufferedReader(isr);

String s,setOut = “”;

while((s=br.readLine())!= null){

setOut =setOut+s+”\n”;

}

if(setOut.equals(“”)){

JOptionPane.showMessageDialog(f,”暫無保存記錄!”,”高分榜”,JOptionPane.INFORMATION_MESSAGE);

}

else{

JOptionPane.showMessageDialog(f,setOut);

}

}catch(Exception e){

e.printStackTrace();

}

}

if(JI == ZZ){//關於作者

JOptionPane.showMessageDialog(f,”軟件作者:申志飛\n地址:四川省綿陽市\nQQ:898513806\nE-mail:shenzhifeiok@126.com”,”關於作者”,JOptionPane.INFORMATION_MESSAGE);

}

if(JI == YX){//關於遊戲

JOptionPane.showMessageDialog(f,”貪吃蛇遊戲\n遊戲版本 V1.0″,”關於遊戲”,JOptionPane.INFORMATION_MESSAGE);

}

if(JI == QK){

try{

int select = JOptionPane.showConfirmDialog(f,”確實要清空記錄嗎?”,”清空記錄”,JOptionPane.YES_OPTION);

if(select == JOptionPane.YES_OPTION){

String setOut = “”;

FileOutputStream fos = new FileOutputStream(“GaoFen.ini”);//輸出到文件流

fos.write(setOut.getBytes());

}

}catch(Exception ex){}

}

}

}

//是我自己寫的,本來裏面有圖片的,但無法上傳,所以把圖片去掉了,裏面的ImageIcon等語句可以去掉。能正常運行。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/270140.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:35
下一篇 2024-12-16 13:35

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29

發表回復

登錄後才能評論