使用双向链表实现贪吃蛇程序
1.链表节点定义:
软件包snake; public class snakenode {private int x; private int y; private snakenode next; private snakenode; prublic snakenode(){} public snakenode(int x,int x,int y){super(super(super(); this.x = x; this; this; this; this; this; this; this; this; 。 。 .ahead =前面;}}}
主程序:
软件包snake; import java.awt.borderlayout; import java.awt.gridlayout; import java.awt.keyeventpostprocessor; import java.ava.awt.keyboard.keyboardfocusmanager; impt swing.imageicon; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.joptionpane; import javax.swing.jpanel;/***由HackCoder创建的。 */公共类蛇扩展jframe {私有静态最终int行= 60;私有静态最终int列= 80; // private static final int = 1; private static final int int = 2; private static final = 2; private static final final int int = 3 ;私有静态最终int左= 4; private static int driection_now =右;私有静态boolean iseat = false; private static int tailx; private static int taily;私人静态snakenode snakeheader = new snakeDer = new snakenode();私人静态snakenode snaketaDe snaketailer snaketailer = snakeheader; snakeheader;私有静态snakode food = new snakenode();私有静态jlabel [] images = new Jlabel [rows * columns]; public static void main(string args []){snakeheader.setx(new andar andyx。 ); snakeheader.sety(new Random()。nextInt(列-1)); snake snake = new Snake(); food = getfood(); while(true){try {next {next(); // if(food.getx()== snakeheader.getx()&& food.gety()== snakeheader.gety()){addtail(); iseat = true;} // iseat){food = getfood();} // if(judreend()){joptionpane.showmessagedialog(null,“ null,“”,“ 游戏结束!”,joptionpane.error_message); pnow = snakeheader; while(pnow!= null){images [columns * pnow.getx() + pnow.gety()]。seticon(new Imageicon(“ image/image/black.jpg”,“”); pnow = pnow = pnow = pnow .getNext();}图像[列 * 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/primags/white.jpg”,“”)); pnow = pnow = 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,400); this.set.setvisible(true); setDefaultCloseOperation(javax.swing.window.window.window.exit_on_close.exit_close.exit_close.exit_close.exit_close.exit_close. ); //添加全局键盘监听键beyboardfocusmanager = keyboardfocusmanager.getCurrentKeyboardFocusManager(); Manager.AddKeyEventPostProcessor((((keyeventPostProcessor)this.getMyKeyKeyKeyekekeyeventLer(keyeventPostProcessor)this.getMyKeyKeyekeyeventler() jpanel(new gridlayout(行,列,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(new jlabel( imageicon); p.Add(图像[列 * x + y]);}} getContentPane()。add(p,borderlayout.center);}/** *键盘监听 * * * * @return */public keyeventPostProcessor getMyKeyKeyKeyKeyekeyEventHandler() {返回new KeyEventPostProcessor(){public boolean tostprocesskeyevent(keyevent e){if(e.getId()!= keyevent.key_presse) ){if(snakeheader.getNext()!= null){//判断方向是否可转int x1 = snakeheader.getx(); int y1 = snakeheader.gety(); int x2 = snakeheader.getNext()。 ); int y2 = snakeheader.getNext()。gety(); if(y1 == y2 && x1 -x2 == 1){return true;}} driection_now = up;} else;} else if(keyCode == keyevent.vk_right) {if(snakeheader.getNext()!= null){int x1 = snakeheader.getx(); int y1 = snakeheader.gety(); int x2 = 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()。 (y1 == y2 && x2 -x1 == 1){return true;}} driection_now = down;} else if(keyCode == keyevent.vk_left){if(snakeheader.getNext()!= null){int x1 = null){int x1 = snakeheader.getx(); int y1 = snakeheader.gety(); int x2 = snakeheader.getNext()。getx(); int y2 = snakeheader.getNext()。 y2 == 1){return true;}} driection_now = left;} return true;}};}/** * * * * @param header */public static void next(){如果(SnakeHeader == null)返回; tailx = snaketailer.getx(); taily = snaketailer.gety(); snakenode pnow = snaketailer; while while(pnow!= null){if(pnow === snakeheader) setX(pnow.getAhead()。getx()); pnow.sety(pnow.getahead()。gety()); pnow = pnow = pnow.getahead();} if(driection_now == right) 。 -1);} else if(driection_now == down){snakeheader.setx(snakeheader.getx() + 1);}} public static void addtail(){snakenode tail = new snakenode = new snakenode(pailx,taily) (尾巴); tail.setahead(snaketailer); snaketailer = snaketailer.getNext();} public static snakenode getfood(){snakenode food = new snakenode(); boolean flag = true; ().nextint(rows); int y = new Random()。nextint(列); if(x == 0 || x ==行-1 || y == 0 || y ==列-1){contine;} snakenode pnow = snakeheader; while(pnow!= null){if(x == pnow.getx()&& y == pnow.gety()){flag = falle;} pnow = pnow.getNext();} if(flag){fag = new snakenode(x,y); break;}}返回食物;} public static boolean judgrean judgreand judgeend(){//碰墙判断(snakeheader.getx( )== 0 || pnow = snakeheader.getNext(); while(pnow!= null){if(snakeheader.getx()== pnow.getx()&& snakeheader.gety()== pnow.gety() (“ =======================”);返回true;} pnow = pnow = pnow.getNext();} return false;}}}}