EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Code: Select all
Code: Select all
Dim WhoIs As Byte ' ตัวแปรบ่งบอกว่าใครเริ่มก่อน
Dim Target_X As String ' หมายเลขตาราง OX ของ X
Dim Target_O As String ' หมายเลขตาราง OX ของ O
Dim CounterGame As Integer ' นับครั้งการคิดเพื่อหาเสมอ
' ------------------------------------------
' เริ่มเกมส์
' ------------------------------------------
Private Sub Worksheet_Activate()
CounterGame = 0
Range("A1:C3").Value = Empty
WhoIs = Not WhoIs
If WhoIs Then
Range("$E$1").Value = "ผมก่อน"
Call Random_O
Else
Range("$E$1").Value = "คุณก่อน"
End If
End Sub
' ------------------------------------------
' เมื่อคลิ๊กปุ่ม OX
' ------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Address
Case Is = "$A$1", "$B$1", "$C$1", "$A$2", "$B$2", "$C$2", "$A$3", "$B$3", "$C$3"
If Target.Value = Empty Then
CounterGame = CounterGame + 1
If Target.Value = Empty Then Target.Value = "X"
R = FindGame("O", Empty)
If R <> "None" Then
Range(R).Value = "O"
Else
R = FindGame("X", Empty)
If R <> "None" Then Range(R).Value = "O" Else Call Random_O
End If
If FindGame("X", "X") <> "None" Then
MsgBox "คุณชนะ": Call Worksheet_Activate
ElseIf FindGame("O", "O") <> "None" Then
MsgBox "ผมชนะ": Call Worksheet_Activate
End If
If CounterGame >= 4 Then MsgBox "เสมอ": Call Worksheet_Activate
End If
Range("$E$2").Value = Empty
Case Else
Range("$E$2").Value = "ออกนอก...กรอบ"
End Select
End Sub
Private Function RangeOfNum(R As Integer) As String
Select Case R
Case Is = 1: RangeOfNum = "$A$1"
Case Is = 2: RangeOfNum = "$B$1"
Case Is = 3: RangeOfNum = "$C$1"
Case Is = 4: RangeOfNum = "$A$2"
Case Is = 5: RangeOfNum = "$B$2"
Case Is = 6: RangeOfNum = "$C$2"
Case Is = 7: RangeOfNum = "$A$3"
Case Is = 8: RangeOfNum = "$B$3"
Case Is = 9: RangeOfNum = "$C$3"
End Select
End Function
' ------------------------------------------
' สุ่มปุ่มให้ O
' ------------------------------------------
Private Function Random_O()
Dim R As Integer '
Randomize ' สุ่มค่าใหม่ทุกครั้งเมื่อเริ่มทำงาน
Do ' ทำ...
R = ((Rnd * 100) Mod 9) + 1 'สุ่มเป้าหมาย O 1 ถึง 9
Loop While Range(RangeOfNum(R)).Value <> Empty ' วนกลับไปใหม่ถ้า เซลล์เป้าหมาย O ไม่ว่าง
Range(RangeOfNum(R)).Value = "O"
End Function
' -------------------------------------------------------------------
' หาทางเดินให้โปรแกรม... หรือส่วนของ ปัญญาประดิษฐ AI
' ------------------------------------------------------------------
Private Function FindGame(SymBol1 As String, SymBol2) As String
' ฟังก์ชั่นส่วนนี้ดูง่ายครับ...เมื่อเขียนออกมาแล้ว...
' แต่ถ้านำโปรแกรมผมไปเปรียบเทียบกับ OX ของท่านอื่น..ๆๆ อาจจะ "งง" ต่างกันไป
' แต่ผลของโปรแกรมก็แตกต่างกันไปด้วย...ทั้งการตอบสนองของ AI และ ความเป็นไป
' ได้ของโปรแกรมที่ยืดหยุ่นกว่า...และคิดแบบไม่ซับซ้อน...ให้งงเสียเองเมื่อเขียนโปรแกรม
Select Case True
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$B$1").Value And Range("$C$1").Value = SymBol2: FindGame = "$C$1"
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$C$1").Value And Range("$B$1").Value = SymBol2: FindGame = "$B$1"
Case SymBol1 = Range("$B$1").Value And Range("$B$1").Value = Range("$C$1").Value And Range("$A$1").Value = SymBol2: FindGame = "$A$1"
Case SymBol1 = Range("$A$2").Value And Range("$A$2").Value = Range("$B$2").Value And Range("$C$2").Value = SymBol2: FindGame = "$C$2"
Case SymBol1 = Range("$A$2").Value And Range("$A$2").Value = Range("$C$2").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$C$2").Value And Range("$A$2").Value = SymBol2: FindGame = "$A$2"
Case SymBol1 = Range("$A$3").Value And Range("$A$3").Value = Range("$B$3").Value And Range("$C$3").Value = SymBol2: FindGame = "$C$3"
Case SymBol1 = Range("$A$3").Value And Range("$A$3").Value = Range("$C$3").Value And Range("$B$3").Value = SymBol2: FindGame = "$B$3"
Case SymBol1 = Range("$B$3").Value And Range("$B$3").Value = Range("$C$3").Value And Range("$A$3").Value = SymBol2: FindGame = "$A$3"
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$A$2").Value And Range("$A$3").Value = SymBol2: FindGame = "$A$3"
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$A$3").Value And Range("$A$2").Value = SymBol2: FindGame = "$A$2"
Case SymBol1 = Range("$A$2").Value And Range("$A$2").Value = Range("$A$3").Value And Range("$A$1").Value = SymBol2: FindGame = "$A$1"
Case SymBol1 = Range("$B$1").Value And Range("$B$1").Value = Range("$B$2").Value And Range("$B$3").Value = SymBol2: FindGame = "$B$3"
Case SymBol1 = Range("$B$1").Value And Range("$B$1").Value = Range("$B$3").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$B$3").Value And Range("$B$1").Value = SymBol2: FindGame = "$B$1"
Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$C$2").Value And Range("$C$3").Value = SymBol2: FindGame = "$C$3"
Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$C$3").Value And Range("$C$2").Value = SymBol2: FindGame = "$C$2"
Case SymBol1 = Range("$C$2").Value And Range("$C$2").Value = Range("$C$3").Value And Range("$C$1").Value = SymBol2: FindGame = "$C$1"
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$B$2").Value And Range("$C$3").Value = SymBol2: FindGame = "$C$3"
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$C$3").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$C$3").Value And Range("$A$1").Value = SymBol2: FindGame = "$A$1"
Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$B$2").Value And Range("$A$3").Value = SymBol2: FindGame = "$A$3"
Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$A$3").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$A$3").Value And Range("$C$1").Value = SymBol2: FindGame = "$C$1"
Case Else: FindGame = "None"
End Select
End Function
ขอโทษนะครับ เล่นยังไงครับแคทอาย wrote:ได้แหละ...ภาษาไทย...
แรกๆ โปรแกรมทำงานบน VB6 ครับ...แต่ต้องประยุกต์ใช้งานบน VBA เลยต้องหาทาง
ทำความเข้าใจเรื่อง Range กับ Target กันหน่อย คอมเมนต์ที่อธิบายเป็นภาษาไทย
เลยหายหมดเลย...ยังไม่ได้เขียนเพิ่มเข้ามาด้วย...ถ้าใครสงสัยยังไง...ถามได้ครับ...
(มอบลิขสิทธิ์ ให้ท่าน 'คนควน') สามารถกระทำ้ซ้ำ หรือเผยแพร่ได้ครับ...
แคทอาย wrote:เดียวผมเอาไฟล์ที่สร้างเสร็จแล้วให้เล่นนะครับ...
ผมแจ้งคุณ raweeroge ให้แนบไฟล์ที่ลองทำเองแล้วมาให้ดูครับ จะได้แจ้งว่าเล่นอย่างไร จากที่คุณ raweeroge เขียนมาด้านล่าง ไม่ได้ขอไฟล์จากคุณแคทอายครับแคทอาย wrote:จริงๆ แล้ว มันก็เสร็จแล้วนะครับ...
เจตนาของผม...คือ...อยากให้ลองก็อปโค้ดสร้างกัน...
แค่วางตามตัวอย่าง...
ก็เล่นได้อย่างภาพแล้วครับ...
raweeroge wrote:ขอโทษนะครับ เล่นยังไงครับแคทอาย wrote:ได้แหละ...ภาษาไทย...
แรกๆ โปรแกรมทำงานบน VB6 ครับ...แต่ต้องประยุกต์ใช้งานบน VBA เลยต้องหาทาง
ทำความเข้าใจเรื่อง Range กับ Target กันหน่อย คอมเมนต์ที่อธิบายเป็นภาษาไทย
เลยหายหมดเลย...ยังไม่ได้เขียนเพิ่มเข้ามาด้วย...ถ้าใครสงสัยยังไง...ถามได้ครับ...
(มอบลิขสิทธิ์ ให้ท่าน 'คนควน') สามารถกระทำ้ซ้ำ หรือเผยแพร่ได้ครับ...