java编写贪吃蛇小游戏
废话不多说,直接奉上代码:
Frame.java
packagesnake; importjava.awt.Graphics; importjava.awt.Menu; importjava.awt.MenuBar; importjava.awt.MenuItem; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.awt.event.KeyEvent; importjava.awt.event.KeyListener; importjavax.swing.JFrame; publicclassFrameextendsJFrameimplementsKeyListener{ /** * */ BooleanisAlive; BooleanisPause; Panelpanel; Characterdirection; privatestaticfinallongserialVersionUID=1L; publicFrame(){ //TODOAuto-generatedconstructorstub setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300,300); addKeyListener(this); panel=newPanel(); add(panel); setVisible(true); isAlive=true; isPause=false; direction=newCharacter('d'); MenuBarmenuBar=newMenuBar(); Menumenu=newMenu("menu"); MenuItemreset=newMenuItem("newgame"); MenuItempause=newMenuItem("pause"); pause.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEvente){ //TODOAuto-generatedmethodstub if(!isPause)isPause=true; elseisPause=false; } }); reset.addActionListener(newActionListener(){ @Override publicvoidactionPerformed(ActionEvente){ //TODOAuto-generatedmethodstub reset(); } }); menu.add(reset); menu.add(pause); menuBar.add(menu); setMenuBar(menuBar); } publicvoidreset(){ panel.reset(); isAlive=true; } @Override publicvoidkeyTyped(KeyEvente){ //TODOAuto-generatedmethodstub } @Override publicvoidkeyPressed(KeyEvente){ //TODOAuto-generatedmethodstub if(e.getKeyCode()==KeyEvent.VK_UP)direction='w'; if(e.getKeyCode()==KeyEvent.VK_DOWN)direction='s'; if(e.getKeyCode()==KeyEvent.VK_LEFT)direction='a'; if(e.getKeyCode()==KeyEvent.VK_RIGHT)direction='d'; } @Override publicvoidkeyReleased(KeyEvente){ //TODOAuto-generatedmethodstub } publicvoidpaint(Graphicsg){ panel.repaint(); } }
Launch.java
packagesnake; importjava.util.Timer; importjava.util.TimerTask; publicclassLaunchextendsTimerTask{ Frameframe=newFrame(); publicLaunch(){ //TODOAuto-generatedconstructorstub } booleancrashWall(){ SnakeBodysb=frame.panel.snake.getFirst(); if((sb.x<0)||(sb.y<0)||(sb.x>=Panel.LINE)||(sb.y>=Panel.LINE)) returntrue; else returnfalse; } voidinitial(){ frame.panel.snake.add(newBody()); frame.panel.food=newBody(); } @Override publicvoidrun(){ //TODOAuto-generatedmethodstub if(frame.panel.snake.isEmpty()) initial(); if(frame.isAlive) if(!frame.isPause){ if(goStraight()) frame.isAlive=false; frame.repaint(); } if(crashWall())frame.isAlive=false; } SnakeBodynewBody(){ SnakeBodysb=newSnakeBody(); booleanoverlap=true; while(overlap){ overlap=false; sb.x=(int)(Math.random()*(Panel.LINE-2)+1); sb.y=(int)(Math.random()*(Panel.LINE-2)+1); if(!frame.panel.snake.isEmpty()) for(SnakeBodys:frame.panel.snake) if(sb.equals(s)) overlap=true; } returnsb; } voideat(SnakeBodysb){ frame.panel.snake.addFirst(sb); } booleangoStraight(){ booleanresult=false; SnakeBodysb=newSnakeBody(frame.panel.snake.getFirst()); frame.panel.snake.removeLast(); if(frame.direction=='w') sb.turnUp(); if(frame.direction=='s') sb.turnDown(); if(frame.direction=='a') sb.turnLeft(); if(frame.direction=='d') sb.turnRight(); for(SnakeBodys:frame.panel.snake){ if(sb.equals(s))result=true; } frame.panel.snake.addFirst(sb); if(sb.equals(frame.panel.food)){ if(frame.direction=='w') frame.panel.food.turnUp(); if(frame.direction=='s') frame.panel.food.turnDown(); if(frame.direction=='a') frame.panel.food.turnLeft(); if(frame.direction=='d') frame.panel.food.turnRight(); eat(frame.panel.food); frame.panel.food=newBody(); } returnresult; } publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Launchtimertask=newLaunch(); Timertimer=newTimer(); timer.schedule(timertask,0,500); } }
Panel.java
packagesnake; importjava.awt.Color; importjava.awt.Graphics; importjava.util.LinkedList; importjavax.swing.JPanel; publicclassPanelextendsJPanel{ /** * */ privatestaticfinallongserialVersionUID=1L; publicLinkedList<SnakeBody>snake=newLinkedList<SnakeBody>(); staticfinalintLINE=10; SnakeBodyfood=newSnakeBody(-99,-99); publicPanel(){ //TODOAuto-generatedconstructorstub } publicvoidreset(){ snake.clear(); } publicvoidpaint(Graphicsg){ g.setColor(Color.white); g.fillRect(0,0,getWidth(),getHeight()); for(SnakeBodysb:snake){ g.setColor(Color.black); g.drawRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); g.setColor(Color.orange); g.fillRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); } g.setColor(Color.red); g.fillRect(food.x*getWidth()/LINE,food.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); } }
SnakeBody.java
packagesnake; classSnakeBody{ intx; inty; publicSnakeBody(){ //TODOAuto-generatedconstructorstub x=0; y=0; } publicSnakeBody(inta,intb){ x=a; y=b; } publicSnakeBody(SnakeBodysb){ this(sb.x,sb.y); } publicvoidturnUp(){ y--; } publicvoidturnDown(){ y++; } publicvoidturnLeft(){ x--; } publicvoidturnRight(){ x++; } booleanequals(SnakeBodys){ if((x==s.x)&&(y==s.y))returntrue; elsereturnfalse; } }
以上所述就是本文给大家分享的贪吃蛇的全部代码了,希望能够对大家熟练掌握java有所帮助。