สร้างเกมส์ป๊อกเด้ง Excel VBA (ตอน1)

วิธีการสร้างเกมส์จาก VBA ตอนที่ 1 จะเป็นการสุ่มไพ่แบบไม่ซ้ำกัน หรือ การสลับไพ่

เริ่มต้นด้วยการสร้าง Sub ที่ชื่อ Card ขึ้นมา

Sub card()
' card Macro
Dim arr(1 To 52) As Variant
Dim i As Integer

For i = LBound(arr) To UBound(arr)
     arr(i) = i
Next i

End Sub

Dim arr(1 To 52) As Variant
‘เริ่มต้นด้วยการสร้างตัวแปร ประเภทอาร์เรย์ มาเก็บใบทั้ง 52 ใบ

Dim i As Integer
‘สร้างตัวแปร i แบบ Integer มาเก็บตัวเลขในการวนลูป

For i = LBound(arr) To UBound(arr)

     arr(i) = i

Next i
‘วนลูป เก็บตัวเลข 1 – 52 เข้า arr()

Sub CardName(arr() As Variant)
For i = LBound(arr) To UBound(arr)
    If i <= 13 Then
        arr(i) = i & "_Spade"
    ElseIf i <= 26 Then
        arr(i) = i - 13 & "_Heart"
    ElseIf i <= 39 Then
        arr(i) = i - 26 & "_Diamond"
    Else
        arr(i) = i - 39 & "_Club"
    End If
Next i
End Sub

สร้าง Sub ชื่อ CardName ขึ้นมาเพื่อเราจะกำหนดให้

เลข 1 – 13 คือ ตัวเลขนั้นๆ ต่อท้ายด้วย “_Spade” (โพธิ์ดำ)

เลข 14 – 26 คือ ตัวเลขนั้นๆ ต่อท้ายด้วย “_Heart” (โพธิ์แดง)

เลข 27 – 39 คือ ตัวเลขนั้นๆ ต่อท้ายด้วย “_Diamond” (ข้าวหลาม)

นอกนั้น เลข 40 – 52 คือ ตัวเลขนั้นๆ ต่อท้ายด้วย “_Club” (ดอกจิก)

Sub Shuffle(arr() As Variant)
ReDim arr2(LBound(arr) To UBound(arr)) As Double
Randomize
For i = LBound(arr) To UBound(arr)
    arr2(i) = Rnd
Next i
For i = LBound(arr2) To UBound(arr2)
   For x = LBound(arr2) To UBound(arr2)
        If arr2(x) > arr2(i) Then
                temp = arr2(x)
                arr2(x) = arr2(i)
                arr2(i) = temp
                
                temp = arr(x)
                arr(x) = arr(i)
                arr(i) = temp
        End If
   Next x
Next i
End Sub

‘สร้าง Sub ชื่อ Shuffle ขึ้นมา

Sub Shuffle(arr() As Variang)
‘ให้ Sub นี้มีการส่งค่าอาร์เรย์เข้ามา

Redim arr2(LBound(arr) To UBound(arr)) As Double
‘ประกาศอาร์เรย์ arr2 ให้มีขนาดเท่ากับ arr คือ (1) – (52) เป็นแบบตัวเลขมีทศนิยม

Randomize

For i = LBound(arr) To UBound(arr)

     arr2(i) = Rnd

Next i
‘วนรอบเข้าไปสุ่มตัวเลขแบบทศนิยม ใน arr2

ขั้นตอนการเรียง วนรอบ i และ วนรอบ x เพื่อเช็คที่ละค่า ถ้าเจอค่า If arr2(x) > arr2(i) Then

ก็จะแก้ไขข้อมูลใน arr() โดยเอาข้อมูลไปไว้ที่ temp ก่อน

Sub card()
' card Macro
Dim arr(1 To 52) As Variant
Dim i As Integer
Dim ico As String
Dim a_color, b_color As String

For i = LBound(arr) To UBound(arr)
     arr(i) = i
Next i
Call CardName(arr)
Call Shuffle(arr)
'***************************

กลับมาที่ Sub Card() ประกาศตัวแปรเพิ่มคือ Dim ico As String และ Dim a_color, b_color As String เพื่อกำหนดไอคอน และ สี ในตอนที่ 2

เพิ่ม
Call CardName(arr) และ
Call Shuffle(arr) เพื่อเรียกใช้Sub ผลออกมา เราก็จะได้อาร์เรย์ arr ที่เก็บค่าไพ่ทั้งหมดทั้ง 52 ใบที่ไม่ซ้ำกัน เช่น 4_Spade, 7_Diamond, …..

ใส่ความเห็น