저는 프로그래밍과 OOP에 익숙하지 않기 때문에 저의 부족함을 용서해주세요. 지식. 또한'Rock, Paper, Scissors'에서 VB.NET에서 'Lizard, Spock'을 포함하고 코드를보다 확장 가능하고, 유지 보수가 가능하며 재사용 가능하도록 개선했습니다.
Public MustInherit Class Weapons
Public MustOverride Function compareTo(ByVal Weapons As Object) As Integer
End Class
Public Class Paper
Inherits Weapons
Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
If TypeOf Weapons Is Paper Then
Return 0
ElseIf TypeOf Weapons Is Rock Then
Return 1
Else
Return -1
End If
End Function
End Class
Public Class Rock
Inherits Weapons
Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
If TypeOf Weapons Is Rock Then
Return 0
ElseIf TypeOf Weapons Is Scissors Then
Return 1
Else
Return -1
End If
End Function
End Class
Public Class Scissors
Inherits Weapons
Public Overrides Function compareTo(ByVal Weapons As Object) As Integer
If TypeOf Weapons Is Scissors Then
Return 0
ElseIf TypeOf Weapons Is Paper Then
Return 1
Else
Return -1
End If
End Function
End Class
:
내 락의 일환으로, 종이와 가위 게임 나는 추상 슈퍼 클래스처럼 VB.NET에 서브 클래스 ( 록, 종이와 가위)가 ( 무기)가 서브 클래스 ( PlayerComputerRandom을 가진 슈퍼 클래스 Player를이 PlayerHumanPlayer 및 PlayerComputerTactical)과 같은 :Public Class GameForm
Private Sub btnRock_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRock.Click
findWinner("HumanPlayer", "Rock", "RandomComputer")
End Sub
Private Sub btnPaper_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPaper.Click
findWinner("HumanPlayer", "Paper", "RandomComputer")
End Sub
Private Sub btnScissors_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnScissors.Click
findWinner("HumanPlayer", "Scissors", "RandomComputer")
End Sub
Public Sub findWinner(ByVal p1name As String, ByVal p1WeaponSelected As String, ByVal p2Name As String)
Dim player1 = New PlayerHumanPlayer()
Dim player2 = New PlayerComputerRandom()
player1.Name = p1name
player1.pickWeapon(p1WeaponSelected) ' Should I be using the Rock Class???
player2.Name = p2Name
player2.pickWeapon()
Dim winner As Integer = player1.getWeapon().compareTo(player2.getWeapon())
Select Case winner
Case 1
txtGameStatus.Text = player1.Name() + " wins!"
Case -1
txtGameStatus.Text = player2.Name() + " wins!"
Case 0
txtGameStatus.Text = "Draw!"
End Select
End Sub
End Class
내가해야 할 것은이 될 것입니다 : 아래 그림과 같이 나는 프런트 엔드에 사용되는 다양한 논리를 개체를 인스턴스화하고 수행하는 GameForm 클래스가
Imports RockPaperScissors.Weapons
Public Class Player
Private pName As String
Private pNumberOfGamesWon As String
Public pWeapon As Weapons
Property Name() As String
Get
Return pName
End Get
Set(ByVal value As String)
pName = value
End Set
End Property
Property NumberOfGamesWon As String
Get
Return pNumberOfGamesWon
End Get
Set(ByVal value As String)
pNumberOfGamesWon = value
End Set
End Property
Property getWeapon As Weapons
Get
Return pWeapon
End Get
Set(ByVal value As Weapons)
pWeapon = value
End Set
End Property
Public Sub pickWeapon(ByVal WeaponType As String)
If WeaponType = "Rock" Then
pWeapon = New Rock()
ElseIf WeaponType = "Paper" Then
pWeapon = New Paper()
Else
pWeapon = New Scissors()
End If
End Sub
End Class
Imports RockPaperScissors.Weapons
Public Class PlayerComputerRandom
Inherits Player
Private Enum weaponsList
Rock
Paper
Scissors
End Enum
Public Overloads Sub pickWeapon()
Dim randomChoice = New Random()
Dim CompChoice As Integer = randomChoice.Next(0, [Enum].GetValues(GetType(weaponsList)).Length)
If CompChoice = "0" Then
pWeapon = New Rock()
ElseIf CompChoice = "1" Then
pWeapon = New Paper()
Else
pWeapon = New Scissors()
End If
End Sub
End Class
Public Class PlayerComputerTactical
Inherits Player
Private plastMove As String
Property lastMove() As String
Get
Return plastMove
End Get
Set(ByVal value As String)
plastMove = value
End Set
End Property
Public Overloads Sub pickWeapon()
' Add tactical player functionality
End Sub
End Class
Public Class PlayerHumanPlayer
Inherits Player
End Class
새 무기 (도마뱀, Spock)를 추가 할 수 있습니다. 서브 우물 (Lizard, Spock)을 상속하여 무기를 추가하면됩니다. 기본 클래스.
그러나 실제로는 장기간 유지 관리가 가능한 솔루션이 아닌 모든 하위 클래스 (바위, 종이 및 가위)에 대한 코드 변경이 필요합니다. 물론 모범 사례는 아닙니다.
Im 코딩과 OOP에 새로운 점이있어서 추가 게임을 쉽게 추가 할 수 있도록 기존 게임을 향상시킬 수있는 방법을 친절하게 보여줄 수 있습니까? DB 테이블을 사용하여 무기를 저장할 수 있습니까? 그렇다면 어떻게 보여줄 수 있습니까? 나는이 게임을위한 장기적이고 재사용 가능한 솔루션을 원한다.
어떻게하면 될까요? 어떤 도움이라도 대단히 감사하겠습니다. 사전
답장을 보내 주셔서 감사합니다. 점심 시간에 사용해 보겠습니다. 그래서 나는 위의 코드를 통해 승자가 누구인지 결정합니다. 어떻게 GameForm 클래스에서 findWinner() 함수 내에서 사용할 수 있습니까? 온 세상은 내 사과에 대해 다시 사과하고 당신을 위해 감사합니다. – AJsStack
'Weapon' 클래스는'IComparable (Of Weapon)'을 구현하므로'CompareTo '를 사용하여 여전히 승자를 얻을 수 있습니다. – igrimpe