วันอังคารที่ 2 ตุลาคม พ.ศ. 2561

XO Tutorial [การสร้างเกม XO ด้วย Python]

              ส่วนประกอบของเกม XO นั้น มีด้วยกัน 3 ส่วนหลัก คือ 
 - การสร้างตาราง
 - การเลือกใส่ค่า X หรือ O ลงในช่องตาราง
 - การตัดสินแพ้ชนะ

ซึ่งวันนี้จะมาอธิบายเป็นส่วนๆ

1 เริ่มด้วยการสร้างตาราง
            ในการทำเกมในครั้งนี้เราจะใช้ library ที่มีชื่อว่า kivy มาช่วยในส่วนที่เป็น GUI โดยสามารถเข้าาไป download ได้ที่ https://kivy.org/  แล้วมาเริ่มสร้างเกมกันได้เลย

- import สิ่งที่จะนำมาใช้


from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.layout import Layout

โดยใช้ Gridlayout ในการสั่งให้สร้างช่อง 9 ช่อง และใช้ Button ในการระบุช่องทั้ง 9

class Table(GridLayout) :

def __init__(self, **kwargs):
super(Table, self).__init__(**kwargs)

self.arrayXO = []
for item in range(1,10) :
btn = Button(text= " ", id = str(item)) # สร้าง button
self.add_widget(btn) # นำ button ไปใส่ไว้ใน Grid
self.arrayXO.append(btn.id) # นำ id หรือค่าประจำตำแหน่งของปุ่ม
ไปเก็บใน list


2 เมื่อสร้างตารางได้ครบทั้ง 9 ช่องแล้ว ขั้นตอนต่อไปก็คือการใส่ X หรือ O ลงในตาราง
ให้สร้างฟังก์ชันขึ้นมาใหม่ 1 ฟังกืชันสำหรับการกดปุ่ม โดยใช้แนวคิดว่า ตารางมี 9 ช่อง
สามารถเลือกใส่ได้ 9 ครั้ง ก็คือ หากครั้งที่เล่นเป็นเลขคู่ ให้ใส่ ตัว O ถ้าเป็นเลขคี่ ให้ใส่ตัว X

class Table(GridLayout) :

def __init__(self, **kwargs):
super(Table, self).__init__(**kwargs)
self.count = 0 # ให้รอบการเล่นเป็น 0
self.arrayXO = []
for item in range(1,10) :
btn = Button(text= " ", id = str(item))
btn.bind(on_pressed=self.btn_pressed) # หากกดที่ปุ่มให้เรียกใช้ฟังก์ชัน
self.add_widget(btn) btn_pressed
self.arrayXO.append(btn.id)

สร้างฟังก์ชันการกด

def btn_pressed(self,btn) :
self.count += 1
if self.count%2 == 0 : # เป็นเลขคู่
btn.text = "O" # แสดงข้อความ O บนปุ่มที่กด
self.arrayXO[int(btn.id)-1] = "O"
elif self.count%2 == 1 : # เป็นเลขคี่
btn.text = "X"
self.arrayXO[int(btn.id)-1] = "X" # เก็บค่า X เข้าไปแทนที่ค่าประจำตำแหน่ง
ใน list arrayXO


3 ตรวจสอบการแพ้ชนะ
ใช้การตรวจสอบ index ของ X และ O ที่นำไปเก็บใน list หากเรียงกันครบ 3 ตัว ก็ใช้ผู้เล่น
ที่เลือกวางตัวล่าสุดเป็นผู้ชนะ

if self.arrayXO[0]==self.arrayXO[1]==self.arrayXO[2] or
self.arrayXO[3]==self.arrayXO[4]==self.arrayXO[5] or
self.arrayXO[6]==self.arrayXO[7]==self.arrayXO[8] or
self.arrayXO[0]==self.arrayXO[3]==self.arrayXO[6] or
self.arrayXO[1]==self.arrayXO[4]==self.arrayXO[7] or
self.arrayXO[2]==self.arrayXO[5]==self.arrayXO[8] or
self.arrayXO[0]==self.arrayXO[4]==self.arrayXO[8] or
self.arrayXO[3]==self.arrayXO[5]==self.arrayXO[7] :
#condition for check win

if self.count%2 == 0 :
self.add_widget(Label(text=" O win"))
elif self.count%2 == 1 :
self.add_widget(Label(text=" X win"))
หลังจากที่เราใส่เงื่อนไขต่างๆเรียนร้อยแล้ว มีอีก 1 ฟังก์ชันที่เราจำเป็นจะต้องใส่ลงไป นั่นคือ
ฟังก์ชันสั่งให้โปรแกรมทำงาน โดยใช้คำสั่งดังนี้

class xo(App): # เรียกใช้ App
def build(self):
return Table() # เรียก class Table

xo().run() # สั่งให้โปรแกรมทำงาน







ไม่มีความคิดเห็น:

แสดงความคิดเห็น