仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 795|回复: 10
打印 上一主题 下一主题

[学习教程] 了解下JAVA的Java版吃豆游戏及源码

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:06:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。
这是一个吃豆游戏的Java完成,详细代码较多请下载文件。
下载地点:http://download.csdn.net/source/396925
  1. packageorg.loon.test;importjava.awt.Color;importjava.awt.Event;import
  2. java.awt.Frame;importjava.awt.Graphics;importjava.awt.Image;import
  3. java.awt.Insets;importjava.awt.MediaTracker;importjava.awt.Panel;import
  4. java.awt.Toolkit;importjava.awt.event.WindowAdapter;import
  5. java.awt.event.WindowEvent;importjava.awt.image.BufferedImage;import
  6. java.awt.image.VolatileImage;/****<p>*Title:LoonFramework*
  7. </p>*<p>*Description:*</p>*<p>*Copyright:
  8. Copyright(c)2008*</p>*<p>*Company:LoonFramework*
  9. </p>*<p>*License:[url]http://www.apache.org/licenses/LICENSE-2.0
  10. [/url]*</p>**@authorchenpeng*@email:ceponline@yahoo.com.cn*
  11. @version0.1*/classTimerimplementsRunnable{Pacgameap;
  12. intduration;privateThreadmyThread;privatebooleanloopf=
  13. true;privatelongtickCount;publicTimer(Pacgameap,intduration)
  14. {this.ap=ap;this.duration=duration;
  15. }publicTimer(Pacgameap){this(ap,16);}
  16. publicvoidon(){myThread=newThread(this);
  17. myThread.start();}publicvoidoff(){loopf=
  18. false;}publicvoidrun(){loopf=true;
  19. tickCount=System.currentTimeMillis();while(loopf){
  20. try{Thread.sleep(duration);
  21. }catch(Exceptione){
  22. e.printStackTrace();}ap.notifyFrame
  23. ();}}publicintframes(){
  24. longnowTick=System.currentTimeMillis();intframe=(int)(nowTick-
  25. tickCount)/duration;if(frame<=0){
  26. frame=1;tickCount=nowTick;}elseif
  27. (frame>5){frame=5;tickCount
  28. =nowTick;}else{tickCount+=frame*
  29. duration;}returnframe;}}public
  30. classPacgameextendsPanelimplementsRunnable{/***//***
  31. */privatestaticfinallongserialVersionUID=1L;private
  32. staticintWIDTH=256;privatestaticintHEIGHT=224;Thread
  33. thread;//机关一个双缓冲的、可变的imageVolatileImageoffImage;
  34. Imagebg,bg0;CGloaderloader;MazeManagermzmanager;
  35. MapManageremanager;SpriteManagerspmanager,chipmanager;
  36. MonsterSpriteredmon,ao,pink,monster;PacSpritepac;AttractManager
  37. atMng;Timertimer;intkey=0;intscore;int
  38. number1;booleanloadOK=false;booleanisAttr=false;
  39. publicvoidinit(){ClassLoadercl=getClass().getClassLoader();
  40. Toolkittk=Toolkit.getDefaultToolkit();bg0=
  41. tk.createImage(cl.getResource("main.png"));bg=new
  42. BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_ARGB_PRE);
  43. MediaTrackermt=newMediaTracker(this);mt.addImage(bg0,0);
  44. try{mt.waitForID(0);}catch
  45. (Exceptione){e.printStackTrace();}
  46. loader=newCGloader("pacchr.png",this);
  47. loader.setAlpha(0,8);mzmanager=newMazeManager();
  48. emanager=newMapManager();spmanager=newSpriteManager(4);
  49. chipmanager=newSpriteManager(5);pac=newPacSprite(10,20,
  50. loader);redmon=newRedMonster(10,10,mzmanager,loader);
  51. redmon.setTarget(pac);spmanager.add(redmon);ao
  52. =newBlueMonster(9,13,mzmanager,loader);ao.setTarget(pac);
  53. spmanager.add(ao);pink=newPinkMonster(10,13,mzmanager,
  54. loader);pink.setTarget(pac);spmanager.add(pink);
  55. monster=newMonster(11,13,mzmanager,loader);
  56. monster.setTarget(pac);spmanager.add(monster);for
  57. (inti=0;i<5;i++){chipmanager.add(newChipSprite(i*
  58. 16,0,loader,i*16,130,16,16));
  59. }atMng=newAttractManager(loader);timer=
  60. newTimer(this,16);setBackground(Color.black);
  61. setSize(WIDTH,HEIGHT);offImage=createVolatileImage(WIDTH,
  62. HEIGHT);}publicvoidpaint(Graphicsg){if(!
  63. loadOK)return;do{
  64. intreturnCode=offImage.validate(getGraphicsConfiguration());
  65. if(returnCode==VolatileImage.IMAGE_INCOMPATIBLE){
  66. offImage=createVolatileImage(WIDTH,HEIGHT);}
  67. GraphicsvolG=offImage.getGraphics();volG.drawImage
  68. (bg,0,0,this);spmanager.draw(volG,this);
  69. pac.draw(volG,this);chipmanager.draw(volG,this);
  70. if(isAttr)atMng.draw(volG,
  71. this);volG.dispose();g.drawImage
  72. (offImage,0,0,this);}while(offImage.contentsLost());}
  73. publicvoidupdate(Graphicsg){paint(g);}
  74. publicvoidstart(){System.gc();if(thread==
  75. null){thread=newThread(this);
  76. thread.start();}}@SuppressWarnings
  77. ("deprecation")publicvoidstop(){if(thread!=
  78. null){thread.stop();thread=
  79. null;}}publicvoidrun(){
  80. while(true){//MAINLOOPscore=
  81. 0;number1=3;intstage=1;
  82. esaInit();loadOK=true;
  83. while(number1>0){while(gameMain(stage)==
  84. 2){if(stage==2)
  85. gameTheater();stage++;
  86. number1++;//1:DEAD2:CLEAR
  87. esaInit();}
  88. }//GAMEOVERisAttr=true;
  89. spmanager.setShow(false);pac.setShow
  90. (false);atMng.player=true;
  91. atMng.ready=false;atMng.gameover=true;
  92. repaint();timer.on();key=
  93. 0;while(true){if(key>
  94. 0)break;
  95. waitFrame();}timer.off();
  96. atMng.player=false;atMng.gameover=false;
  97. }}publicvoidesaInit(){Graphics
  98. g=bg.getGraphics();g.drawImage(bg0,0,0,null);
  99. g.dispose();emanager.init(bg);}publicint
  100. gameMain(intstage){atMng.init(bg,score,number1);
  101. spmanager.init();pac.init();//游戏形态1:DEAD
  102. 2:CLEARintgamestat=0;intrenzoku=0;
  103. booleanispower=false;booleaniseyesnd=false;
  104. Spritechip;isAttr=true;intwait;
  105. if((score==0)&&(number1==3)){wait=
  106. 2000;}else{wait=1000;
  107. }spmanager.setShow(false);pac.setShow(false);
  108. atMng.player=true;atMng.ready=true;
  109. repaint();sleep(wait);atMng.setBattle(--
  110. number1);spmanager.setShow(true);pac.setShow
  111. (true);atMng.player=false;atMng.ready=true;
  112. repaint();sleep(wait);isAttr=
  113. false;inttime=0;timer.on();
  114. intframe=1;while(gamestat==0){for
  115. (intl=0;l<frame;l++){intscore0=score;
  116. if(time==60*55){
  117. spmanager.setNawabari(false);}elseif(time==60*
  118. 50){spmanager.setNawabari(true);
  119. }elseif(time==60*30){
  120. spmanager.setNawabari(false);}elseif(time==60*25)
  121. {spmanager.setNawabari(true);
  122. }elseif(time==60*5){
  123. spmanager.setNawabari(false);}
  124. spmanager.run();MonsterSpritehitmon=
  125. spmanager.isMonsterHit(pac);if(hitmon!=null){
  126. intstate=hitmon.getState();
  127. if(state==0)gamestat
  128. =1;if(state==1){
  129. renzoku++;score
  130. =score+(1<<renzoku)*100;
  131. chip=chipmanager.getSprite(renzoku);
  132. intx=hitmon.getX();inty=
  133. hitmon.getY();chip.setXY(x,y);
  134. chip.setShow(true);
  135. hitmon.setShow(false);
  136. pac.setShow(false);try{
  137. Thread.sleep(50);
  138. }catch(Exceptione){
  139. }repaint();
  140. for(inti=0;i<50;i++){
  141. try{
  142. Thread.sleep(10);}catch
  143. (Exceptione){}
  144. }
  145. chip.setShow(false);hitmon.setShow
  146. (true);pac.setShow(true);
  147. hitmon.activity();
  148. iseyesnd=true;if
  149. (ispower){if(iseyesnd)
  150. try{
  151. Thread.sleep(10);
  152. }catch(Exceptione){
  153. }}
  154. }}
  155. pac.setKey(key);intesa=
  156. pac.run(mzmanager,emanager);if(esa>0){
  157. intremain=emanager.getRemain();
  158. score+=10;if(remain<=
  159. 0)gamestat=2;
  160. }if(esa==2){
  161. redmon.state();ao.state();
  162. pink.state();
  163. monster.state();pac.powerup();
  164. renzoku=0;score+=
  165. 40;ispower=true;
  166. }if(ispower){
  167. if(!pac.isPower()||
  168. ((redmon.getState()!=1)
  169. &&(ao.getState()!=1)
  170. &&(pink.getState()!=1)&&(monster
  171. .getState()!=1))){
  172. ispower=false;
  173. }}if(iseyesnd)
  174. {if((redmon.getState()!=2)&&
  175. (ao.getState()!=2)&&
  176. (pink.getState()!=2)&&
  177. (monster.getState()!=2)){iseyesnd=
  178. false;}}
  179. if(score!=score0){
  180. atMng.setScore(score);}
  181. time++;score0=score;
  182. if(gamestat>0)break;
  183. }//FPSLOOPENDrepaint();
  184. frame=waitFrame();System.gc();}
  185. timer.off();try{Thread.sleep
  186. (2000);}catch(Exceptione){}
  187. returngamestat;}publicvoidgameTheater(){
  188. Graphicsg=bg.getGraphics();g.setColor(Color.black);
  189. g.fillRect(0,0,WIDTH,HEIGHT);g.dispose();int
  190. pacx=WIDTH;intp;intindex=288;
  191. spmanager.setShow(false);pac.init();pac.setShow
  192. (true);redmon.init();redmon.setShow(true);
  193. timer.on();intframe=1;inti=0;
  194. while(i<380){for(intj=0;j<frame;
  195. j++){p=2;switch
  196. ((i>>2)%4){case1:
  197. p+=4;break;
  198. case3:p=8;
  199. break;}
  200. pac.setP(p);pac.setXY(pacx--,100);
  201. redmon.setXY(index--,100);
  202. i++;if(i>=360)
  203. break;}repaint();
  204. frame=waitFrame();}pacx=-32;
  205. redmon.state();index=0;i=0;
  206. while(i<380){for(intj=0;j<frame;
  207. j++){p=0;switch
  208. ((i>>2)%4){case1:
  209. p+=4;break;
  210. case3:p=8;
  211. break;}
  212. pac.setP(p);pac.setXY(pacx++,100);
  213. redmon.setXY(index++,100);
  214. i++;if(i>=360)
  215. break;}repaint();
  216. frame=waitFrame();}timer.off();
  217. }publicvoidsleep(inttm){try{
  218. Thread.sleep(tm);}catch(Exceptione){
  219. e.printStackTrace();}}publicboolean
  220. handleEvent(Evente){switch(e.id){case
  221. Event.KEY_PRESS:caseEvent.KEY_ACTION:switch
  222. (e.key){caseEvent.RIGHT:
  223. key=1;break;case
  224. Event.DOWN:key=2;
  225. break;caseEvent.LEFT:key=
  226. 4;break;caseEvent.UP:
  227. key=8;break;
  228. }returntrue;case
  229. Event.KEY_RELEASE:caseEvent.KEY_ACTION_RELEASE:
  230. default:}returnfalse;}/**
  231. *//***fps盘算**@return*/
  232. privatesynchronizedintwaitFrame(){try{
  233. wait();}catch(InterruptedExceptione){}
  234. //前往fpsreturntimer.frames();}public
  235. synchronizedfinalvoidnotifyFrame(){notifyAll();}
  236. publicstaticvoidmain(String[]args){finalPacgameap=new
  237. Pacgame();ap.setSize(WIDTH,HEIGHT);Framefrm=new
  238. Frame("Java吃豆游戏");frm.addWindowListener(newWindowAdapter
  239. (){publicvoidwindowClosing(WindowEvente){
  240. ap.stop();System.exit(0);
  241. }});frm.addNotify();
  242. Insetsinset=frm.getInsets();intw0=inset.left+inset.right;
  243. inth0=inset.top+inset.bottom;frm.add(ap);
  244. frm.setSize(ap.getWidth()+w0,ap.getHeight()+h0);
  245. frm.setResizable(false);frm.setLocationRelativeTo(null);
  246. frm.setVisible(true);ap.requestFocus();ap.init
  247. ();ap.start();}}
复制代码
本文出自“Java事实怎样玩”博客,请务必保存此出处http://cping1982.blog.51cto.com/601635/116833

由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,
金色的骷髅 该用户已被删除
沙发
发表于 2015-1-20 14:36:40 | 只看该作者
是一种使用者不需花费很多时间学习的语言
小妖女 该用户已被删除
板凳
发表于 2015-1-29 09:15:32 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
深爱那片海 该用户已被删除
地板
发表于 2015-2-6 00:09:58 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
海妖 该用户已被删除
5#
发表于 2015-2-14 12:55:27 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
6#
发表于 2015-3-4 06:41:51 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
小魔女 该用户已被删除
7#
发表于 2015-3-11 17:47:42 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
因胸联盟 该用户已被删除
8#
发表于 2015-3-19 04:30:37 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
乐观 该用户已被删除
9#
发表于 2015-3-27 08:08:15 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
admin 该用户已被删除
10#
发表于 2015-3-27 08:08:14 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
不帅 该用户已被删除
11#
发表于 2015-3-27 08:08:16 | 只看该作者
是一种突破用户端机器环境和CPU
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 13:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表