本文主要是来梳理下游戏内的基本系统(虽然只是照搬polytopia的,但是还是要总结一下),并预先做一些配置表,并实现读取。

一、经济系统

1.总述

经济系统可以是整个游戏的核心。在本游戏中只有一种资源:金币。

每个回合都会获得一定数量的金币。

金币主要有两种来源:城市基本产出和建筑的额外产出。

金币的消耗方式有三种:1.建造建筑 2.解锁科技 3.建造士兵,而士兵维持是不需要额外的金币的。

2.城市的建设

和文明类游戏一样,每个地块都有其所属的城市。

在城市等级比较低的时候,只有该城市周围1格的地块属于那座城市。而城市等级到达一定程度时,可以解锁让城市范围扩张为2格。

地块的开发分两种:对于资源的收集和对于地形的开发。

每个地块上都有对应的地形,针对不同的地形,可以建设不同的建筑,比如森林地形可以建造伐木场,沃土地形可以建造农田等。

而在这个地形的基础上,有些地块可能会有一些额外的资源,比如动物和植物等,玩家在前期可以通过采集的方式来增加人口。

3.配置表设计

以下是配置表的设计:

首先是地形表。

在本系列最早的文章内,已经介绍了地形的生成方法,前文定义了Water,Plain,Mountain三种地形,对应海拔1,2,3。现在再加一种新的海拔0用以代表深海。这样4种高度的地形就齐了。

而同一海拔的地形会有多种形态,比如海拔为2的平原将有平原、沃土、森林三种情况,通过科技这几种状态甚至可以相互转换。而区分这几种状态的方式是增加额外的装饰物。而资源id便是装饰物的文件名,填0表示没有任何装饰物。

移动力花费指的是士兵移动走上去所需要消耗的移动点数。

然后是资源表。

和上面一样,资源id指的是资源对应的文件名,生成地图的时候,将根据所属的海拔分配资源。比如鲸鱼就只能出现在海拔为0的深海区域内。

奖励类型分两种,类型1指的是给所在的城市增加人口,类型2指的是直接增加金币。

接下来是建筑表:

地形指的是建造所需要的地形,对于的是地形表中的id,其中34这种两位数的id指的是3和4两种地形都可以,因为地形种类没有超过10,所以就用这种方式实现了(如果超过10其实也可以,不过需要把10以上的数字改为abcd)

邻近建筑指的是有些建筑建造,需要周边地块拥有某些建筑。比如谷仓建造需要旁边的地块上有农田。

作用类型1指的是直接增加人口,比如码头的作用就是给该城市增加2人口。

作用类型2指的是,根据周边地块某建筑的数量来加人口,比如谷仓的效果是周围有一个农田就加1人口,所以谷仓的邻近建筑是3(农田),作用类型是2,效果是1。

作用类型3指的是根据周围某建筑的数量直接增加回合金币,这也是唯一的一个直接通过建筑增加回合金币的途径。

最后是城市表:

后续实现的时候会根据效果id实现对应的效果。其中1,2,3级城市的2个效果是2选一的。

二、科技系统

科技系统简单说就是花费金币解锁科技,而随着城市数量的增加,科技花费也要增加。

公式如下:

科技花费 = ( 基础花费 + ( 城市数量 - 1 ) * 科技等级 ) * (1 - 科技减免)

科技分为3个等级,其基础花费分别为5,6,7

科技减免指的是某个科技点了之后会有一个科技花费20%减免的效果。

下面是科技花费表:

很简单的一张表。

下面是科技表:

这张表数量有点多,并且作用代码一栏我没填。将来实现的时候会把这张表完善起来。

三、兵种系统

先把兵种表附上:

兵种就不多说了,大部分SLG游戏都差不多。

比较注意的是:

1.船是无法直接制造的。陆地单位在码头处下海后,能变成一艘小船,小船的血量以及血量上限和该单位在陆地上时相当。

2.A攻击了B,如果A在B的攻击范围内,则B会在同时进行一次反击。

攻击伤害=攻击方血量 * 攻击方攻击 / ( 防守方防御 * ( 1 + 防守方防御加成 ) )

