这跟多工什么关系咧,别把问题搅的那么复杂。 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更好的想法可提供参考....  
|