版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本源码所用开发工具:netbean,如果你用的是eclipse完全可以移植过去〈首先配置好eclipse手机开发环境)1首先贪吃蛇“画布”类SnakeCanvas.java:importjava.util.Random。importjavax.microedition.lcdui.Canvas。/*Tochangethistemplate,chooseTools|Templatesandopenthetemplateintheeditor.*/importjavax.microedition.lcdui.Graphics。/***@authorAdministrator*/publicclassSnakeCanvasextendsCanvasimplementsRunnable{/**食物左上角X坐标*/privateintfoodX。/**食物左上角Y坐标*/privateintfoodY。/**食物的颜色值*/privateintfoodC。/**贪吃蛇:XYcolor三个属性故200*3*/privateint[]snake=newint[200*3]。/**食物宽*/privatefinalintSNAKE_W=5。/**食物长*/privatefinalintSNAKE_H=5。/**贪吃蛇长度即食物长度*/privateintsnakeNum。/**贪吃蛇移动方向*/privateintdirection。/**上*/privatefinalintDIR_UP=0。/**下*/privatefinalintDIR_DOWN=1。/**左*/privatefinalintDIR_LEFT=2。/**右*/privatefinalintDIR_RIGHT=3。Randomrandom=newRandom(>。〃控制食物的随即出现privatefinalint[]COLOR={0xff0000,0x00ff00,0xffff00,0xff00ff,0x00ffff,0xff000f,0xffff00}。〃颜色数组,贪吃蛇颜色可选值privateThreadthread。privatebooleanisShow=true。〃控制线程变量privatebooleanisExit=false。〃游戏是否退出控制变量privateintSCREEN_W。〃屏幕宽privateintSCREEN_H。〃屏幕高publicSnakeCanvas(>{SCREEN_W=this.getWidth(>。SCREEN_H=this.getHeight(>。/**初始化贪吃蛇长度以及初始位置*/snakeNum=7。for(inti=0。i<snakeNum。i++>{snake[i*3+0]=100-SNAKE_W*i。〃初始化蛇身每个食物的X坐标snake[i*3+1]=40。IN坐标snake[i*3+2]=COLOR[i%7]。}I**初始化方向右移*/direction=DIR_RIGHT。I**初始化食物坐标*/foodX=100。foodY=100。foodC=0xff。thread=newThread(this>。thread.start(>。〃启动线程}publicvoidrun(>{while(true>{while(isShow>{longst=System.currentTimeMillis(>。〃获取每一帧的开始时间main(>。repaint(>。//serviceRepaints(>。//intct=(int>(System.currentTimeMillis(>-st>。〃main<)repaintv)方法执行所花费的时间if(ct<100>{try{Thread.sleep(300-ct>。}catch(InterruptedExceptionex>{ex.printStackTrace(>。}}}if(isExit>{//游戏退出SnakeMidlet.instance.exitAPP(>。}}}publicvoidmain(>{/**先判断能否吃到食物*/intstepX=0。//贪吃蛇下一步的位移量intstepY=0。//贪吃蛇下一步的位移量switch(direction>{caseDIR_UP:stepY=-SNAKE_H。break。caseDIR_DOWN:stepY=SNAKE_H。break。caseDIR_LEFT:stepX=-SNAKE_W。break。caseDIR_RIGHT:stepX=SNAKE_W。break。}/**得到蛇头的下一步位置*/intnewX=snake[0*3+0]+stepX。intnewY=snake[0*3+1]+stepY。//判断下一步是否有食物有则吞食并随机再在屏幕内、蛇身外生成新的食物if(newX==foodX&&newY==foodY>{snakeNum++。for(inti=snakeNum-1。i>0。i-->{snake[i*3+0]=snake[(i-1>*3+0]。snake[i*3+1]=snake[(i-1>*3+1]。snake[i*3+2]=snake[(i-1>*3+2]。}snake[0*3+0]=foodX。snake[0*3+1]=foodY。snake[0*3+2]=foodC。makeFood(>。}if(isGameOver(>>{isShow=false。isExit=true。return。}/***蛇身移动过程蛇身各个食物坐标传递过程。*/for(inti=snakeNum-1。i>0。i-->{snake[i*3+0]=snake[(i-1>*3+0]。snake[i*3+1]=snake[(i-1>*3+1]。}stepX=0。stepY=0。switch(direction>{caseDIR_UP:stepY=-SNAKE_H。break。caseDIR_DOWN:stepY=SNAKE_H。break。caseDIR_LEFT:stepX=-SNAKE_W。break。caseDIR_RIGHT:stepX=SNAKE_W。break。}snake[0*3+0]+=stepX。snake[0*3+1]+=stepY。}/***生成新的食物*/privatevoidmakeFood(>{//食物坐标:foodX=Math.abs(random.nextInt(>%(SCREEN_W-SNAKE_W+1>>/SNAKE_W*SNAKE_W。foodY=Math.abs(random.nextInt(>%(SCREEN_H-SNAKE_H+1>>/SNAKE_H*SNAKE_H。foodC=COLOR[Math.abs(random.nextInt(>%COLOR.length>]。}/**判断游戏是否结束结束条件:1蛇头超出边界;2蛇头碰到蛇身*/privatebooleanisGameOver(>{//边界判别if(snake[0*3+0]<0||snake[0*3+0]>(SCREEN_W-SNAKE_W>||snake[0*3+1]<0||snake[0*3+1]>(SCREEN_H-SNAKE_H>>{returntrue。}for(inti=4。i<snakeNum。i++>{if(snake[0*3+0]==snake[i*3+0]&&snake[0*3+1]==snake[i*3+1]>{returntrue。}}returnfalse。}/**绘制函数/protectedvoidpaint(Graphicsg>{/**首先是清屏即绘制和屏幕一样尺寸的白色填充矩形*/g.setColor(255,255,255>。g.fillRect(0,0,SCREEN_W,SCREEN_H>。//绘制贪吃蛇for(inti=0。ivsnakeNum。i++>{drawSnake(g,snake[i*3+0],snake[i*3+1],snake[i*3+2]>。}//绘制食物drawSnake(g,foodX,foodY,foodC>。}/***控制贪吃蛇和食物;*/privatevoiddrawSnake(Graphicsg,intx,inty,intcolor>{g.setColor(0xffffff>。g.fillRect(x,y,SNAKE_W,SNAKE_H>。g.setColor(color>。g.fillRect(x+1,y+1,SNAKE_W-1,SNAKE_H-1>。}/***事件处理*/protectedvoidkeyPressed(intkeyCode>{intaction=this.getGameAction(keyCode>。//改变方向<如果在同一方向上移动同时不能反方向移动)switch(action>{caseUP:if(direction!=DIR_DOWN>{direction=DIR_UP。}break。caseDOWN:if(direction!=DIR_UP>{direction=DIR_DOWN。}break。caseLEFT:if(direction!=DIR_RIGHT>{direction=DIR_LEFT。}break。caseRIGHT:if(direction!=DIR_LEFT>{direction=DIR_RIGHT。}break。caseFIRE:isShow=!isShow。break。}}}2函数入口类SnakeMidlet.javaimportjavax.microedition.midlet.*。importjavax.microedition.lcdui.*。publicclassSnakeMidletextendsMIDlet{privateDisplaydisplay。privateSnakeCanvassnakeCanvas。publicstaticSnakeMidletinstance。publicSnakeMidlet(>{display=Display.getDi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外研八下英语Unit 6 Developing ideas《合作探究二》课件
- 人教 八年级 语文 下册 第2单元《6.恐龙无处不有》课件
- 2025 网络基础中网络职业技能培训的网络教学模式创新课件
- 2025 高中信息技术数据结构在电商用户购买偏好变化跟踪课件
- 2026年客栈租房合同(1篇)
- 2026年消防系统维修合同(1篇)
- 2026年旅游代开发合同(1篇)
- 2026年及未来5年市场数据中国金融仓储物流中心建设行业发展监测及投资战略咨询报告
- 现代社会调查方法解析
- 2025 高中信息技术数据与计算之算法的萤火虫算法课件
- 中国艺术研究院社会招聘试题
- 2026年教育局思想政治工作科工作计划
- 2025年安徽卫生健康职业学院单招职业适应性测试试题及答案解析
- 医保村卫生室管理制度
- 陕西从优 秀村干部中考录乡镇公务员考试真题
- 2025年军事设施建设与管理规范
- 儿科学营养性vitD缺乏
- “党的二十届四中全会精神”专题题库及答案
- 厂房基础注浆加固施工方案
- 人工智能技术应用规范
- 无锡银税协议书
评论
0/150
提交评论