反击伤害=反击方血量 * ( 反击方防御 * ( 1 + 反击方防御加成 ) ) / 攻击方攻击

四、配置表的导入和读取

1.配置表的保存

配置表的我是用excel保存的,导出方式是导出为csv文件。

csv文件的导出很简单,先切换到想要保存的那个excel标签页。

然后选择另存为。

然后在保存类型的时候切换到csv就行了,记得文件名也要改一下,因为这次导出的只是一个标签。

然后再在下面这个目录中建立CSV文件夹,并且把想要读取的csv文件都放进去。

2.配置表格式的修改

这是的配置表有两个问题:首先unity对csv格式据说不是很支持,最好改成txt格式。然后就是,这时候保存出来的编码是非utf-8的,所以unity直接读会读不出来。

这两个问题手动操作肯定也是能够解决的(用txt打开,改编码然后另存为txt格式),但是太麻烦了,尤其随着制作的推进,表越来越多,每次都手动修改会浪费大量时间。

这时候就需要做一个内置工具了:

using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;public class TranslateUTF8
{[MenuItem("MyMenu/UTF8Transform")]static private void TransformUTF8(){string spriteDir = Application.dataPath + "/Resources/CSV";DirectoryInfo rootDirInfo = new DirectoryInfo(spriteDir);foreach (FileInfo csvFile in rootDirInfo.GetFiles("*.csv", SearchOption.AllDirectories)){string csvpath = csvFile.FullName;Translate(csvpath);}Debug.Log("utf8转换成功");}private static void Translate(string path){string content = File.ReadAllText(path, Encoding.Default);File.Delete(path);File.WriteAllText(path.Remove(path.LastIndexOf("."))+".txt", content, Encoding.UTF8);Debug.Log(path + " 转换完毕");}
}

这是我以前写的一个转化工具,功能是把Resources/CSV这个文件夹下的所有csv文件转化成utf-8的txt文件,并把原来的csv文件删除掉。

在项目中新建一个脚本文件,然后把这段代码复制进去把原来的替换掉就能使用。

这时候,回到unity界面,会出现一个MyMenu菜单栏,进去后点击一下就行了。

3.配置表的读取

配置表是csv格式的。csv格式的意思是,原excel中,每一行的单元格之间,用逗号分隔开,如上图。

所以在填写配置表时,要尽量避免逗号的出现。以下是代码:

public class CSVUtil
{public static List<string[]> Process(string filePathName){TextAsset asset = Resources.Load(filePathName) as TextAsset;string file = asset.text;List<string[]> ls = new List<string[]>();if (file == ""){return default(List<string[]>);}else{string[] strList = file.Split("rn"[0]);foreach (string str in strList){string s = str.Replace("n", "");if (s != ""){ls.Add(s.Split(","[0]));}}return ls;}}
}

"rn"是换行符,但不知道是什么原因,我用"rn"来分割字符串后,还是有"n"留下来,所以我在下面处理的时候把“n”又去掉了一次。

