Java贪吃蛇程序.docx
- 文档编号:6848360
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:12
- 大小:16.65KB
Java贪吃蛇程序.docx
《Java贪吃蛇程序.docx》由会员分享,可在线阅读,更多相关《Java贪吃蛇程序.docx(12页珍藏版)》请在冰豆网上搜索。
Java贪吃蛇程序
packagePackage1;
importjava.awt.Graphics;
importjava.awt.Point;
importPackageTool.Global;
publicclassFoodextendsPoint{
publicvoidnewFood(Pointp){
this.setLocation(p);
}
publicbooleanisSnakeEatFood(Snakesnake){
System.out.println("Food'sisSnakeEatFood");
returnthis.equals(snake.getHead());
}
publicvoiddrawMe(Graphicsg){
System.out.println("Food'sdrawMe");
g.fill3DRect(x*Global.CELL_SIZE,y*Global.CELL_SIZE,
Global.CELL_SIZE,Global.CELL_SIZE,true);
}
}
packagePackage1;
importjava.awt.Color;
importjava.awt.Graphics;
importjava.awt.Point;
importjava.util.Random;
importPackageTool.Global;
publicclassGround{
privateint[][]rocks=newint[Global.WIDTH][Global.HEIGHT];
publicGround(){
for(intx=0;x rocks[x][0]=1; rocks[x][Global.HEIGHT-1]=1; } } publicbooleanisSnakeEatRock(Snakesnake){ System.out.println("Ground'sisSnakeEatRoce"); for(intx=0;x for(inty=0;y if((rocks[x][y]==1)&&(x==snake.getHead().x&&y==snake.getHead().y)){ returntrue; } } } returnfalse; } publicPointgetPoint(){ Randomrandom=newRandom(); intx=0,y=0; do{ x=random.nextInt(Global.WIDTH); y=random.nextInt(Global.HEIGHT); } while(rocks[x][y]==1); returnnewPoint(x,y); } publicvoiddrawMe(Graphicsg){ System.out.println("Ground'sdrawMe"); for(intx=0;x for(inty=0;y if(rocks[x][y]==1){ g.setColor(Color.gray); g.fill3DRect(x*Global.CELL_SIZE,y*Global.CELL_SIZE, Global.CELL_SIZE,Global.CELL_SIZE,false); } } } } } packagePackage1; importjava.awt.Color; importjava.awt.Graphics; importjava.awt.Point; importjava.util.HashSet; importjava.util.LinkedList; importjava.util.Set; importPackageListener.SnakeListener; importPackageTool.Global; publicclassSnake{ privateSet privateLinkedList publicintoldDirection,newDirection; publicstaticfinalintUP=-1; publicstaticfinalintDOWN=1; publicstaticfinalintLEFT=2; publicstaticfinalintRIGHT=-2; publicstaticbooleangameover; privatePointoldTail; publicbooleanlife=true; publicSnake(){ init(); } publicvoidinit(){ intx=Global.HEIGHT/2; inty=Global.HEIGHT/2; for(inti=0;i<3;i++){ body.addFirst(newPoint(x--,y)); } oldDirection=newDirection=LEFT;//新旧方向复制 } publicvoiddie(){ life=false; gameover=true; } publicvoidmove(){ System.out.println("Snake'smove"); if(! (oldDirection+newDirection==0)){ oldDirection=newDirection; } oldTail=body.removeLast(); intx=body.getFirst().x; inty=body.getFirst().y; switch(oldDirection){ caseUP: y--; if(y<0){ y=Global.HEIGHT-1; } break; caseDOWN: y++; if(y>=Global.HEIGHT){ y=0; } break; caseLEFT: x--; if(x<0){ x=Global.WIDTH-1; } break; caseRIGHT: x++; if(x>=Global.WIDTH){ x=0; } } PointnewHead=newPoint(x,y); body.addFirst(newHead); } publicvoidchangeDirection(intdirection){ System.out.println("Snake'schangeDirectiion"); newDirection=direction; } publicvoideatFood(){ System.out.println("Snake'seatFood"); body.addLast(oldTail); } publicbooleanisEatBody(){ System.out.println("Snake'sisEatBody"); for(inti=1;i if(body.get(i).equals(this.getHead())){ returntrue; } } returnfalse; } publicvoiddrawMe(Graphicsg){ System.out.println("Snake'sdrawMe"); g.setColor(Color.BLUE); for(Pointp: body){ g.fill3DRect(p.x*Global.CELL_SIZE,p.y*Global.CELL_SIZE, Global.CELL_SIZE,Global.CELL_SIZE,true); } } publicPointgetHead(){ returnbody.getFirst(); } privateclassSnakeDriverimplementsRunnable{ @Override publicvoidrun(){ //TODOAuto-generatedmethodstub while(life){ move(); for(SnakeListenerl: listeners){ l.snakeMoved(Snake.this); } try{ Thread.sleep(300); }catch(InterruptedExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } } } publicvoidstart(){ newThread(newSnakeDriver()).start(); } publicvoidaddSnakeListener(SnakeListenerl){ if(l! =null){ this.listeners.add(l); } } } packagePackage2; importjava.awt.Color; importjava.awt.Font; importjava.awt.Graphics; importjavax.swing.JPanel; importPackage1.Food; importPackage1.Ground; importPackage1.Snake; importPackageTool.Global; publicclassGamePanelextendsJPanel{ privateSnakesnake; privateFoodfood; privateGroundground; publicvoiddisplay(Snakesnake,Foodfood,Groundground){ System.out.println("GamePanel'sdisplay"); this.snake=snake; this.food=food; this.ground=ground; this.repaint(); } @Override protectedvoidpaintComponent(Graphicsg){ //TODOAuto-generatedmethodstub //super.paintComponent(g); g.setColor(newColor(0xcfcfcf)); g.fillRect(0,0,Global.WIDTH*Global.CELL_SIZE, Global.HEIGHT*Global.CELL_SIZE); this.snake.drawMe(g); this.food.drawMe(g); this.ground.drawMe(g); if(Snake.gameover){ g.setColor(Color.BLACK); g.fillRect(0,0,Global.HEIGHT*Global.CELL_SIZE, Global.HEIGHT*Global.CELL_SIZE); g.setColor(Color.YELLOW); g.setFont(newFont("宋体",Font.BOLD,30)); g.drawString("GAMEOVER",Global.HEIGHT*Global.CELL_SIZE/4, Global.HEIGHT*Global.CELL_SIZE/2); } } } packagePackage3; importjava.awt.Graphics; importjava.awt.event.KeyAdapter; importjava.awt.event.KeyEvent; importPackage1.Food; importPackage1.Ground; importPackage1.Snake; importPackage2.GamePanel; importPackageListener.SnakeListener; publicclassControllerextendsKeyAdapterimplementsSnakeListener{ privateSnakesnake; privateFoodfood; privateGroundground; privateGamePanelgamepanel; publicController(Snakesnake,Foodfood,Groundground,GamePanelgamepanel){ super(); this.snake=snake; this.food=food; this.ground=ground; this.gamepanel=gamepanel; } @Override publicvoidkeyPressed(KeyEvente){ //TODOAuto-generatedmethodstub //super.keyPressed(e); switch(e.getKeyCode()){ caseKeyEvent.VK_UP: snake.changeDirection(Snake.UP); break; caseKeyEvent.VK_DOWN: snake.changeDirection(Snake.DOWN); break; caseKeyEvent.VK_LEFT: snake.changeDirection(Snake.LEFT); break; caseKeyEvent.VK_RIGHT: snake.changeDirection(Snake.RIGHT); break; } } @Override publicvoidsnakeMoved(Snakesnake){ gamepanel.display(snake,food,ground); if(food.isSnakeEatFood(snake)){ snake.eatFood(); food.newFood(ground.getPoint()); } if(ground.isSnakeEatRock(snake)){ snake.die(); } if(snake.isEatBody()){ snake.die(); } } publicvoidnewGame(){ snake.start(); food.newFood(ground.getPoint()); } } packagePackageListener; importPackage1.Snake; publicinterfaceSnakeListener{ voidsnakeMoved(Snakesnake); } packagePackageTool; publicclassGlobal{ publicstaticfinalintCELL_SIZE=20; publicstaticfinalintWIDTH=15; publicstaticfinalintHEIGHT=15; } packageTestPackage; importjava.awt.BorderLayout; importjavax.swing.JFrame; importPackage1.Food; importPackage1.Ground; importPackage1.Snake; importPackage2.GamePanel; importPackage3.Controller; importPackageTool.Global; publicclassGameTest{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Snakesnake=newSnake(); Foodfood=newFood(); Groundground=newGround(); GamePanelgamePanel=newGamePanel(); Controllercontroller=newController( snake,food,ground,gamePanel); JFrameframe=newJFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); gamePanel.setSize(Global.WIDTH*Global.CELL_SIZE, Global.HEIGHT*Global.CELL_SIZE); frame.setSize(Global.WIDTH*Global.CELL_SIZE+10, Global.HEIGHT*Global.CELL_SIZE+35); frame.add(gamePanel,BorderLayout.CENTER); gamePanel.addKeyListener(controller); snake.addSnakeListener(controller); frame.addKeyListener(controller); frame.setVisible(true); controller.newGame(); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 贪吃 程序