标题: 想做一个三国游戏 [打印本页]
作者:
snowwaft 时间: 2007-8-20 21:18 标题: 想做一个三国游戏
这篇文章(把《三国》从光荣手中抢回来)写得非常好,不知能否借鉴一二?
最近重温《卧龙传》,这才是心目中的三国策略游戏,可惜没有续集。于是萌生念头,为什么不自己做一个呢?有没有志同道合者?
总结了一下,一个三国游戏,主要由以下几个对象:
1、武将
2、势力
3、城池
4、地图
5、兵种
6、军队(指在地图上行动的士兵)
其中,在以上六个对象的关系是,
1、地图包括许多城池,在地图上有若干(0...*)军队或若干(0...*)武将在移动。
2、一个势力包括若干(1...*)城池,及一个君主(武将),以及若干(0...*)属下(武将)。如果该势力和其他势力处于战争关系,该势力也许还有若干(0...*)军队。
3、军队由若干(1...*)武将指挥,且由某些(1...*)兵种组成。
[ 本帖最后由 snowwaft 于 2007-8-20 22:05 编辑 ]
作者:
snowwaft 时间: 2007-8-20 21:24
说说武将
一个武将可能有如下属性
[数据属性]
[strike]
1、编号
[/strike]
1、姓名
[基本属性]
1、姓
2、名
3、字
4、出生年
5、寿命
6、性格
7、理想
8、喜好
9、相性(实际上是性格)
…………
[社会关系]
1、势力
2、结拜兄弟
3、朋友
4、仇敌
6、忠诚度
7、父亲
8、母亲
9、配偶
…………
[位置]
1、所在(城市或军团)
2、状态(死亡、在野、俘虏、一般、军团长等等)
[个人能力]
统御
武力
智力
政治
魅力
[其他]
声望
勇气
仁德
信义
冷静
合作
[战斗经验]
平原经验
水战经验
山地经验
攻城经验
守城经验
…………
例如,对于周瑜同学,可以描述成
[数据属性]
1、姓名 周瑜
[基本属性]
1、姓 周
2、名 瑜
3、字 公瑾
4、出生年 170 (这个是瞎掰的)
5、寿命 73
…………
[社会关系]
1、势力 2 (假设吴的势力编号为2)
2、结拜兄弟 893 (假设孙策的编号是893)
3、朋友 561、552 (随便写几个)
4、仇敌 800 (假设诸葛亮的编号是800)
5、相性 50
6、忠诚度 100
7、父亲
8、母亲
9、配偶 999 (假设小乔的编号是999)
A、族编号 1230 (由于周瑜是周家的祖先,族编号就用他自己的)
…………
[个人能力]
统御 93
武力 66
智力 97
政治 84
魅力 92
[战斗经验]
平原经验 800
水战经验 997
山地经验 230
攻城经验 754
守城经验 720
…………
再写成xml,然后保存在硬盘上,一个武将的数据就完成了
<?xml version="1.0" encoding="utf-8"?>
<person>
<id>周瑜</id>
<family_name>周</family_name>
<first_name>瑜</first_name>
<given_name>公瑾</given_name>
<birthyear>170</birthyear>
<life>73</life>
<country>2</country>
<brothers>
<person id="893">孙策</person>
</brothers>
<friends>
<person id="561">鲁肃</person>
<person id="552">蒋干</person>
</friends>
<emeny>
<person id="800">诸葛亮</person>
</emeny>
<character>50</character>
<loyalty>100</loyalty>
<father />
<mother />
<mate>
<person id="999">小乔</person>
</mate>
<family>1230</family>
<control>93</control>
<force>66</force>
<intelligence>97</intelligence>
<politics>84</politics>
<charm>92</charm>
<plain>800</plain>
<hill>997</hill>
<water>230</water>
<acity>754</acity>
<dcity>720</dcity>
</person>
说明:
黑色:原始设定
红色:第一次修改
[ 本帖最后由 snowwaft 于 2007-8-22 19:29 编辑 ]
作者:
snowwaft 时间: 2007-8-20 21:39
UML图
[ 本帖最后由 snowwaft 于 2007-8-21 09:22 编辑 ]
作者:
snowwaft 时间: 2007-8-20 21:40
工具
在DirectX和Flex(Flash)中,我还是决定使用Flex(Flash)作为开发平台。
理由有以下几点:
1、DirectX效率固然高,但是对于三国这种对界面要求不多的游戏,不免大材小用。
2、使用DirectX,程序设计会变得非常庞大,非常麻烦。
3、Flex(Flash),尤其是Flex 3.0开发的程序,其运行效率已经很不错。
4、使用Flex,有一个先天优势在于画面开发极其方便(可以和最新的flash 9制作的swf交互),也就是说,我们可以使用Flash制作绚丽的游戏特效,然后将该swf文件嵌入到程序中。
5、actionscript 3是一种面向对象语言,虽然比不上java、c#,但是已经足够了。
6、Flex(Flash)可以嵌入在web页中。
7、Adobe的新产品AIR可以通过Stream的方式读取本地文件(这点尤为重要)。
开发的具体思想是:把游戏里需要使用的数据以xml的形式存放在本地磁盘上,然后使用AIR的API(File、FileStream等)将这些数据读入内存。
对于AIR
1、读取一个xml文件
private function loadData(fileName:String):Xml
{
var dataFile:File = File.applicationResourceDirectory.resolve(fileName);
var stream:FileStream = new FileStream();
stream.open(dataFile, FileMode.READ);
var xmlString = Xml(stream.readUTFBytes(stream.bytesAvailable));
stream.close();
return xmlString;
}
2、将一个xml文件保存到磁盘上
private function saveData(data:Xml):void
{
var dataFile:File = File.applicationResourceDirectory.resolve("data.xml");
var stream:FileStream = new FileStream();
stream.openAsync(dataFile, FileMode.WRITE);
stream.writeUTFBytes(data.toXmlString());
stream.close();
}
3、从一个Xml中解析出数据
actionscript中,处理xml非常简单:
package {
import flash.display.Sprite;
public class XmlExample extends Sprite {
public function XmlExample() {
var employees:XML =
<employees>
<employee ssn="123-123-1234">
<name first="John" last="Doe"/>
<address>
<street>11 Main St.</street>
<city>San Francisco</city>
<state>CA</state>
<zip>98765</zip>
</address>
</employee>
<employee ssn="789-789-7890">
<name first="Mary" last="Roe"/>
<address>
<street>99 Broad St.</street>
<city>Newton</city>
<state>MA</state>
<zip>01234</zip>
</address>
</employee>
</employees>;
trace(employees.employee[0].address.zip); // 98765
trace(employees.employee[1].@ssn); // 789-789-7890
trace(employees.employee.name); // <name first="John" last="Doe"/>
// <name first="Mary" last="Roe"/>
trace(employees..zip[0]); // 98765
trace(employees..@ssn[1]); // 789-789-7890
trace(employees..name); // <name first="John" last="Doe"/>
// <name first="Mary" last="Roe"/>
trace(employees.employee[0].address.*); // <street>11 Main St.</street>
// <city>San Francisco</city>
// <state>CA</state>
// <zip>98765</zip>
var node:String = "zip";
trace(employees.employee[0].address[node]); // 98765
var attribute:String = "ssn";
trace(employees.employee[1].@[attribute]); // 789-789-7890
for each (var num:XML in employees..@ssn) {
trace(num); // 123-123-1234
} // 789-789-7890
var ssnToFind:String = "789-789-7890";
trace(employees.employee.(@ssn == ssnToFind).toXMLString());
// <employee ssn="789-789-7890">
// <name first="Mary" last="Roe"/>
// <address>
// <street>99 Broad St.</street>
// <city>Newton</city>
// <state>MA</state>
// <zip>01234</zip>
// </address>
// </employee>
}
}
}
4…………
[ 本帖最后由 snowwaft 于 2007-8-22 10:09 编辑 ]
作者:
snowwaft 时间: 2007-8-20 21:40
编辑器
[ 本帖最后由 snowwaft 于 2007-8-21 09:22 编辑 ]
作者:
snowwaft 时间: 2007-8-20 21:40
界面
[ 本帖最后由 snowwaft 于 2007-8-21 09:23 编辑 ]
作者:
snowwaft 时间: 2007-8-20 21:40
算法
[ 本帖最后由 snowwaft 于 2007-8-21 09:23 编辑 ]
作者:
snowwaft 时间: 2007-8-20 21:44
人工智能
[ 本帖最后由 snowwaft 于 2007-8-21 09:23 编辑 ]
作者:
snowwaft 时间: 2007-8-20 22:01
Demo
[ 本帖最后由 snowwaft 于 2007-8-21 09:24 编辑 ]
作者:
jcjsdtc 时间: 2007-8-20 22:08
LZ占这么多楼,填起来费力了,还是很希望能看到一个新游戏的
作者:
神的儿子 时间: 2007-8-21 01:21
希望楼主早日制作出来, 本人只能支持.
作者:
佐裹义师 时间: 2007-8-21 21:34
说我也不懂
但贴的回
作者:
lincoln10 时间: 2007-8-22 09:23
看上去不算新鲜.和光荣的有何区别?
作者:
snowwaft 时间: 2007-8-22 10:19
原帖由 lincoln10 于 2007-8-22 09:23 发表
看上去不算新鲜.和光荣的有何区别?
暑期无聊的产物罢了。
我从三国志2代开始接触三国游戏的,之后光荣的每一款三国游戏都玩过,4、6、8、9更是通关无数遍。
每一款新三国推出时,我都对它充满了希望。但是每次通关后,总是有那么一点失望。可能论坛里很多朋友都和我有着类似的经历,在每代光荣三国推出后,都傻傻地在论坛里提建议:下一代三国志该如何如何做才好。可惜的是,这些建议根本不能反馈到光荣公司,提来提去仅仅是自我满足的YY。
于是我萌发出了自己做一套三国游戏的想法,就这么简单……
作者:
黄帝2 时间: 2007-8-30 02:29
昨天看到有个三国游戏不错.我一会发下楼主侃侃
欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) |
Powered by Discuz! 5.0.0 |