战旗类DotA游戏原代码及项目报告

本文介绍了作者团队在C语言课程设计中开发的一款回合制RPG战棋类游戏——DotA圣战。游戏采用Visual Studio 2008,运用MFC实现,包括英雄升级、战斗动画、寻路、特殊地形效果等功能。文章详细描述了开发过程中的分工、技术挑战及解决方案,如状态与显示分离的架构设计、资源收集、动画制作等,并分享了开发过程中的感悟和经验教训。
摘要由CSDN通过智能技术生成

C语言程序设计实践的课程设计我们写了个游戏,差点拿满分,先将代码与项目报告与大家分享^_^

先上截图:

  

游戏名称:DotA圣战

类型:回合制RPG战棋类游戏

分工:

     SwordHoly:游戏主程序,英雄类,重绘功能的实现。

     Emerson:游戏战斗动画的实现。

     tarcyzhu:寻路功能的实现。

     ZCH:友情技术支持。(大三学长。。)

 

 

实验环境:

1.       开发环境:Windows 7+Visual Studio 2008

2.       辅助软件:  Photoshop CS3Word 2010QuickSnapIconMaster、拳皇2000

整体构架:

1.       整体架构采取状态与显示分离,游戏运行过程中其实只是改变状态,然后调用OnPaint()重绘函数,进行画图,把状态通过表现出来

2.       这样设计的优点:

1.  降低各模块之间的耦合度,易于编码与维护,本来的话对于每次改变状态都要写一个对应的画图模块,那样会显得非常繁琐和混乱,不易统一管理和维护。

2.  易于调试,因为状态改变与显示过程的分离,使得调试也变的简单,每次调试的时候只要判断是在状态改变过程出错还是画图过程出错,更容易定位出错点。

开发模式:

    先做出程序主体,然后一个一个模块加上去。当一个模块调试成功后再去做下一个模块,这样做的好处是容易查错,因为如果出错的话肯定是当前在做的那个模块有错,因为前一个模块已经调试成功了。而且这样边做边能看到成果,能鼓励自己把完整的游戏做下来。

功能模块:

1.       英雄模块:包含升级模块,死亡模块,经验系统,战斗模块(双倍暴击,闪避等)

2.       画图模块:显示英雄(普通状态,可以被攻击状态,和英雄属性显示),显示地形(普通状态,可以到达状态和特殊地形属性显示)。

3.       移动模块:

1.       DFS过程判断该点是否可达,可达后地形显示变绿。

2.       BFS 过程找出一条路径,然后把整条路的行走过程显示出来。

4.       特殊地形属性加成模块:英雄站在有些特殊地形上攻击力或防御力会增加,站在月亮井上每回合还会加血。

5.       血条模块:在英雄头像下面会有一个血条表示英雄当前血量

6.       回合转化:一方操作结束后,将其英雄禁用,另一方英雄启用。

7.       胜利条件模块:敌全灭或者占领对方基地3回合

8.       战斗动画模块:对于战斗过程中的暴击,闪避,普通攻击,英雄死亡都有不同的动画,在动画中还能用动态文本显示出扣了多少血。

遇到的困难及解决方法:

1.         时间紧任务重:

当开始准备写的时候已经只有两个星期了,而且有两个人退出了。

解决方法:

1.在压力面前往往能激发人的潜力,那两个星期把能翘的课都翘了,在机房一待就是一个下午和一个晚上,为这个游戏争取了足够多的时间,所以在压力面前不要退缩,要迎难而上。

     2.砍掉一些功能,开始设计的时候野心很大,想把技能模块,物品模块,金钱模块和AI模块都做进去,不过时间实在来不及了,有时候放弃也是一种策略。

2.         MFC基础:

     虽然C语言的基础比较好,但是对于MFC还是一无所知的,要想做出界面来难度是可想而知的。

解决方法:

1.       要用到什么去学什么,如果再系统的去学MFC,一来时间不够,二来感觉还是在实践中学效率比较高,事实证明其实里面用到的MFC知识很少的,只要会贴图,画图,输出文本和一点消息映射的知识就完全可以把这个游戏做出来。

2.       向学长寻求帮助,对于MFC我还是很陌生的,对Visual Studio 2008也不是很熟悉,有些东西不清楚询问学长的话一般都能得到满意的答复,再这里对ZCH学长表示感谢。

3.         功能太复杂,无从下手

        解决方法:将画图过程和状态变化过程分离,也就是前面写到的整体构架,这样一来整个程序的结构就清晰了,写起来也是水到渠成。

4.         资源很难找:

         合适的图片很难找,合适的地图更难找,找来找去都感觉不合适,最后把正规DotA游戏里的图截下来,再用IconMaster截出几个64*64的单元格,将这几个单元格组合后当作地图。这个过程其实是很繁琐的,搞了整整一下午才搞定。英雄头像、开场画面和结束画面也是精挑细选的,还有把这些资源导入到工程中,也是个体力活,总之资源的收集过程也是充满艰辛的。

5.         发现绘图的一个BUG

     将游戏的运行界面多拖动几次,程序就会死掉,最后多次调试发现是重绘过程中内存溢出,经过网上一番查找发现了,pDC没有Release掉,dcMemory没有delete掉,将这两个错误一改,程序跑的飞快^_^

6.         地形变绿和头像变灰不知道如何实现

     这是一个很实际的问题,由于对

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Java战棋游戏代码主要涉及到以下几个方面: 1.地图设定 战棋游戏的地图是游戏的基础设定之一,它决定了游戏的规则和过程。在Java编程中,可以使用数组来存储地图信息。例如,可以使用二维数组来表示一个地图,其中每个元素代表地图上的一个格子,存储格子的型和状态等信息。 2.角色设定 战棋游戏的角色是游戏中最重要的元素之一,游戏的进程和玩法都与角色密切相关。在Java编程中,应该定义角色的属性和行为。例如,可以定义一个角色,包含角色的基本属性(如生命值、攻击力)和行为(如移动、攻击),然后通过继承该创建不同型的角色。 3.胜负判断 战棋游戏即使在所有角色都打完之后,胜负判断是非常重要的。在Java编程中,可以使用条件判断语句来检查游戏是否已结束。例如,通过检查每个角色是否死亡来确定哪个队伍获胜。 4.图形界面 大多数战棋游戏都具有精美的图形界面,这需要Java编程者使用GUI库创建相应的图形界面。例如,可以使用Swing或JavaFX库创建游戏窗口、按钮、文本框等组件,并将其与游戏逻辑和显示相结合。 综合以上要素,Java语言可以实现具有丰富玩法和精美图形界面的战棋游戏。但需要提醒的是,在编写代码的过程中,需要考虑游戏的逻辑和流程,确保游戏的平衡性和可玩性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值