VB 程序设计

10个成员

即时即战游戏的写法

发表于 2016-12-22 3727 次查看
这跟多工什么关系咧,别把问题搅的那么复杂。
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更好的想法可提供参考....

 

发表回复
你还没有登录,请先登录注册