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有所帮助。