




kok电子竞技权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
kok电子竞技:文档简介
1、java程序开发课程设计课程大作业 专 业: 软 件 工 程 班 级: 14软工2 学 号: 1422130236 姓 名: 张敏慧 项目名称:坦克大战一、 需求分析:1. 基本功能:(1) 我方坦克能上下移动(2) 敌方坦克能自由移动(3) 我方坦克能开火(4) 敌方坦克能自由开火(5) 子弹打中我方,会减血,我方打中敌方,敌死。敌打敌不会受伤(6) 有血条,主界面2. 扩展功能(1) 用图形来表示坦克和炮弹(2) 用图形来表示中子弹后的爆炸效果(3) 地图上存在金属墙,我方坦克和子弹不能穿过(4) 地图上存在曹村,我方和敌方坦克能够自由穿过,子弹也一样(5) 地图上会随机出现加血包(6)
2、我方坦克遇到加血包,会增加生命(7) 游戏开始时,会启动背景音乐(8) 我方坦克死亡时,提示游戏结束二、系统设计: 1. bgmusic(1)主要功能:添加背景音乐tankmap类通过调用该类,并读取bgmusic包下面的背景音乐文件(2)成员属性:1)filename,用于记录读取到的文件名,并处理2)nbytesread,这是缓存,用于读取音乐文件,缓存下来(3)成员方法: 1)run,播放背景音乐2) 构造方法bgmusic,将读取到的文件名,存储到成员属性filename中2. blood(1)主要功能:地图中添加血包(2)成员属性:1)x,y,width,height,血包的位置以及
3、宽高2)rpos_x,rpos_y,用于记录血包移动后的位置3)tm,调用tankmap类,并在地图中放血包4)live,血包的存活,被坦克吃了就消失5) blood,用于记录血包的存活6)step,血包的步长7)stepmove,血包走过总的步长(3)成员方法: 1)blood,构造方法,将血包放到地图中2) draw,画血包3) move,血包的移动4) getrect,获取血包的位置3. tank(1)主要功能:地图中添加我方坦克(2)成员属性:1)width,height,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和
4、初始状态3)tm,调用tankmap类,并在地图中放坦克4)islive,我方坦克是否存活5) isgood,坦克属于哪一方6) life,我方坦克的初始生命值7) step,使用blood类,血包随机出现8)upimage,rightimage,downimage,leftimage,oldimage,存放坦克图片(3)成员方法: 1)draw,绘制坦克 2)move,根据移动方向,移动坦克,不允许坦克移除地图 3)checkdirection,确定用户单击的方向键,修正坦克即将移动方向 4)fire,发射子弹 5)getrec,返回坦克当前位置,便于判断是否与敌方坦克或子弹重叠 6)sta
5、y,坦克撞墙的处理 7)eat,我方坦克吃血包 4.enemytank(1)主要功能:地图中添加敌方坦克(2)成员属性:1)width,height,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和初始状态3)tm,调用tankmap类,并在地图中放坦克4)islive,我方坦克是否存活5)enemytank,存放坦克图片(3)成员方法: 1)draw,绘制坦克 2)move,根据移动方向,移动坦克,不允许坦克移除地图 3)fire,发射子弹 4.explor(1)主要功能:子弹打中坦克,发生爆炸效果(2)成员属性:1)x,y,
6、坦克出现的位置2)tm,调用tankmap类,并在地图中放爆炸3)islive,我方坦克是否存活 (3)成员方法: 1)draw,绘制爆炸 2)explor,爆炸的构造方法 5.help(1)主要功能:给用户游戏帮助(2)成员属性:1)help,将帮助的文字存放在字符串中 (3)成员方法: 1)gethelpdialog,调用帮助 6.shell(1)主要功能:设计子弹(2)成员属性:1)width,height,xspeed,yspeed,子弹的宽高和x,y上的移动速度2)x,y,direction,子弹出现的位置和方向3)tm,调用tankmap类,并在地图中放子弹4)islive,子弹是
7、否打中坦克5)isgood,是否是我方6)image,加载子弹图片 (3)成员方法: 1)draw,绘制子弹 2)move,根据移动方向,移动坦克,得到子弹的移动 3)getrec,获取坦克的位置 4)hittanks,子弹打坦克 5)hitwalls,子弹打墙 7.wall(1)主要功能:给地图添加墙(2)成员属性:1)x,y,w,h,墙的位置和宽度高度2)tc,地图 (3)成员方法: 1)draw,画墙 2)getrect,获取墙的位置8.tankmap(1)主要功能:地图(2)成员属性:1)mapwidth,mapheight,地图的宽高2)t,我方坦克3)bufferimage,缓冲,
8、用于解决闪屏4)forestimage,草丛5)shells,enemytank,blood,explors泛型6)enemycount,敌方坦克数量7)w1,w2,不可穿过的墙 (3)成员方法: 1)init,初始化地图 2)paint,画血包,地图,坦克等 3)addbloods,加血 4)update,解决闪屏 三、功能实现:1. 功能1:我方,敌方坦克上下移动并开火(1) 操作说明 游戏启动时,按上下左右键可以是我方坦克移动,按f键可以开火 (2)关键代码/绘制坦克public void draw(graphics g)/根据不同方向加载不同图片,读取的时候需要处理异常tryswitc
9、h(direction)case stop:case up:upimage=imageio.read(new file(src/images/up.gif);oldimage=upimage;g.drawimage(upimage, x, y, null);break;case right:rightimage=imageio.read(new file(src/images/right.gif);oldimage=rightimage;g.drawimage(rightimage, x, y, null);break;case down:downimage=imageio.read(new
10、file(src/images/down.gif);oldimage=downimage;g.drawimage(downimage, x, y, null);break;case left:leftimage=imageio.read(new file(src/images/left.gif);oldimage=leftimage;g.drawimage(leftimage, x, y, null);break;catch (ioexception e) ;g.drawimage(oldimage, x, y, null);move(direction);/根据移动方向,移动坦克,不允许坦克
11、移出地图public void move(direction d)/* 记录坦克原来的位置,撞墙可以回到原位置*/oldx=x;/记录坦克原来的位置,撞墙可以回到原位置oldy=y;if(d = direction.stop)else if(d = direction.up)y-=yspeed;if(y=800-width)x=800-width;else if(d=direction.down)y+=yspeed;if(y=600-height)y=600-height;else if(d=direction.left)x-=xspeed;2. 功能2:我方开火,敌方会爆炸,然后死亡。我方中
12、弹,会爆炸再扣血(1)操作说明 通过我方坦克的移动和开火,杀死敌方坦克(2)关键代码public boolean hittank(tank t)if(this.islive&t.islive&this.getrec().intersects(t.getrec()t.setlife(t.getlife()-20);if(t.getlife()0)t.setlive(false);t.direction=direction.stop;joptionpane.showmessagedialog(tm,game over!);system.exit(0);this.islive=false;explo
13、r e=new explor(x-3,y-3,this.tm);tm.explors.add(e);return true;return false;public boolean hittanks(listenemytanks)enemytank e;for(int i=0;i= 400) rpos_x = tank.random.nextint(470);rpos_y = tank.random.nextint(480);blood = tank.random.nextboolean();live = true;step = 0;stepmove = -1;return;if(stepmov
14、e%5 = 0) move();color c = g.getcolor();/g.setcolor(color.magenta);/g.fillrect(x - 3, y - 3, width + 6, height + 6);if(blood) g.setcolor(color.red);g.fillrect(x, y, width, height);g.setcolor(c);if(stepmove = 300) live = false;tm.bloods.remove(this);stepmove = 0;/* 补给移动*/public void move() if(step = p
15、os.length) step = 0;x = rpos_x + posstep0;y = rpos_y + posstep1;step +;public rectangle getrect() return new rectangle(x, y, width, height);public boolean isblood() return blood;public boolean islive() return live;public void setlive(boolean live) this.live = live;public void setstepmove(int stepmov
16、e) this.stepmove = stepmove;5. 功能5:金属墙和树林(1)操作说明 坦克可以穿过树林,但是穿不过金属墙,子弹也不能穿过金属墙 (2) 关键代码树林:/* 读取树林*/forestimage=imageio.read(new file(src/images/wall_forest.gif);穿不过金属墙:public class wall /* x,y为墙的位置,w,h为宽度高度;*/int x,y,w,h;/* 持有引用*/tankmap tc;public wall(int x, int y, int w, int h, tankmap tc) this.x =
17、 x;this.y = y;this.w = w;this.h = h;this.tc = tc;public void draw(graphics g)color c=g.getcolor();g.setcolor(color.gray);g.fillrect(x,y,w,h);g.setcolor(c);/* 得到墙的矩形区域;* return*/public rectangle getrect()return new rectangle(x,y,w,h);子弹不能穿过金属墙:/* 判断子弹是否撞墙* param w墙* returntrue,撞上,false,未撞上;*/public b
18、oolean hitswall(wall w)if(this.islive&this.getrec().intersects(w.getrect()islive=false;return true;return false;6. 功能6:帮助界面(1)操作说明 键盘按下f1,显示一个窗口,会显示帮助 (2)关键代码public class help private static string help = 上:方向键上n +下:方向键下n +左:方向键左n +右:方向键右n +开火: f +帮助: f1n +红块加满血;public static void gethelpdialog() di
19、alog h = new joptionpane(help).createdialog(操作说明);h.setvisible(true);四、创新点:1能够放置树林,金属墙2子弹不能穿过金属墙3. 我方坦克不能穿过金属墙4.能够随机出现加血包,而且加血包会随机移动5.我方坦克吃到血包会加血6最后来个背景音乐五、总结:这次的坦克大战是我的第一个java程序。一开始,我就对游戏很感兴趣,很想了解游戏运行的原理。刚写程序的时候,什么都不懂什么都不会,认真地听着课,记着笔记,下课后认真复习上课所讲的。渐渐地,我学到了类与对象,属性,方法等1. 匿名对象的应用直接使用new+类的方式实现匿名对象。匿名对象只使用一次,这样就会产生垃圾,消耗内存,好在java提供了一个垃圾回收机制,简化了回收的操作。2. get和set方法 set和get方法分别是设置属性值,获取值。有了这两个方法,在类与类中可以相互调用,这就产生了现实中的人与其他物的关系等。3. imageio的使用 使用图片,需要在属性那边定义,然后在方法中读取图片六、软件说明书:键盘上下左右控制我方坦克移动,f表示开火,打敌方坦克f1提供帮助
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
kok电子竞技:最新文档
- 2025年天津市安全员知识题库
- 重庆工程职业技术学院《朗读与讲故事指导》2023-2024学年第二学期期末试卷
- 西南民族大学《古生物学含实验》2023-2024学年第二学期期末试卷
- 南京农业大学《教育评价与测量》2023-2024学年第二学期期末试卷
- 哈尔滨剑桥学院《广告创意与策划》2023-2024学年第二学期期末试卷
- 广西体育高等专科学校《电磁场理论与光波导技术》2023-2024学年第二学期期末试卷
- 2025届河南省周口市西华县三校联考高三上学期一模历史试卷
- 赣南师范大学《幼儿园体育游戏》2023-2024学年第二学期期末试卷
- 江苏联合职业技术学院《分子生物学(英文)》2023-2024学年第二学期期末试卷
- 广州城建职业学院《销售管理》2023-2024学年第二学期期末试卷
- 范文语文评课稿15篇
- 2024年山东省春季高考技能考试汽车专业试题库-中(多选题汇总)
- 2024年西安电力高等专科学校高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 2016-2023年德州科技职业学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 《人文科学概论》课件
- 大学生返回母校宣讲
- 光伏机器人行业kok电子竞技
- 屋顶分布式光伏发电施工组织设计
- 践行志愿服务(下)
- 环境监测课件20-在线环境监测技术
- 《纸杯变变变》课件
评论
0/150
提交评论