亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java中使用雙向鏈表實現貪吃蛇程序源碼分享

2019-11-26 15:15:33
字體:
來源:轉載
供稿:網友

使用雙向鏈表實現貪吃蛇程序

1.鏈表節點定義:

package snake;public class SnakeNode {	private int x;	private int y;	private SnakeNode next;	private SnakeNode ahead;	public SnakeNode() {	}	public SnakeNode(int x, int y) {		super();		this.x = x;		this.y = y;	}	public int getX() {		return x;	}	public void setX(int x) {		this.x = x;	}	public int getY() {		return y;	}	public void setY(int y) {		this.y = y;	}	public SnakeNode getNext() {		return next;	}	public void setNext(SnakeNode next) {		this.next = next;	}	public SnakeNode getAhead() {		return ahead;	}	public void setAhead(SnakeNode ahead) {		this.ahead = ahead;	}}

主程序:

package snake;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.KeyEventPostProcessor;import java.awt.KeyboardFocusManager;import java.awt.event.KeyEvent;import java.util.Random;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;/** * Created by hackcoder on 15-3-11. */public class Snake extends JFrame {	private static final int rows = 60;	private static final int columns = 80;	// 方向	private static final int UP = 1;	private static final int RIGHT = 2;	private static final int DOWN = 3;	private static final int LEFT = 4;	private static int DRIECTION_NOW = RIGHT;	private static boolean isEat = false;	private static int TAILX;	private static int TAILY;	private static SnakeNode snakeHeader = new SnakeNode();	private static SnakeNode snakeTailer = snakeHeader;	private static SnakeNode food = new SnakeNode();	private static JLabel[] images = new JLabel[rows * columns];	public static void main(String args[]) {		snakeHeader.setX(new Random().nextInt(rows - 1));		snakeHeader.setY(new Random().nextInt(columns - 1));		Snake snake = new Snake();		food = getFood();		while (true) {			try {				next();				// 吃到了食物				if (food.getX() == snakeHeader.getX()						&& food.getY() == snakeHeader.getY()) {					addTail();					isEat = true;				}				//吃到食物,重新生成一個食物				if (isEat) {					food = getFood();				}				// 判斷是否結束游戲				if (judgeEND()) {					JOptionPane.showMessageDialog(null, "游戲結束!", "游戲結束!",							JOptionPane.ERROR_MESSAGE);					break;				}				SnakeNode pNow = snakeHeader;				while (pNow != null) {					images[columns * pNow.getX() + pNow.getY()]							.setIcon(new ImageIcon("image/black.jpg", ""));					pNow = pNow.getNext();				}				images[columns * food.getX() + food.getY()]						.setIcon(new ImageIcon("image/black.jpg", ""));				Thread.sleep(100);				// 清理				pNow = snakeHeader;				while (pNow != null) {					images[columns * pNow.getX() + pNow.getY()]							.setIcon(new ImageIcon("image/white.jpg", ""));					pNow = pNow.getNext();				}				images[columns * food.getX() + food.getY()]						.setIcon(new ImageIcon("image/white.jpg", ""));				isEat = false;			} catch (InterruptedException e) {				e.printStackTrace();			}		}	}	public Snake() {		init();		this.setBounds(80, 80, 400, 400);		this.setVisible(true);		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);		// 添加全局鍵盤監聽		KeyboardFocusManager manager = KeyboardFocusManager				.getCurrentKeyboardFocusManager();		manager.addKeyEventPostProcessor((KeyEventPostProcessor) this				.getMyKeyEventHandler());	}	/**	 * 初始化地圖	 */	public void init() {		JPanel p = new JPanel(new GridLayout(rows, columns, 1, 1));		setLayout(new BorderLayout());		for (int x = 0; x < rows; x++) {			for (int y = 0; y < columns; y++) {				ImageIcon imageIcon;				if (x == 0 || x == rows - 1 || y == 0 || y == columns - 1) {					imageIcon = new ImageIcon("image/red.jpg", "");				} else {					imageIcon = new ImageIcon("image/white.jpg", "");				}				images[columns * x + y] = new JLabel(imageIcon);				p.add(images[columns * x + y]);			}		}		getContentPane().add(p, BorderLayout.CENTER);	}	/**	 * 鍵盤監聽	 * 	 * @return	 */	public KeyEventPostProcessor getMyKeyEventHandler() {		return new KeyEventPostProcessor() {			public boolean postProcessKeyEvent(KeyEvent e) {				if (e.getID() != KeyEvent.KEY_PRESSED) {					return false;				}				int keycode = e.getKeyCode();				if (keycode == KeyEvent.VK_UP) {					if (snakeHeader.getNext() != null) {						// 判斷方向是否可轉						int x1 = snakeHeader.getX();						int y1 = snakeHeader.getY();						int x2 = snakeHeader.getNext().getX();						int y2 = snakeHeader.getNext().getY();						if (y1 == y2 && x1 - x2 == 1) {							return true;						}					}					DRIECTION_NOW = UP;				} else if (keycode == KeyEvent.VK_RIGHT) {					if (snakeHeader.getNext() != null) {						int x1 = snakeHeader.getX();						int y1 = snakeHeader.getY();						int x2 = snakeHeader.getNext().getX();						int y2 = snakeHeader.getNext().getY();						if (x1 == x2 && y2 - y1 == 1) {							return true;						}					}					DRIECTION_NOW = RIGHT;				} else if (keycode == KeyEvent.VK_DOWN) {					if (snakeHeader.getNext() != null) {						int x1 = snakeHeader.getX();						int y1 = snakeHeader.getY();						int x2 = snakeHeader.getNext().getX();						int y2 = snakeHeader.getNext().getY();						if (y1 == y2 && x2 - x1 == 1) {							return true;						}					}					DRIECTION_NOW = DOWN;				} else if (keycode == KeyEvent.VK_LEFT) {					if (snakeHeader.getNext() != null) {						int x1 = snakeHeader.getX();						int y1 = snakeHeader.getY();						int x2 = snakeHeader.getNext().getX();						int y2 = snakeHeader.getNext().getY();						if (x1 == x2 && y1 - y2 == 1) {							return true;						}					}					DRIECTION_NOW = LEFT;				}				return true;			}		};	}	/**	 * 計算貪吃蛇的方向及位移	 * 	 * @param header	 */	public static void next() {		if (snakeHeader == null)			return;		TAILX = snakeTailer.getX();		TAILY = snakeTailer.getY();		SnakeNode pNow = snakeTailer;		while (pNow != null) {			if (pNow == snakeHeader) {				break;			}			pNow.setX(pNow.getAhead().getX());			pNow.setY(pNow.getAhead().getY());			pNow = pNow.getAhead();		}		if (DRIECTION_NOW == RIGHT) {			snakeHeader.setY(snakeHeader.getY() + 1);		} else if (DRIECTION_NOW == LEFT) {			snakeHeader.setY(snakeHeader.getY() - 1);		} else if (DRIECTION_NOW == UP) {			snakeHeader.setX(snakeHeader.getX() - 1);		} else if (DRIECTION_NOW == DOWN) {			snakeHeader.setX(snakeHeader.getX() + 1);		}	}	public static void addTail() {		SnakeNode tail = new SnakeNode(TAILX, TAILY);		snakeTailer.setNext(tail);		tail.setAhead(snakeTailer);		snakeTailer = snakeTailer.getNext();	}	public static SnakeNode getFood() {		SnakeNode food = new SnakeNode();		boolean flag = true;		while (true) {			int x = new Random().nextInt(rows);			int y = new Random().nextInt(columns);			if (x == 0 || x == rows - 1 || y == 0 || y == columns - 1) {				continue;			}			SnakeNode pNow = snakeHeader;			while (pNow != null) {				if (x == pNow.getX() && y == pNow.getY()) {					flag = false;				}				pNow = pNow.getNext();			}			if (flag) {				food = new SnakeNode(x, y);				break;			}		}		return food;	}	public static boolean judgeEND() {		//碰墻判斷		if (snakeHeader.getX() == 0 || snakeHeader.getX() == rows - 1				|| snakeHeader.getY() == 0 || snakeHeader.getY() == columns - 1) {			return true;		}		//碰身體判斷		SnakeNode pNow = snakeHeader.getNext();		while (pNow != null) {			if (snakeHeader.getX() == pNow.getX()					&& snakeHeader.getY() == pNow.getY()) {				System.out.println("=========碰到身體===========");				return true;			}			pNow = pNow.getNext();		}		return false;	}}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品va在线| 国产精品1区2区在线观看| 欧美成人黑人xx视频免费观看| 亚洲欧美国产高清va在线播| 在线观看不卡av| 91精品中国老女人| 精品偷拍各种wc美女嘘嘘| 欧洲美女免费图片一区| 国产又爽又黄的激情精品视频| 国产精品第100页| 国产精品444| 亚洲丝袜在线视频| 精品久久久久久亚洲精品| 国产精品日韩欧美大师| 国产专区精品视频| 亚洲一区二区免费在线| 国产成人综合精品在线| 最新日韩中文字幕| 成人久久18免费网站图片| 91久久精品一区| 国内伊人久久久久久网站视频| 欧美在线视频免费| 国产日产欧美a一级在线| 亚洲美女av电影| 中文字幕日韩在线播放| 欧美激情高清视频| 欧美极品少妇与黑人| 91精品中国老女人| 91久久国产精品91久久性色| 91精品国产高清久久久久久久久| 久久精品中文字幕电影| 国产精品视频免费在线观看| 国产欧美日韩视频| 精品久久久久久久久久国产| 中文字幕在线成人| 国外成人性视频| 国产精品久久久久久久久借妻| 欧洲s码亚洲m码精品一区| 一区二区国产精品视频| 欧美日韩在线视频一区二区| 青青草国产精品一区二区| 日韩精品中文字幕在线| 欧美色欧美亚洲高清在线视频| 成人h视频在线| 日韩最新免费不卡| 91在线观看免费| 疯狂蹂躏欧美一区二区精品| 国产丝袜精品第一页| 国内精品400部情侣激情| 中文字幕少妇一区二区三区| 日韩在线视频免费观看高清中文| 国产精品久久久久久久久借妻| 国产成人精品视| 亚洲综合大片69999| 亚洲自拍中文字幕| 欧美日韩裸体免费视频| 国产精品第二页| 久久露脸国产精品| 在线看福利67194| 国内精品美女av在线播放| 国产第一区电影| 中文精品99久久国产香蕉| 欧美激情一区二区三级高清视频| 国产精品网址在线| 国产综合在线观看视频| 69久久夜色精品国产69| 久久99久久久久久久噜噜| 国产在线观看91精品一区| 久久久久久久电影一区| 欧美精品18videosex性欧美| 日韩在线观看免费网站| 亚洲欧美日韩另类| 亚州欧美日韩中文视频| 久久精品国产视频| 亚洲成人1234| 宅男66日本亚洲欧美视频| 98视频在线噜噜噜国产| 国产精品极品美女粉嫩高清在线| 77777少妇光屁股久久一区| 91午夜理伦私人影院| 亚洲乱码一区二区| 国产成人精彩在线视频九色| 日韩在线免费视频观看| 久久高清视频免费| 欧美丝袜一区二区| 国产精品成人av在线| 欧美性猛交xxxx久久久| 国产日韩专区在线| 欧美亚洲国产另类| 国产日韩精品在线播放| 久久香蕉国产线看观看av| 国产精品免费一区| 日韩在线观看免费高清完整版| 日韩欧美亚洲一二三区| 亚洲国产成人久久| 九九九热精品免费视频观看网站| 在线日韩第一页| 国产精品久久久久久av福利| 亚洲国产成人久久综合一区| 欧美激情视频在线免费观看 欧美视频免费一| 国产成人黄色av| 国产精品久久久久久久久免费看| 亚洲一区二区三区乱码aⅴ蜜桃女| 色播久久人人爽人人爽人人片视av| 欧美大片免费观看| 欧美在线视频免费播放| 久久久国产一区二区三区| 日韩av电影手机在线| 57pao国产精品一区| 国产精品成熟老女人| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲国语精品自产拍在线观看| 97久久伊人激情网| 欧美日韩国产限制| 欧美日韩国产限制| 久久影院免费观看| 亚洲精品美女久久久久| 欧美伦理91i| 亚洲电影免费观看高清完整版| 国产va免费精品高清在线| 亚洲第一中文字幕在线观看| 久久国产精品久久久| 欧美激情中文字幕在线| 日韩精品视频免费专区在线播放| 国产亚洲美女精品久久久| 日韩免费黄色av| 成人女保姆的销魂服务| 九九久久国产精品| 欧美高清视频免费观看| 亚洲欧美一区二区精品久久久| 国产一区二区三区在线播放免费观看| 久久国产精品影片| 久久伊人精品一区二区三区| 亚洲色图第一页| 日韩精品在线视频| 欧美中文字幕第一页| 久久人人97超碰精品888| 国产精品一区二区三区免费视频| 久久成人精品视频| 欧美精品久久久久| 欧美乱大交xxxxx另类电影| 午夜精品久久久久久久久久久久久| 欧美成人中文字幕| 日本欧美精品在线| 国产精品人成电影| 午夜精品一区二区三区视频免费看| 九九久久久久99精品| 国产精品久久久| 日本成人精品在线| 精品国产一区av| 国产精品永久免费视频| 日韩美女av在线免费观看| 在线视频免费一区二区| 欧美成年人在线观看| 成人黄色生活片| 欧美日本精品在线| 国产亚洲人成a一在线v站| 粉嫩av一区二区三区免费野| 欧美激情在线一区| 欧美日韩不卡合集视频| 亚洲xxxx妇黄裸体| 亚洲国产成人久久| 亚洲性无码av在线| 亚洲成人激情在线|