java课程设计-贪吃蛇代码_第1页
java课程设计-贪吃蛇代码_第2页
java课程设计-贪吃蛇代码_第3页
java课程设计-贪吃蛇代码_第4页
java课程设计-贪吃蛇代码_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java课程设计-贪吃蛇代码importjava.awt.Color;importponent;importjava.awt.Graphic;importjava.awt.event.ActionEvent;importjava.awt.event.ActionLitener;importjava.awt.event.KeyEvent;importjava.awt.event.KeyLitener;importjava.util.ArrayLit;importjava某.亚皿8.80那©什@这0可;口importjava某.亚皿8.)尸丫@山©;口importjava某.亚皿8.」1@6©1;口importjava某.亚皿8.)乂©口口;口importjava某.亚皿8.)乂©口口8@「;口importjava某.亚皿8.)乂0口口北©山;口importjava某.wing.JPanel;口publicclaSnakeGame{publictaticvoidmain(String[]arg){SnakeFrameframe=newSnakeFrame();frame.etTitle("贪吃蛇");口frame.etDefaultCloeOperation(JFrame.E某IT_ON_CLOSE);口frame.etViible(true);}}// 记录状态的线程claStatuRunnableimplementRunnable{publicStatuRunnable(Snakenake,JLabeltatuLabel,JLabelcoreLabel){thi.tatuLabel=tatuLabel;thi.coreLabel=coreLabel;thi.nake=nake;}publicvoidrun(){Stringta="";Stringpe="";while(true){witch(nake.tatu){caeSnake.RUNNING:ta="Running";break;caeSnake.PAUSED:ta="Paued";break;caeSnake.GAMEOVER:ta="GameOver";break;}tatuLabel.etTe某t(ta);口coreLabel.etTe某t(""+nake.core);口try{Thread.leep(100);}catch(E某ceptione){口}}}privateJLabelcoreLabel;privateJLabeltatuLabel;privateSnakenake;// 蛇运动以及记录分数的线程claSnakeRunnableimplementRunnable{thi.nake=nake;}publicvoidrun(){while(true){try{nake.move();Thread.leep(nake.peed);}catch(E某ceptione){口}}}privateSnakenake;}claSnake{booleaniRun;// 是否运动中ArrayLit<Node>body;// 蛇体

Nodefood;//食物Nodefood;//食物intderection;// 方向intcore;inttatu;intpeed;publictaticfinalintSLOW=500;publictaticfinalintMID=300;publictaticfinalintFAST=100;publictaticfinalintRUNNING=1;publictaticfinalintPAUSED=2;publictaticfinalintGAMEOVER=3;publictaticfinalintLEFT=1;publictaticfinalintUP=2;publictaticfinalintRIGHT=3;publictaticfinalintDOWN=4;publicSnake(){peed=Snake.SLOW;core=0;iRun=fale;tatu=Snake.PAUSED;derection=Snake.RIGHT;body=newArrayLit<Node>();body.add(newNode(60,20));body.add(newNode(40,20));body.add(newNode(20,20));makeFood();}// 判断食物是否被蛇吃掉// 如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉privatebooleaniEaten(){Nodehead=body.get(0);if(derection二二Snake.RIGHT&&(head.某+Node.W)=二food.某口&&head.y==food.y)returntrue;if(derection二二Snake.LEFT&&(head.某-Node.W)二二food.某口&&head.y==food.y)returntrue;if(derection二二Snake.UP&&head.某==food.某口&&(head.y-Node.H)==food.y)returntrue;if(derection二二Snake.DOWN&&head.某==food.某口&&(head.y+Node.H)==food.y)returntrue;elereturnfale;}// 是否碰撞privatebooleaniCollion(){Nodenode=body.get(0);// 碰壁if(derection二二Snake.RIGHT&&node.某==280)口returntrue;if(derection==Snake.UP&&node.y==0)returntrue;if(derection二二Snake.LEFT&&node.某==0)口returntrue;if(derection==Snake.DOWN&&node.y==380)returntrue;//蛇头碰到蛇身//Nodetemp=null;inti=0;for(i=3;i<body.ize();i++){temp=body.get(i);if(temp.某==node.某&&土©山口.丫二二node.y)口break;}if(i<body.ize())returntrue;elereturnfale;}// 在随机的地方产生食物publicvoidmakeFood(){Nodenode=newNode(0,0);booleaniInBody=true;int某=0,y=0;口int某=0,Y=0;口inti=0;while(iInBody){某二(int)(Math.random()某15);口y=(int)(Math.random()某20);口某二某某Node.W;口Y=y某Node.H;口for(i=0;i<body.ize();i++){if(某二二body.get(i).某&&丫=二body.get(i).y)break;口}if(i<body.ize())iInBody=true;eleiInBody=fale;}food=newNode(某,Y);口}// 改变运行方向publicvoidchangeDerection(intnewDer){

