74 lines
2.5 KiB
Text
74 lines
2.5 KiB
Text
Dim Shared As Integer stack(1, 51) ' each player's stack of cards (52 maximum)
|
|
Dim Shared As Integer inx(1) ' index to last card (+1) for each stack
|
|
Dim Shared As Integer carta
|
|
|
|
Sub MoveCard(hacia As Integer, desde As Integer) ' Move top card desde stack to bottom of To stack
|
|
Dim As Integer i
|
|
carta = stack(desde, 0) ' take top carta from desde stack
|
|
For i = 0 To inx(desde) - 2 ' shift remaining cards over
|
|
stack(desde, i) = stack(desde, i + 1)
|
|
Next i
|
|
If inx(desde) > 0 Then inx(desde) -= 1 ' remove desde card from its stack
|
|
stack(hacia, inx(hacia)) = carta ' add carta to bottom of To stack
|
|
If inx(hacia) < 52 Then inx(hacia) += 1 ' remove desde card from its stack
|
|
End Sub
|
|
|
|
Dim As String suit = "HDCS "
|
|
Dim As String rank = "23456789TJQKA "
|
|
Dim As Integer top ' index to compared cards, = stack top if not war
|
|
Dim As Integer deck(51) ' initial card deck (low 2 bits = suit)
|
|
For carta = 0 To 51 ' make a complete deck of cards
|
|
deck(carta) = carta
|
|
Next carta
|
|
Dim As Integer n, i, j, p, t
|
|
|
|
Randomize Timer
|
|
For n = 0 To 10000 ' shuffle the deck by swapping random locations
|
|
i = Int(Rnd * 52): j = Int(Rnd * 52)
|
|
Swap deck(i), deck(j)
|
|
Next n
|
|
For n = 0 To 51 ' deal deck into two stacks
|
|
carta = deck(n)
|
|
i = n \ 2
|
|
p = n Mod 2
|
|
stack(p, i) = carta
|
|
Next n
|
|
inx(0) = 52 \ 2: inx(1) = 52 \ 2 ' set indexes to last card +1
|
|
|
|
Do
|
|
For p = 0 To 1 ' show both stacks of cards
|
|
For i = 0 To inx(p) - 1
|
|
carta = stack(p, i)
|
|
Print Left(rank, carta Shr 2);
|
|
Next i
|
|
Print
|
|
For i = 0 To inx(p) - 1
|
|
carta = stack(p, i)
|
|
Print Mid(suit, (carta And 3) + 1, 1);
|
|
Next i
|
|
Print
|
|
Next p
|
|
If inx(0) = 0 Or inx(1) = 0 Then Exit Do ' game over
|
|
|
|
top = 0 ' compare card ranks (above 2-bit suits)
|
|
Do
|
|
If (stack(0, top) Shr 2) = (stack(1, top) Shr 2) Then
|
|
Color 3 : Print "War!" : Print : Color 7
|
|
top += 2 ' play a card down and a card up
|
|
Elseif (stack(0, top) Shr 2) > (stack(1, top) Shr 2) Then
|
|
For i = 0 To top ' move cards to stack 0
|
|
MoveCard(0, 0): MoveCard(0, 1)
|
|
Next i
|
|
Exit Do
|
|
Else
|
|
For i = 0 To top ' move cards to stack 1
|
|
MoveCard(1, 1): MoveCard(1, 0)
|
|
Next i
|
|
Exit Do
|
|
End If
|
|
Loop
|
|
Sleep 1000, 1
|
|
Print
|
|
Loop
|
|
|
|
End
|