JavaAWT实现贪吃蛇游戏.docx
- 文档编号:7451041
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:12
- 大小:23.22KB
JavaAWT实现贪吃蛇游戏.docx
《JavaAWT实现贪吃蛇游戏.docx》由会员分享,可在线阅读,更多相关《JavaAWT实现贪吃蛇游戏.docx(12页珍藏版)》请在冰点文库上搜索。
JavaAWT实现贪吃蛇游戏
importproject.MainPanel;
/**
*入口函数
*
*@authorAdministrator
*
*/
publicclassMain{
publicstaticvoidmain(String[]args){
newMainPanel();
}
}
packageproject;
importjava.util.LinkedList;
/**
*存放程序运行时数据
*
*@authorAdministrator
*
*/
publicclassConfig{
/**
*节点尺寸
*/
publicstaticfinalintLEN=25;
publicstaticfinalintROW=20;
publicstaticfinalintCOLUMN=20;
/*
*边距
*/
publicstaticfinalintLEFT_LIMIT=10;
publicstaticfinalintUPER_LIMIT=30;
publicstaticfinalintDOWN_LIMIT=LEN*ROW+UPER_LIMIT;
publicstaticfinalintRIGHT_LIMIT=LEN*COLUMN+LEFT_LIMIT;
/**
*方向常量
*/
publicstaticfinalintUPER=0,DOWN=1,LEFT=2,RIGHT=3;
/**
*画面布局数据存储数组
*/
privatestaticint[][]panel=newint[ROW][COLUMN];
/**
*移动方向初始化向右
*/
privatestaticintdirect=RIGHT;
/**
*移动时间间隔
*/
privatestaticlongtime=500;
/**
*贪吃蛇数据存储容器
*/
privatestaticLinkedList
/**
*增加移动时间间隔,上限为1000毫秒
*/
publicstaticvoidtimeUp(){
if(time<1000)
time+=100;
}
/**
*减少时间间隔,下线为100毫秒
*/
publicstaticvoidtimeDown(){
if(time>100)
time-=100;
}
/**
*获取当前时间间隔
*
*@returntime
*/
publicstaticlonggetTime(){
returntime;
}
/**
*获取当前界面数据
*
*@return
*/
publicstaticint[][]getPanel(){
returnpanel;
}
/**
*设置移动方向
*
*@paramdirect
*/
publicstaticvoidsetDirect(intdirect){
Config.direct=direct;
}
/**
*获得移动方向
*
*@return
*/
publicstaticintgetDirect(){
returndirect;
}
/**
*添加蛇头位置,如果与蛇身重复,抛出运行时异常用于结束游戏
*
*@paramx
*@paramy
*/
publicstaticvoidadd(intx,inty){
panel[x][y]=1;
for(int[]arr:
track){
if(arr[0]==x&&arr[1]==y)
thrownewRuntimeException();
}
track.addFirst(newint[]{x,y});
}
/**
*移除蛇尾
*/
publicstaticvoidremove(){
int[]site=(int[])track.removeLast();
panel[site[0]][site[1]]=0;
}
}
packageproject;
importjava.awt.Graphics;
importjavax.swing.JFrame;
@SuppressWarnings("serial")
/**
*界面布局类
*@authorAdministrator
*
*/
publicclassMainPanelextendsJFrame{
JFrameframe;
Policepolice;
publicMainPanel(){
//TODOAuto-generatedconstructorstub
frame=this;
frame.setBounds(300,300,Config.RIGHT_LIMIT,Config.DOWN_LIMIT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setTitle("贪吃蛇");
init();
}
privatevoidinit(){
newWorm(this);
police=newPolice();
frame.addKeyListener(police);
}
publicvoidpaint(Graphicsg){
super.paint(g);
paintWorm(g);
}
privatevoidpaintWorm(Graphicsg){
int[][]panel=Config.getPanel();
for(inti=0;i for(intj=0;j if(panel[i][j]==1){ g.fillRect((Config.LEFT_LIMIT+Config.LEN*j), (Config.UPER_LIMIT+Config.LEN*i),Config.LEN, Config.LEN); } } } } } packageproject; importjava.awt.event.KeyEvent; importjava.awt.event.KeyListener; importstaticjava.awt.event.KeyEvent.*; /** *键盘监听器类 * *@authorAdministrator * */ publicclassPoliceimplementsKeyListener{ @Override publicvoidkeyPressed(KeyEvente){ //TODOAuto-generatedmethodstub { chara=e.getKeyChar(); if(a=='a') Config.setDirect(Config.LEFT); elseif(a=='s') Config.setDirect(Config.DOWN); elseif(a=='d') Config.setDirect(Config.RIGHT); elseif(a=='w') Config.setDirect(Config.UPER); elseif(a=='q') Config.timeUp(); elseif(a=='e') Config.timeDown(); } { inti=e.getKeyCode(); if(i==VK_LEFT) Config.setDirect(Config.LEFT); elseif(i==VK_DOWN) Config.setDirect(Config.DOWN); elseif(i==VK_RIGHT) Config.setDirect(Config.RIGHT); elseif(i==VK_UP) Config.setDirect(Config.UPER); } } publicvoidkeyReleased(KeyEvente){ //TODOAuto-generatedmethodstub } @Override publicvoidkeyTyped(KeyEvente){ //TODOAuto-generatedmethodstub } } packageproject; importjavax.swing.JFrame; /** *贪吃蛇构造类 * *@authorAdministrator * */ publicclassWormimplementsRunnable{ int[][]panel; /** *随机食物位置 */ int[]food=newint[2]; /** *蛇头位置信息 */ int[]head; /** *当前移动方向 */ intdirect; JFrameframe; publicWorm(JFrameframe){ this.frame=frame; panel=Config.getPanel(); direct=Config.getDirect(); head=newint[2]; wormInit(); newThread(this).start(); } privatevoidwormInit(){ for(inti=1;i<=3;i++){ Config.add(7,i); } head[0]=7; head[1]=3; } publicvoidrun(){ try{ foodRandom(); while(true){ try{ Thread.sleep(Config.getTime()); }catch(InterruptedExceptione){ e.printStackTrace(); } switch(Config.getDirect()){ caseConfig.UPER: { if(direct==Config.DOWN){ Config.setDirect(direct); break; } Config.add(head[0]--,head[1]); if(head[0]==food[0]&&head[1]==food[1]){ //蛇头移动到食物位置后,调用产生食物方法,并不调用移除蛇尾方法 foodRandom(); break; } Config.remove(); break; } caseConfig.DOWN: { if(direct==Config.UPER){ Config.setDirect(direct); break; } Config.add(head[0]++,head[1]); if(head[0]==food[0]&&head[1]==food[1]){ foodRandom(); break; } Config.remove(); break; } caseConfig.LEFT: { if(direct==Config.RIGHT){ Config.setDirect(direct); break; } Config.add(head[0],head[1]--); if(head[0]==food[0]&&head[1]==food[1]){ foodRandom(); break; } Config.remove(); break; } caseConfig.RIGHT: { if(direct==Config.LEFT){ Config.setDirect(direct); break; } try{ Config.add(head[0],head[1]++); }catch(Exceptione){ } if(head[0]==food[0]&&head[1]==food[1]){ foodRandom(); break; } Config.remove(); break; } } direct=Config.getDirect(); frame.paint(frame.getGraphics()); } }catch(Exceptione){ frame.setTitle("GameOver"); } } /** *在随机位置产生食物 */ privatevoidfoodRandom(){ while(true){ intx=(int)(Math.random()*Config.ROW); inty=(int)(Math.random()*Config.COLUMN); if(panel[x][y]==0){ panel[x][y]=1; food[0]=x; food[1]=y; return; } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaAWT 实现 贪吃 游戏