if(derection%2!=newDer%2)//如果与原来方向相同或相反,if(derection%2!=newDer%2)//如果与原来方向相同或相反,则无法改变derection=newDer;}publicvoidmove(){if(iEaten()){// 如果食物被吃掉body.add(0,food);// 把食物当成蛇头成为新的蛇体core+=10;makeFood();// 产生食物}eleif(iCollion())// 如果碰壁或自身{iRun=fale;tatu=Snake.GAMEOVER;// 结束}eleif(iRun){// 正常运行(不吃食物,不碰壁,不碰自身)Nodenode=body.get(0);int某=node.某;皿土丫=node.y;// 蛇头按运行方向前进一个单位witch(derection){口cae1:某-二Node.W;口break;cae2:Y-=Node.H;break;cae3:某+=Node.W;口break;cae4:Y+=Node.H;break;}body.add(0,newNode(某,Y));口// 去掉蛇尾body.remove(body.ize()-1);}}}// 组成蛇身的单位,食物claNode{publictaticfinalintW=20;publictaticfinalintH=20;int某;口inty;publicNode(int某,皿{丫){口thi.某二某;口thi.y=y;}}// 画板claSnakePanele某tendJPanel{口Snakenake;publicSnakePanel(Snakenake){thi.nake=nake;}Nodenode=null;for(inti=0;i<nake.body.ize();i++){//---黄绿间隔画蛇身if(i%2==0)g.etColor(Color.green);eleg.etColor(Color.yellow);node=nake.body.get(i);g.fillRect(node.某,node.y,node.H,口甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘)#田甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘}node=nake.food;node.W);//g.etColor(Color.blue);g.fillRect(node.某,node.y,node.H,node.W);口}}claSnakeFramee某tendJFrame{口privateJLabeltatuLabel;privateJLabelpeedLabel;privateJLabelcoreLabel;privateJPanelnakePanel;privateSnakenake;privateJMenuBarbar;JMenugameMenu;JMenuhelpMenu;JMenupeedMenu;JMenuItemnewItem;JMenuItempaueItem;JMenuItembeginItem;JMenuItemhelpItem;JMenuItemaboutItem;JMenuItemlowItem;JMenuItemmidItem;JMenuItemfatItem;publicSnakeFrame(){init();ActionLitenerl=newActionLitener(){publicvoidactionPerformed(ActionEvente){if(e.getSource()==paueItem)nake.iRun=fale;if(e.getSource()==beginItem)nake.iRun=true;if(e.getSource()==newItem){newGame();}// 菜单控制运行速度if(e.getSource()==lowItem){nake.peed=Snake.SLOW;peedLabel.etTe某t("Slow");口}if(e.getSource()==midItem){nake.peed=Snake.MID;peedLabel.etTe某t("Mid");口}if(e.getSource()==fatItem){nake.peed=Snake.FAST;peedLabel.etTe某t("Fat");口}}};paueItem.addActionLitener(l);beginItem.addActionLitener(l);newItem.addActionLitener(l);aboutItem.addActionLitener(l);lowItem.addActionLitener(l);midItem.addActionLitener(l);fatItem.addActionLitener(l);addKeyLitener(newKeyLitener(){publicvoidkeyPreed(KeyEvente){witch(e.getKeyCode()){// 方向键改变蛇运行方向caeKeyEvent.VK_DOWN://nake.changeDerection(Snake.DOWN);break;caeKeyEvent.VK_UP://nake.changeDerection(Snake.UP);break;caeKeyEvent.VK_LEFT://nake.changeDerection(Snake.LEFT);break;caeKeyEvent.VK_RIGHT://nake.changeDerection(Snake.RIGHT);break;//空格键,游戏暂停或继续caeKeyEvent.VK_SPACE://if(nake.iRun==true){nake.iRun=fale;nake.tatu=Snake.PAUSED;break;}if(nake.iRun==fale){nake.iRun=true;nake.tatu=Snake.RUNNING;break;}}}publicvoidkeyReleaed(KeyEventk){}publicvoidkeyTyped(KeyEventk){}});}privatevoidinit(){peedLabel=newJLabel();nake=newSnake();etSize(380,460);etLayout(null);thi.etReizable(fale);bar=newJMenuBar();gameMenu=newJMenu("Game");newItem=newJMenuItem("NewGame");PaueItem=newJMenuItem("Paue");beginItem=newJMenuItem("Continue");gameMenu.add(paueItem);gameMenu.add(newItem);gameMenu.add(beginItem);helpMenu=newJMenu("Help");aboutItem=newJMenuItem("About");helpMenu.add(aboutItem);peedMenu=newJMenu("Speed");lowItem=newJMenuItem("Slow");fatItem=newJMenuItem("Fat");midItem=newJMenuItem("Middle");peedMenu.add(lowItem);peedMenu.add(midItem);peedMenu.add(fatItem);bar.add(gameMenu);bar.add(helpMenu);bar.add(peedMenu);etJMenuBar(bar);tatuLabel=newJLabel();coreLabel=newJLabel();nakePanel=newJPanel();nakePanel.etBound(0,0,300,400);nakePanel.etBorder(BorderFactory.createLineBorder(Color.darkGray));add(nakePanel);tatuLabel.etBound(300,25,60,20);add(tatuLabel);coreLabel.etBound(300,20,60,20);add(coreLabel);JLabeltemp=newJLabel("状态");口temp.etBound(310,5,60,20);add(temp);temp=newJLabel("速度");口temp.etBound(310,105,60,20);add(temp);temp=newJLabel("分数");口temp.etBound(310,55,60,20);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论