技术文档1.0

技术文档

 

产品说明:

    游戏说明:探索型、策略型的对战塔防游戏,回合制。

    游戏场地:棋盘方格形状

    游戏目的:发展己方势力,消灭进攻怪兽

    目标:该游戏基于规则自动生成游戏回合,增加耐玩性和可操作性,用户可使用各种策略。

 

技术细节

1、游戏框架:

   1)登录界面:拥有功能用户账号显示管理,游戏进度显示管理,背景画面。

                       

   2)退出界面:选择结束游戏。失败:返回游戏重新开始当前关卡。胜利:进入下一回合。开发者信息显示。
              

        

   3)游戏界面: 右上角为整体地图,左边为局部地图,可以通过点击右上角地图来移动局部地图位置,右下角显示选项。

 

   1、游戏资源

   建筑:

1)         主城:

村落(茅草屋) 乡镇(木屋) 城市(石质大厅) 国家(城堡)

用途:不同等级的建筑对应显示可开发方圆不同的土地。管理此方区域上的一切事物,自动收集该范围以内的所产生的资源。同时此栋建筑也是游戏的标志,被摧毁则游戏失败。

建筑都有相应的价值,可以耗费资源建造,修复,升级等。建筑拥有生命值,可以被摧毁。

人物:

1)         士兵:攻击和占领。

普通士兵的运动范围是以自己为中心的3x3方块,骑兵的运动范围是9x9的方块。

所有人物都有自己对应的属性,攻击力,防御力,生命值

普通士兵生命力10,攻击力5;骑兵生命力15,攻击力5

多种士兵

地图:

  1. 陆地

所有人都可以在陆地上行进。

  1. 建筑

以建筑为中心的三乘三方格范围不会相互交叉,士兵占领建筑后,此范围即为己方势力范围。

需要登上技能才能上山/过山。

  1. 海洋

需要建造港口和航海技能才能在海洋上运动(初版不准备包括海洋)

怪兽

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

开发团队:

开发人员信息:

 

 

 

 

 

 

 

 

      

 

 

posted on 2016-11-01 18:37  功夫熊猫·真  阅读(230)  评论(0编辑  收藏  举报

导航