JAVA小程序贪吃蛇源代码.docx
- 文档编号:17372118
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:20
- 大小:17.20KB
JAVA小程序贪吃蛇源代码.docx
《JAVA小程序贪吃蛇源代码.docx》由会员分享,可在线阅读,更多相关《JAVA小程序贪吃蛇源代码.docx(20页珍藏版)》请在冰豆网上搜索。
JAVA小程序贪吃蛇源代码
JAVA贪吃蛇源代码
SnakeGame.java
packageSnakeGame;
importjavax.swing.*;
publicclassSnakeGame
{
publicstaticvoidmain(String[]args)
{
JDialog.setDefaultLookAndFeelDecorated(true);
GameFrametemp=newGameFrame();
}
}
Snake.java
packageSnakeGame;
importjava.awt.*;
importjava.util.*;
classSnakeextendsLinkedList
{
publicintsnakeDirection=2;
publicintsnakeReDirection=4;
publicSnake()
{
this.add(newPoint(3,3));
this.add(newPoint(4,3));
this.add(newPoint(5,3));
this.add(newPoint(6,3));
this.add(newPoint(7,3));
this.add(newPoint(8,3));
this.add(newPoint(9,3));
this.add(newPoint(10,3));
}
publicvoidchangeDirection(Pointtemp,intdirection)
{
this.snakeDirection=direction;
switch(direction)
{
case1:
//up
this.snakeReDirection=3;
this.add(newPoint(temp.x,temp.y-1));
break;
case2:
//right
this.snakeReDirection=4;
this.add(newPoint(temp.x+1,temp.y));
break;
case3:
//down
this.snakeReDirection=1;
this.add(newPoint(temp.x,temp.y+1));
break;
case4:
//left
this.snakeReDirection=2;
this.add(newPoint(temp.x-1,temp.y));
break;
}
}
publicbooleancheckBeanIn(Pointbean)
{
Pointtemp=(Point)this.getLast();
if(temp.equals(bean))
{
returntrue;
}
returnfalse;
}
publicvoidremoveTail()
{
this.remove(0);
}
publicvoiddrawSnake(Graphicsg,intsingleWidthX,intsingleHeightY,intcooPos)
{
g.setColor(ColorGroup.COLOR_SNAKE);
IteratorsnakeSq=this.iterator();
while(snakeSq.hasNext())
{
PointtempPoint=(Point)snakeSq.next();
this.drawSnakePiece(g,tempPoint.x,tempPoint.y,
singleWidthX,singleHeightY,cooPos);
}
}
publicvoiddrawSnakePiece(Graphicsg,inttemp1,inttemp2,
intsingleWidthX,intsingleHeightY,intcooPos)
{
g.fillRoundRect(singleWidthX*temp1+1,
singleHeightY*temp2+1,
singleWidthX-2,
singleHeightY-2,
cooPos,
cooPos);
}
publicvoidclearEndSnakePiece(Graphicsg,inttemp1,inttemp2,
intsingleWidthX,intsingleHeightY,intcooPos)
{
g.setColor(ColorGroup.COLOR_BACK);
g.fillRoundRect(singleWidthX*temp1+1,
singleHeightY*temp2+1,
singleWidthX-2,
singleHeightY-2,
cooPos,
cooPos);
}
}
GameFrame.java
packageSnakeGame;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.*;
importjava.awt.geom.*;
classGameFrameextendsJFrame
{
privateToolkittempKit;
privateinthorizontalGrid,verticalGrid;
privateintsingleWidthX,singleHeightY;
privateintcooPos;
privateSnakemainSnake;
privateLinkedListeatedBean;
{
eatedBean=newLinkedList();
}
privateIteratorsnakeSq;
publicjavax.swing.TimersnakeTimer;
privateintdirection=2;
privateintscore;
privateStringinfo;
privatePointbean,eatBean;
{
bean=newPoint();
}
privatebooleanflag;
privateJMenuBarinfoMenu;
privateJMenu[]tempMenu;
privateJMenuItem[]tempMenuItem;
privateJRadioButtonMenuItem[]levelMenuItem,versionMenuItem;
privateJLabelscoreLabel;
{
scoreLabel=newJLabel();
}
privateGraphics2Dg;
privateImageIconsnakeHead;
{
snakeHead=newImageIcon("LOGO.gif");
}
privateConfigMenuconfigMenu;
privatebooleanhasStoped=true;
publicGameFrame()
{
this.tempKit=this.getToolkit();
this.setSize(tempKit.getScreenSize());
this.setGrid(60,40,5);
this.getContentPane().setBackground(ColorGroup.COLOR_BACK);
this.setUndecorated(true);
this.setResizable(false);
this.addKeyListener(newKeyHandler());
GameFrame.this.snakeTimer=newjavax.swing.Timer(80,newTimerHandler());
this.getContentPane().add(scoreLabel,BorderLayout.SOUTH);
this.scoreLabel.setFont(newFont("Fixedsys",Font.BOLD,15));
this.scoreLabel.setText("Pause[SPACE]-Exit[ESC]");
this.configMenu=newConfigMenu(this);
this.setVisible(true);
}
publicvoidsetGrid(inttemp1,inttemp2,inttemp3)
{
this.horizontalGrid=temp1;
this.verticalGrid=temp2;
this.singleWidthX=this.getWidth()/temp1;
this.singleHeightY=this.getHeight()/temp2;
this.cooPos=temp3;
}
privateclassKeyHandlerextendsKeyAdapter
{
publicvoidkeyPressed(KeyEvente)
{
if(e.getKeyCode()==27)
{
snakeTimer.stop();
if(JOptionPane.showConfirmDialog(null,"Areyousuretoexit?
")==0)
{
System.exit(0);
}
snakeTimer.start();
}
elseif(e.getKeyCode()==37&&mainSnake.snakeDirection!
=2)//left
{
direction=4;
}
elseif(e.getKeyCode()==39&&mainSnake.snakeDirection!
=4)//right
{
direction=2;
}
elseif(e.getKeyCode()==38&&mainSnake.snakeDirection!
=3)//up
{
direction=1;
}
elseif(e.getKeyCode()==40&&mainSnake.snakeDirection!
=1)//down
{
direction=3;
}
elseif(e.getKeyCode()==32)
{
if(!
hasStoped)
{
if(!
flag)
{
snakeTimer.stop();
configMenu.setVisible(true);
configMenu.setMenuEnable(false);
flag=true;
}
else
{
snakeTimer.start();
configMenu.setVisible(false);
configMenu.setMenuEnable(true);
flag=false;
}
}
}
}
}
privateclassTimerHandlerimplementsActionListener
{
publicsynchronizedvoidactionPerformed(ActionEvente)
{
Pointtemp=(Point)mainSnake.getLast();
snakeSq=mainSnake.iterator();
while(snakeSq.hasNext())
{
PointtempPoint=(Point)snakeSq.next();
if(temp.equals(tempPoint)&&snakeSq.hasNext()!
=false)
{
snakeTimer.stop();
stopGame();
JOptionPane.showMessageDialog(null,
"YourScoreis"+score+"\n\nYouLoss!
");
}
}
System.out.println(temp.x+""+temp.y);
if((temp.x==0&&direction==4)||
(temp.x==horizontalGrid-1&&direction==2)||
(temp.y==0&&direction==1)||
(temp.y==verticalGrid-1&&direction==3))
{
snakeTimer.stop();
stopGame();
JOptionPane.showMessageDialog(null,
"YourScoreis"+score+"\n\nYouLoss!
");
}
if(direction!
=mainSnake.snakeReDirection)
{
moveSnake(direction);
}
mainSnake.drawSnake(getGraphics(),singleWidthX,singleHeightY,cooPos);
drawBeanAndEBean(getGraphics());
}
}
publicvoidstopGame()
{
this.hasStoped=true;
this.snakeTimer.stop();
Graphics2Dg=(Graphics2D)GameFrame.this.getGraphics();
g.setColor(ColorGroup.COLOR_BACK);
super.paint(g);
configMenu.setVisible(true);
}
publicvoidresetGame()
{
System.gc();
this.hasStoped=false;
Graphics2Dg=(Graphics2D)GameFrame.this.getGraphics();
g.setColor(ColorGroup.COLOR_BACK);
super.paint(g);
this.mainSnake=newSnake();
this.createBean(bean);
this.eatedBean.clear();
mainSnake.drawSnake(getGraphics(),singleWidthX,singleHeightY,cooPos);
this.snakeTimer.start();
this.direction=2;
this.score=0;
this.scoreLabel.setText("Pause[SPACE]-Exit[ESC]");
}
privatevoidmoveSnake(intdirection)
{
if(mainSnake.checkBeanIn(this.bean))
{
this.score+=100;
this.scoreLabel.setText(this.info+"CurrentScore:
"+this.score);
this.eatedBean.add(newPoint(this.bean));
this.createBean(this.bean);
}
mainSnake.changeDirection((Point)mainSnake.getLast(),direction);
Pointtemp=(Point)mainSnake.getFirst();
if(eatedBean.size()!
=0)
{
if(eatedBean.getFirst().equals(temp))
{
eatedBean.remove(0);
}
else
{
mainSnake.clearEndSnakePiece(getGraphics(),temp.x,temp.y,
singleWidthX,singleHeightY,cooPos);
mainSnake.removeTail();
}
}
else
{
mainSnake.clearEndSnakePiece(getGraphics(),temp.x,temp.y,
singleWidthX,singleHeightY,cooPos);
mainSnake.removeTail();
}
}
privatevoiddrawBeanAndEBean(Graphicsg)
{
g.setColor(ColorGroup.COLOR_BEAN);
this.drawPiece(g,this.bean.x,this.bean.y);
g.setColor(ColorGroup.COLOR_EATEDBEAN);
snakeSq=eatedBean.iterator();
while(snakeSq.hasNext())
{
PointtempPoint=(Point)snakeSq.next();
this.drawPiece(g,tempPoint.x,tempPoint.y);
}
}
privatevoiddrawPiece(Graphicsg,intx,inty)
{
g.fillRoundRect(this.singleWidthX*x+1,
this.singleHeightY*y+1,
this.singleWidthX-2,
this.singleHeightY-2,
this.cooPos,
this.cooPos);
}
privatevoidcreateBean(Pointtemp)
{
LP:
while(true)
{
temp.x=(int)(Math.random()*this.horizontalGrid);
temp.y=(int)(Math.random()*this.verticalGrid);
snakeSq=mainSnake.iterator();
while(snakeSq.hasNext())
{
if(snakeSq.next().equals(newPoint(temp.x,temp.y)))
{
continueLP;
}
}
break;
}
}
}
ConfigMenu.java
packageSnakeGame;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassConfigMenuextendsJMenuBar
{
GameFrameowner;
JMenu[]menu;
JMenuItem[]menuItem;
JRadioButtonMenuItem[]speedItem,modelItem,standardItem;
privateUIManager.LookAndFeelInfolooks[];
publicConfigMenu(GameFrameowner)
{
this.owner=owner;
owner.setJMenuBar(this);
String[]menu_name={"SnakeGame","GameConfigure","GameHelp"};
menu=newJMenu[menu_name.length];
for(inti=0;i { menu[i]=newJMenu(menu_name[i]); menu[i].setFont(newFont("Courier",Font.PLAIN,12)); this.add(menu[i]); } String[]menuItem_name={"StartGame","StopGame","ExitGame", "GameColor", "About..."}; menuItem=newJMenuItem[menuItem_name.length]; for(inti=0;i { menuItem[i]=newJMenuItem(menuItem_name[i]); menuItem[i].setFont(newFont("Courier",Font.PLAIN,12)); menuItem[i].addActionListener(newActionHandler()); } menu[0].add(menuItem[0]); menu[0].add(menuItem[1]); menu[0].addSeparator(); menu[0].add(menuItem[2]); menu[1].add(menuItem[3]); menu[2].add(menuItem[4]); String[]inner_menu_name={"GameSpeed","WindowModel","GameStandard"}; JMenu[]inner_menu=newJMenu[inner_menu_name.length]; for(inti=0;i { inner_menu[i]=newJMenu(inner_menu_name[i]); inner_menu[i].setFont(newFont("Courier",Font.PLAIN,12)); menu[1].ad
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 程序 贪吃 源代码