VB 版 (精华区)


俄 罗 斯 方 块 是 一 个 很 有 意 思 的 游 戏。
你 有 没 有 用 telnet 玩 过?
如 果 没 有, 试 试 这 个 吧。
需 要telnet lib(1),(2) 的 支 持。
,

Dim dx(6, 3, 3), dy(6, 3, 3)
Dim A(-2 To 12, -2 To 22)
Dim NextK
Dim K, N, X, Y

Public Sub Main()
For K = 0 To 6
For N = 0 To 3
For e = 0 To 3
Index = Index + 1
d = Choose(Index, _
0, 1, 4, 5, 0, 1, 4, 5, 0, 1, 4, 5, 0, 1, 4, 5, _
0, 1, 2, 3, 1, 5, 9, 13, 0, 1, 2, 3, 1, 5, 9, 13, _
0, 1, 5, 6, 1, 4, 5, 8, 0, 1, 5, 6, 1, 4, 5, 8, _
1, 2, 4, 5, 0, 4, 5, 9, 1, 2, 4, 5, 0, 4, 5, 9, _
0, 1, 2, 4, 0, 1, 5, 9, 2, 4, 5, 6, 0, 4, 8, 9, _
0, 1, 2, 6, 1, 5, 8, 9, 0, 4, 5, 6, 0, 1, 4, 8, _
0, 1, 2, 5, 1, 4, 5, 9, 1, 4, 5, 6, 0, 4, 5, 8)
dx(K, N, e) = d Mod 4
dy(K, N, e) = d \ 4
Next e, N, K
Main2
End Sub

Sub Main2()
Randomize Timer
ClsA
For Y = -1 To 20
For X = -1 To 11
A(X, Y) = 1
Next X, Y
For Y = 0 To 19
For X = 0 To 9
A(X, Y) = 0
Next X, Y
NextK = Int(Rnd * 7)
ShowA
sleep
begin:
K = NextK
NextK = Int(Rnd * 7)
s$ = ""
pt Pos(1, 30) + " "
pt Pos(2, 30) + " "
For e = 0 To 3
s$ = s$ + Pos(1 + dy(NextK, 0, e), 30 + 2 * dx(NextK, 0, e)) + "<>"
Next e
pt s$ + Pos(1, 1)
X = 3
Y = 0
N = 0
Sh -1
If Test(0, 0, 0) = 0 Then
Pn Pos(10, 10) & "Game over.":
End
End If
Do
b = InkeyB
C$ = UCase(Chr(b))
If b = 0 And Timer > oldt! + 0.2! Then
oldt! = Timer
C = "Z"
End If
Select Case C
Case "A"
Test -1, 0, 0
Case "S"
Test 1, 0, 0
Case "B"
Test 0, 0, 1
Case "H"
Test 0, 0, 3
Case "J"
Test 0, 0, 2
Case "Z"
If Test(0, 1, 0) = 0 Then
For e = 0 To 3
A(X + dx(K, N, e), Y + dy(K, N, e)) = 1
Next e
For Y = 1 To 19
If Full(Y) Then
For yy = Y To 1 Step -1
For xx = 0 To 9
A(xx, yy) = A(xx, yy - 1)
Next xx, yy
End If
Next Y
ShowA
GoTo begin
End If
End Select
Loop
End Sub

Function Full(Y)
For e = 0 To 9
s = s + A(e, Y)
Next e
Full = (s = 10)
End Function

Function Test(ddx, ddy, ddn)
s = 0
xx = X + ddx
yy = Y + ddy
nn = (N + ddn) Mod 4
For e = 0 To 3
s = s + A(xx + dx(K, nn, e), yy + dy(K, nn, e))
Next e
If s = 0 Then
Test = -1
X = xx
Y = yy
N = nn
Sh
Else
Test = 0
End If
End Function

Sub ShowA()
For f = 0 To 20
For e = -1 To 10
If A(e, f) = 0 Then s$ = s$ + " "
If A(e, f) <> 0 Then s$ = s$ + "[]"
Next e
pt Pos(f + 1, 1) + s$
s$ = ""
Next f
End Sub

Sub Sh(Optional First = 0)
Static oldx, oldy, oldn, oldk
s$ = ""
If First = 0 Then
For e = 0 To 3
s$ = s$ + Pos(oldy + 1 + dy(oldk, oldn, e), 3 + 2 * (oldx + dx(ol
dk, oldn, e))) + " "
Next e
End If
For e = 0 To 3
s$ = s$ + Pos(Y + 1 + dy(K, N, e), 3 + 2 * (X + dx(K, N, e))) + "{}"
Next e
pt s$ + Pos(1, 1)
oldx = X
oldy = Y
oldk = K
oldn = N
End Sub
--

  

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.235.249]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.063毫秒