坦克大战详细设计说明书
10 C语言课程设计_坦克大战(提高篇)
![10 C语言课程设计_坦克大战(提高篇)](https://img.taocdn.com/s3/m/ad4801f7700abb68a982fb53.png)
C语言课程设计--坦克大战一、游戏介绍玩家坦克与敌方坦克在街道中进行巷战,玩家坦克被击中、玩家指挥部被击中或游戏时间到,一局游戏结束。
二、实验目的综合应用C语言知识和设计知识开发一款小游戏。
三、实验内容初始界面如下图。
按下空格键后游戏开始,“空格开始”消失,载入地图,并把玩家坦克设置在指挥部左侧。
游戏时间到,比如30秒,玩家坦克被敌方坦克摧毁,或者玩家指挥部被摧毁,一局游戏结束,游戏回到初始界面,并显示上一局的分数。
游戏区域为下图中最内部的黑色区域,左上角坐标[-26, -22],右下角坐标为[26, 22]。
墙为正方形,边长为4,坦克也是正方形,比墙略小一点。
玩家用WASD键控制坦克上、下、左、右运行,按J键开炮。
玩家坦克碰到墙就停下来,需要调转方向才能继续前进。
玩家坦克开炮,一炮就能摧毁一块墙,或者一辆敌方坦克。
玩家没摧毁一辆敌方坦克,加1分。
玩家指挥部被坦克或者炮弹(不管玩家还是敌方)碰上,都会被摧毁。
每隔几秒钟,比如3秒,就会产生一辆敌方坦克。
敌方坦克每隔一段时间,比如1秒,就自动开炮。
敌方坦克遇到墙就会停下来。
停下来的坦克,前方的墙如果被摧毁了,又能继续前进。
每隔几秒钟,比如2秒,敌方坦克就会顺时针变换一个方向前进。
四、实验准备本实验中可能用到的C 语言标准库函数和FunCode API Stdio.hMath.hString.hFunCode API原图的角度获得的旋转角度即为两张图片的五、程序初步设计如果程序规模比较小的时候,我们习惯一上手就写代码,边写边调整。
但是当程序越来越大,代码越来越多的时候,如果我们还用这种方式编程,程序写到一半的时候,你可能会恨不得重写一遍。
此,我们在写代码之前,先把程序功能细化一下,并初步设计好程序结构,包括数据结构和自定义函数。
有了比较清晰的思路以后,再开始开发程序。
在本项目中,我们要操作的对象有6个:玩家坦克、敌方坦克、玩家子弹、敌方子弹、墙、玩家指挥部。
坦克大战游戏策划书3篇
![坦克大战游戏策划书3篇](https://img.taocdn.com/s3/m/a18a287a2bf90242a8956bec0975f46527d3a78d.png)
坦克大战游戏策划书3篇篇一《坦克大战游戏策划书》一、游戏概述1. 游戏名称:坦克大战2. 游戏类型:射击游戏3. 游戏背景:设定在一个虚构的战争世界,玩家将扮演坦克驾驶员,参与各种战斗任务。
4. 游戏目标:通过消灭敌人、摧毁敌方基地或完成特定目标来获得胜利。
二、游戏玩法1. 操作方式玩家使用键盘或手柄控制坦克的移动和射击。
方向键控制坦克的前后左右移动,射击键进行攻击。
2. 游戏地图地图设计多样化,包括平原、城市、森林等地形。
地图上分布着各种障碍物、敌方坦克和资源点。
3. 游戏模式单人模式:玩家独自对抗电脑控制的敌人。
多人模式:支持玩家之间进行对战或合作。
4. 游戏元素坦克种类:设计多种不同类型的坦克,具有不同的属性和技能。
武器系统:坦克配备多种武器,如主炮、副炮、导弹等,可升级和切换。
道具系统:地图上散布着各种道具,如补血包、加速道具、护盾等,可增强玩家的能力。
升级系统:通过消灭敌人或完成任务获得经验值,升级坦克的属性和解锁新技能。
三、游戏特色1. 丰富的游戏内容多种游戏模式,满足不同玩家的需求。
精心设计的地图和关卡,增加游戏的挑战性和趣味性。
2. 策略与技巧并重玩家需要根据地形和敌人的位置,选择合适的战术和武器。
合理运用道具和升级系统,提升坦克的战斗力。
3. 精美的画面与音效采用高品质的图形和音效,营造出紧张刺激的游戏氛围。
支持多种分辨率和画面特效,适应不同设备的需求。
4. 在线排行榜与成就系统设立在线排行榜,让玩家可以与其他玩家竞争。
设计丰富的成就系统,增加游戏的可玩性和重复性。
四、游戏开发计划1. 团队组建确定游戏开发团队的成员,包括策划、美术、程序等。
2. 开发进度制定详细的开发进度表,明确各个阶段的任务和完成时间。
3. 测试与修复进行内部测试和玩家测试,收集反馈意见,修复发现的问题。
4. 发布与推广确定游戏的发布平台和时间,制定相应的推广策略。
五、游戏盈利模式1. 游戏内购出售虚拟道具,如坦克、武器、皮肤等。
坦克大战游戏详细设计说明
![坦克大战游戏详细设计说明](https://img.taocdn.com/s3/m/fe08b532a32d7375a4178028.png)
目录1.引言 (2)1.1 编写目的 (2)1.2 项目背景 (2)1.3 定义 (2)1.4 参考资料 (2)2.总体设计 (3)2.1需求概述 (3)3.程序描述 (4)3.1 程序逻辑 (4)3.1.1 主类模块 (4)3.1.2 坦克类模块 (4)3.1.3 子弹类模块 (12)3.1.4 爆炸类模块 (14)3.1.5 墙类模块 (16)3.1.6 血块类模块 (16)3.3 存储分配 (17)3.4 限制条件 (18)3.5 测试要点 (18)1.引言随着社会的进步,现在人们工作的压力越来越大,休息的时候很少,为了让疲惫的心灵得以休息,开发了坦克大战的小游戏来让玩家轻松一会,该游戏操作十分简单,只要操作键盘上的方向键按住攻击键就可以玩该游戏,轻松享受玩游戏的喜悦,可操作性好,而且不会使玩家沉溺于该游戏,对玩家的学习和工作都起积极的作用。
1.1编写目的为明确软件需求、安排项目规划与进度、组织软件开发与测试,撰写本文档。
本文档供项目经理、设计人员、开发人员参考。
1.2项目背景a.项目名称:坦克大战游戏开发b.产品用户:对该游戏感兴趣的玩家c.项目和系统的关系:本项目旨在编写出一个操作简单但可玩性良好的小游戏来让玩家放松一下心情,对系统硬件配置要求低。
实现简单。
1.3定义持有对方的引用:在一个类里面有一个成员变量是另一个类的对象,这个对象相对于这个类来说就是持有了另一个类的引用,通过这个对象作成员变量可以引用对象这个类的成员变量和成员方法。
内部类:写在一个类内部的类是内部类,内部类封装在类的内部,不能被其他的外部类直接访问,起到保护作用,但要写的简短。
1.4参考资料《Java基础知识详解》《Java游戏开发》等。
2.总体设计2.1需求概述游戏包括的范围:本游戏包括主类、坦克类、子弹类、爆炸类、墙类、血块类。
要求游戏能有效、快速、安全、可靠和无误的完成上述操作。
并要求客户端的界面要简单明了、易于操作,服务器程序利于维护。
坦克大战详细设计说明书
![坦克大战详细设计说明书](https://img.taocdn.com/s3/m/babf453aee06eff9aef80783.png)
RIA编程技术课程大作业11软工2班傅佳杰目录1绪论…………………………………………………………………………………1.1开发背景………………………………………………………………………1.2开发工具………………………………………………………………………2程序设计……………………………………………………………………………2.1主要设计思路……………………………………………………………………3程序简介………………………………………………………………………3.1程序一些类的介绍……………………………………………………………4程序运行与测试……………………………………………………………………4.1程序开始………………………………………………………………………4.2程序界面………………………………………………………………………4.3系统启动测试………………………………………………………………4.4子弹发射测试………………………………………………………………4.5玩家移动测试………………………………………………………………1绪论1.1开发背景随着信息社会的迅猛发展,人们对游戏的要求也越来越1.2开发工具记事本2程序设计2.1主要设计思路用Canvas进行图形或图像绘制;支持图形或图像移动;支持键盘控制;应实现功能基本完整的单机游戏系统。
3程序类的介绍3.1有关类的介绍Tank类1、Tank类的主要属性有:function Tank(x,y,direct,color){this.x=x;this.y=y;this.speed=1;this.isLive=true;this.direct=direct;this.color=color;1、drawTank ()方法drawTank()方法根据坦克的类型不同可以画出不同类型的坦克和不同方向的坦克2、fire()方法fire()方法的功能是实现打出一颗子弹,fire()方法调用了画坦克的颜色变量c ,画出与坦克一样颜色的子弹,以区别子弹是那一方发出来的。
坦克大战游戏策划书3篇
![坦克大战游戏策划书3篇](https://img.taocdn.com/s3/m/41a0a1690812a21614791711cc7931b764ce7b4d.png)
坦克大战游戏策划书3篇篇一坦克大战游戏策划书一、游戏概述游戏名称:坦克大战游戏类型:休闲竞技类游戏目标:玩家控制坦克在战场上与其他玩家或电脑控制的坦克进行战斗,通过摧毁敌方坦克来获取胜利。
游戏玩法:玩家通过操作坦克的移动、射击等动作,与其他坦克进行对抗。
游戏中会有各种道具和障碍物,增加游戏的趣味性和挑战性。
二、游戏角色1. 玩家坦克:由玩家控制,具有不同的属性和技能。
2. 敌方坦克:包括电脑控制的普通坦克和具有特殊能力的 BOSS 坦克。
三、游戏场景1. 战场:分为多个不同的地图,每个地图都有独特的地形和障碍物。
2. 基地:玩家和敌方的起始位置,需要保护好自己的基地不被摧毁。
四、游戏规则1. 玩家通过操作坦克在战场上移动和射击。
2. 摧毁敌方坦克可以获得分数和道具。
3. 玩家的坦克被摧毁后,可以在一定时间后复活。
4. 游戏时间结束时,分数高的一方获胜。
五、游戏道具1. 强化道具:可以提升坦克的攻击力、防御力等属性。
2. 特殊武器道具:如导弹、激光等,具有强大的攻击效果。
3. 恢复道具:可以恢复坦克的生命值。
六、游戏界面1. 游戏主界面:包括开始游戏、选择地图、查看排行榜等功能。
2. 游戏战斗界面:显示战场地图、玩家和敌方坦克的位置、生命值、弹药数量等信息。
七、游戏音效1. 背景音乐:营造紧张激烈的战斗氛围。
2. 射击音效:增强射击的真实感。
3. 爆炸音效:让玩家更直观地感受到战斗的激烈程度。
八、游戏开发计划1. 需求分析:[具体时间]2. 设计阶段:[具体时间]3. 开发阶段:[具体时间]4. 测试阶段:[具体时间]5. 上线阶段:[具体时间]九、游戏推广计划1. 在各大游戏平台进行推广。
2. 利用社交媒体进行宣传。
3. 举办线上和线下的游戏比赛。
十、游戏盈利模式1. 内购道具。
2. 广告收入。
篇二坦克大战游戏策划书一、游戏概述游戏名称:坦克大战游戏类型:休闲对战类游戏平台:多平台(移动端、PC 端等)游戏背景:设定在一个充满战争硝烟的世界,玩家将操控坦克在各种战场上进行激烈战斗。
JAVA语言写的坦克大战详细说明书
![JAVA语言写的坦克大战详细说明书](https://img.taocdn.com/s3/m/4c8421bafad6195f302ba61c.png)
陕西国防学院《Java语言》课程期末实训题目坦克大战学院电子信息学院专业软件技术班别软件3132班学号3531323X姓名小智2015年3月6日一、课程题目坦克大战(Java版本)实现一个java版本的坦克大战游戏【功能提示】1.游戏要有图形用户界面,界面能够反映游戏所有的细节。
2.界面中要有坦克,墙,树林,河流。
3.界面中要有一个“家”,“家”被攻击中则输了游戏。
4.坦克分两种,敌方和我方。
5.墙也分为两种,可以穿透的普通墙,不可以穿透的铁墙。
6.树和河流均只有一种,树林坦克可以通过。
7.坦克可以发射子弹,敌我方的子弹属性一样。
8.我方子弹可以杀死敌方坦克,敌方子弹也可以杀死我方坦克,但需要多枪子弹才可以杀死。
9.敌方之间不可以杀死对方。
10.子弹击中坦克要有爆炸,但击中墙不能爆炸。
11.我方可以吃血包增加生命。
12.游戏可以暂停,重新开始,游戏帮助等功能。
具体如下图:13.二、题目分析与设计需求分析1.设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来,界面能够接受用户的操作,具有人机交互功能。
用户可以选择重新开始游戏,退出游戏,暂停游戏和查找游戏帮助。
2.界面中包含坦克,树,河流,阻挡墙和游戏用户所要保护的“家”。
3.坦克:坦克分为两种,敌方坦克和用户控制的坦克。
用户方和敌方坦克均可以发射子弹,可以改变路径的行走,且在行走过程中遇到墙等阻碍物和游戏边界时要改变方向,而不能一直顶着障碍物不放。
坦克之间不能穿越,碰撞到后自动调换方向。
4.树:界面中要包括树林,作为遮掩物体和修饰物体,以便增加游戏的元素,使得游戏更加贴切人性化。
树的数目不限,以游戏整体界面清晰美观来决定数目。
5.河流:界面中要包括河流,河流作用与树林相同,同样河流的数目不限,以游戏界面整体美观度来决定数目。
6.墙:墙体分为两种,普通的墙和铁墙,普通的墙在受到子弹袭击时会损坏,而铁墙可以阻碍子弹的穿越。
两方的坦克均不能穿越两种墙体,但都可以摧毁普通墙体。
坦克大战游戏程序课程设计
![坦克大战游戏程序课程设计](https://img.taocdn.com/s3/m/c0712e29a21614791711288f.png)
《程序设计应用基础》课程设计计划书坦克大战游戏1引言学习了C语言程序设计之后,我们粗略的掌握了程序设计的基本思路和要求,为了更加熟练的掌握这门计算机语言,我们选择编译一个经典小游戏——坦克大战。
通过课程设计提高我们的动手能力,把理论知识运用到实践当中。
在课程设计中,C语言的语法和逻辑严谨,对于初学者而言,有时忘记一个逗号或者分号整个程序便运行不了,经过了反复的调试,修改,最终形成可执行的程序。
在这个过程中,通过不断的练习,我们对C语言的掌握程度有明显的提高,同时,也锻炼了我们的头脑,使我们的思维更加科学严谨。
2设计方案2.1设计思路坦克大战游戏,一共两关。
不同的关卡,游戏地图、敌方坦克出现的种类不一样。
敌方坦克地图上最多存在4辆,击杀后会出现新坦克直至补足4个,当击杀坦克一定数值则敌方新坦克不会再增加。
击杀完所有坦克则胜利过关。
己方坦克也有复活次数,用完则失败。
另地图正下方有己方老家,若被敌方坦克攻破则游戏失败。
3程序设计与实施3.1程序的主要模块整个程序分为里表两大部分。
里部分由41*41的int地图数组组成,每个元素代表了该以该数组元素行列下标为地图坐标y,x那个单元的情况,不同的地图障碍物在该数组有不同的值,坦克在地图上占3*3个单元,在地图数组内相应坐标的3*3个元素内也对应特殊的值。
由地图数组值可以读出该坦克信息。
表部分则是根据里部分的地图数组通过gotoxy和printf函数在命令行界面打印出相应字符以构成游戏界面的。
程序中的每个函数操作都是通过里部分(地图数组)判定,然后对里部分(地图数组)操作,再由里部改变外部,由gotoxy和printf函数将可视化界面呈现给玩家。
也就是游戏主体函数内里表部分是一起操作的,不分开。
对于函数分类,程序又可分为三大类。
一类游戏辅助函数。
一个子弹系统,一个坦克系统。
子弹和坦克分别都是独立运作的系统,有少量信息交换。
3.2 主函数及其流程图主函数包括打印地图,实现游戏内置调节游戏速度的功能,判断坦克类型,判断敌我坦克是否存活,判断游戏胜负。
坦克大战游戏策划书3篇
![坦克大战游戏策划书3篇](https://img.taocdn.com/s3/m/1c695e1068eae009581b6bd97f1922791688beec.png)
坦克大战游戏策划书3篇篇一坦克大战游戏策划书一、游戏名称坦克大战二、游戏类型射击、策略三、游戏平台PC 端四、游戏背景在游戏中,玩家需要控制自己的坦克,在一个充满敌人和障碍物的战场上消灭所有敌人,保护自己的基地。
五、游戏目标1. 消灭所有敌人。
2. 保护自己的基地。
3. 在规定时间内获得最高分。
六、游戏玩法1. 玩家通过键盘控制坦克的移动和射击。
2. 坦克可以向四个方向移动,包括前进、后退、向左转和向右转。
3. 坦克可以向八个方向射击,包括正前方、正左方、正右方、左前方、左后方、右前方、右后方和后方。
4. 敌人会从不同的方向出现,并向玩家的基地前进。
5. 玩家需要消灭所有敌人,才能进入下一关。
6. 如果玩家的坦克被敌人的炮弹击中,或者撞到障碍物,或者基地被敌人摧毁,游戏结束。
7. 玩家可以通过消灭敌人获得金币,金币可以用来购买道具,如增加坦克的速度、攻击力、防御力等。
8. 玩家可以通过消灭敌人获得分数,分数越高,游戏结束时的奖励越高。
七、游戏关卡1. 游戏共有十个关卡,每个关卡的难度逐渐增加。
2. 每个关卡的地图都不同,包括不同的地形、障碍物和敌人的分布。
3. 每个关卡的敌人都会有不同的特点和攻击方式,玩家需要根据敌人的特点来制定策略。
八、游戏画面1. 游戏画面采用 2D 风格,以坦克和战场为主要元素。
2. 游戏画面色彩鲜艳,对比度高,易于玩家识别和区分敌我坦克。
3. 游戏画面中会有敌人的炮弹和玩家的坦克的炮弹的特效,增加游戏的紧张感和刺激感。
九、游戏音效1. 游戏音效包括坦克的移动声、射击声、爆炸声、敌人的脚步声等。
2. 游戏音效的音量和节奏会根据游戏的不同阶段进行调整,增加游戏的氛围和节奏感。
3. 游戏音效的设计要符合游戏的主题和风格,让玩家更容易沉浸在游戏中。
十、游戏操作提示1. 在游戏开始前,会有一段操作提示,告诉玩家如何控制坦克和射击。
2. 操作提示会在游戏过程中随时出现,提醒玩家如何应对不同的情况。
项目-坦克大战-设计报告
![项目-坦克大战-设计报告](https://img.taocdn.com/s3/m/b137399f6294dd88d1d26b5c.png)
《JA V A程序开发课程设计》项目设计项目名称:TankWar 软件专业:软件工程班级:13软工1班姓名:毛晨光学号:一、需求分析:基本功能:1.玩家控制的坦克能够四处移动并且打击敌方坦克;2.敌方坦克能够随机四处移动并且打击玩家控制的坦克;3.玩家控制的坦克拥有血量,而敌方坦克没有;4.坦克受到攻击时血条会缩短;5.敌方坦克被消灭完之后,提示游戏胜利;6.用户方坦克被消灭后提示游戏结束;特色功能:1.坦克具有图片,不单单只是个圈圈。
2.增加了血包功能,地图上会随机出现一个血包,我方坦克开过会增加血量。
二、系统设计:1.TankMap类:实现游戏界面地图的初始化。
2.PainTread类:绘制和重绘功能。
3.DirectionHandler:监听用户的键盘输入。
4.Tank类:实现坦克的初始化,绘制,移动,发射等功能。
5.EnemyTank:实现敌方坦克的初始化,绘制,移动,发射等功能。
6.Shell类:实现炮弹的初始化,绘制,移动,攻击功能。
7.Explor类:实现爆炸的初始化。
绘制功能,爆炸效果由绘制半径从小到大再到小的圆实现。
8.Direction类:包含枚举。
9.Blood类:用于实现血包的功能。
三、功能实现。
一.绘制地图功能:public class TankMap extends Frame{//定义地图的尺寸。
public static final int MAPWIDTH=800;public static final int MAPHEIGHT=600;//我方坦克Tank t=null;//定义随机出现的血包Random r=new Random();Image bufferImage=null;//地方坦克集合->enemys=new ArrayList<EnemyTank>();//爆炸集合public.static.jav//敌方坦克数量默认10个public int enemyCount=5;//主方法public static void main(String[] args) {TankMap tv=new TankMap();tv.init();}public void drawImage(){}//地图初始化方法public void init(){//初始化地图this.setSize(MAPWIDTH,MAPHEIGHT);this.setTitle("TankWar");this.setVisible(true);//添加键盘监听器this.addKeyListener(new DirectionHandler()); //添加穿口关闭监听器this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent arg0){ System.exit(0);}});//初始化我方坦克t=new Tank(this);//初始化敌方坦克for(int i=0;i<enemyCount;i++){enemys.add(new EnemyTank(40+30*i,80,Color.YELLOW)); }//启动绘制线程new Thread(new PaintThread()).start();}//@Overridepublic void paint(Graphics g){//画地图Color c=g.getColor();g.setColor(Color.GREEN);g.fillRect(0,0,MAPWIDTH,MAPHEIGHT);g.setColor(Color.RED);g.drawString("当前炮弹数目:"+shells.size(),20,40);g.drawString("生命值:",20,60);g.fillRect(65,55,t.getLife(),5);g.setColor(c);//画坦克t.draw(g);if(r.nextInt(10)==9 && bloods.size()==0)bloods.add(new Blood());if(r.nextInt(60)==7 && bloods.size()==1)bloods.remove(0);for(int i=0;i<enemys.size();i++){EnemyTank et=enemys.get(i);et.draw(g);}//画爆炸for(int i=0;i<explors.size();i++){Explor e=explors.get(i);e.draw(g);}//绘制血包for(int i=0;i<bloods.size();i++){Blood b=bloods.get(i);b.bloodb(t);b.draw(g);}//画炮弹for(int i=0;i<shells.size();i++){Shell s=shells.get(i);if(s.islive&&s.isgood){s.hitTanks(enemys);}else if(s.islive&&!s.isgood){s.hitTank(t);}s.draw(g);}}//双缓冲,防止游戏地图“频闪”public void update(Graphics g){paint(g);if(bufferImage==null){bufferImage=this.createImage(MAPWIDTH,MAPHEIGHT);}Graphics gbuffer=bufferImage.getGraphics();Color c=gbuffer.getColor();gbuffer.setColor(Color.GREEN);gbuffer.fillRect(0, 0, MAPWIDTH, MAPHEIGHT);gbuffer.setColor(Color.RED);gbuffer.drawString("当前炮弹数目:"+shells.size(),20,40);gbuffer.drawString("生命值:", 20, 60);gbuffer.fillRect(65,55,t.getLife(),5);gbuffer.setColor(c);paint(gbuffer);g.drawImage(bufferImage, 0, 0, null);}//内部类,主要通过调用repaint方法,实现绘图功能class PaintThread implements Runnable{@Overridepublic void run(){while(true){repaint();try{Thread.sleep(260);}catch(InterruptedException e){e.printStackTrace();}}}}//内部类,键盘监听器class DirectionHandler extends KeyAdapter{@Overridepublic void keyPressed(KeyEvent arg0){t.checkDirection(arg0);}}二.绘制坦克功能:public class Tank {//坦克的尺寸和移动速度public static final int WIDTH=50,HEIGHT=50,xspeed=5,yspeed=5;//坦克的初始位置public int x=400,y=300;//坦克的初始化方向,STOP即停止,Direction是自定义的枚举常量,见枚举源代码public Direction direction=Direction.STOP;//地图TankMap tm;//坦克是否存活boolean isLive=true;//坦克属于哪一方,true为用户方,false为敌方boolean isgood=true;//坦克初始化生命值int life=100;//定义坦克的初始化方向,以便插图坦克的图片public int zhuanxiang=1;//获取和设置存活状况public boolean isLive(){return isLive;}public void setLive(boolean isLive){this.isLive=isLive;}//获取和设置生命值public int getLife(){return life;}public void setLife(int life){this.life=life;}//构造方法public Tank(){};public Tank(TankMap t){tm=t;}//绘制坦克//根据坦克的移动方向,插入不同的坦克的图片public void draw(Graphics g){if(zhuanxiang==1){ImageIcon icon=new ImageIcon("Etank_shang.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==-2){ImageIcon icon=new ImageIcon("Etank_you.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==2){ImageIcon icon=new ImageIcon("Etank_zuo.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else{ImageIcon icon=new ImageIcon("Etank_xia.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}/*Color c=g.getColor();g.setColor(Color.RED);g.fillOval(x,y,WIDTH,HEIGHT);g.setColor(c);*/move(direction);}//根据方向,移动坦克,不允许坦克移出地图尺寸public void move(Direction d){if(d==Direction.STOP){}else if(d==Direction.UP){zhuanxiang=1;y -= yspeed;if(y<=20)y=20;}else if(d==Direction.RIGHT){zhuanxiang=-2;x+=xspeed;if(x>=800-WIDTH)x=800-WIDTH;}else if(d==Direction.DOWN){zhuanxiang=-1;y+=yspeed;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(d==Direction.LEFT){zhuanxiang=2;x-=xspeed;if(x<=0)x=0;}}//确定用户单机的方向键,修正坦克即将移动的方向public void checkDirection(KeyEvent k){if(k.getKeyCode()==KeyEvent.VK_UP){direction=Direction.UP;}else if(k.getKeyCode()==KeyEvent.VK_RIGHT){ direction=Direction.RIGHT;}else if(k.getKeyCode()==KeyEvent.VK_DOWN){ direction=Direction.DOWN;}else if(k.getKeyCode()==KeyEvent.VK_LEFT){ direction=Direction.LEFT;}if(k.getKeyCode()==KeyEvent.VK_F){fire();}}//发射炮弹的方法public void fire(){}//返回坦克当前位置矩形,便于判断是否与敌方坦克或炮弹重叠public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT); }}三.敌方坦克的绘制方法public class EnemyTank extends Tank{//初始化敌方坦克的属性public static final int WIDTH=50,HEIGHT=50,xspeed=5,yspeed=5; public int x=400,y=300;public Direction direction=Direction.DOWN;public boolean islive=true;Color color=Color.YELLOW;TankMap tm;//随机数产生器,供敌方坦克随机产生前进方向使用Random r=new Random();public int zhuanxiang;//方向更改限制,避免敌方坦克每移动一次就更改方向int randomCount=r.nextInt(10)+5;//构造方法public EnemyTank(){}public EnemyTank(int wx,int wy,Color c){x=wx;y=wy;color=c;}@Overridepublic void draw(Graphics g){//根据敌方坦克的移动方向插入不同的坦克图片if(zhuanxiang==1){ImageIcon icon=new ImageIcon("Etank_shang.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==-2){ImageIcon icon=new ImageIcon("Etank_you.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==2){ImageIcon icon=new ImageIcon("Etank_zuo.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else{ImageIcon icon=new ImageIcon("Etank_xia.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}move();}public void move(){//当方向更改限制为0时,产生一个随机方向if(randomCount==0){Direction dirs[]=Direction.values();direction = dirs[r.nextInt(dirs.length-1)];randomCount = r.nextInt(10)+5;}//方向更改限制减1randomCount--;//随机发射炮弹,当产生的随机数大于35时,发射炮弹if(r.nextInt(40)>36){fire();}//确定敌方的坦克的移动if(direction==Direction.UP){y-=yspeed;zhuanxiang=1;if(y<=HEIGHT)y=HEIGHT;}else if(direction==Direction.RIGHT){x+=xspeed;zhuanxiang=-2;if(x>=800-WIDTH)x=800-WIDTH;}else if(direction==Direction.DOWN){y+=yspeed;zhuanxiang=-1;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(direction==Direction.LEFT){x-=xspeed;zhuanxiang=2;if(x<=0)x=0;}}@Overridepublic void fire(){Shell(this.x+WIDTH/2,this.y+HEIGHT/2,this.direction,tm,Color.BLUE,false));}public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);}}四.炮弹绘制方法public class Shell {//初始化炮弹的基本属性public final int WIDTH=5,HEIGHT=5,xspeed=14,yspeed=14;public int x,y;Direction dir=Direction.STOP;public boolean islive=true;TankMap tm=null;Color color=Color.RED;boolean isgood=true;boolean isLive=true;//构造方法public Shell(){}public Shell(int xd,int yd,Direction d,TankMap t){ x=xd;y=yd;dir=d;tm=t;}public Shell(int xd,int yd,Direction d,TankMap t,Color c,boolean g){x=xd;y=yd;dir=d;tm=t;color=c;isgood=g;}//绘制炮弹public void draw(Graphics g){if(islive){Color c=g.getColor();g.setColor(color);g.fillOval(x,y,WIDTH,HEIGHT);g.setColor(c);move(dir);}else{}}//炮弹的移动,如果炮弹移动出了地图尺寸,则设定炮弹死亡public void move(Direction d){if(d==Direction.UP){y-=yspeed;if(y<=0)islive=false;}else if(d==Direction.RIGHT){x+=xspeed;if(x>=800)islive=false;}else if(d==Direction.DOWN){y+=yspeed;if(y>=600)islive=false;}else if(d==Direction.LEFT){x-=xspeed;if(x<=0)islive=false;}}public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT); }//打击坦克方法public boolean hitTank(Tank t){if(this.isLive&&t.isLive&&this.getRec().intersects(t.getRec()) ){//用户坦克生命值减20t.setLife(t.getLife()-20);//如果用户坦克生命值《=0,游戏结束if(t.getLife()<=0){t.setLive(false);t.direction=Direction.STOP;JOptionPane.showMessageDialog(tm,"Game Over!");System.exit(0);}//炮弹死亡this.isLive=false;//产生爆炸Explor e=new Explor(x-3,y-3,this.tm);return true;}return false;}//用户坦克打击敌方坦克的方法public boolean hitTanks(List<EnemyTank>enemyTanks){EnemyTank e;for(int i=0;i<enemyTanks.size();i++){e=enemyTanks.get(i);if(this.getRec().intersects(e.getRec())){e.setLive(false);this.isLive=false;Explor ex=new Explor(x-3,y-3,this.tm);return true;}}return true;}}五.爆炸类源代码:public class Explor {//初始化爆炸属性int x,y;TankMap tm;boolean islive=true;int diameter[]={5,9,13,18,25,31,21,12,6};int step=0;//构造方法public Explor(){}public Explor(int x,int y,TankMap t){this.x=x;this.y=y;this.tm=t;}//绘制爆炸public void draw(Graphics g){//如果爆炸已经发生过,从地图的爆炸集合中移出该爆炸if(!this.islive){return;}//判断爆炸是否发生完if(step==diameter.length){this.islive=false;step=0;return;}Color c=g.getColor();g.setColor(Color.ORANGE);g.fillOval(x, y, diameter[step], diameter[step]);step++;g.setColor(c);}}六.枚举方向源代码package tank;//定义枚举public enum Direction{UP,RIGHT,DOWN,LEFT,STOP;}七.随机血包产生的方法public class Blood{public final int WIDTH=30,HEIGHT=30;public int x= new Random().nextInt(800),y= new Random().nextInt(600);TankMap tm;public void draw(Graphics g){ImageIcon icon=new ImageIcon("blood.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}public boolean bloodb(Tank t){if(t.isLive&&this.getRec().intersects(t.getRec())){if(t.getLife()<=60){t.setLife(t.getLife()+40);}else{t.setLife(100);}}return false;}public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);}}四、总结。
JAVA课程设计坦克大战(含代码)
![JAVA课程设计坦克大战(含代码)](https://img.taocdn.com/s3/m/feea70fa700abb68a982fbea.png)
Java程序课程设计任务书项目名称:坦克大战游戏的设计与开发英文名:Tank Battle1、主要内容:1、基于java的游戏开发与设计的分析;2、坦克大战游戏的架构搭建与设计实现;3、游戏可以通过用户可以注册新用户,修改自己的密码、个人资料。
2、具体要求1、系统的功能要求:(一)实现玩家试玩游戏功能,屏蔽用户注册和登陆功能(空功能)(二)玩家具备一个或者两个备选坦克战车(三)玩家可以选择一个到两个关卡进行作战(四)玩家可以选择两个敌对阵营中的一个加入,与其他AI战车坦克并肩作战(五)胜利判定条件为:时间制、全杀制(可选)(六)至少提供两个可以自由切换的视角(七)至少提供一种炮弹类型(八)假定项目:如果用户注册,登陆功能能够顺利做好,则提供一个玩家分数上传和排行榜功能。
2、学习并掌握以下技术:数据库的JDBC连接,JA V A编程语言,MySQL数据库的应用;JSP的开发与运用3、熟练使用以下开发工具:JCreator,Myeclipse ,MySQL ,PowerDesigner 等3、进度安排:12月28日~ 12 月29 日:查阅资料,完成文献综述,任务书;12月29 日~ 12月31日:进行系统的需求分析与设计;1月1日~ 1月3日:根据分析进行各个模块程序的设计与创建;1月4日~ 1 月6日:完成各个模块的程序编写;1月7 日~ 1 月8 日:完成全部程序的编写及系统测试;1月9日~ 1 月10日:完成课程设计报告的编写,答辩;摘要随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域,包括医药,汽车工业,手机行业,游戏,等等地方。
Java游戏的开发为满足人们娱乐所需而设计。
本游戏为坦克大战游戏,是基于Java的图形用户界面而开发的,可以放松心情的小游戏。
游戏从系统操作简便、界面友好、灵活、上手即会的基本要求出发,完成整款游戏的开发。
游戏更设置了暂停、计分、音乐、速度,用户信息保存等功能,可以根据自己的爱好,挑战更高难度,为用户带来愉悦的体验。
JAVA语言写的坦克大战详细说明书
![JAVA语言写的坦克大战详细说明书](https://img.taocdn.com/s3/m/29f1319884254b35effd344d.png)
陕西国防学院《Java语言》课程期末实训题目坦克大战学院电子信息学院专业软件技术班别软件3132班学号 3531323X姓名小智2015年3月6日一、课程题目坦克大战(Java版本)实现一个java版本的坦克大战游戏【功能提示】1.游戏要有图形用户界面,界面能够反映游戏所有的细节。
2.界面中要有坦克,墙,树林,河流。
3.界面中要有一个“家”,“家”被攻击中则输了游戏。
4.坦克分两种,敌方和我方。
5.墙也分为两种,可以穿透的普通墙,不可以穿透的铁墙。
6.树和河流均只有一种,树林坦克可以通过。
7.坦克可以发射子弹,敌我方的子弹属性一样。
8.我方子弹可以杀死敌方坦克,敌方子弹也可以杀死我方坦克,但需要多枪子弹才可以杀死。
9.敌方之间不可以杀死对方。
10.子弹击中坦克要有爆炸,但击中墙不能爆炸。
11.我方可以吃血包增加生命。
12.游戏可以暂停,重新开始,游戏帮助等功能。
具体如下图:二、题目分析与设计需求分析1.设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来,界面能够接受用户的操作,具有人机交互功能。
用户可以选择重新开始游戏,退出游戏,暂停游戏和查找游戏帮助。
2.界面中包含坦克,树,河流,阻挡墙和游戏用户所要保护的“家”。
3.坦克:坦克分为两种,敌方坦克和用户控制的坦克。
用户方和敌方坦克均可以发射子弹,可以改变路径的行走,且在行走过程中遇到墙等阻碍物和游戏边界时要改变方向,而不能一直顶着障碍物不放。
坦克之间不能穿越,碰撞到后自动调换方向。
4.树:界面中要包括树林,作为遮掩物体和修饰物体,以便增加游戏的元素,使得游戏更加贴切人性化。
树的数目不限,以游戏整体界面清晰美观来决定数目。
5.河流:界面中要包括河流,河流作用与树林相同,同样河流的数目不限,以游戏界面整体美观度来决定数目。
6.墙:墙体分为两种,普通的墙和铁墙,普通的墙在受到子弹袭击时会损坏,而铁墙可以阻碍子弹的穿越。
两方的坦克均不能穿越两种墙体,但都可以摧毁普通墙体。
课程设计报告--坦克大战
![课程设计报告--坦克大战](https://img.taocdn.com/s3/m/c04b6f7dbcd126fff6050b26.png)
目录一.问题定义 (1)1. 项目名称 (1)2. 项目目标 (1)3. 选题背景 (1)二.可行性研究 (1)1.技术可行性 (1)2. 经济可行性 (1)3. 操作可行性 (1)三.需求分析 (2)1. 游戏内容需求 (2)2. 游戏规则 (3)四.游戏设计 (3)1. 类的设计 (3)2. 游戏流程 (4)1. 主流程 (4)2. 游戏初始化 (5)3. 游戏运行 (6)3. 游戏序列图 (14)游戏初始化 (14)键盘按下事件 (15)游戏运行 (15)玩家坦克处理 (16)电脑坦克处理 (17)炮弹碰撞处理 (19)坦克碰撞处理 (19)游戏结束 (20)五.游戏代码 (21)CGameMain类 (21)CTankPlayer类 (32)CTankEnemy类 (36)CBullet类 (42)CWeapon类 (49)六.实验总结 (53)一.问题定义1.项目名称坦克大战2.项目目标综合运用C++及其面向对象的知识开发一款小游戏。
3.选题背景相信大部分同学都玩过或看过“坦克大战”这款经典游戏。
现在,就由我自己动手来开发它。
因为之前的学习,我具备了C++语言和面向对象的基础知识,在这个基础上按照实验指南的指导一步一步进行下去,把这款经典游戏做出来。
巩固之前所学知识也学习新的知识。
二.可行性研究1.技术可行性本游戏采用 FunCode和Visual C++6.0进行开发,基于Windows xp和Windows7操作系统。
Funcode软件提供了大量基础类库,可以快速方便地构造出游戏软件。
之前课程学习过C++,具有一定的C++语言开发基础,对面向程序设计有一定了解。
2.经济可行性此次课程设计由我一人完成,只需装有Funcode及Visual C++的电脑一台,无资金需求;且制作出来的游戏软件并不打算发行,也无后期资金需求,经济完全可行。
3.操作可行性本游戏只需用W、A、S、D来移动,用J键进行攻击,操作十分简单,界面友好,符合用户操作习惯。
JAVA语言写的坦克大战详细说明手册
![JAVA语言写的坦克大战详细说明手册](https://img.taocdn.com/s3/m/62afaad00242a8956bece4a9.png)
陕西国防学院《Java语言》课程期末实训【功能提示】1.游戏要有图形用户界面,界面能够反映游戏所有的细节。
2.界面中要有坦克,墙,树林,河流。
3.界面中要有一个“家”,“家”被攻击中则输了游戏。
4.坦克分两种,敌方和我方。
5.墙也分为两种,可以穿透的普通墙,不可以穿透的铁墙。
6.树和河流均只有一种,树林坦克可以通过。
7.坦克可以发射子弹,敌我方的子弹属性一样。
8.我方子弹可以杀死敌方坦克,敌方子弹也可以杀死我方坦克,但需要多枪子弹才可以杀死。
坦克之间不能穿越,碰撞到后自动调换方向。
4.树:界面中要包括树林,作为遮掩物体和修饰物体,以便增加游戏的元素,使得游戏更加贴切人性化。
树的数目不限,以游戏整体界面清晰美观来决定数目。
5.河流:界面中要包括河流,河流作用与树林相同,同样河流的数目不限,以游戏界面整体美观度来决定数目。
6.墙:墙体分为两种,普通的墙和铁墙,普通的墙在受到子弹袭击时会损坏,而铁墙可以阻碍子弹的穿越。
两方的坦克均不能穿越两种墙体,但都可以摧毁普通墙体。
普通墙体的数目配合其他元素合理安排,铁墙则不宜过多,不然游戏难度太低甚至因为坦克不能穿越铁墙而使得游戏无法进行下去。
1.图形用户界面图形用户界面要用到Java课程里的第六章的知识,需要用到抽象窗口工具集即AWT和Swing来设计实现,由于游戏需要有功能按键来控制游戏的重新开始,退出,暂停,帮助等,所以在实现过程中,设计菜单项。
坦克,河流,树,家,墙等都是调用各自类里面的draw函数来画出来,最后new一个图形面板出来,把所有的元素都add进面板就可以了。
界面的构造在程序中由TankClient类的构造方法来完成,即没构造一个用户类都会产生这样一个包含各种游戏元素在内的界面。
由于画面是静止的,而我们游戏的画面要求是动态的,游戏中的坦克和子弹都是在不断的动,可穿透的普通墙体也在“动”,所以对于画面,必须要不断的更新,重画才能产生动态的效果。
坦克大战详细设计说明书
![坦克大战详细设计说明书](https://img.taocdn.com/s3/m/852894e376eeaeaad0f33000.png)
软件详细设计说明书一、TankWar类:TankWar继承Frame类。
1、paint( )方法paint( ) 方法主要实现对坦克类和子弹类,障碍物类和爆炸类等画到窗口上。
坦克类又分为MyTank和EnwmyTank 两类。
对这两类用不同的颜色画到窗口上。
画子弹时通过传递坦克的颜色画出相应的子弹颜色。
子弹画坦克死亡则不再对其进行重画。
2、update( )方法。
update( ) 方法主要是为了解决,重画频率太快,paint( ) 方法还没有完成,重画坦克时出现的闪烁现象。
通过双缓冲技术将所有东西画在虚拟图片上,一次性显示出来解决闪烁现象。
3、内部类KeyMon键盘监听KeyMon继承KeyAdapter类。
通过KeyMon类的监听,用户可以通过键盘控制自己的坦克。
4、内部类MyTankWarThreadMyTankWarThread实现Runnable接口,通过MyTankWarThread实现对坦克的重画,实现坦克的移动。
5、showFrame( )方法showFrame( )方法主要是设置一个窗口及其各种参数。
二、Tank类Tank类是实现Runnable接口的一个抽象类1、Tank类的主要属性有:int x; //坦克的位置int y; //int oldx; //坦克上一步的坐标int oldy; //Dir dir; // Tank方向的成员变量int speed = 5;boolean isLive = true;2、Tank类提供各种的构造方法Tank(int x, int y)Tank(int x, int y, Dir dir)Tank(int x, int y, Dir dir, TankWar tw)根据不同的需要使用不同的构造方法。
3、drawTank ()方法drawTank()方法根据坦克的类型不同可以画出不同类型的坦克和不同方向的坦克。
敌人的坦克用BLUE画出来,自己的坦克用RED颜色画出来,以区分敌我。
《坦克大战》系统分析设计
![《坦克大战》系统分析设计](https://img.taocdn.com/s3/m/4824dce4856a561252d36f15.png)
《坦克大战》系统分析设计文档目录一、系统功能模块 (1)1. 战斗模块: (1)1.1 移动模块 (1)1.2 射击模块 (2)1.3 生命值模块 (3)1.4 碰撞检测模块 (3)1.5 对象创建模块 (4)1.6 积分模块 (4)1.7 作弊模块 (5)1.8 道具模块 (5)2. 面板绘图模块 (6)3. 事件处理模块 (6)二、程序关键类说明 (7)1. Tank类 (7)2. Missile类 (8)3. TankLocal类 (9)4. BloodTool类 (10)一、系统功能模块整个游戏系统利用面向对象语言Java编写,程序可大致分为以下几个大模块:坦克大战事件处理模块战斗模块面板绘图模块更详细可将战斗模块做以下分解:战斗模块生命值模块碰撞检测模块积分模块射击模块作弊模块道具模块移动模块对象创建模块1. 战斗模块:1.1 移动模块●模块描述:使玩家与电脑坦克能够自由并且匀速流畅的进行移动,通过按下和松开键盘上的方向键来实现移动和停止移动。
●设计方案:我们对传统的坦克四向移动方式其进行了完善,将原本的四向移动完善为八向移动,即除了传统的上下左右移动之外,还增加了斜向移动,也就是左上、左下、右上、与右下。
除了可以按住单个方向键进行四向移动之外,还可以同时按住两个互不相反方向键来进行斜向移动的实现,松开方向键之后坦克停止移动,同样,电脑控制的坦克也是八向的移动方式,这样就增加了更多的不确定因素,游戏的耐玩性和挑战性得到了提高。
●关键技术介绍:在tank类中定义一个枚举类表示方向,其中包括9个固定方向对象:八个方向+stop静止,方便直接调用这些固定对象;对主站坦克,即玩家的坦克设置布尔类型的方向标志位,再通过switch...case...语法对玩家按键情况进行检测,于是可以检测出玩家按下的两个键,最后通过调用位移方法达到移动的目的。
1.2 射击模块●模块描述:使玩家与电脑控制的坦克能够流畅并且自由但是有限制的发射子弹,通过按下和松开键盘上的空格键来实现射击和停止射击,子弹弹道以直线匀速的形式飞出。
坦克大战系统说明书
![坦克大战系统说明书](https://img.taocdn.com/s3/m/d677c801a5e9856a5612606a.png)
坦克大战系统说明书专业:物联网工程班级:141班课程名称:Java程序设计成员:孙星;张强强;陈亮指导教师:彭圣华老师完成时间:2016年6月坦克大战系统目录1、设计目的与任务 02、项目介绍 03系统设计 (1)3.1窗口设计 (1)3.2坦克类设计 (1)3.2.1绘图 (1)3.2.2坦克类的设计基础类Tank类:己方坦克类:对方坦克类:子弹类: (2)3.3MyPanel类的设计 (3)3.3.1构造方法利用构造函数创建坦克子弹对象并实现多线程 (3)3.3.2 paint方法利用重绘实现了坦克子弹移动的绘制以及边界的控制 (3)3.3.3run方法hitmine和hitfoe为遍历子弹和对方坦克的函数,实现了多态。
3.3.4重写keylistener方法实现坦克的活动按键的监听3.4tank类作为程序的入口和窗体容器的设置3.5welcome类设置欢迎界面3.6record类记录游戏的战绩 (4)4算法说明 (5)4.1判定坦克击中算法 (6)4.2子弹运动的设计 (7)4.3坦克运动效果的设计根据坐标,方向不断重绘坦克 (8)5、程序运行的测试与分析开始界面跳动的坦克大战字体。
游戏进行中,自由移动的坦克。
(9)6、总结 (11)1、设计目的与任务本设计旨在在完成程序设计课程的学习后,能掌握面向对象的思想、设计方法和设计步骤,可以利用Java语言开发工具迅速地编写有一定实用价值的应用程序。
课程设计中的问题比平时的习题复杂得多,也更接近实际。
课程设计着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养学生的动手能力,锻炼学生发现问题、分析问题和解决问题的能力。
另一方面,使书上的知识变活,起到深化理解和灵活应用教学内容的目的。
平时的习题局限于一个和二个知识点,而课程设计题是程序设计的综合训练,包括问题分析,总体结构设计,用户界面设计、程序设计、基本技能和技巧。
加强学生研发、编写、调试程序的能力;培养学生在项目开发中团队合作精神、创新意识及能力;提高学生科技论文写作能力,规范完成课程设计报告。
坦克大战
![坦克大战](https://img.taocdn.com/s3/m/e12d600452d380eb62946d58.png)
攀枝花学院课程设计题目:坦克大战程序设计院(系):数学与计算机学院年级专业: 2015级网络工程姓名:陈波学号: 201510803075 指导教师:张会二〇一六年七月五日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。
课程设计(论文)指导教师成绩评定表摘要坦克大战是一款适用于青少年娱乐放松的游戏,不仅有利于人们放松还能避免对游戏的上瘾。
随着现在各种网络游戏的盛行有着一款既不上瘾又能缓解人们的压力,对于当今社会很是重要。
利用计算机图形学进行坦克大战程序设计,是利用C++语言绘图函数实现坦克大战图形界面演示过程。
通过C++语言实现图形学的绘图,程序控制,以及区域填充,并根据坦克大战的移动和攻击全过程演示。
关键词坦克大战,娱乐,放松。
目录摘要 (I)1 需求分析 (3)1.1 需求概述 (3)1.2 需求环境 (3)1.3 功能描述 (3)2 概要设计 (4)2.1 程序功能模块 (4)2.2 程序流程图 (5)2.3 数据结构的设计 (4)3 详细设计 (4)3.1 游戏开始 (4)3.1.1 代码功能 (4)3.1.2 功能实现代码 (5)3.2 坦克的移动 (6)3.2.1代码功能 (6)3.2.2 功能实现代码 (8)3.3 坦克开炮和敌方坦克的构造 (12)3.3.1 代码功能 (12)3.3.2 功能实现代码 (14)3.4 地图的加载和创建父类 (17)3.4.1 代码功能 (18)3.4.2 功能实现代码 (19)3.5 子弹链表和显示游戏信息 (23)3.5.1 代码功能 (23)3.5.2 功能实现代码 (24)4 测试与运行 (28)结束语 (29)参考文献 (30)1 需求分析1.1 需求概述坦克大战程序设计是计算机图形学中图形变换的内容之一。
而图形学中的图形变换的概念是由简单图形生成复杂图形,可用二维图形表示三维形体,甚至可以对静态图形经过快速变换而获得图形的动态显示效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1绪论 (1)1.1开发背景………………………………………………………………………1.2开发思路………………………………………………………………………1.3开发工具………………………………………………………………………2程序设计……………………………………………………………………………2.1主要设计思路……………………………………………………………………2.2思路设计实现……………………………………………………………………3程序简介………………………………………………………………………3.1程序一些类的介绍……………………………………………………………4程序运行与测试……………………………………………………………………4.1程序开始………………………………………………………………………4.2程序界面………………………………………………………………………4.3系统启动测试………………………………………………………………4.4子弹发射测试………………………………………………………………4.5玩家移动测试………………………………………………………………4.6信息发送测试………………………………………………………………5程序有关代码………………………………………………………………………5.1………………………………………………………………………5.2………………………………………………………………………5.3………………………………………………………………………6………………………………………………………………………6.1………………………………………………………………………参考文献………………………………………………………………………1绪论1.1开发背景随着信息社会的迅猛发展,人们对游戏的要求也越来越高1.2开发思路该游戏的界面使用了JA V A awt界面显示技术实现,游戏主窗口类TankClient继承了Frame类,重写了paint方法,在该方法中绘出游戏背景,各种元件和控件等。
游戏的每个组成部分都被封装为一个Java类,例如坦克对象被封装在Tank类中,该类提供了构建坦克对象方法、坦克上下左右移动方法、fire发射炮弹方法、keyReleased按键松开事件处理方法和keyPressed按键按下事件处理方法。
炮弹类Missile,提供了移动方法;坦克攻击判定,坦克中保存一个isgood成员变量,判定是否是敌人坦克,在子弹飞行轨迹中判定是否有坦克,若有则判定击毁该坦克。
1.3开发工具该坦克大战游戏是在Eclipse 集成开发环境中开发的,它目标是实现一个单机版本的人机对战游戏程序,该程序界面比较美观,操作灵活流利。
具体实现了游戏界面布局设计、坦克图片绘制、子弹绘制、坦克移动、坦克对战,障碍墙绘制等功能。
坦克游戏结束的条件是,游戏中我方坦克守护的围墙区域被敌人击破,四面围墙被攻破则判定游戏结束。
本游戏中为了增加趣味性,对坦克做了人工智能处理,即随机生成坦克的下一步移动方向,随机发射炮弹等。
另外,在游戏地图上还增加了墙壁,分为普通墙壁和金属墙壁,普通墙壁一发炮弹即可击破。
游戏地图上还绘制了河流、森林等图片,进一步模拟真实的游戏场景,使得该游戏更富有趣味性。
本游戏程序直接在eclipse开发环境中运行,建议使用jdk1.6版本,在eclipse直接右击工程名,选择run as Java Application即可正常运行程序,使用键盘上的方向键和S按键发射炮弹。
2程序设计2.1主要设计思路2.2成粗设计的实现3.1有关类的介绍TankWar类:TankWar继承Frame类。
1、paint( )方法paint( ) 方法主要实现对坦克类和子弹类,障碍物类和爆炸类等画到窗口上。
坦克类又分为MyTank和EnwmyTank 两类。
对这两类用不同的颜色画到窗口上。
画子弹时通过传递坦克的颜色画出相应的子弹颜色。
子弹画坦克死亡则不再对其进行重画。
2、update( )方法。
update( ) 方法主要是为了解决,重画频率太快,paint( ) 方法还没有完成,重画坦克时出现的闪烁现象。
通过双缓冲技术将所有东西画在虚拟图片上,一次性显示出来解决闪烁现象。
3、内部类KeyMon键盘监听KeyMon继承KeyAdapter类。
通过KeyMon类的监听,用户可以通过键盘控制自己的坦克。
4、内部类MyTankWarThreadMyTankWarThread实现Runnable接口,通过MyTankWarThread实现对坦克的重画,实现坦克的移动。
5、showFrame( )方法showFrame( )方法主要是设置一个窗口及其各种参数。
Tank类Tank类是实现Runnable接口的一个抽象类1、Tank类的主要属性有:int x; //坦克的位置int y; //int oldx; //坦克上一步的坐标int oldy; //Dir dir; // Tank方向的成员变量int speed = 5;boolean isLive = true;2、Tank类提供各种的构造方法Tank(int x, int y)Tank(int x, int y, Dir dir)Tank(int x, int y, Dir dir, TankWar tw)根据不同的需要使用不同的构造方法。
3、drawTank ()方法drawTank()方法根据坦克的类型不同可以画出不同类型的坦克和不同方向的坦克。
敌人的坦克用BLUE画出来,自己的坦克用RED颜色画出来,以区分敌我。
4、fire()方法fire()方法的功能是实现打出一颗子弹,fire()方法调用了画坦克的颜色变量c ,画出与坦克一样颜色的子弹,以区别子弹是那一方发出来的。
5、isHitWall()方法该方法是用来判断Tank是否与障碍物发生碰撞public boolean isHitWall() {Wall w = null;for (int i = 0; i < tw.walls.size(); i++) {w = tw.walls.get(i);if (w.isHits(this.getRectangle())) {return true;}}return false;}6、getRectangle()方法该方法主要是用来检测是否发生了碰撞。
public Rectangle getRectangle() {return new Rectangle(x, y, TANK_WIDTH, TANK_HEIGHT);}7、add(int count, TankWar tw)方法该方法是用来添加敌人坦克的,当敌人坦克数量减少时,而此时敌人的count 又未小于0时添加相应数量的敌人坦克来增加游戏的可玩性。
MyTank类MyTank类继承Tank类1、locDir(KeyEvent e)方法通过键盘监听,对按键进行监听来实现用户可以通过W D S A四个方向键对坦克的控制2、keyReleased(KeyEvent e)方法该方法主要是为了防止连续发子弹的问题,只有放开SPACE按键才可以发弹,这样就增加了游戏的可玩性。
3、stay()方法该方法主要实现暂停的功能,这个是本游戏代码中的一个的亮点,通过线程来实现的public void stay() {int tc = Thread.activeCount();Thread[] threads = new Thread[tc];Thread.enumerate(threads);if (tw.flag) {for (int i = 0; i < threads.length; i++) {System.out.println(tc + ":suspend " + threads[i].getName());if (threads[i].getName().matches("^Thread-.*")) {threads[i].suspend();tw.flag = false;}}} else if (! tw.flag) {for (int i = 0; i < threads.length; i++) {System.out.println(tc + ":resume " + threads[i].getName());if (threads[i].getName().matches("^Thread-.*")) {threads[i].resume();tw.flag = true;}}}}4、move()方法该方法是实现坦克的移动,如果遇到障碍物或出界,则返回上一次的位置,通过(oldX , oldY)坐标记录坦克每一次移动的位置。
public void move() {if (dir == Dir.U) {oldy = y;y = y - speed;if (isHitWall()) {y = oldy;}} else if (dir == Dir.R) {oldx = x;x = x + speed;if (isHitWall()) {x = oldx;}} else if (dir == Dir.D) {oldy = y;y = y + speed;if (isHitWall()) {y = oldy;}} else if (dir == Dir.L) {oldx = x;x = x - speed;if (isHitWall()) {x = oldx;}}//判断坦克出界if (x > TankWar.GAME_WIDTH - TANK_WIDTH - 5) {x = TankWar.GAME_WIDTH - TANK_WIDTH - 5;}if (x < 5) {x = 5;}if (y > TankWar.GAME_HEIGHT - TANK_HEIGHT - 5) {y = TankWar.GAME_HEIGHT - TANK_HEIGHT - 5;}if (y < TANK_HEIGHT) {y = TANK_HEIGHT;}}5、drawTank()方法这个方法是实现坦克自动移动,玩家可以通过方向键改版方向,移动过程中可以发射子弹。
public void drawTank(Graphics g) {super.drawTank(g);if (isStay) {move();}}EneyTank类EnemyTank类继承Tank类1、moveTrace()方法该方法实现的是敌人坦克伪智能功能,这个是本坦克大战的一个亮点。