VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 即时即战游戏的写法
发表评论(0)作者:, 平台:, 阅读:9197, 日期:2000-06-11


- 信区: 学术网-程式设计区

编号: 5146 日期: 17 Aug 98 13:43:30

来自: 老怪 读取: 是 已回信: 否

写给: All 标示:

提要: 红色警戒&终级动员令

--

_作者:th4005@mail.intonet.net.tw


这跟多工什么关系咧,别把问题搅的那么复杂。

1.这叫棋子操纵模式。

2.回合制采用单方棋子操纵模式,也就是敌方棋子由电脑操纵,使用者棋子由使用者操

纵。

3.即时制采用双方棋子操纵模式,也就是双方棋子都由电脑操作,只是电脑允许使用者

改变我方棋子行为模式而已。

4.我们可以这么想,电脑由一个时间器(Timer) 隔一段时间去动一下敌我双方的所有旗

子,也就是说使用者如果不动作,其实就是看电脑自己在下棋。

5.但一旦使用者指定某棋子时,该棋子移动指标就被标为 False ,如此电脑在每一棋

步中碰到该棋子就不会对它有所动作,但其他棋子则继续动作,直到使用者设定完该棋

子行动方式后,行动指标恢复为 True ,意思就是继续交还电脑控管。

6.用一个最简单的 VB 模型来说明:


Type 棋子模式

行动指标 As Boolean

行为模式 As SomeValue

End Type


'假设有十颗棋子

Dim 棋子(9) AS 棋子模式


Sub Form_Load()

Dim I As Long


棋子(0).行为模式=敌A

棋子(1).行为模式=敌B

.

.

棋子(5).行为模式=我A

棋子(6).行为模式=我B

.

.

For I=0 To Ubound(棋子)-1

棋子.行动指标=True

Next

End Sub


Sub 棋子_Click(Index As Integer)

棋子(Index).行动指标=False

Call 行为模式改变(Index)

End Sub


Sub 行为模式改变(Byval 传入值)

'...............行为模式改变设定

棋子(传入值).行为模式 =新行为模式

棋子(传入值).行动指标=True

End Sub


Sub Timer_Timer()

Dim I As long

For I=0 to UBound(棋子)-1

If 棋子(I).行动指标=True Then

Call 棋子行动 (棋子(I).行为模式)

End If

Next

End Sub


Sub 棋子行动(ByVal 传入值)

Select Case 传入值

Case 敌A

敌A 模式行动展开

Case 敌B

敌B 模式行动展开

.

.

Case 我A

我A 模式行动展开

Case 我B

我B 模式行动展开

.

.

End Sub


至于战车跑几步,士兵发几枪,被 K 多少下才会隔屁,可借行为模式的增加来设定,

不过这种各兵种不同属性的设定,不管回合制或即时制都需要有此种机制,不构成双方

分别的要件。


>※ Origin: 枫桥驿站 ◆ From: 140.135.19.207


小三 撰写于文章 <3Q8045$uvc@titan.cc.ntu.edu.tw>...

>※ 引述《penguinmax.bbs@bbs.ntu.edu.tw (inkfish)》之铭言:

>: 玩过红色警戒这类"即时战略"的玩家 都应该知道它的玩法

>: 也就是我方可不断移动单位来部属或是作战 同一时间内

>: 电脑所控制的玩家 也同时进行这两项动作 问题来了

>: 假如大家还没忘记的话 当时红色警戒上市时还是 80486 CPU

>: 加上 DOS 6.x的作业系统 换句话说 当时的DOS 还不是一个多工的系统

>: 但是红色警戒玩起来却煞有其事 好像有多工的样子(战车可自由移动 不须



>: 电脑动玩才能动 换言之 没有回合的限制)所以请问一下 要如何在一个没

有多工

>: 的系统上模拟出一个多工的样子?

>: 假如改在现在的多工作业平台 如WIN95以上的系统要如何做到此一功能呢?

>: thread吗? 还是....

>: 请各位高手不吝赐教!

>: by PENGUINmax

>

>先宣告阵列

>dim a(10,2)

>其中a(1,1),a(2,1),a(3,1),a(4,1......当作'移动时间值'

>而a(1,2),a(2,2),a(3,2),a(4,1......当作'时间经过累加器'

>

>例如:有一士兵,和一战车要做移动,我们把a(1,X)当作是士兵,a(2,X)当作是战车,

> 假设我们给士兵的'移动时间值'5,给战车的'移动时间值'10(设士兵比战车

> 移动还快),而我们同时将每个'时间经过累加器'(a(1,2),a(2,2),a(3,2...)

> 加一,最后判断a(1,1)和a(1,2),a(2,1)和a(2,2),a(3,1....各是否相等,

> 如果相等就是该单位要移动的时候啦...^^

>

> 以上是小弟的想法不知是否有高手有别的or更特别or更好的想法可提供参考

....

>

>--

>※ Origin: 程式设计乐园 ◆ From: h77.s186.kuh.catv.com.tw


【资料整理:i澣?抛恃墩緌 (04)246-3795 专业程式设计资源站】