游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2060|回复: 4

物资调动的设计过程

[复制链接]

14

主题

166

帖子

171

积分

注册会员

Rank: 2

积分
171
发表于 2005-12-7 12:12:00 | 显示全部楼层 |阅读模式
本文是对物资调动进行描述,实际上要说明的是游戏里多个城市是如何进行关联的。

        在城市调动的时候,我们首先想到的是,我们物资能够调动给那些城市,因为不同的城市周边的城市都是不一样的,有些城市可以移动到,有些却不能,同时有些城市现在可以,但是下一个月就不可以(被敌方占领),所以,确定关系是第一步。确定好关系,剩下的就非常简单了。
我们首先来看一下我们是如何得到两个城市之间的关系的。我们先对城市对象增加了一个“关联城市列表”(.net 里的ArrayList,C++ 可以使用 list 模版, Delphi 可以使用 Tlist类, VB6不清楚,不过可以用一个数组来模拟),并在存储城市属性的xml文件里增加一个小节:
                <连接城市>
                        <城市 名字="荆州"></城市>
                        <城市 名字="陈留"></城市>
                        <城市 名字="柳州"></城市>
</连接城市>
用来表明当前城市与那些城市有关联关系。在城市初始化的时候,根据上面的信息找到对应的城市对象加入本城市的“关联城市列表”里。
        有了这个列表,我们在进行物资调动的时候,把自己城市里的“关联城市列表”传入选择将领(城市)窗体,并根据传入国家参数把不是自己国家的城市过滤掉。这样就完成了城市的选择,剩下的就是通过物资调动窗体读取调动的物资,并通过国家对象的物资调动操作进行数据的操作。
        军事窗体里物资调动button的过程,
                private void btn_物质调动_Click(object sender, System.EventArgs e)
                {
                        选择将领Form form = new 选择将领Form();
                        //        这里弹出一个选择城市对话框,城市信息从“城市.关联城市”里读取
                        C城市列表 list = form.选择城市(城市.关联城市, 1, 1, 城市.国家);
                        if (list == null)
                                return;
                        物资调动Form form2 = new 物资调动Form();
                        sango.核心.T调动物资 物资 = new T调动物资();
                        物资.金钱 = 城市.基本属性.金钱;
                        物资.粮食 = 城市.基本属性.粮食;
                        物资.士兵 = 城市.军事.士兵;
                        物资 = form2.show(物资);
                        if (物资 == null)
                                return;
                        C城市 city = list[0];        //        这个是目标城市对象
                        //        调用国家的物资调用操作去实现两个城市的物资变化
                        城市.国家.物资调动(城市, city, 物资);
                        this.bind();
                }

        在“城市选择窗体(选择将领Form)”对城市对象进行过滤,把不是自己国家的城市排除在选择范围之外:
                        foreach(C城市 城市 in 城市列表)        //        枚举所有传进来的城市
                        {
                                if (国家 != null)
                                        if (城市.国家 == null || 国家.名字 != 城市.国家.名字)
                                                continue;
                                System.Data.DataRow dr = dt.NewRow();        //        参数一个新的城市选项
                                dr[0] = false;
                                dr["名字"] = 城市.名字;
                                dt.Rows.Add(dr);
                        }


        国家的物资调动的操作函数:
                public bool 物资调动(C城市 原始城市, C城市 目标城市, T调动物资 物资)
                {
                        原始城市.基本属性.金钱        -= 物资.金钱;
                        原始城市.基本属性.粮食        -= 物资.粮食;
                        原始城市.军事.士兵                -= 物资.士兵;

                        目标城市.基本属性.金钱        += 物资.金钱;
                        目标城市.基本属性.粮食        += 物资.粮食;
                        目标城市.军事.士兵                += 物资.士兵;

                        return true;
                }

所以实现物资调动功能大概使用200行代码,里面包括很多可以被其它地方重复使用的代码(关联城市的初始化,城市的选择窗体),所以实际上只是物资调动功能的代码只有不到40行代码,应该是足够少了的。

22

主题

209

帖子

229

积分

中级会员

Rank: 3Rank: 3

积分
229
发表于 2005-12-8 10:03:00 | 显示全部楼层

Re:物资调动的设计过程

我的部下全都是美女 26----50

14

主题

166

帖子

171

积分

注册会员

Rank: 2

积分
171
 楼主| 发表于 2005-12-9 18:19:00 | 显示全部楼层

Re:物资调动的设计过程

顶上去给游戏之家看我的物资调动是多么的简单

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2005-12-9 21:07:00 | 显示全部楼层

Re:物资调动的设计过程

我是以城市的坐标为基础的,
我每个城市有一个坐标, 调动的时候判断坐标是否在自己的左边还是右,
如果在左边坐标就减, 如果是右,坐标就加,我的游戏也是以点为基础的,
800 X 600的分辨。

2

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2005-12-10 09:09:00 | 显示全部楼层

Re: 物资调动的设计过程

既然要按照现实生活的方式,那运送时间花费和途中突发事件就不能回避,比如运送粮食,从武凌到桂阳需要5天时间,还有两种情况要考虑:1.  5天中如果桂阳被敌军占领,那运送的粮食何去何从。
2. 途中遭遇敌军, 或劫或烧 ?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 21:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表