技术文档1.0
技术文档
产品说明:
游戏说明:探索型、策略型的对战塔防游戏,回合制。
游戏场地:棋盘方格形状
游戏目的:发展己方势力,消灭进攻怪兽
目标:该游戏基于规则自动生成游戏回合,增加耐玩性和可操作性,用户可使用各种策略。
技术细节
1、游戏框架:
1)登录界面:拥有功能用户账号显示管理,游戏进度显示管理,背景画面。
2)退出界面:选择结束游戏。失败:返回游戏重新开始当前关卡。胜利:进入下一回合。开发者信息显示。
3)游戏界面: 右上角为整体地图,左边为局部地图,可以通过点击右上角地图来移动局部地图位置,右下角显示选项。
1、游戏资源
建筑:
1) 主城:
村落(茅草屋) 乡镇(木屋) 城市(石质大厅) 国家(城堡)
用途:不同等级的建筑对应显示可开发方圆不同的土地。管理此方区域上的一切事物,自动收集该范围以内的所产生的资源。同时此栋建筑也是游戏的标志,被摧毁则游戏失败。
建筑都有相应的价值,可以耗费资源建造,修复,升级等。建筑拥有生命值,可以被摧毁。
人物:
1) 士兵:攻击和占领。
普通士兵的运动范围是以自己为中心的3x3方块,骑兵的运动范围是9x9的方块。
所有人物都有自己对应的属性,攻击力,防御力,生命值
普通士兵生命力10,攻击力5;骑兵生命力15,攻击力5
多种士兵
地图:
- 陆地
所有人都可以在陆地上行进。
- 建筑
以建筑为中心的三乘三方格范围不会相互交叉,士兵占领建筑后,此范围即为己方势力范围。
- 山
需要登上技能才能上山/过山。
- 海洋
需要建造港口和航海技能才能在海洋上运动(初版不准备包括海洋)
怪兽
1)定期进攻主城,摧毁相应的建筑单位。拥有和人物类似的属性攻击力,防御力,生命值
2)拥有不同的类型,初期打算做三种。
2、游戏逻辑:
开场:地图生成算法,地图初始化,以城堡为中心的三乘三位置不会相互交叉,随即开始拥有一个士兵在一个城堡位置。初始拥有一定的资源。
AI:根据随机生成的位置,选择相距最远的位置开始。
发展阶段:
用户点击鼠标操作,选择城堡升级,造兵。点击资源收集。点击士兵移动,攻击,占领。用户点击下一回合进入下一回合。
AI:根据选择的模式不同操作。
Easy:所有操作随即
Hard:100%操作选择最优
地狱:AI知道地图所有信息状态下100%选择最优操作
征服阶段:AI与玩家士兵相互攻击,相互占领对方城堡。
胜负判断:游戏一方所有城堡被占领,士兵被消灭光。
游戏回合结束,一方拥有的 城堡数*i1+士兵数*i2+所获资源*i3 最大者获胜。显示公式。
游戏一回合结束进入退出界面。
游戏实现细节:
类:地图类
Struct ground{
Int groundnum=0,1,2,3,4,5;//地图类型,地,山……
Int groundx,groundy;//地图位置
Int onview;//是否显示地图
Int canhave[5];//允许操作类型 0不允许,1允许
Int have[5];//是否存在此操作
//此处有没有城堡,有没有资源
Int conquer=0,1,2//是否被占领,被玩家还是AI占领
…...
}gamemap[16][16];
这样就可以通过pictures绘制地图。
人物类
Struct person{
Srtuct person_operation=0,1;//是否已经对此人物进行过一次操作,0表示没有,1表示有
Int personnm=0,1;//人物类型
Int personx,persony;//人物位置
Int personlife;//生命点数
}
资源:
Struct sources{
Int sourcenm=0,1,2,3;//资源种类
Soure_x,source_y;//资源位置
Source_points;//资源点数
}
城堡类
Struct castle{
Int castle_num=0,1,2;//城堡等级
Int castle_staus=0,1;//城堡是否有人1表示有人
Int castle_conqure=0,1,2;//城堡无人占领0;玩家占领1;AI占领2
Int castle_points=0;//城堡经验点数,超过一定值城堡即升级
Int castle_productivity=p_max;//城堡剩余生产力即可生产的人数
Int castle_star;//等级不同每回合加的星星数不同
}
游戏状态:
Struct gamestate{
Int round_number;//回合数
Int Difficulty_level;//难易程度
}gamestate;
游戏逻辑细节:
Main(){
登陆界面操作;
获取登录信息;
Do{
随即地图生成;
随即开始状态生成;
游戏结束状态=开始游戏;
If(游戏结束状态==1)赢面退出界面
Else 输面退出界面
}While(退出界面是否退出)
}
/**********************************************************
函数名:Int startgame();//开始游戏
需要gamestate
返回当前关卡结束时状态
1 玩家赢
0 玩家输或者强制结束
While(1)
内每次只做一次绘制地图
每次只做一个操作,所有的操作函数只涉及到更改类的属性
**********************************************************/
开始游戏(){
回合数=初始定义
While(回合数--){
STAR项根据城堡等级增加;
资源随机化生成;
所有人物operation项置零;
While(1){
If(玩家点击结束游戏或者玩家和AI有一方被判定失败){
If(玩家赢)Return 1;
Else return 0;
}
根据地图类绘制地图。
如果玩家与AI领土相接,则显示处领土界限;
城堡周边资源自动采集函数;
获取鼠标点击操作;
If(鼠标是点击下一回合操作){
Break;
}
Else If(点击城堡){
城堡操作
}
Else If(点击士兵){
士兵操作
}
Else if(点击采集){
If(存在资源且采集资源能力具备)资源被采集
Else 无操作
}
Else if (点击升级科技){
发展科技;
}
Else{
误操作
无变化
Continue;
}
AI操作();
}
}
/**********************************************************
函数名:int Click_on_the_castle();
**********************************************************/
点击城堡(){
操作栏重新绘制
While(1){
获取鼠标点击
If(点击不再操作栏的操作类型){
Return;
}
Else If(点击升级){
城堡升级函数
}
Else if(点击新建士兵){
新建士兵函数
}
}
}
/**********************************************************
函数名:int Click_on_the_ soldier ();
**********************************************************/
点击士兵(){
士兵可移动范围标注地图重新绘制
While(1){
获取鼠标点击
If(点击不在可移动范围的操作类型或者士兵已经进行过一次操作){
Return;
}
Else If(点击可以移动的位置){
士兵移动
地图Onview修改
目标位置存在资源资源被采集
}
Else if(点击位置为城堡){
士兵占领城堡
}
Else if(点击位置为敌方士兵){
士兵攻击士兵
}
Else if (点击位置为敌方城堡){
士兵攻击城堡;
}
}
}
/**********************************************************
函数名:int Draw_map();
需要游戏地图信息gamemap[][]
**********************************************************/
根据地图类绘制地图(){
地图类贴上相应地形
是否存在操作I 在地图类上叠加相应图片
}
/**********************************************************
函数名:int start_map();
随机构建地图信息gamemap[][]
随机构建资源信息 resouse[]
随机构建城堡信息 castle[]
**********************************************************/
初始地图随机化(){
for(int i=0;i<maplength;i++)
for(int j=0;j<mapweight;j++)
{
类型偏向=周边已生成的地图类型加权平均
Swith Random (randNUMBER)+类型偏向{
Case 0:….
……
}
对应地图类型生成是否可以操作
}
随即生成城堡位置,去除区域有所重叠的城堡,尽量均匀化城堡位置。
随即生成资源(多)
}
/**********************************************************
函数名:int start_resourse();
随机构建资源信息 resouse[]
**********************************************************/
资源随机化生成{
for(int i=0;i<maplength;i++)
for(int j=0;j<mapweight;j++){
if(地图位置允许生成资源){
if(random>resouseNUMBER)map.resouse=1;
else map.resouse=0;
}
}
}
/**********************************************************
函数名Int start_gamestate();
需要士兵信息 soldier[]
**********************************************************/
随即开始状态生成(){
随即生成开始城堡位置。
士兵放在周边8个位置中随即一个可行的位置
For(i=0;i<城堡NUMBER;i++)
If(distense(当前城堡,用户城堡)>MAXdistence){
MAXdistence= distense(当前城堡,用户城堡);
AI城堡=当前城堡;
}
AI士兵随便放置在周边8个位置中随便一个可行位置
}
/**********************************************************
函数名Int artificial_intelligence();
**********************************************************/
AI操作(){
If(easy模式){所有可以操作的地方随即操作一次}
Else if(hard模式){所有可以操作的敌方根据AI获取信息选择最好操作,如果相同随机化选择}
Else if(地狱模式){开放地图所有信息给AI,AI参考所有信息计算每一个操作位置的最优操作并执行。}
}
/**********************************************************
函数名:Int Upgrade_castle();
**********************************************************/
城堡升级函数(){
If (castle_stas>2城堡已经到顶级或者castle_points<升级所需点数或者STAR<操作所需点数){
显示无法升级信息;
Break;
}
Castle_points=castle_points-升级所需点数;//点数清零
Castle_star++;//
}
/**********************************************************
函数名:Int New_soldiers ();
**********************************************************/
新建士兵(){
If (castle_staus==1||STAR不够建造士兵){
输出无法建造士兵;
Break;
}
状态栏刷新,显示建造士兵类型{
While(1){
获取鼠标操作;
}
If(鼠标是生产普通士兵操作){
新建普通士兵;
更新operation项;//新生士兵无法操作
}
If (鼠标是生产骑兵操作){
新建骑兵;
更新operation项;//新生士兵无法操作
}
}
/**********************************************************
函数名:Int Soldiers_occupied_castle ();
**********************************************************/
士兵占领城堡(){
If(城堡有人 || STAR<操作所需点数||城堡已被己方占领){
输出无法占领该城堡;
}
Caetle_staus=1;
Castle=1;
士兵占领城堡;
更新operation项;
}
/**********************************************************
函数名:Int Soldiers_attacked_soldiers();
**********************************************************/
士兵攻击士兵(){
If(STAR<操作所需星数){
输出无法攻击;
return;
}
对方士兵生命值下降;
玩家士兵生命值下降;
更新operation项;
}
/**********************************************************
函数名:Int Collection_resources();
**********************************************************/
资源被采集(){
资源所在区域的城堡点数增加;
删除此资源;
}
/**********************************************************
函数名:Int Upgrade_technology ();
**********************************************************/
点击升级科技(){
操作栏重新绘制;
While(1){
获取鼠标点击;
If(点击退出){
回到主界面;
}
If(点击升级某一项科技){
If(STAR<升级所需星数){
输出信息无法升级该科技;
操作栏重新绘制;
}
Else if(STAR够){
获得该科技;
STAR减去相应点数;
}
}
}
}
版本信息
开发环境:c++ MFC
版本号 V1.0
开发团队:
开发人员信息: