我正在将桌面纸牌游戏转换为计算机。当有人攻击具有闪避/格挡/缴械(如果通过武器攻击)的人时,防御者有机会避免受到攻击的伤害。这部分工作正常!
如果防守者受到“旋转后拳”或“回旋踢”的攻击,那么该攻击被认为是反弹到防守者旁边的一名球员。被攻击的球员被弹跳到原来的防守者选择的球员(必须是他们旁边的球员)。这部分也有效。
我遇到的问题是,如果下一个防守者有一张“闪避”牌,那么他们应该有相同的选择,可以将攻击反弹到他们旁边的玩家身上。
我实现这一点的方法是使用一个用例来定位新的相应玩家,如果他们库存中的闪避卡> 0,那么我使用调用函数来调用加载函数,重新开始该过程。但是,在加载后,复选框会完全消失。
我添加了几个标签来帮助查找代码可能出错的地方。我知道加载过程有效。它位于“calculateload 过程中似乎正在执行此操作的某个位置。
我已经列出了 dodgeblockdisarm 对话框的全部代码。加载功能进行到一半多一点。
Public Class DodgeBlockDisarmDialog
Dim Number As Integer
Dim Rnd As Random
Public DiscardWeapon As Boolean
Public PlayerTemp As Integer
Public MultipleExecutionBoolean As Boolean = False
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
Dim String1 As String = ""
Dim String2 As String = ""
Dim IDBuster, SelectPlayer, PlayerCardsInteger, Number As Integer
Dim CardsA As Integer = LunchMoneyMainForm.T * 5
Dim CardsB As Integer = 5 * LunchMoneyMainForm.T + 4
Dim CheckBoxArray() As CheckBox = {AvoidCheckBox, AvoidCheckBox2, AvoidCheckBox3, AvoidCheckBox4, AvoidCheckBox5}
For PlayerCardsInteger = CardsA To CardsB
Dim TextConverInteger As Integer = PlayerCardsInteger Mod 5
'Choose player and select specific cards
Select Case LunchMoneyMainForm.T
Case 0
SelectPlayer = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger
IDBuster = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).ID
Case 1
SelectPlayer = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger2
IDBuster = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).ID
Case 2
SelectPlayer = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger3
IDBuster = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).ID
Case 3
SelectPlayer = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger4
IDBuster = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).ID
Case 4
SelectPlayer = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger5
IDBuster = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).ID
End Select
If CheckBoxArray(TextConverInteger).Checked = True AndAlso (IDBuster = 14 Or IDBuster = 17 Or (IDBuster = 16 And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11))) Then
'Set NoHPLoss to 0
LunchMoneyMainForm.NoHPLoss = 0
'Subtract cards from defender's deck
Select Case LunchMoneyMainForm.T
Case 0
LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger -= 1
Case 1
LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger2 -= 1
Case 2
LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger3 -= 1
Case 3
LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger4 -= 1
Case 4
LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger5 -= 1
End Select
Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.DeckGroup Where r.QuantityInteger > 0 Select r
If temp IsNot Nothing AndAlso temp.Count > 0 Then
Number = (temp(LunchMoneyMainForm.Rnd.Next(0, temp.Count)).ID)
LunchMoneyMainForm.DeckGroup(Number).QuantityInteger -= 1
'Select the Player depending value of T
Select Case LunchMoneyMainForm.T
Case 0
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger += 1
Case 1
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger2 += 1
Case 2
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger3 += 1
Case 3
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger4 += 1
Case 4
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger5 += 1
End Select
LunchMoneyMainForm.CardTypeArray(PlayerCardsInteger) = LunchMoneyMainForm.Player1HandGroup(Number).CardType
CheckBoxArray(TextConverInteger).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
LunchMoneyMainForm.NumberArray(PlayerCardsInteger) = Number
End If
If CheckBoxArray(TextConverInteger).Checked = True And IDBuster = 17 And LunchMoneyMainForm.CounterTrueFalse = True Then
Select Case LunchMoneyMainForm.T
Case 0
AtkPlayerDialog.Player1.Enabled = False
AtkPlayerDialog.Player2.Enabled = True
AtkPlayerDialog.Player3.Enabled = False
AtkPlayerDialog.Player4.Enabled = False
AtkPlayerDialog.Player5.Enabled = True
String1 = "Player 2"
String2 = "Player 5"
Case 1
AtkPlayerDialog.Player1.Enabled = True
AtkPlayerDialog.Player2.Enabled = False
AtkPlayerDialog.Player3.Enabled = True
AtkPlayerDialog.Player4.Enabled = False
AtkPlayerDialog.Player5.Enabled = False
String1 = "Player 1"
String2 = "Player 3"
Case 2
AtkPlayerDialog.Player1.Enabled = False
AtkPlayerDialog.Player2.Enabled = True
AtkPlayerDialog.Player3.Enabled = False
AtkPlayerDialog.Player4.Enabled = True
AtkPlayerDialog.Player5.Enabled = False
String1 = "Player 2"
String2 = "Player 4"
Case 3
AtkPlayerDialog.Player1.Enabled = False
AtkPlayerDialog.Player2.Enabled = False
AtkPlayerDialog.Player3.Enabled = True
AtkPlayerDialog.Player4.Enabled = False
AtkPlayerDialog.Player5.Enabled = True
String1 = "Player 3"
String2 = "Player 5"
Case 4
AtkPlayerDialog.Player1.Enabled = True
AtkPlayerDialog.Player2.Enabled = False
AtkPlayerDialog.Player3.Enabled = False
AtkPlayerDialog.Player4.Enabled = True
AtkPlayerDialog.Player5.Enabled = False
String1 = "Player 1"
String2 = "Player 4"
End Select
AtkPlayerDialog.RoundFistLabel.Text = "Attack " & String1 & " or " & String2 & "!"
AtkPlayerDialog.ShowDialog()
LunchMoneyMainForm.N = AtkPlayerDialog.DialogResult
'if attacked player has a dodge or block card, then open dodge/block dialog
Select Case (LunchMoneyMainForm.N)
Case 1
If LunchMoneyMainForm.Player1HandGroup(14).QuantityInteger > 0 Or LunchMoneyMainForm.Player1HandGroup(17).QuantityInteger > 0 Then
MultipleExecutionBoolean = True
OK_Button.Visible = False
Call DodgeBlockDialog_Load(sender, e)
testerslabel.Text = "1"
End If
Case 2
If LunchMoneyMainForm.Player1HandGroup(14).QuantityInteger2 > 0 Or LunchMoneyMainForm.Player1HandGroup(17).QuantityInteger2 > 0 Then
MultipleExecutionBoolean = True
Call DodgeBlockDialog_Load(sender, e)
testerslabel.Text = "2"
End If
Case 3
If LunchMoneyMainForm.Player1HandGroup(14).QuantityInteger3 > 0 Or LunchMoneyMainForm.Player1HandGroup(17).QuantityInteger3 > 0 Then
MultipleExecutionBoolean = True
Call DodgeBlockDialog_Load(sender, e)
testerslabel.Text = "3"
End If
Case 4
If LunchMoneyMainForm.Player1HandGroup(14).QuantityInteger4 > 0 Or LunchMoneyMainForm.Player1HandGroup(17).QuantityInteger4 > 0 Then
MultipleExecutionBoolean = True
Call DodgeBlockDialog_Load(sender, e)
testerslabel.Text = "4"
End If
Case 5
If LunchMoneyMainForm.Player1HandGroup(14).QuantityInteger5 > 0 Or LunchMoneyMainForm.Player1HandGroup(17).QuantityInteger5 > 0 Then
MultipleExecutionBoolean = True
Call DodgeBlockDialog_Load(sender, e)
testerslabel.Text = "5"
End If
End Select
LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.N).HitPoints -= LunchMoneyMainForm.TempDamageStorage
LunchMoneyMainForm.TempDamageStorage = 0
AtkPlayerDialog.RoundFistLabel.Visible = False
LunchMoneyMainForm.HitPoints1.Text = LunchMoneyMainForm.Player1HandGroup(1).HitPoints.ToString
LunchMoneyMainForm.HitPoints2.Text = LunchMoneyMainForm.Player1HandGroup(2).HitPoints.ToString
LunchMoneyMainForm.HitPoints3.Text = LunchMoneyMainForm.Player1HandGroup(3).HitPoints.ToString
LunchMoneyMainForm.HitPoints4.Text = LunchMoneyMainForm.Player1HandGroup(4).HitPoints.ToString
LunchMoneyMainForm.HitPoints5.Text = LunchMoneyMainForm.Player1HandGroup(5).HitPoints.ToString
LunchMoneyMainForm.CounterTrueFalse = False
End If
If LunchMoneyMainForm.IDbuster = 8 OrElse LunchMoneyMainForm.IDbuster = 9 OrElse LunchMoneyMainForm.IDbuster = 10 OrElse LunchMoneyMainForm.IDbuster = 11 Then
DiscardWeapon = True
End If
End If
CheckBoxArray(TextConverInteger).Checked = False
Next PlayerCardsInteger
LunchMoneyMainForm.T = PlayerTemp
If MultipleExecutionBoolean = False Then
Me.DialogResult = System.Windows.Forms.DialogResult.OK
End If
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
LunchMoneyMainForm.T = PlayerTemp
End Sub
Private Sub DodgeBlockDialog_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
OK_Button.Enabled = False
Dim CheckBoxArray() As CheckBox = {AvoidCheckBox, AvoidCheckBox2, AvoidCheckBox3, AvoidCheckBox4, AvoidCheckBox5}
'show player number on load
PlayerLabel.Text = "Player " & LunchMoneyMainForm.N
'store attackers value of T so the defender can retaliate
If MultipleExecutionBoolean = False Then
PlayerTemp = LunchMoneyMainForm.T
LunchMoneyMainForm.T = (LunchMoneyMainForm.N - 1)
Else
LunchMoneyMainForm.T = (LunchMoneyMainForm.N - 1)
TLabel.Text = LunchMoneyMainForm.T.ToString
End If
Call CalculateLoad()
End Sub
Private Sub CalculateLoad()
Dim roll As Integer
Dim CheckBoxArray() As CheckBox = {AvoidCheckBox, AvoidCheckBox2, AvoidCheckBox3, AvoidCheckBox4, AvoidCheckBox5}
'Player1
If LunchMoneyMainForm.T = 0 Then
For roll = 0 To 4
Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.Player1HandGroup Where r.QuantityInteger > 0 Select r
If temp IsNot Nothing AndAlso temp.Count > 0 Then
Dim rolls As Integer = roll Mod 5
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger -= 1
LunchMoneyMainForm.NumberArray(roll) = Number
CheckBoxArray(rolls).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
End If
Next roll
For roll = 0 To 4
Number = LunchMoneyMainForm.NumberArray(roll)
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger += 1
Next
End If
'player2
If LunchMoneyMainForm.T = 1 Then
For roll = 5 To 9
Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.Player1HandGroup Where r.QuantityInteger2 > 0 Select r
If temp IsNot Nothing AndAlso temp.Count > 0 Then
Dim rolls As Integer = roll Mod 5
Number = (temp(LunchMoneyMainForm.Rnd.Next(0, temp.Count)).ID)
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger2 -= 1
LunchMoneyMainForm.NumberArray(roll) = Number
CheckBoxArray(rolls).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
End If
Next roll
For roll = 5 To 9
Number = LunchMoneyMainForm.NumberArray(roll)
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger2 += 1
Next
End If
'player3
If LunchMoneyMainForm.T = 2 Then
For roll = 10 To 14
Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.Player1HandGroup Where r.QuantityInteger3 > 0 Select r
If temp IsNot Nothing AndAlso temp.Count > 0 Then
Dim rolls As Integer = roll Mod 5
Number = (temp(LunchMoneyMainForm.Rnd.Next(0, temp.Count)).ID)
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger3 -= 1
LunchMoneyMainForm.NumberArray(roll) = Number
CheckBoxArray(rolls).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
End If
Next roll
For roll = 10 To 14
Number = LunchMoneyMainForm.NumberArray(roll)
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger += 1
Next
End If
'player4
If LunchMoneyMainForm.T = 3 Then
For roll = 15 To 19
Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.Player1HandGroup Where r.QuantityInteger4 > 0 Select r
If temp IsNot Nothing AndAlso temp.Count > 0 Then
Dim rolls As Integer = roll Mod 5
Number = (temp(LunchMoneyMainForm.Rnd.Next(0, temp.Count)).ID)
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger4 -= 1
LunchMoneyMainForm.NumberArray(roll) = Number
CheckBoxArray(rolls).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
End If
Next roll
For roll = 15 To 19
Number = LunchMoneyMainForm.NumberArray(roll)
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger4 += 1
Next
End If
'player5
If LunchMoneyMainForm.T = 4 Then
For roll = 20 To 24
Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.Player1HandGroup Where r.QuantityInteger5 > 0 Select r
If temp IsNot Nothing AndAlso temp.Count > 0 Then
Dim rolls As Integer = roll Mod 5
Number = (temp(LunchMoneyMainForm.Rnd.Next(0, temp.Count)).ID)
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger5 -= 1
LunchMoneyMainForm.NumberArray(roll) = Number
CheckBoxArray(rolls).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
End If
Next roll
For roll = 20 To 24
Number = LunchMoneyMainForm.NumberArray(roll)
LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger5 += 1
Next
End If
'Make checkboxes visible if Dodge or Block, or Disarm(if weapon) card are in the inventory
If CheckBoxArray(0).Text = "Dodge" Or CheckBoxArray(0).Text = "Block" Or (CheckBoxArray(0).Text = "Disarm" And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11)) Then
CheckBoxArray(0).Visible = True
End If
If CheckBoxArray(1).Text = "Dodge" Or CheckBoxArray(1).Text = "Block" Or (CheckBoxArray(1).Text = "Disarm" And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11)) Then
CheckBoxArray(1).Visible = True
End If
If CheckBoxArray(2).Text = "Dodge" Or CheckBoxArray(2).Text = "Block" Or (CheckBoxArray(2).Text = "Disarm" And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11)) Then
CheckBoxArray(2).Visible = True
End If
If CheckBoxArray(3).Text = "Dodge" Or CheckBoxArray(3).Text = "Block" Or (CheckBoxArray(3).Text = "Disarm" And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11)) Then
CheckBoxArray(3).Visible = True
End If
If CheckBoxArray(4).Text = "Dodge" Or CheckBoxArray(4).Text = "Block" Or (CheckBoxArray(4).Text = "Disarm" And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11)) Then
CheckBoxArray(4).Visible = True
End If
End Sub