城市代码表_从零开始做一个SLG游戏(六)游戏系统以及配置表相关推荐

  1. freemarker 去掉最后一个逗号_从零开始做一个SLG游戏(六)游戏系统以及配置表...

    本文主要是来梳理下游戏内的基本系统(虽然只是照搬polytopia的,但是还是要总结一下),并预先做一些配置表,并实现读取. 一.经济系统 1.总述 经济系统可以是整个游戏的核心.在本游戏中只有一种资 ...

  2. 从零开始做一个SLG游戏(七):游戏系统以及配置表

    本文主要是来梳理下游戏内的基本系统(虽然只是照搬polytopia的,但是还是要总结一下),并预先做一些配置表,并实现读取. 一.经济系统 1.总述 经济系统可以是整个游戏的核心.在本游戏中只有一种资 ...

  3. 从零开始做一个SLG游戏(四):UI系统之主界面搭建

    地图部分也已经算是可以告一段落了,也需要仔细考虑下接下来该做哪个系统.地图部分可以算是六边形地图的SLG游戏最主要的一部分,所以先做了下练练手. 接下来的工作更多的需要从项目的全局角度来考虑该怎么做. ...

  4. 从零开始做一个SLG游戏(二):用mesh实现简单的地形

    本文主要是用mesh实现简单的地形.暂时先绘制三种地形:高山.平原.水域. 首先要做的是网格的细化: 上一篇已经实现了单个六边形的绘制,实现方式是将六边形分割成6个等边三角形,然后分别绘制. 现在需要 ...

  5. 从零开始做一个SLG游戏(五):UI系统之弹窗功能

    图源/网络 接下来实现弹窗功能. 首先,需要明确的是,这边所说的弹窗到底是什么? 此处所说的弹窗,指的是非主界面的所有弹出窗口,里面包括一些界面,比如系统设置.科技界面等. 这些窗口打开的时候,主界面 ...

  6. 从零开始做一个SLG游戏(一):六边形网格

    本文的主要工作是六边形网格的绘制. 如图所示.六边形有6个方向,6个顶点,同时定义中心点到边的最短距离为内径innerRadius,定义中心点到顶点的距离为外径outerRadius. 六边形可以拆分 ...

  7. 从零开始做一个SLG游戏(三):用unity绘制图形

    本文主要是使用mesh制作一些简单的模型资源. 一般而言,模型的制作最好还是使用专业的软件来做,但是制作一些简单的模型,unity还是可以胜任的. unity自带的模型只有立方体,圆柱,球,胶囊,方块 ...

  8. 50行python游戏代码_使用50行Python代码从零开始实现一个AI平衡小游戏

    使用50行Python代码从零开始实现一个AI平衡小游戏 发布时间:2020-10-23 09:26:14 来源:脚本之家 阅读:74 集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何 ...

  9. FANUC机器人_通过ROBOGUIDE从零开始做一个离线仿真项目(1)

    FANUC机器人_通过ROBOGUIDE从零开始做一个离线仿真项目(1) 打开ROBOGUIDE软件,如下图所示,然后点击新建工作单元, 如下图所示,选择"HandlingPRO" ...

最新文章

  1. php使用第三方登录
  2. 树形控件Tree Control
  3. ant java build_Ant--基于java的build工具
  4. 神策 FM | 将定价作为产品竞争优势的 5 种策略
  5. hdu1528 Card Game Cheater
  6. linux设置环境变量_什么是linux环境变量
  7. maven本地库已经有的包了,如何不下载(linux环境)
  8. 85后转行java,一名85后阿里老程序员的真心话
  9. Cookie介绍与操作
  10. Java集合之map 集合使用
  11. Openwrt:创建编译IPK软件包
  12. 模拟微博登陆,获取微博cookie
  13. 企业微信 PC端多开
  14. SQL中的comment语法
  15. nltk文件下载以及word_tokenize运行问题解决
  16. 【nowcoder 110246】Dima and Salad
  17. python中的计数函数_NumPy的搜索和计数函数
  18. [人生感悟]在平凡中蜕变,我的2014
  19. 停息挂账一定要付首付款吗_什么是停息挂账?停息挂账能解决问题吗?
  20. 六年Android生涯总结+展望:君子坐而论道,少年起而行之

热门文章

  1. Intel超线程技术 Hyper-Threading Technology (6) - 后期增强(Nehalem/Haswell/Skylake)
  2. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(3)-光滑核函数
  3. 学生使用计算机违纪处理,软件学院违纪学生跟踪教育管理办法
  4. 多终端同时登录_So easy!同时登陆两个或多个Mac版微信和QQ
  5. 北京化工大学计算机专业就业,北京化工大学特色专业介绍_计算机科学与技术_专业课程介绍_专业排名_就业方向...
  6. 生产者消费者_Kafka之生产者/消费者
  7. 转换图片保持画质_图片格式怎么相互转换,如何转换jpg、 bmp、png格式
  8. VLfeat win10 vs2015 编译
  9. Windows下的Linux开发环境Cygwin
  10. 有关上次的字符串是否相等的比较