贪吃蛇游戏开发设计

上传人:回**** 文档编号:204400593 上传时间:2023-04-26 格式:DOC 页数:26 大小:74KB
返回 下载 相关 举报
贪吃蛇游戏开发设计_第1页
第1页 / 共26页
贪吃蛇游戏开发设计_第2页
第2页 / 共26页
贪吃蛇游戏开发设计_第3页
第3页 / 共26页
点击查看更多>>
资源描述
广州商学院课 程论文 题目:贪吃蛇游戏开发设计课程 名 称 面对对象程序设计 考 查 学 期 第 1学期 姓 名 陈思明 李权康 学 号 0107 610044 专 业 计算机科学与技术 指 导 教师 包汉宗 摘要:近年来,Java作为一种新的编程语言,以其简朴性、可移植性和平台无关性等长处,得到了广泛地应用,它以其和谐的开发界面、强大的组件支持等长处,得到广大程序员的接受和承认。“贪吃蛇”游戏是一种典型的游戏,它因操作简朴、娱乐性强而广受欢迎。本文基于ava技术,开发了一种操作简朴、界面美观、功能较齐全的“贪吃蛇”游戏。整个游戏程序分为二个功能模块,四个类模块,实现了游戏的开始、暂停、结束。通过本游戏的开发,达到学习Jav技术和熟悉软件开发流程的目的。核心词:贪吃蛇,Ja,游戏一 、可行性分析1.经济可行性游戏开发至今已有30近年,在这个短暂的时期里,随着硬件的水平的提高。游戏开发新技术层出不穷,典型游戏比比皆是,游戏这个名称始终存在于每个人的平常生活中。因此,游戏对于现代人的成长历程,绝对是一种不可或缺的重要角色.而从技术方面来看,目前的va技术也融入了手机中。这些都为开发的这款贪吃蛇游戏提供了条件。技术可行性本次设计我将重要运用jaa语言来完毕。aa语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,用ava写的应用程序不用修改就可在不同的软硬件平台上运营。由于a重要用于网络应用程序开发,因此对安全性有较高的规定。如果没有安全保证,顾客从网络下载程序执行就非常危险。Jaa通过自己的安全机制避免了病毒程序的产生和下载程序对本地系统的威胁破坏。二、需求分析2.1游戏的简介游戏的名称叫“贪吃蛇”,节:一条蛇可以当作有许多正方形的“小格子”拼凑成,我把它称作节。节是蛇身上最小的单位。 段:当许多节连成一条直线,我称它为段。贪吃蛇只有一段,如果它拐弯就变成两段。 链表:用来保存每一段的状态,链表的元素单位是段。且链表的最后一种元素表达蛇的头部段。 坐标系:MIDP中的坐标以左上角那点为(0,0),向右则x递增,向下则y递增。2.2游戏开发的可行性游戏开发至今已有30近年,在这个短暂的时期里,随着硬件的水平的提高。游戏开发新技术层出不穷,典型游戏比比皆是,游戏这个名称始终存在于每个人的平常生活中。因此,游戏对于现代人的成长历程,绝对是一种不可或缺的重要角色.而从技术方面来看,目前的java技术也融入了手机中。这些都为开发的这款贪吃蛇游戏提供了条件。2.3设计目的 综合运用在校所学的知识和技能,设计开发贪吃蛇游戏,使自己熟悉应用系统的开发的过程,培养独立思考的能力,校验学习效果和动手能力,提高工程实践能力。.4游戏需求给出一条小蛇和随机浮现一种食物,当小蛇吃到食物时就加分。21游戏界面需求良好的顾客界面,有分数显示和暂停。.游戏形状需求良好的方块形状设计,绘制小蛇和食物,小蛇由几种方块构成,食物由一种方块构成。2.4.3键盘事件解决小蛇可以通过键盘方向键(上,下,左,右)进行方向的移动。24.显示需求当小蛇吃掉几种食物后会变长,平且吃完食物时食物会消失,并立即产生一种1个新的事物。.4.5接口控制本软件通过键盘进行操作,在wndows操作系统下,运用键盘的上下左右键进行操作,要使用键盘的接口事件。2.4.6环境简介操作系统:Mic Widos7程序语言:ava2开 发 包:ava(M) 2 Stada ditin (.0) Sn Miro. JM reles Tool Kt 22IDE: Eclip4.4三、 功能设计31 游戏的流程图进入游戏界面点击开始按钮,游戏开始,蛇随机产生 / _|_| O| / / _/ _|_/ _ | | / / / / / / / / / / _-_ / / _- -_ | | ( ( _- _-_ -_ _/ | -_- _- -_ -_- / -_ _- -_ _- -_- -_-操作:右移、下移、左移、上移 游戏半途欲中断,稍候进行游戏没有吃到食物,且遇到边界单击退出游戏单击暂停游戏单击开始游戏,游戏恢复正常。3.2游戏主界面的开发屏幕的背景用白色,由于屏幕高比宽长,因此取以宽为边长的矩形区域作为游戏区域,下面的部分作为分数、信息区域。图一(游戏的主界面)3.3 绘制蛇身pubc i rpin() Graphics g = anvasgeGrahics(); /背景 etolr(olorbak); ilec(0, 0,AULT_IDTH, EFAUL_EIHT); / 蛇 g.setCoor(ColorPIN); LiedLitode snkeNde nake.neArray; eratore t = snakeNoe.iterato(); while (it.hNex() Node n (Ne) it.nx(); Node(,); / 食物 .setColr(Color.RED); No n = nake.food; dawNod(g,n); upeSore(); / 绘画某一结点(蛇身或食物) rivae viddrawNoe(Grahics g, Nde ) gillec(.x nodeWidt, n. * nodeHegh, nodeidth 1, nodeHeigt - 1); / 更新分数 publi oid updaecore() String s 分数: + sake.score; labelsetTe(s); 3.4创立初始“蛇”及“蛇”的移动 蛇的初始长度为5,边长为10个像素(背景为黄色),蛇头初始位于屏幕(00,30),方向向左,用向量表来记录每个蛇的位置以及方向。部分参照代码如下:if (.geKeyCode() !=Keyvnt.VK_Y & !playing)ren;/D Aut-gnerated mtdstb/*根据按键不同, 让蛇变化不同的方向 */swith (e.gKeyoe() * 方向键上 */cas KyEent.K_UP:f(snake.sPause() snakanePaus();for(GmListener:listenrs)lgaeConin();snake.chageireton(Sake.UP);eak;/ 方向键 下/caseKeyEvet.V_DOWN:if (snk.isPause()) sake.anePause();r (GeLserl : lstener)l.gmeContiue();snhangeDirection(Snake.OW);brea;*方向键 左 */caseeyEvt.VK_LEFT:if (snk.isPause() ske.hagePaus();fr (Gameiten l: iteners)lmontinue();sa.cangereco(Sna.LE);ea;/方向键 右 */case eyEvent.K_RIGHT:i (saeisPue() nachangas();fr(GameLeer : litnrs)lgmeContiue();snke.chngeDrection(ne.RGH);brek;35吃掉食物,蛇身增长当小蛇吃掉食物后,会增长,部分代码:plic voidnaeMoved()/*判断与否吃到食物 */f (fod!= null &fo.isSnketFood(nke) /*吃到食物后,蛇增长身体,再重新丢一种食物 */nakeatd();foodsetLocato(ground = nul ?foodgetNew() : grun.geFeePoint();*如果吃到食物, 就肯定不会吃到石头 /else i (grod != nl& u.sSnakEoc(snake))* 如果吃到的是石头, 或吃到自己的身体, 就让蛇死掉 */same();if (ske.isEatBody()topa();if (gamPanl != ul)gamePlredislay(ond, sae, foo);/ 更新提示 /if (gameInfoabe!= nu)gmIoLb.stText(getNwIo();6随机产生食物部分代码: 产生食物 *阐明:食物的坐标必须位于屏幕内,且不能和蛇身重叠 i (food!= ull&food.iSakeEatFd(na) /* 吃到食物后, 蛇增长身体, 再重新丢一种食物/sake.etod();fosetLcatin(ground = l ? oodeNe(): ndgetFreePont());publicPintgetN() oint p= new Poit();p= rnom.nxInt(lb.WIDH);p. = rndom.nexInt(Gloal.HEIGHT);return ; .键盘事件解决可以通过键盘控制蛇的移动方向/*方向键上 */case KeEvntVUP: (snakiPause() snake.hangPaue();r (meLte : istnr)l.geCniue();snk.chngeDirton(Snake.U);eak;/*方向键 下 */cas eyEen.VK_DOWN:(snak.iPe())snakechangePause();for(GaeListenr l : listeners)l.gContinue();nake.changeDirtn(nkeDOW);break;/* 方向键 左 */ase KeyEven.VK_FT:(ke.iPae() snkecagePase();for (GeLitr l: lstene)l.gaeConine();snaechaneiction(Snake.LEF);break;* 方向键 右 *case KyEvet.VK_GHT:if(snakisPuse() snae.canePause();for(GaListnel : listners)l.gameConinue();snae.chngeiton(Sake.RIGH);beak; 3.8判断游戏结束只有两种游戏结束的方式,蛇头遇到蛇身和撞墙游戏结束。 参照代码: ublic vodsakeMve() /*判断与否吃到食物 */if (food !=null & ood.isSnaeEaFod(snke) /*吃到食物后, 蛇增长身体, 再重新丢一种食物 */nak.tFo();foo.seLoatio(round = null ? fodgtew(): roungetFreePoi());*如果吃到食物, 就肯定不会吃到石头ese(goun !=nll & gound.isSeEtRck(nake) /* 如果吃到的是石头,或吃到自己的身体,就让蛇死掉 *sopGa();i (snke.istBody())stopGam();f (aePane !null)gamePael.redisl(grud, snae, food);更新提示 */if (meInLbl != l)gamenfLabelsetText(getNewIfo();第5章自我评价和总结 5遇到的问题及解决措施 先是图形化界面的设计,始终想不出好的措施,最后翻看了教程才解决了这个问题,后来在蛇的移动上也遇到了些问题。上网查了一下,才懂得蛇身是由一连串的基本图形构成的,每过秒检查前面是什么,如果是空的,就把图画成一般身子的样子。再在前方在画一种头,并将其左标记入数组,数组要足够大,在把尾巴画成背景色,如果前面是食物,尾巴就不删除。这个里面的难点就是数组里面的操作和坐标的表达。把头添在最后一种元素,把第一种元素提起。.2 总结 这款游戏的长处,就是简朴的画面和容易的操作很容易使玩家就上手,适合不通年龄段的玩家娱乐。固然这款游戏也存在有局限性的地方,有些功能还是没有实现。通过这次设计过程中,我查阅了大量的资料,对jaa有了更深刻的结识,通过这次的设计,更提高了我在程序设计和调试方面的技巧,更重要的是我结识了自己的局限性,在编程方面我还需要努力学习来充实自己,来获取更大的收获。参照资料【】Java实用教程(第三版)清华大学出版社。【2】jav编程思想(第四版) 机械工业出版社。【3】J2E 游戏开发实例大全 清华大学出版社出版。附加源代码packagecom.gc.censnae3;impot jv.at.Boreryt;impot java.awt.Canvs;impo java.aw.l;iprt jaa.wt.Conaner;impot aa.wt.Graphics;ipot jvaawt.eent.ActionEvent;mrt avawt.event.ActonListe;impor java.w.ent.eAdaper;import java.aw.eve.yEvet;imporava.aw.evnt.Moeisener;mortava.utl.terator;ior jvaui.edLi; imprt jving.rame;imotjavax.swngJLabel;iortjavax.swng.enu;mportvax.sin.JMenuBar;importjavx.swgJMenutem;port jvx.sin.JOptnane;mpot javax.singSwingCosnt;import jva.a.Fnt;iprt ava.awt.evet.MouseAdape;pr jva.tevent.oueEvnt; publ cass Myrame extends Keydae imlemets AciLister JFamfrae ; Cas canva; Continer contir; JLbel bl; /计分 nake snake = null; /蛇 plctatcnl int DEFAULT_TH= 80; / 界面宽 pbic sttic fin i DEFAUT_HEIGH =600; / 界面高 pulic ttic fal intodeWth=10; / 结点宽 pic stat fna int nodeHigt = 0; / 结点高 JMeem sart = nwMenuem(开始); MenuItem exit = nwJenuItem(退出); JMenuItem use = new nuIt(暂停/开始); Menute seedUp= new Menu(加速); JMenuIe spedDon = ew JenuIte(减速); JMeuItem abot = new JenIte(有关贪吃蛇); JMenuBar menuBar; JMenu fie; Mfuncton; JMenu hel; / 初始化游戏界面 plic yFrame() / 设立界面 frame nwJFrame(); fstBakgron(olorBLAK); frameseitle(贪吃蛇); fram.setLcatio(00,20); cntine = fegetontetPane(); ae ne Jabe(分数:, SwingConstansCENR); label.stForegrund(ColRED); label.stFont(newFont(宋体, ont.PLAI,13)); labsVticalAignmen(Swngnstats.TP); conter.ad(label, BoderLaout.OUTH); canvas= ne Canvas(); cavs.setBckground(Cl.LACK); canas.setSe(EFAULT_T-20, EFLT_HEIGHT-0); container.add(canvs,BoderLyout.WT); enBar e JMeuBar(); frm.stJenua(menuBr); fie = new Meu(文献); functin= wJMenu(功能); hp = nwJn(协助); sta.addMuseLieer(ew ouseAdatr() Overide ublvid ouicd(oeEvent e) Sysem.oupintn(dd); ); fie.ad(sta); strt.adAcinListeer(hs); fil.add(eit); exit.ddActiLitenr(th); fntin.add(used); aused.addActionstee(this); fucio.add(pep); spedp.ddActionListener(tis); fuinadd(seDw); speeDon.addAtionitee(thi); hlp.d(aout); abotdActonListener(thi); muar.dd(ile); mnuardd(fno); menuBr.add(help); rame.dKeLstner(this); me.ak(); fame.setResizale(true); / 窗口大小不能变化 frame.seDefaulCsepeain(JFrme.E_N_LOSE); / 窗口关闭方式 fre.etVsible(true); / 显示 begin(); / 开始游戏 / 绘制游戏界面(涉及蛇和食物) public voiant() Gahi = anvas.getGahic(); / 背景 g.stolor(Color.blac); gllRec(, 0, DEFAUL_WIDT, DEFULHEIGHT); / 蛇 g.setClor(Color.PIN); LinkedListNo nakeNde = snake.odeArray; Iteraorit = saeode.teor(); hie (t.hasNext() od n = (Noe)it.next(); drawode(g, n); / 食物 .tr(Clor.RED); Nod n = snake.fod; drawNode(g, n); pteScore(); 绘画某一结点(蛇身或食物) iate vo dawod(Gapcs g, Nde n) g.filRct(.x * ndeWidth, n.y * odeHigh, nodWidh - 1, ndHeight 1); / 更新分数 pulic id updatecore() Sng 分数: snake.sor; lbe.seTxt(s); / 游戏开始,放蛇 vid begin() if (snake =nu| !snk.unng) snake = new nake(his, DEFULT_WI / noeidth, EFALT_HEHT /nodeHeigh); (nw Thrad(snake)).tar(); / publiidmousClike(MousEvent e)/ if(sakeunnn)/ if(.etSoure() ar) / 开始/ snake.runnn= alse;/ bgin();/ / / 菜单监听事件 Oerride ulic void actionformed(ActoEvnt e) if(ske.runnin) if(egtSu() = str) /开始 snake.unig = flse; begin(); else if(.getSouce() = exit) / 退出 int sct=JOptioPaneshwofirmDiaog(nl, 确认退出, 提示, JOtonPae.OK_CACEL_OPTON, OptionPane.IFORMAION_MESSAGE); if(slect=JOptionPne.O_PIN) ystem.exit(0); el if(.eouc() =pause) / 暂停/继续 snake.chgPauseState(); eseif(e.etSrce() = pedUp) / 加速 nake.speedUp(); else if(e.getoce() = speedDow)/ 减速 snake.pedDon(); lse if(e.getSource() abut) / 有关贪吃蛇 JOptionPane.shoMsiaog(null, 贪吃蛇n制作人:陈思明李权康n 按上下左右键控制蛇的方向n + 按+或PageU 加速 、按或PgeDown加速n + 按空格或t暂停/开始); / 键盘监听 pbic oi keyPresed(Keyven e) in keode= e.tyd(); if (sake.running) switch(eyCode) aseKeyEn.VKUP: / 方向键:上 snke.changDirectin(Snae.UP); break; case eyvent.V_DN: / 方向键:下 snake.chgeDiretn(Sae.DOWN); reak; casKeEet.VK_EF: / 方向键:左 snke.chageDirectn(Snke.LF); break; se KeyEvet.V_IGH: / 方向键:右 snak.hageDiretin(Sake.RIG); reak; ase KyEn.VK_ADD: / +键 case Keyet.K_PAE_P: / PageU键 na.eeUp(); / 加速 brea; casKeyent_SUBTRACT: / -键 caKeve.VK_PAGE_DOWN: /PageDown键 snak.speedDwn(); / 减速 break; casEet.K_SPACE: / 空格键 case KeEvetVKP: / P键 snachangePauseState(); / 暂停或继续 rek; fault: / 重新开始(回车键、S键) if (eyde = KeyEen.VKS | keoe =KeyEvent.VK_ENTE) snake.runing = lse; bgi(); ese (e.etSurce()= sart) /开始 sake.nnng= fas; bgi();
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!