1、 Is er, J2S mplemnttiof nake gae aliar tohe integratede o wat heh learnd, tis ga isteuse f softwangen hink (spir moe), th mainrmwok fthe figame, JAVAbjct-rit thnkn, wape cases, intface net to pletethgme, hting te inegaeduse o nwlege a purpo、Te game dvlont plfor: INX;、AV Developt Evionent: DK1、 +Eci;
2、、 velopment Langage: J2SEKyword:Controller;ameane;Food;Snak;Ground前言贪吃蛇游戏背景:蛇引诱夏娃吃了苹果之后,就被贬为毒虫,阴险的象征、 而蛇吃东西是整只动物吞进去的,大概在文艺复兴的时候(好象是那个时候然而不确定)就有人发明的一种游戏,是现在贪吃蛇的前身、后来慢慢的发展就变成了今天的贪吃蛇了、现在贪吃蛇主要应用于手机游戏。本文运用软件工程思想、JV面向对象编程、类的封装、抽象类的使用(接口),游戏编码规范遵循C模式,循序渐进实现贪吃蛇的相关功能、一 :游戏中的面向对象分析与设计 涉及到几个对象(类) 每个类有什么方法、 首先得
3、有个游戏显示面板(GamePael)类该类有一个方法vdsla(); /用来显示游戏面板2 、得有个蛇(na)类该类有以下几个方法:oid mo(); /移动(走一步)oidcngDieton(); /改变方向oideaFod(); /吃食物(身体变长)vole isaBody();/蛇是否吃到了自己的身体voi rwM();/显示3、 一个食物类(Foo)类该类有以下方法:oln akeEood(Sa); /判断蛇是否吃到了食物vod draw();/显示4 、一个背景石头(rnd)类BolanisSakEtRck(Sna);/蛇是否吃到了石头voi dw();显示此时类之间的关系如下图所示
4、:图1 各个类之间的关系二 : 编写贪吃蛇游戏中的各个类的主体框架性代码本有序遵循MVC(Moliw-Cnrer)因此首先建立以上几个实体类并定义相应的包名:liang、se、entits包下定义Food、Grou、nke三个类,再在lin、snk、view包下定义GaePne类,再在,依照以上讲明的各个类具有的方法,写上如下代码:cagei、snke、entits;uli ass o ublic boln isSnkeEaFoo(Snae sake) ystem、out、rntl(”Sne at fod”); return alse; pubc void drwm() sm、ut、ntn(”
5、os wm”); ackagelan、snak、ettes;publc clssGrounplic bole isSnkeEaRok() rt false; pblc vodrawe() st、o、pitln(”rouds rme); pakg iang、snke、ntiti;publcla ak pbli oe() Syem、ou、prinl(”kes ov”); pblicoi cngDirectio(int diretion) Sysem、out、prnln(nkes caneicti”); bi voieto() ytem、ut、piln(Snake atfoo); ublcbolan
6、isEBoy() ystem、t、prnln(”Snaes et bod”); etunase; ublc void dawM() Sym、ou、println(Snak drawMe”);ace ig、sak、iw;impt ava、at、Grphcs;imort a、swin、JPane;port liang、snake、ttes、Foo;prt lng、sak、enti、Gron;imprt ling、snak、entities、Snke;ubicclss GamPanelxtendsJPanl priSak se; rivte roun roud; rite ood food;p ii
7、ntoe(Graphics g) n、dawMe(); grund、rawe();fod、am();ubic voi iply(Snk snak,Gound ond,Foo o) his、sk=nak;hs、ground=gron;tis、oodfoo; System、t、rintln(GaePas dsa); this、rain(); 三 : 编写Coner类与实现蛇移动的事件监听 由于蛇不能直截了当操作显示面板(Gaenel)因此这个地方定义一个监听器SnakeListeer:里面定义一个方法:vid snakeMove(Snake); 每当蛇移动一步就触发监听器,调用snakeMovd(
8、)由Controllr去实现监听器的接口,然后由控制器去触发显示面板的事件源,让显示面板完成相应操作。逻辑图如下:图2 事件监听建立联系在na 中增加蛇的方向常量: publi taticfia intUP1; public tatic fin itDOWN=1; publicstatic fia itLT=; pbicstti ina in RGHT=-2;并添加一个接口:ackage lin、snake、Liser;iprt ling、e、ntites、nake; ubliceface akeseer ubic void SaeMo(Snesna);Ctolr 实现Sakeitenr接口并
9、处理案件消息:代码如下:pcae lian、snake、ontller;impot jav、ven、KeyAdpter;imot a、a、evn、KeEven;import ia、ske、Litne、kLsner;mrtin、snake、entiies、Fo;importlan、sne、etities、Gund;imporlag、ae、etie、k;imor liang、sa、view、Gea;publc class Contrlerxend yAdatrmpleents akLiteerkesnak=nw Sna();Grundgoud=ew Grod(); Fod foo=newFoo()
10、; amaelmepaneneGaean(); lic Cntler(Sesna,Gro ground, odfod, aanel gamepael) ti、ne = nak;ts、grond = gund;this、o= foo;his、gaml= gapan;ublic voikeyRelead(Kyvn ) swich(e、geteyCode()case eyEnt、_UP :snak、cangeDiection(Sake、); brek;cas eEvnt、K_DN :sake、ageDietion(Snak、DOWN);brek;ase Kyvet、KLEFT :snk、changeiectio(Snak、LE); brak; ceyvnt、K_RIGH :na、chaniretion(Sak、RIGHT);brak; pubc o nwame()snae、ar();plic void Snakov(nakesnake) ampan、
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1