用Java编写的贪吃蛇游戏.docx
《用Java编写的贪吃蛇游戏.docx》由会员分享,可在线阅读,更多相关《用Java编写的贪吃蛇游戏.docx(8页珍藏版)》请在冰点文库上搜索。
用Java编写的贪吃蛇游戏
贪吃蛇游戏的制作
里面还有一些代码还没有完善,比如说:
没有开始的控制,当玩家一进去游戏就自动开始了,并且当玩家同时点击方向键的上键和左键游戏就会中断,这些仅仅是我在测试的时候发现的,也许还有更多的错误,见谅!
我会在最近更新的,然后上传到我的XX账号里面的。
当然,这个游戏里面的界面的大小和颜色也许不是你所喜欢的,但是你可以修改的,具体的修改方法如下:
1、修改界面的大小
在GreenSnake类中,publicstaticfinalintcanvasWidth=1400;
publicstaticfinalintcanvasHeigth=1500;
在上面的代码中修改后面的值就可以了。
2、修改界面的颜色
也是在GreenSnake类中,g.setColor(Color.GREEN;
修改color后面颜色就可以了,(这里说明一下:
你可以将color后面
的逗号去掉,然后重新输入一个,后面就自动会弹出很多的颜色,你
可以在里面选择一个自己喜欢的颜色
3、修改蛇的食物的颜色
也是在GreenSnake类中,g.setColor(Color.RED;
方法和修改界面的颜色一样
4、修改蛇身的大小
也是在GreenSnake类中,publicstaticfinalintnodeWidth=20;
publicstaticfinalintnodeHeigth=20;
修改以上代码的值就可以了。
贪吃蛇游戏的制作:
这里我用到的是netbeansIDE6.9.1这个软件制作的:
1、首先点击/文件/,创建一个新的项目,名称叫snake;
2、在这个项目下创建一个新的包,取名叫snake;
3、最后就是需要在这个包里面创建3个类,这3个类分别为:
Greedsnake、Node、SnakeModel.
(1Greensnake.java
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjavax.swing.*;
/**
*
*@author:
1袏掱惢1
publicclassGreedSnakeimplementsKeyListener{
JFramemainFrame;
CanvaspaintCanvas;
JLabellabelScore;
SnakeModelsnakeModel=null;
publicstaticfinalintcanvasWidth=1400;
publicstaticfinalintcanvasHeigth=1500;
publicstaticfinalintnodeWidth=20;
publicstaticfinalintnodeHeigth=20;
publicGreedSnake({
mainFrame=newJFrame("GreedSnake";
Containercp=mainFrame.getContentPane(;
labelScore=newJLabel("Score:
";
cp.add(labelScore,BorderLayout.NORTH;
//
paintCanvas=newCanvas(;
paintCanvas.setSize(canvasWidth+1,canvasHeigth+1;
paintCanvas.addKeyListener(this;
cp.add(paintCanvas,BorderLayout.CENTER;
//
JPanelpanelButtom=newJPanel(;
panelButtom.setLayout(newBorderLayout(;
JLabellabelHelp;
labelHelp=newJLabel("PageUp,PageDownforspeed:
",JLabel.CENTER;
panelButtom.add(labelHelp,BorderLayout.NORTH;
labelHelp=newJLabel("EnterorRorSforstart:
",JLabel.CENTER;
panelButtom.add(labelHelp,BorderLayout.CENTER;
labelHelp=newJLabel("SPACEorPforpause",JLabel.CENTER;
panelButtom.add(labelHelp,BorderLayout.SOUTH;
cp.add(panelButtom,BorderLayout.SOUTH;
mainFrame.addKeyListener(this;
mainFrame.pack(;
mainFrame.setResizable(false;
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE;
mainFrame.setVisible(true;
begin(;
}
publicvoidkeyTyped(KeyEvente{
}
publicvoidkeyPressed(KeyEvente{
intkeyCode=e.getKeyCode(;
if(snakeModel.running{
switch(keyCode{
caseKeyEvent.VK_UP:
snakeModel.changeDirection(SnakeModel.UP;
break;
caseKeyEvent.VK_DOWN:
snakeModel.changeDirection(SnakeModel.DOWN;
break;
caseKeyEvent.VK_LEFT:
snakeModel.changeDirection(SnakeModel.LEFT;
break;
caseKeyEvent.VK_RIGHT:
snakeModel.changeDirection(SnakeModel.RIGHT;
break;
caseKeyEvent.VK_PAGE_UP:
snakeModel.speedUp(;
break;
caseKeyEvent.VK_PAGE_DOWN:
snakeModel.speedDown(;
break;
caseKeyEvent.VK_SPACE:
caseKeyEvent.VK_P:
snakeModel.changePauseState(;
break;
}
}
}
publicvoidkeyReleased(KeyEvente{
}
voidrepaint({
Graphicsg=paintCanvas.getGraphics(;
//绘制背景
g.setColor(Color.GREEN;
g.fillRect(0,0,canvasWidth,canvasHeigth;
//画蛇
g.setColor(Color.BLACK;
LinkedListna=snakeModel.nodeArray;
Iteratorit=na.iterator(;
while(it.hasNext({
Noden=(Nodeit.next(;
drawNode(g,n;
}
//画食物
g.setColor(Color.RED;
Noden=snakeModel.food;
drawNode(g,n;
}
voidbegin({
if(snakeModel==null{
snakeModel=newSnakeModel(this,canvasWidth/nodeWidth,canvasHeigth/nodeHeigth;
}
(newThread(snakeModel.start(;
//(newThread(snakeModel.start(;
}
voiddrawNode(Graphicsg,Noden{
g.fillRect(n.x*nodeWidth,n.y*nodeHeigth,nodeWidth-1,nodeHeigth-1;
}
publicstaticvoidmain(String[]args{
GreedSnakegs=newGreedSnake(;
}
}
(2Node.java
/**
*
*@author:
1袏掱惢1
*/
publicclassNode{
intx;
inty;
publicNode(intx,inty{
this.x=x;
this.y=y;
}
}
(3SnakeModel.java
importjava.util.*;
importjava.util.logging.Level;
importjava.util.logging.Logger;
/**
*
*@author:
1袏掱惢1*/
publicclassSnakeModelimplementsRunnable{
GreedSnakegs;
boolean[][]matrix;//界面数据保存在此数组
LinkedListnodeArray=newLinkedList(;
Nodefood;
intmaxX;
intmaxY;
booleanrunning=false;
inttimeInterval=200;
doublespeedChangeRate=0.1;
booleanpaused=false;//游戏状态
intdirection=2;//初始方向
publicstaticfinalintUP=2;
publicstaticfinalintDOWN=4;
publicstaticfinalintLEFT=1;
publicstaticfinalintRIGHT=3;
publicSnakeModel(GreedSnakegs,intmaxX,intmaxY{
this.gs=gs;this.maxX=maxX;this.maxY=maxY;matrix=newboolean[maxX][];for(inti=0;i20?
10:
maxX/2;for(inti=0;iNoden=(NodenodeArray.getFirst(;intx=n.x;inty=n.y;switch(direction{caseUP:
y--;break;caseDOWN:
y++;break;caseLEFT:
x--;break;caseRIGHT:
x++;break;}if((0<=x&&x=newDirection%2{direction=newDirection;}}
publicvoidspeedUp({timeInterval=(int(timeInterval*(1-speedChangeRate;}publicvoidspeedDown({timeInterval=(int(timeInterval*(1+speedChangeRate;}publicvoidchangePauseState({paused=!
paused;}publicvoidrun({running=true;while(running{//gs.repaint(;try{Thread.sleep(timeInterval;}catch(InterruptedExceptionex{Logger.getLogger(SnakeModel.class.getName(.log(Level.SEVERE,ex;}if(moveOn({gs.repaint(;}else{break;}}}}null,