亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? greedysnake.java

?? 游戲主類
?? JAVA
字號:
/* 
 *12.24日,完成了蛇撞到自己的檢測.修改方法是在蛇的初始化的時候,用雙循環來置FALSE;
 * 在重寫代碼的時候,我借鑒了別人的思路:將整個游戲的界面定義為一個布爾型的二維數組.
 * 用一個LinkedList來儲存蛇.當蛇移動的時候,在蛇的頭部增加一個節點,然后刪除最后一個節點.
 * 因為只是做練習,所以沒做游戲界面,比如菜單欄,計分欄什么的.另外還有一個問題,就是當兩次點擊回車時,蛇的移動速度會變快
 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class Game {
	public static void main(String args[]) {
		GameFrame frame = new GameFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
		frame.show();
		JOptionPane.showMessageDialog(null, "上,下左,右控制蛇的方向\n回車開始,S暫停");
	}
}

class GameFrame extends JFrame {
	public GameFrame() {
		setSize(294, 482);
		setTitle("貪吃蛇DEMO");
		this.setLocation(360, 100);
		Container c = getContentPane();
		GamePanel panel = new GamePanel();
		c.add(panel, BorderLayout.CENTER);
	}
}

class GamePanel extends JPanel implements KeyListener {
	static int panelWidth = 294;

	static int panelHeight = 450;

	int rectX = 15;

	int rectY = 15;

	Snake snake;

	Node n;

	public GamePanel() {
		snake = new Snake(this, panelWidth / rectX, panelHeight / rectY);
		setBackground(Color.WHITE);
		setSize(panelWidth, panelHeight);
		setFocusable(true);
		addKeyListener(this);
	}

	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		LinkedList list = snake.snakeList;
		Iterator it = list.iterator();
		g2.setColor(Color.black);
		while (it.hasNext()) {
			n = (Node) it.next();
			drawNode(g2, n);
		}
		g2.setColor(Color.ORANGE);
		Node f = snake.food;
		drawNode(g2, f);
		snake.drawMap(g2);// 繪制地圖
	}

	public void keyPressed(KeyEvent e) {
		int keycode = e.getKeyCode();
		if (keycode == KeyEvent.VK_ENTER) {
			begin();
		} else if (keycode == KeyEvent.VK_UP) {
			snake.changeDirection(Snake.up);
		} else if (keycode == KeyEvent.VK_DOWN) {
			snake.changeDirection(Snake.down);
		} else if (keycode == KeyEvent.VK_LEFT) {
			snake.changeDirection(Snake.left);
		} else if (keycode == KeyEvent.VK_RIGHT) {
			snake.changeDirection(Snake.right);
		} else if (keycode == KeyEvent.VK_S) {
			Snake.run = false;
		}
	}

	public void keyReleased(KeyEvent e) {
	}

	public void keyTyped(KeyEvent e) {
	}

	public void drawNode(Graphics2D g, Node n) {
		g.fillRect(n.x * rectX, n.y * rectY, rectX - 2, rectY - 2);
	}

	public void begin() {
		Snake.run = true;
		SnakeThread thread = new SnakeThread(snake);
		thread.start();
	}
}

class Node {
	int x;

	int y;

	public Node(int x, int y) {
		this.x = x;
		this.y = y;
	}
}

class SnakeThread extends Thread {
	Snake snake;

	public SnakeThread(Snake s) {
		snake = s;
	}

	public void run() {
		Snake.run = true;

		while (Snake.run) {
			try {
				snake.move();
				sleep(200);
			} catch (InterruptedException e) {
			}
		}
		Snake.run = false;
	}
}

class Snake {
	GamePanel panel;

	Node food;

	boolean[][] all;

	public static boolean run;

	int maxX;

	int maxY;

	public static int left = 1;

	public static int up = 2;

	public static int right = 3;

	public static int down = 4;

	int direction = 4;

	LinkedList snakeList = new LinkedList();

	public Snake(GamePanel p, int maxX, int maxY) {
		panel = p;
		this.maxX = maxX;
		this.maxY = maxY;
		all = new boolean[maxX][maxY];
		for (int i = 0; i < maxX; i++) {
			for (int j = 0; j < maxY; j++) {
				all[i][j] = false;
			}
		}
		int arrayLength = maxX > 20 ? 10 : maxX / 2;
		for (int i = 0; i < arrayLength; i++) {
			int x = maxX / 10 + i;
			int y = maxY / 10;
			snakeList.addFirst(new Node(x, y));
			all[x][y] = true;
		}
		food = createFood();
		all[food.x][food.y] = true;
	}

	// 蛇移動的方法
	public void move() {
		Node n = (Node) snakeList.getFirst();
		int x = n.x;
		int y = n.y;

		if (direction == 3) {
			x++;
		} else if (direction == 4) {
			y++;
		} else if (direction == 1) {
			x--;
		} else if (direction == 2) {
			y--;
		}
		// 實現對蛇撞到自身的檢測
		if ((0 <= x && x <= GamePanel.panelWidth / 15 - 1)
				&& (0 <= y && y <= GamePanel.panelHeight / 15 - 1)) {
			if (all[x][y]) {
				if (x == food.x && y == food.y) {
					snakeList.addFirst(food);
					food = createFood();
					all[food.x][food.y] = true;
				} else {
					JOptionPane.showMessageDialog(null, "你撞到自己了");
					System.exit(0);
				}
			} else {
				snakeList.addFirst(new Node(x, y));
				all[x][y] = true;
				Node l = (Node) snakeList.getLast();
				snakeList.removeLast();
				all[l.x][l.y] = false;
			}
		} else {
			JOptionPane.showMessageDialog(null, "越界了,游戲結束");
			System.exit(0);
		}
		panel.repaint();
	}

	public Node createFood() {
		int x = 0;
		int y = 0;
		do {
			Random r = new Random();
			x = r.nextInt(maxX - 10);
			y = r.nextInt(maxY - 10);

		} while (all[x][y]);
		return new Node(x, y);
	}
//設置蛇不能回頭
	public void changeDirection(int newDirection) {
		if (direction % 2 != newDirection % 2) {
			direction = newDirection;
		}
	}

	public void drawMap(Graphics2D g) {
		for (int i = 0; i < maxX; i++) {
			for (int j = 0; j < maxY; j++) {
				if (all[i][j] == true) {
					g.setColor(Color.red);
					g.fillRect(i, j, 4, 4);
				}
			}
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合一二三区| 韩国v欧美v日本v亚洲v| 精品一区免费av| 91在线观看视频| 欧美一级日韩免费不卡| 亚洲视频免费在线观看| 奇米影视一区二区三区| 一本色道a无线码一区v| 国产亚洲欧美中文| 亚洲成人精品一区| 99国产一区二区三精品乱码| 久久亚洲精品小早川怜子| 亚洲午夜久久久久| 9i在线看片成人免费| 26uuu国产一区二区三区| 亚洲国产日韩a在线播放| 成人精品小蝌蚪| 日韩三级免费观看| 亚洲二区视频在线| 91黄色激情网站| 国产精品国产精品国产专区不片| 美国一区二区三区在线播放| 欧美三级视频在线播放| 国产精品看片你懂得| 国产精品一卡二卡| 欧美大片国产精品| 久久精品国产亚洲高清剧情介绍| 92国产精品观看| 国产精品欧美一区二区三区| 国产精品一区免费在线观看| 2022国产精品视频| 久久国产麻豆精品| 日韩欧美一级二级| 久久精品国产99| 日韩美女视频一区二区在线观看| 婷婷久久综合九色综合绿巨人| 91热门视频在线观看| 国产精品久久久久久久久晋中| 国产高清在线观看免费不卡| 欧美成人一区二区三区| 美女视频黄频大全不卡视频在线播放| 欧美日韩国产在线观看| 亚洲成人精品一区| 久久久99精品免费观看| 免费在线观看一区二区三区| 91久久精品一区二区| 亚洲色图欧美在线| 色综合夜色一区| 亚洲精品国产精华液| 在线观看日韩精品| 亚洲精品国产精华液| 欧美日韩国产精选| 国产精品美女www爽爽爽| 久久久电影一区二区三区| 精品日韩欧美在线| 久久久蜜桃精品| 国产精品99久久不卡二区| 久久综合精品国产一区二区三区| 毛片基地黄久久久久久天堂| 26uuu国产在线精品一区二区| 激情欧美一区二区| 国产清纯在线一区二区www| 91老司机福利 在线| 图片区日韩欧美亚洲| 欧美精品一区二区三区蜜桃视频| 国产美女久久久久| 亚洲综合丝袜美腿| 精品国产成人系列| 成人在线一区二区三区| 一区二区三区不卡在线观看| 欧美精选一区二区| 粉嫩aⅴ一区二区三区四区 | 久久精品夜色噜噜亚洲aⅴ| 成人激情电影免费在线观看| 亚洲福利一区二区| 国产欧美日韩不卡| 欧美精品99久久久**| 懂色av中文一区二区三区| 一二三区精品福利视频| 久久综合久久鬼色中文字| 日本精品视频一区二区| 国内精品在线播放| 亚洲一区二区中文在线| 国产亚洲欧美一区在线观看| 欧美日韩国产免费| 99久精品国产| 蜜桃视频在线观看一区| 亚洲精品乱码久久久久久| 久久久久国产精品麻豆ai换脸 | 日韩一级完整毛片| 91免费国产在线观看| 国内精品久久久久影院一蜜桃| 亚洲日本va午夜在线电影| 日韩免费视频线观看| 日本高清不卡aⅴ免费网站| 国产精品夜夜爽| 日韩电影免费在线观看网站| 亚洲天堂成人在线观看| 国产视频911| 久久久久综合网| 日韩一区二区三区在线观看 | 国产.欧美.日韩| 美美哒免费高清在线观看视频一区二区 | 日韩电影在线观看网站| 亚洲乱码日产精品bd| 欧美激情自拍偷拍| 精品国产免费视频| 欧美一区二区三区在线观看| 欧美性生交片4| 91色婷婷久久久久合中文| 成人激情小说网站| 国产精品自产自拍| 看国产成人h片视频| 日韩精品乱码免费| 亚洲妇熟xx妇色黄| 亚洲成av人片在线观看无码| 亚洲第一久久影院| 亚洲一区二区欧美日韩 | 在线观看视频一区二区欧美日韩| 高清国产一区二区三区| 国产精品亚洲а∨天堂免在线| 黑人精品欧美一区二区蜜桃| 久久 天天综合| 国产美女在线精品| 国产精品中文字幕一区二区三区| 狠狠色综合播放一区二区| 精品一区二区三区日韩| 久久99久久99| 国产激情视频一区二区三区欧美 | 国产精品福利一区| 中文一区二区在线观看| 中文字幕乱码久久午夜不卡| 国产精品久久久99| 亚洲三级理论片| 亚洲电影视频在线| 美美哒免费高清在线观看视频一区二区| 午夜精品爽啪视频| 精品中文字幕一区二区小辣椒| 国产一区二区不卡在线| 丁香婷婷综合色啪| 色哟哟一区二区三区| 欧美蜜桃一区二区三区| 欧美电视剧免费观看| 亚洲国产成人自拍| 亚洲最色的网站| 蜜桃av一区二区| 成人在线视频一区| 欧美午夜在线观看| 日韩欧美国产午夜精品| 国产精品午夜免费| 亚洲h动漫在线| 国产呦萝稀缺另类资源| 一本色道久久综合亚洲aⅴ蜜桃| 欧美日韩国产高清一区| 久久精品夜色噜噜亚洲aⅴ| 亚洲黄色性网站| 狠狠狠色丁香婷婷综合激情 | 国产成人av电影| 91免费版pro下载短视频| 91精品欧美久久久久久动漫| 久久久久久99久久久精品网站| 亚洲欧美在线另类| 秋霞午夜鲁丝一区二区老狼| jlzzjlzz亚洲女人18| 337p亚洲精品色噜噜狠狠| 国产精品午夜在线| 久久疯狂做爰流白浆xx| 91黄色小视频| 欧美激情在线免费观看| 性久久久久久久久| 97久久超碰国产精品电影| 日韩精品资源二区在线| 一区二区三区四区激情| 国产黄人亚洲片| 日韩欧美一区二区不卡| 中文字幕在线不卡| 国产一区美女在线| 中文字幕av一区二区三区高| 视频在线在亚洲| 成人黄色小视频在线观看| 日韩精品资源二区在线| 亚洲午夜国产一区99re久久| jizzjizzjizz欧美| 精品免费国产二区三区| 天堂av在线一区| 色婷婷综合久久久| 国产精品色在线观看| 国产一区二区在线免费观看| 欧美一区午夜精品| 图片区小说区国产精品视频| 欧美主播一区二区三区| 亚洲人成伊人成综合网小说| 国产**成人网毛片九色| 久久精品视频在线看| 久久国产视频网| 精品入口麻豆88视频| 日本不卡视频一二三区| 欧美一级一级性生活免费录像| 首页国产欧美日韩丝袜| 91精品黄色片免费大全|