--- title: การเขียนโปรแกรมภาษาคอมพิวเตอร์_170264 subtitle: date: วันพุธที่ 17 กุมภาพันธ์ 2564 เวลา 08.50 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) (อาจารย์) มืดได้ยินไหมคะได้ยินนะคะ โอ.เค. ค่ะ เด็ก ๆ เข้ามาแล้ว ให้เปิด sublime Text ไปเปิด Sublime text ของเรา Dice : C ของเราะไป เข้ามาปุ๊บนี่ เราจะ Coding เราต้องไปเปิดตัวช่วยของเราก่อนก็คือ Sublime text นะคะ เปิดขึ้นมาเราต้องเขียนต่อจากสัปดาห์ที่แล้ว เราจะโค้ดต่อ ในสัปดาห์ที่แล้ว ที่เราทำเราเพิ่งได้อะไรคะ ได้ตารางเกมของเราใช่หรือเปล่านะคะ เราเพิ่งทำตารางได้ วันนี้เราจะต้องทำต่อให้เสร็จนะคะ เพราะฉะนั้นตามให้ทัน หายไปไหน 2 คน เพราะไม่อย่างนั้น ถ้าข้ามแล้วจะหลุดไปเลย ใบเตย ใบเตยได้หรือยัง จะโค้ด เดี๋ยวจะอธิบายจากสไลด์เราไปก่อนนะคะ นะคะ เราจำทำต่อจาก ก็คือจากหนที่แล้วนี่เราสร้างตัว markers ยังไม่เสร็จนะคะ เพราะว่าทีนี้มากำหนดเหตุการณ์เมื่อเวลาที่เราจะ Mark X หรือ ฯO นะคะ ก็คือเราจะสั่งให้เมาส์นี่ มันจะเป็นฟังก์ชัน สำหรับใช้งานเมาส์นั่นเองนะคะ ซึ่งถ้าเราคีย์ไปนี่มันจะมีขึ้นมานะคะ เดี๋ยวจะอธิบายความหมายก่อนว่า ตัวคำสั่งของการใช้เมาส์นี่ มีความหมายอย่างไร มันจะมีอยู่ 4 ตัว 4 คำสั่งนะคะ สำหรับการใช้ Mouse นะคะ ถ้าเราใช้ใช้เมาส์ moUSEBUTTONDOWN เมาส์ Button down หมายถึง ปกตินี่ เวลาเราจะให้ Mouse ทำงาน ก็คือคลิกใช่ไหม คลิกเมาส์ใช่ไหมคะ แต่ หมายถึงไม่คลิกน่ะ พอคลิกไปแล้วแล้วเลิกการคลิก ก็คือปล่อย แล้วถ้าปล่อยนี่คือ MOUSEBUTTONDOWN แต่ถ้ากดลง คือ ตัวที่ 2 เมาส์ Button Up MOUSEBUTTONUP จะเป็นคำสั่งนี้ ก็คือต้องการให้กดปุ่ม Mouse หรือ คลิก Mouse ก็คือเราต้องใช้ moUSEBUTTONUP แต่ถ้าเราต้องการให้นี่ ขยับเมาส์ของเรานี่ ก็คือเลื่อน Mouse ไปปมาน่ะ ก็คือคำสั่ง mousemotion แต่ถ้า MOUSEWHEEL อันที่ 4 มันจะมีลูกกลิ้งใช่ไหมบนเมาส์ นั่น ก็คือถ้าเมื่อไรที่เราต้องการใช้ไอ้ตัวที่หมุน ๆ บกลูกกลิ้งน่ะ เราต้องใช้คำสั่ง MOUSEWHEEL ตัวที่ 4 นี้ทีนี้ในวันนี้ที่สอนนี้มันจะใช้อยู่ 2 อัน ก็คือ Up กับ Down ให้นึกถึงพอเราจะวาง X ในกระดานใช่ไหม ก็คือกฎก็กดแล้วก็ปล่อยใช่ไหมคะ วางในตำแหน่งชองตารางน่ะใช่ไหมคะ สำหรับคำสั่ง Mouse จะมี 2 อันที่ใช้ แต่ตัวอื่นนี่บอกมาเพิ่ม ก็คือนั่นหมายความว่า ถ้าให้เขียนโปรแกรมเองรู้ใช่ไหมถ้าจะควบคุม Mouse จะมีใดบ้างใน 4 ตัวนี้นะคะ แล้วก็มันใช้งานอย่างไร เรียกใช้เพื่อทำอะไรนะคะ เพราะฉะนั้นเมื่อเรากำหนดเมาส์แล้ว สิ่งต่อไปที่เราจะทำ ยังไม่ Close ก็คือมันก็ต้องมาเช็กค่า เช็กว่าพอคลิกแล้วนี่ เห็นไหมคะ เป็นจริงหรือเป็นเท็จ เราก็ไปทำงานตามคำสั่งน่ะนึกออกนะ มันต้องเช็กก่อนว่าเป็นจริงหรือเป็นเท็จนี่ เช็กเสียก่อน เช็กข้อมูลเสียก่อน เพราะฉะนั้นเราก็ต้องมีการประกาศตัวแปรที่ชื่อว่า "Click" จะได้เช็กได้ว่า พอเราคลิก Mouse เพื่อ Mark ตัว X หรือตัว O ลงกระดานของ XO เกมนี่มันก็จะรับค่านี่ จากการคลิกเข้าไปนะคะ สิ่งต่อมาที่เราจะทำคือ เราจะมาระบุตำแหน่งให้เมื่อคลิกนี่มันต้องเช็กได้ไงว่าตำแหน่งนี้คือตรงไหนนะคะ ประกาศตัวแปรที่ชื่อว่า... ข้ามไปนี่ เห็นไหมคะ การกำหนดตำแหน่งเมื่อคลิกเมาส์เราจะมีการกำหนดตำแหน่งของการคลิกเมาส์โดยใช้ตัวแปรที่ชื่อว่า post ซึ่งมาจากคำว่า Position เพราะอยู่ดี ๆ จะคลิกลงไปเลย ก็ไม่รู้ใช่ไหมว่าคลิปถูกช่องหรือไม่ถูกช่อง อยู่ช่องไหน ตัว O อยู่ช่องไหน เดี๋ยวลอง Run ให้ดูว่าเมื่อเวลาเราสั่งให้ดูหน้าตาเกมไปด้วย Run ผิดตัว อันนี้เฉพาะที่มีในตาราง เเอาตัวที่เสร็จสมบูรณ์แล้ว เดี๋ยว Run ให้ดู ก็คือให้นึกถึงนี่ เห็นไหมคะ เลื่อนเมาส์ไปบนตารางที่เราสร้างใช่ไหม ถ้าสมมติเราไม่กำหนดว่าเราจะคลิก X ตรงนี้ อันนี้โปรแกรมมันสำเร็จแล้ว X มันจะไม่ขึ้นเหมือนตอนที่... ตอนที่เราทำใน First Game นี่ ที่เรามีแต่ตัวที่เรามีแต่ตัวบอร์ดเห็นไหม ใช่ไหมอะไรก็ไม่ขึ้น คลิกไปก็จะไม่รู้ตำแหน่งใช่ไหมคะ แต่ถ้าเมื่อใดที่เรากำหนดค่าให้มันแล้วนี่เหมือนพอคลิก X ลงตรงวงน่ะ มันก็จะรู้ว่า X ลงช่องไหน ก็คือคำสั่ง ตัวแปร Position จะเป็นการระบุตำแหน่งที่เราจะวางตัว X ลงไปนั่นเอง ให้มันเช็ก เช็กตำแหน่งให้นั่นเองนะคะ ก็คือตัวนี้คำสั่งนี้ตัวแปรนี้นะคะ ทีนี้ ทำไมถึงต้องมาบอก Shelf X Shelf Y ด้วย ด้วยตำแหน่งของ position เพราะดูกระดานเรานะคะ มันก็ไปตามแนวใช่ไหมคะ แนวของแกน X แกน Y เวลาเราสร้าง เพราะฉะนั้นเวลามันเช็ก มันก็เช็กไปตามแนวขึ้นลงอย่างนี้นึกออกนะเช็กไปตามแนวที่เรา ที่ได้อธิบายในสัปดาห์ก่อนว่าพื้นที่ พื้นที่หน้าจอนะ ก็คือ X คือแนวนอน ฃหรือแถว Y คือ แนวตั้งหรือคอลั่ม นี่อันนี้ ถ้าอย่างนี้คือแนวนอน ถ้าอย่างนี้คือแนวตั้งหรือคอลัมน์ มันก็จะเช็กไปทีละแถวก่อน หรือจะเช็กไปตามคอลั่มก่อนขึ้นอยู่ว่าเรากำหนดการเช็กนั่นเองนะคะ เห็นไหมคะ พอ พอเมาส์คลิกไปแล้วเห็นไหม มันจะให้ทำอะไรต่อ พอเช็กตำแหน่งเสร็จ เมื่อมีการคลิก Mouse นะคะ คำสั่งนี้จะบอกว่า เมื่อมาร์กลงไปที่ตำแหน่งนี้ ตำแหน่งนี้ที่ Mark ลงไปมันจะมีอะไรเกิดขึ้น มันจะมี Code ต่อมานะคะ จะมีการประกาศตัวแปรเพิ่มมากอีก 1 ตัว ที่ชื่อว่า "player" เพราะเวลาเล่น มันก็จะเท่ากับมี 2 คน อีกคนเป็น X อีกคนเป็น O ใช่ไหมคะ เห็นไหม ก็คืออันนี้ถ้า X หมายถึงผู้เล่นคนที่ 1 O ก็จะหมายถึงผู้เล่นคนที่ 2 นั่นเองนะคะ เพราะฉะนั้นเพราะฉะนั้น Player ประกาศตัวแปรเริ่มันก็เริ่มจากคนแรกเสมอนะคะ นะคะ พอคลิกไปนี่ พอแสดงว่า Mark ลงไปแล้วนี่ คนแรก ก็คือคนที่ 1 นะคะ คนต่อไป ก็คือจะเป็นตำแหน่งคนที่ 2 ที่เขาคลิก เขาจะสามารถคลิกได้นะคะทีนี้ในคลั้งก่อนที่เราใช้คำสั่ง printmark ไว้ เราลบมันออกได้ เพราะว่าเดี๋ยวเราจะมาทำตัวมาร์ก ก็คือในครั้งก่อน จะไม่มีตัว X กับตัว Oขึ้นมาครั้งนี้เราจะเริ่มทำตัว X กับ O นี่ นะคะ เพื่อจะให้มันพอเวลาเรามาร์กลงไปว่าคนที่ 1 เป็น X นี่ คลิกลงไปตรงนี้ X ก็จะต้องขึ้นมา O ก็จะไปตรงนี้ O ก็จะขึ้นมาตรงนี้นะคะ เพราะฉะนั้น เราก็จะลบมาร์กครั้งเก่าออกไป เพราะไม่ได้ใช้นะคะ จะทำการลบออกทีนี้สิ่งที่เราจะทำในขั้นตอนต่อมา คือ กำหนด Function กำหนด Function ก็เพื่อสร้างอะไร เพื่อสร้างเห็นไหม สร้างตัว X สีเขียวเป็น X สีแดงจะเป็นตัว O ให้สีแดงเป็นตัว O ก็จะมีการกำหนดค่าสี ลืมแก้ ความจริงต้องเป็น green กับ red นะคะ สีเขียวกับสีแดงนะคะ นี่ ให้ดูว่าพอเวลาเราวาด เพราะเมื่อเรากำหนดนี่ มันก็จะไปเช็กค่าเห็นไหมคะ โดยมีเงื่อนไขว่าตำแหน่งที่ X post เริ่มที่ 0 นี่นะคะ เมื่อเราเห็นไหมคะ ถ้าวาด X ก็คือใช้คำสั่ง draw line เห็นไหมคะ ก็เลยต้องวาด 2 เส้นเพื่อให้มันทแยงนึกออกนะ ตำแหน่งที่วาดก็จะอยู่ตามตัวอย่างนะคะ เดี๋ยวจะบอกในตอน Coding การใช้วิธีวาดตัว X ของเรา ก็คือใช้วิธีการวาดเส้นนะคะ ส่วนตัว O ของเรา เราจะใช้คำสั่ง dฟังก์ชัน Draw Circle วางวงกลมนั่นเองนะคะ มันจะมีรูปแบบของมันเดี๋ยวอธิบายตอน Coding อีกทีหนึ่ง ให้เราดูคร่าว ๆ ก่อนว่าจะทำอะไรในช่องตารางนี่ จะทำอะไรลงไปในนี้ได้บ้าง แล้วทีนี้เมื่อทำแล้วก็คือถ้าแค่นี้ ถ้าถึงแค่ตัวนี้มันจะวาดแค่ 1 อันใช่ไหม เพราะฉะนั้นในช่องตารางเรามีทั้งหมดนี่ 9 ช่องนี้ ทำอย่างไรให้มันวาดได้ครบทั้ง 9 ใช่ไหมคะ เราก็จะต้องทำ Loop ให้มันใช่ไหม ให้มันทำซ้ำ คลิกซ้ำได้ คลิกซ้ำได้การวาง ก็คือคนที่ 1 กลับมาเล่นได้อีกครั้งหนึ่ง แต่เล่นได้ไม่เกินเท่าไรครั้ง เดี๋ยวมันจะมีตัวเช็กให้ และพอเราเขียนฟังก์ชันนี้เสร็จ คราวนี้เราจะไม่ลืมแล้ว ครั้งที่แล้วเรา Draw ทุกครั้งที่เราสร้างฟังก์ชันเสร็จนี่ เราจะเรียกมันมาใช้งาน เพราะถ้าไม่เรียกมาใช้งานก็เท่ากับไม่มีอะไรเกิดขึ้นนะคะ เราก็จะเรียกมันมาใช้งานนะคะ ตอนนี้สมาชิกครบแล้วรอเปิดเครื่องนะคะ เดี๋ยวอธิบายต่อไปก่อน ใบเตยเสร็จหรือยัง ของใบเตย ใบเตย Code เสร็จหรือยังนะคะ เห็นไหมคะ พอวาดได้แล้ว เราก็ต้องเช็กให้ได้ด้วยว่า ใครจะเป็นคนชนะ ก็จะสร้าง Funsion นะคะ หรือชื่อฟังก์ชันว่า check_winner วิธีการเช็กจะเช็กตามแถวก่อน เช็กตามนี้นะคะ แกนแถวนี่ไป ว่า X วางครบตามหลักของ XO ก็คือใครที่วางตัว X หรือตัว O ครบ 3 ตัว ใช่ปะ ถึงจะเป็นคนชนะใช่ไหมคะ เหมือนอย่างนี้ยังไม่มีใครชนะเดี๋ยวดูนะคะ สมมติ นี่เห็นไหม สีแดงถึงก่อน ก็คือสีแดง O ครบ มันก็ขึ้นว่า player 2 win ขึ้นข้อความว่า ผู้ชนะคือคนที่ 2 ผู้เล่น คนเล่นคนที่ 2 นะคะ แล้วทีนี้ถ้าต้องการเล่นซ้ำ กดที่ Play Again ก็จะเคลียร์หน้าจอทั้งหมดแล้วให้เล่นซ้ำได้ วิธีการเช็ก เขาจะเช็กตามแถว แถวที่ 1 ครบไหม มีครบ 3 ตัวไหม แถวที่ 2 มีครบไหมนะคะ เห็นไหม ตรง sum น่ะ ผลรวมมันจะอยู่ที่ 3 เพราะช่อง ช่องของตาราง XO เรามี ตามแถวก็มี 3 ช่อง ตามคอลัมน์ก็มี 3 ช่อง มันก็เช็กไปทั้ง 3 แถว แล้วนอกจากเช็กตามแถวแล้ว เราต้องเช็กตามแนวทะแยงได้ด้วย หรือ คอส ใช่ไหมคะ ตามหลักของ XO ก็สามารถเรียงตามแนวทแยงอย่างนี้ได้ นึกออกนะ ลืม อันนี้เอาใหม่ ๆ เรียงตามแนวทแยง เช่น นี่ เห็นไหมคะ อันนี้ คือ ตอนนี้ให้ตัวเองเล่นเองคนเดียว เลยดักทางตัวเองได้ แต่ถ้าเราไปกำหนดเงื่อนไขว่าให้คนเล่นเข้ามาเล่นได้ 2 คนอย่างนี้นะคะ มันต้องใช้วิธีการอย่างไร อะไรอย่างไรนี่ จะเป็นขั้นตอนต่อไป สกิล อันนี้เอาให้รู้ Basic มันก่อนว่าสิ่งพวกนี้ขึ้นมาได้ เราทำอะไรบ้าง มีเช็กตามแถวนะคะ แล้วต้องมาประกาศตัวแปรให้ผู้ชนะ กับประกาศตัวแปรให้เวลาจบเกมหรือ Gameover ไว้ด้วยนะคะ ด้วยเพราะจะได้เก็บค่าข้อมูลไว้ว่าใครคือผู้ใชนะ คนแพ้ จบเกมเป็นอะไรเห็นนะคะ เช็กยังไม่เสร็จนะคะ เช็กตามคอลัมน์ เช็กตามคอลัมน์เห็นไหม แกน Y เห็นไหมคะ แล้วสุดท้ายก็จะเช็กตามแนวทะแยง หรือ Cross เพราะว่าโค้ดมันยาว Code มันยาวแต่ถามเราคีย์ตามไอ้นี่อยู่แล้วก็จะเห็นอยู่นะคะ แล้วมีสิ่งหนึ่งที่เราจะต้องมาเรียกใช้งาน มันชื่อคีย์เวิร์ดที่ว่า Global มันจะเป็นคีย์เวิลด์ที่เรียกตัวแปรที่อยู่ข้างนอกน่ะมาใช้งานนะคะ เมื่อเราสร้างฟังก์ชันนี้เสร็จ เราก็ต้องเรียกใช้มัน ฟังก์ชันนี้เสร็จมันก็จะไม่ได้เรียกใช้อยู่ตำแหน่งปกติ แต่จะมาเรียกใช้เมื่อมีการคลิกเมาส์หรืออะไรแล้ว ตำแหน่งที่เรียกใช้ต้องเช็กตำแหน่งด้วยนะคะ ใส่ตรงที่หนึ่ง บางที่ก็ใส่ตรงที่หนึ่งไมเหมือนกัน สิ่งที่เราจะทำต่อไป ก็คือให้มันเช็กเวลาเกมจบเกมน่ะ เกม Over หรือจบสิ้นสุดเกม ก็คือเล่นครบ 9 ช่องแล้วนะคะ ต้องมากำหนดเงื่อนไขให้นะคะ กำหนดเพื่ออะไร กำหนดเพื่อสมมติว่า แสดงว่าเมื่อกี้ปิดไปแล้ว ไม่สมมติแล้ว เปิดให้ดูเลย คือ เช็ก 9 ช่องแล้วนะคะ ตอนคำสั่งที่กำหนดรูปแบบฟอนต์นี่ มีมาเพื่ออะไร ให้ดูนะคะ ก็คืออยู่ดี ๆ ถ้ากดไปอย่างนี้ จะครบไหม ไม่ครบ เราจะแสดงฟอนต์จะใช้เพื่อแสดงข้อความให้ปรากฏพวกนี้ขึ้นมา เห็นไหมคะ ประกาศตัวแปรชื่อว่าฟอนต์ แล้วให้เรียกฟังก์ชันของฟอร์นให้มันขึ้นอยู่ตรงไหน มีค่าเป็นค่าว่างนะคะ ก็คือคำสั่งนี้ font นี่ จะเปลี่ยนไปตามที่เราเงื่อนไขของเรานั่นเองนะคะ นี่เห็นไหม winner นี่ให้วาด หรือแสดงข้อความน่ะ บอกเมื่อผู้เล่นชนะ เห็นไหมคะ ก็คือเรากำหนดฟอนต์ เพื่อให้แสดงส่วนนั่นขึ้นมาอย่างนี้นะคะ มีการทำกรอบให้มันด้วยนี่ มีแต่ข้อความเดี๋ยวจะดูยาก ใส่กรอบเข้าไปอย่างนี้นะคะ นี่นะคะ แล้วก็มากำหนดสีน้ำเงิน เพื่อเป็นสีของข้อความ นะคะ นี่คือคือ ตรงฟังก์ชันนี้แสดงข้อความเมื่อเวลาเราเล่นเสร็จ เล่นจบเกมนี่ เล่นครบนี่ พอบอกแล้วทุกครั้งเมื่อสร้างฟังก์ชันใดเสร็จอย่าลืมเรียกใช้มันนะคะ ก่อนจะเรียกใช้ มันต้องเช็กก่อนว่ามัน ถ้า Game Over จริง เห็นไหมคะ Tools มันจะไปใช้ฟังกชันขึ้นมานะคะ ก็คือโปรแกรมมันจะเช็กก่อนว่าเราเล่นไปจนครบ 9 ช่องแล้ว มันก็จะขึ้นตัวนี้ขึ้นมานะคะแล้วก็สร้าง play agian แล้วก็สร้าง Play again สังเกตมันจะมีปุ่ม 2 กรอบข้อความ กรอบข้อความแรกแสดงผู้ชนะ กรอบข้อความที่ 2 คือ เมื่อเล่นจบแล้วถ้าไม่มี Play Again มันจะปิดไปเลยเล่นซ้ำไม่ได้แต่บางทีอยากเล่นต่อ ต้องมี Play Again ให้ เล่นอีก เล่นอีกรอบหนึ่ง เล่นไหมอย่างนี้นะคะ ก็จะสร้างแบบเดียวกันนะคะ แต่รูปแบบเห็นไหม มีการสร้างรูสี่เหลี่ยมขึ้นมาด้วย กรอบสี่เหลี่ยม Guard ตัวแปรเท่ากับสี่เหลี่ยมผืนผ้านั่นเองนะคะ แล้วก็ตามด้วยขนาดของมันนะคะ เดี๋ยวพอสร้างเสร็จในแต่ละส่วนจะให้ลอง Run ดู Run Coding เพราะฉะนั้น พอเมื่อใดที่มีการคลิก Play agian นี่นะคะ ก็หมายถึงให้เล่นใหม่ มันจะต้องทำการ Reset ค่าทั้งหมดทั้งปวงที่จะเกิดขึ้น ก็คือค่าของตัวมาร์ก ค่าของตำแหน่ง ค่าของ winner เพราะอะไร เพราะ Mark ตัว XO ใช่ไหมคะ Pluse มันก็จะเริ่ม Mark จุดลงไป แล้วก็ player คือ ผู้เล่นคนแรก เริ่มที่ผู้เล่นคนแรกเสมอนี่ มันจะต้องรีเซ็ตเพื่อให้ พอกดปุ๊บเห็นไหมคะ กระดาน XO เราก็จะเคลียออกเพื่อให้เป็นกระดานเปล่า ๆ อีกครั้งหนึ่งเพื่อเริ่มเล่นใหม่ได้ อย่างนี้นะคะ นะคะ ก็จะมีการเคลียค่าด้วยนะคะ Reset ค่านั่นเอง คืนค่ากลับไปให้มันกลับไปเริ่มใหม่ แล้วค่าใหม่นะคะ และสุดท้าย ท้ายที่สุด มันจะเช็กกระทั่งตำแหน่งในการมาร์กที่มาร์กปรากฏนะคะ เห็นไหมคะ เคลียร์ออก อันนี้ให้ดูเป็นทีละท่อนนะคะ เห็นไหมนี่ ก็คือสุดท้ายเคลียร์ค่าทั้งหมดทั้งปวง ก็จะสามารถRun ได้นะคะ ทดสอบครั้งสุดท้ายจะเป็นตัวนี้ พร้อมจะ Code หรือยัง รอใครอยู่ เสือน้อยยังไม่เปิดหรือ ตอนนี้ถ้าเปิด sublime Text นะคะ ให้เราไปยังตำแหน่งในครั้งก่อนพิมพ์ไว้ ก็คืออยู่ที่ Event Event ที่จบเกมนั่นเอง Play Game . quit ()เรานะคะ first game แล้วให้ไปที่ตำแหน่งที่บอก อยู่ไหนเอ่ย นี่ ๆ ๆ เห็นไหมคะ อะไรของข้าพเจ้าหายไป หายไป 1 บรรทัด Update หาย มิน่า... หาเจอหรือยัง หาตรง Event pygame บรรทัดนี้เจอหรือยังคะ เกือบสุดท้าย ก่อนจบ Update หายไปไหน เราอย่าลืมฟังก์ชัน update นะคะยังอยู่สงสัยน่าจะไปลบตอนที่ Run เดี๋ยวทีนี้จะ Run ของครั้งก่อนของเรานะคะ ครั้งก่อนของเรานี่มันจะเป็นอย่างนี้ใช่ไหม อะไรหายไป print markers เราบอกว่าต้องเรียกใช้งาน มันจะมี... ในสัปดาห์ที่แล้ว ที่เราลืมไป ก็คือเราสร้างมันมาแล้วแต่ไม่ได้เรียกใช้มันนะคะ พอเรียกใช้ปุ๊บ เห็นหรือเปล่าขึ้นมาแล้ว เราจะมีช่องตารางขึ้นมาแบบนี้ เรามีถึงตอนนี้นะคะ คือ เราสร้างฟังก์ชัน Draw_grid ไปแล้วแต่ไม่เรียกใช้มันก็เลยไม่ขึ้นในครั้งแรก ที่สัปดาห์แล้ว Error ไปทีนี้สัปดาห์นี้ไม่ลืมแล้ว สร้าง Function เสร็จเรีห้ามลืม ๆ ก่อนอื่นนะคะ ก่อนอื่นบอกแล้วว่าทุกครั้งก่อนจะเขียนนี่ ควรจะ Hastag ว่าทำอะไรในขั้นตอนนี้นะคะ ในสไลด์บอกว่าเราจะกำหนดเหตุการณ์ก็ต่อเมื่อคลิกเมาส์ เพราะฉะนั้น Comment ของเราก็จะมีว่าใส่แฮ็กแท็ชนะคะ พิมพ์ Hashtag (#) แล้วก็กำหนด event ก็ได้ กำหนด event ก็คือกำหนดเหตุการณ์ให้เมื่อมีการคลิกนะคะ จะเอาเป็นภาษาไทยไหม เดี๋ยวจะงงอีก ก็คือในส่วนนี้เราจะกำหนดเหตุการณ์เมื่อเราทำการคลิก Mouse เงื่อนไขตัวแรกนี่ ตัวแรกนี่ If ตัวแรกอยู่ตำแหน่งนี้เสร็จสิ้นประโยคมัน Stetment ที่ 2 ของเราเห็นไหมคะ เพราะว่าเป็นเงื่อนไขคนละตัวแล้ว If จะเริ่มตรงกับตำแหน่ง if แรกนะคะ 2 ตัวนี้ตำแหน่งจะอยู่ตรง ตำแหน่ง if จะอยู่ตรง เพราะฉะนั้น เช็กเวลา Tab Tap ไป 1 ครั้งเห็นไหมคะ จะตรงกับ for มันจะตรงกับ if ต้อง Tab อีกครั้งหนึให้ตำแหน่งมันตรง เห็นไหมคะ เห็นไหมตรงกัน เพราะไม่อย่างนั้น Run แล้วจะขึ้น iden eorror อย่าไปกด Spacebar คือ กด Tab รู้จัก Tab ไหม ปุ่ม Tab น่ะ ต่างกันนะคะ ระหว่างกด spacebar กเพราะคอมพิวเตอร์มันรู้นะคะ มันอ่านคีย์บอร์ดได้ เพราะฉะนั้น ถ้าบอกให้กด Tab ต้องกด Tab กด spacebar ก็กด spacebar นะคะ เริ่มด้วยฟังก์ชัน if เสมอ เมื่อกำหนดเหตุการณ์ จะต้องใช้ if เป็นตัวกำหนดใช่ไหมคะ พิมพ์ พิมพ์ i ปุ๊บเปลี่ยนก่อน i ปุ๊บเห็นif ที่เราเลือกก็คือ if condition ไม่ใช่ If คีย์เวิร์ด คลิก if if condition เห็นไหม ระยะเยื้องมันจะขึ้นมาให้ เราจะได้ไม่เกิดปัญหา identition อีก เวลา Error Tab Error หรือจะไม่เกิดขึ้น if เสร้จแล้วตามด้วยอะไรเหมือนเดิม เพราะเราบอกว่า event เราจะกำหนด event นะคะ ดูในสไลด์นี่เห็นไหม Event type เสมอเลย พิมพ์ใช่ไหมคะ == แต่ตัวที่ฟังก์ชันที่เราจะเรียกมาตรวจสอบ ก็คือฟังก์ชันเมาส์ เดี๋ยวมาดูจะเรียกอย่างไรนะคะ if eventก็เลือก stagement พิมพ์แค่ตัว e แล้วก็คลิก เสร็แล้วพิมพ์อะไร dot (.) tpye ก็คือ ก็คือถ้ามันขึ้นตรงตัวไหนไหนที่เป็นสีเทา ๆ ก็กด Enter ได้เลย แล้วตามด้วยอะไรคะ กด spacebar 1 ครั้ง เท่ากับใน pygame หรือใน Pythonpython จะต้องกด 2 ครั้งนะคะ แล้วก็ตามด้วย spacebar 1 ครั้ง แล้วก็พิมพ์ P P แล้วเลือก pygame pygame module แล้วนะคะ ในหน้าต่างที่มันขึ้นมานี่ หน้าต่าง Pop-up นะคะ ถ้าไม่อยู่ใน pygame module ไปแล้วกด Enter ทันไหมจ๊าบ . ทีนี้M ต้องเป็นตัวใหญ่นะคะ เวลาที่เราจะใช้ pygame. ในตำแหน่งนี้ เวลาพิมพ์นี่ข้อความนี่จะต้องกด shift เสมอ MOMo เพื่อหา MOUSE เงื่อนไขแรกหรือเหตุการณ์แรกนะคะ เราจะกำหนดค่า MOUSE เป็นอะไร ไปดูกัน ButtonDown BottM เห็นไหมคะ เลือก ไวไปไหม ช้า ๆ นะ ช้า ๆ M ให่ญ่ พิมพ์ M ใหญ่ เลือกตัวนี้นะคะ เลือก... นี่ ๆ ๆ เลือก MOUSEBUTTONDOWNm-o-uu-t-t-o-n ยาว ๆ หน่อย สังเกต MOUSE แล้วก็จะมีไอ้ข้างหลังยาวกว่าเพื่อนเลย ค่ะ กด Enter โอ.เค. นะ ก็คือตอนนี้บอก ถ้า ถ้าปล่อย เมาส์อะไรจะเกิดขึ้นหลังจากตรง Statement นี้ ไปมันจะไปบอกว่าถ้าปล่อยเมาส์ ก็คือคลิก คลิก = tool ก็คือการตรวจสอบ ก็คือเมื่อมีการคลิกปุ๊บนี่นะคะ ตรงตำแหน่ง Pass นี่ เด็ก ๆ มาที่ตำแหน่ง pasแล้วว่าถ้าถ้าเลือกใช้ไอ้ BUTTONDOWN นี่ เพราะฉะนั้นเมื่อตรง Pass นี่ ถ้าแล้วหรือนี่ ตรง pas เราทำแถบที่ past เหมือนเดิม แล้วพิมพ์คลิกลงไปเลย C พิมพ์นะคะ LI อันนี้ต้องพิมพ์ก่อน เราจะไม่... มันเป็นตัวแรปนี่ะมันยังไม่ได้ประกาศมันนะคะ คลิก clicked ด้วย อันนี้ต้องพิมพ์เอานะคะ c-l-i-c-k cked clicked ก็คือถ้าคลิก... ถ้าเลือก ถ้าเมาส์ ปล่อยเมาส์ปุ๊บนี่ มันจะเช็กที่เมื่อมีการคลิกเกิดขึ้นนะคะ กำหนดค่าให้คลิกเท่ากับ True True ใช่ไหม = tool เป็นจริง ก็คือมีการคลิกนี่นะคะ เลือกเลือก true ที่เป็ตัวใหญ่ตัวนี้นะคะ true นี่ เท่ากับ True ตัวนี้ กด Enter มันจะเปลี่ยนให้เองเลยเห็นไหม อันนี้ปล่อยเมาส์ มีปล่อยก็ต้องมีกดใช่ไหมคะ เพราะฉะนั้นไม่อยากให้พิมพ์ ไม่อยากให้ copy เราก็จะเพิ่มเหตุการณ์อีก 1 ครั้งนะคะ ตำแหน่งของ if จะอยู่ตรงกับตำแหน่งนี้เห็นไหม ตรงกันนะคะ เหมือนเดิม เพิ่ม if condition กด i แล้วเลือก conditionEnter ได้เลย เลือก if condition ได้เลย เหมือเดิม event type ไปเรื่อย ๆ นี่ จนถึง MOUSE นี่ เปลี่ยนจากMOUSEBUTTONDOWN เป็น MOUSEBUTTONEพิมพ์ Event Event ที่ Stageกด Enter เลือก event statement .typeกด Enter แล้วก็ == 2 ครั้ง กดผิด ๆ ขอโทษ กดเครื่องหมายเครื่องหมายเท่ากับ (=) 2 ครั้ง แล้วก็ตามด้วย pygame module เหมือนเดิม ก็คือ Mouse เหมือนเดิม M เห็นไหม ถ้า Mouse ตัวเล็กมันจะไม่ค่อยขึ้น คำสั่ง MOUSE จะเป็นตัวใหญ่ M แต่เลือกเป็นอะไรคะ BUTTONUP ตัวที่ 2 แทนเห็นไหม Down ตัว กดปล่อยกดปล่อยนั่นเอง ปล่อยเลือกปล่อยแล้วมาเลือกกด เหตุการณ์ในการใช้เมาส์ จะมี 2 เหตุการณ์ กดแล้วก็ปล่อยใช่ไหม กดเพื่อวางแล้วก็ปล่อย เพราะฉะนั้น ในส่วนของตรงนี้นะคะ ถ้าแล้ว แล้วถ้าแล้วก็คลิกเหมือนเดิม พิมพ์คลิก clicked เราพิมพ์ครั้งแรกไม่ขึ้น เราประกาศมันไปแล้ว ประกาศใช้ไปแล้วครั้งหนึ่ง clicked statement ได้เลย กด Enter ไปได้เลย แล้วก็กด = กำหนดค่าให้ Clicked ตัวนี้ต้องเป็นอะไรคะ ตรงข้ามกับตัวแรก มี true แล้วก็ต้องมี false ตัวแรกเป็นจริง ตัวนี้ก็ต้องเป็น Falseพิมพ์ F ตัวใหญ่เลย เพราะเรารู้ว่าคีย์เวต้องพิมพ์ด้วยตัวใหญ่ โอ.เค. ไหม เราจะยังไม่ Run ตอนนี้ มันแค่เช็กเฉย ๆ ว่าเรากด Mouse หหรือปล่อย Mouse แค่นั้นเองนะคะ ตอนนี้เราได้ 2 บรรทัดนี้แล้วเห็นไหมนี่ Mouse จะมี 2 ตัวนี้ BUTTONUP กับ BUTTONDOWN 2 ตัวบน อันนี้อธิบายไปแล้ว สิ่งที่จะทำต่อมา กค็คือข้ามอะไรไป อ๋อ ความจริงแล้วเราต้องไปประกาศตัวแปร clicked ก่อนนะคะ ให้ค่าเริ่มต้นมันเป็น False สิ่งที่เราจะทำต่อไปก็คือไปที่ตำแหน่งที่เราประกาศตัวแปรทั้งหลายทั้งแหล่ไว้ไห็นไหม ไม่แน่ใจเด็ก ๆ ทำ Remark คอมเมนต์ไว้ด้วยหรือเปล่า ที่ไปตำแหน่งที่เราประกาศตัวแปรไว้นะคะ ไปหามันเลยแล้วตัวใช้ ก็คืออะไรคะ Clicked คลิกลงไป กำหนดค่า ก็คือ = ค่าเริ่มต้น เริ่มที่ false นะคะ เป็นเท็จก่อน เป็นเท็จเสมอ จะทำงานเมื่อเป็นจริง พอเข้ามาในนี้เห็นไหมคะ ทำงานเมื่อเป็นจริง เมื่อประกาศตัวแปรไปแล้วสิ่งที่เราสิ่งที่เราจะต้องมาเช็กต่อ ก็คือถ้าปล่อยเมาส์นะคะ มันก็จะเป็นประโยคต่อมาตรงนี้เห็นไหมคะ ปล่อย Mouse แล้ว ค่า clicked เมื่อปล่อยเมาส์และค่าในการคลิกนี่ เป็น Falseตรง Button UpMOUSEBUTTONUP นี่ ค่าในการคลิกจะเป็น True เห็นไหมคะ สลับกัน ก็คือมีเงื่อนไข ที่ผูกผันต่อกันมาให้มันเช็กด้วย ตรงนี้เราเพิ่มประโยคตต่อไป ใช้ an and คือคีย์เวิลด์ กด Enter ได้เลย and clicket แล้วเลือก พิมพ์แล้วเลือก เท่ากับให้ค่ามัน เป็นอะไร False เห็นไหมคะ ตรงตำแหน่ง MOUSEBUTTONUP ก็ and and keyword Enter Space bar ตามด้วย Clicked Clicked stagement ค่าจะตรงกันข้ามเท่ากับ เห็นไหม จะตรงข้ามกัน True true เลือก true คีย์เวิลด์ โอ.เค. แล้วเช็กค่า มันจะทำการเช็กแล้ว เช็กเมื่อมีการคลิกนี่ ถ้าไม่ได้ Click ไม่ได้ ก็คือเห็นไหมคะ ก็คือเป็นการปล่อยเมาส์ แต่ถ้าคลิกนี่เป็นการกด Mouse เเห็นไหมคะ โอ.เค. ไหม ดูตำแหน่งค่าดี ๆ นะคะ ครั้งแรกนี่ เพราะค่าแรกของคลิกนี่ คือ เป็น False ก็คือหมายความว่า ก็คือถ้าปล่อยปุ่มกดก็คือไม่ได้คลิกใช่ไหม ก็คือไม่ได้คลิกเป็นเท็จ ถ้ากดนะคะ ถ้าตัวนี้เห็นไหมคะ ถ้า BUTTONUP ก็คือ เป็นจริง มีการกดเห็นไหม ถ้า แล้ว หรือ นั่นล่ะ แล้ว ถ้าปล่อยเมาส์และไม่ได้คลิกอะไรนี่ ถ้าคลิกก็จะเป็นจริง ถ้าคลิก Mouse ด้วยนี่ ก็จะเป็น จะไม่ทำงานเมื่อเป็น False ก็คือการใช้ IF เงื่อนไขการทำงานก็ต่อเมื่อ ไอ้คำสั่ง คำสั่งหรืออะไรที่อยู่ในนั้นก่อน มันจะไปทำในนั้นก่อน ตอนนี้เรากำหนด Mouse ไปแล้วสิ่งที่เราจะทำต่อไปนะคะ คือ แค่คลิกปล่อยเมาส์นี่ไปแล้ว มันก็ต้องไปรู้ตำแหน่งMouse ที่จะคลิกลงไปนะคะ เราจะใช้การสร้างตัวแปรที่ชื่อว่า pos หรือ position ให้มันรับค่า เห็นไหมคะ Get Post รับตำแหน่ง ค่าตำแหน่งที่เราคลิก Mouse ลงไปนั่นเอง คลิก Mouse หรือปล่อย เพราะฉะนั้น มันจะต่อจากบรรทัดคลิกนี้ พิมพ์ Pos p อันนี้ต้องพิมพ์เอานะคะ p-o-s นี่ พิมพ์ เพราะเป็นตัวแปรที่เรายังไม่ได้ประกาศ ตามด้วยเท่ากับเครื่องหมายเท่ากับเห็นไหมคะ pygame.mouse จะเรียกใช้ MOUSE แล้ว จะเรียกใช้ MOUSE Modune.mouse mouse เล็กนะคะ mModul mouse มาใช้งาน เห็นไหมคะ เลือก Module Mouse moแล้วกด Enter ตามด้วยฟังก์ชัน get_pos () นะคะ dot get เลือก getpos เห็นไหมคะ เลือกฟังก์ชัน get_pos () หมายถึง ฟังก์ชันนี้หมายถึง รับค่า ของตำแหน่งมันสร้างไว้แล้ว เห็นไหมมันจะสร้างไว้ให้ แต่บางฟังก์ชัน นะคะ ใน pygame เขาจะมีที่บอกเป็น Library สร้างไว้แล้ว กับยังไม่สร้าง ถ้าเมื่อใดถ้าเมื่อใดที่สร้างเองเราก็จะรู้สิธีสร้างไปแล้วเห็นไหม เลือก get pos กด Enter กด Enter อย่าลืมบอกว่าเป็นฟังก์ชัน เด็ก ๆ ต้องใส่อะไรคะ เครื่องหมายวงเล็บเสมอเห็นไหมนะคะ ต้องใส่เครื่องหมายวงเล็บเสมอ แค่คลิกที่วงเล็บ วงเล็บน่ะ แค่คลิกที่วงเล็บเปิดวงเล็บปิดจะตามมา เพื่อระบุว่า Get Pos เป็นฟังก์ชันที่เราจะใช้งานนะคะ เห็นไหมคะ จบประโยคที่ get pos แล้วเราก็ไปประกาศตัวแปร Pos โดยกำหนดค่าให้เป็น วงเล็บใหญ่นี้ ก็คือเป็นค่าว่าง หมายถึงค่าในวงเล็บใหญ่นี่ นะคะ เพราะฉะนั้น เราก็จะไปที่ตำแหน่งไหนคะ ประกาศตัวแปรที่ต่อจาก Click มี Click แล้วก็มี pos เลือก pos น่ะ เลือกที่ตำแหน่ง pos เห็นไหมคะ แล้วกด Enter แล้วใส่เท่ากับ สี่เหลี่ยมใหญ่ เห็นไหม ถ้าใส่สี่เหลี่ยมใหญ่ นั่น ก็คือค่าในช่อง ค่าของตัวนี่เป็น None หรือค่าว่างนั่นเอง ได้ค่าว่างของตำแหน่งแล้ว ค่าของ position แล้ว แล้วนะคะ สิ่งต่อไปที่เราจะทำ มันก็จะเช็กสิ เช็กตำแหน่งตามแกน X แกน Y น่ะ ของแกน X หรือ cell_x แกนวายหรือ หรือ Self Y ชื่อว่า Cellx pos ตำแหน่ง pos น่ะค่ะ มีค่าเป็น 0 จากค่าว่างให้ค่าตำแหน่ง X กับ Y ด้วยทีนี้นะคะ ก็จะอยู่บรรทัดที่ต่อจาก pos อยู่บรรทัดอยู่จาก post อันนี้พิมพ์เอา cell เพราะมันเป็นตัวแปรที่สร้างขึ้นมาเอง เพื่อใช้ระบุตำแหน่งของแกน X แกน Y ก็คือพิมพ์คำว่า Cell_x แล้วก็ _ แล้วก็ตามด้วยตัว x อย่างนี้นะคะ แล้วก็กำหนดค่าCell นี้เท่ากับ เท่ากับอะไรลืม = pos ที่มีค่าเท่ากับ 1 นะคะ pos ที่มีค่าเท่ากับ 1 ในส่วนของ cell_x นี่ ถ้าเราพิมพ์ Pos แล้วกด Enter แล้วก็ตามด้วยวงเล็ดใหญ่ ใส่ 0 เข้าไป ใส่ค่าให้วที่ว่างเปล่า กลายเป็น... ถ้าอยู่ในตำแหน่ง x นี่ Pos จะเริ่มที่ 0 มี X แล้วก็มีอะไรคะ Y การพิมพ์เหมือนกัน c-e-l-l ce cell_y นะคะ แล้วก็ตามด้วยเครื่องหมายเท่ากับ แล้วก็เหมือนเดิม พิมพ์ pos เข้าไป pos sแล้วก็ใส่วงเล็บใหญ่ ค่าที่... ไม่ใช่ปีกกา ขอโทษ ๆ เผลอกด Shift วงเล็บใหญ่ แล้วก็ตามด้วยค่าในนั้น ก็คือ 1 เห็นไหมคะ บอกตำแหน่งของ XY แล้ว โอ.เค. ไหมทันไหมแสดงว่าเด็กไม่ได้เปิด ไม่เป็นไร ทันนะคะ ทันอยู่นะ โอ.เค. เราต้องไปต่อนะคะ ไปยังไม่ถึงครึ่งทางเลย สิ่งต่อมา กำหนดตำแหน่งให้ cell_x cell_y แล้ว เราก็มันจะมาเช็กเงื่อนไข เมื่อ Mouse คลิกไปตามตำแหน่ง cell x เมื่อกี้นะคะ โดยใช้ฟังก์ชัน... ใช้ if เหมือนเดิม ใช้ if เพื่อกำหนดเงื่อนไขนะคะ เงื่อนไขอะไร ของตัว marker ของเรา เมื่อ maker อยู่ตำแหน่ง cell_x ตำแหน่งนี้ หรือ cell_x ตำแหน่งนี้จะเท่ากับ ก่อนอื่น ๆ ๆ นะคะ กด Tab ไปให้ตรงกับ cell_x เลือก if ทำไมเป็นตัวใหญ่ if condition เหมือนเดิมนะคะ ทีนี้สิ่งที่เราจะเช็ก ก็คือเช็กอะไร เช็ก markers พิมพ์ Nแล้วเลือก Markers statement เห็นไหมคะ markers ครั้งก่อน markers นะคะ ถ้า markers กำหนดค่าให้นะคะ เช็กค่าแล้ว สังเกตค่าของ position มันจะเป็นนี่วงเล็บใหญ่นี่มันจะเป็น Array นั่นเอง ค่าแบบ Array ค่าแบบอาร์เรย์นะคะ ค่าแบบ 3 มิตินะคะ ก็จะมีแต่ของเราจะมี cell_x cell_y ที่เรากำหนดไว้นะคะ หารด้วย 100 หารด้วย 100 จากจาก 0 นี่ หารด้วย 100 ค่าที่มีนี่หารไปนะคะ พิมพ์ cell_X ขึ้นCell_x เลือกค่ะ cell_x เห็นไหมคะ ขอโทษ ๆ ตอน markers เสร็จแล้วลืม ๆ ลืมไปว่าMarker แล้วพิมพ์วงเล็บใหญ่ก่อน ถูกไหมคะ พิมพ์วงเล็บใหญ่แล้วก็ตามด้วย cell_x ของเรา เห็นไหมคะ เลือก cell_x statement เลือกเห็นไหม cell_x เป็นลักษณะที่เรากำหนดค่าให้เป็น cell_x // 100 แล้วก็ cell_x แล้วก็มี cell_y มี cell_y ใช่ไหมคะ นะคะ วงเล็บใหญ่ แล้วก็ cell_y // 100 เลือก cell_y statement cell_y stagement แล้วก็100 หลัง Markers นี้กำหนดค่าให้ เพื่อเช็กว่าเมื่อเป็นจริงนี่ มันต้องมีค่า = 0 นะคะ ส่วนต่อมา mark ครั้งที่ 1 แล้ว ว่าตอนเช็กนี่มันมีทั้งคนเล่น มีกี่คน มี 2 คนใช่ไหมคะ เพราะฉะนั้น Mark แรก มาดู Mark ที่ 2 เช็ก Mark ที่ 2 ตรง pas ทำเหมือนเดิม ครอบคำว่า past แล้วก็makers แล้วก็เหมือนเดิม เอาให้มันเร็วขึ้น เหมือนกันเลย ใช้วิธี copy markers มาเลยนะ ถึง... ก๊อบฯ มาทั้ง... copy เลยนะ เพราะค่าเดียวกันแต่เปลี่ยนตรงค่าตรงนี้เท่านั้นนะคะ ตำแหน่ง markers จะเคลื่อนมาหน่อยหนึ่งนะคะ จะอยู่ไม่เท่ากัน วิธีการก็คือปุ๊บอยู่ตรง cas ที่เราว่าที่เราว่าแล้วก็กดวางได้เลยไหมตคะ ทีนี้ค่าตรงนี้ เอา 0 ออก เอาค่า 0 ออก ค่ามันต้องเป็นคนละค่า ค่าตรงนี้จะเป็นอะไร บอกแล้วว่าการ Mark คนเล่นมี 2 คนใช่ไหมคะ เคนแ่คนที่ 1 mark ไปแล้ว เพราะฉะนั้น ก็ต้องเช็กว่าผู้เล่นคนที่ 2 เล่นหรือยัง เพราะฉะนั้นสิ่งที่เราจะทำก็คือเป็นการไปประกาศัวแปร Player ของผู้เลกำหนดค่าให้ผู้เล่นเริ่มที่ 1 ก็คือผู้เล่นคนแรกก็คือ Player 1 ตัวแปรก่อนนะคะ เพื่อจะรู้ว่า player เราเป็น player แบบไหน เราก็จะไปที่ตำแหน่งการประกาศตัวแปร ก็คือที่อยู่ต่อจากตรงนี้ Pos จะประกาศตัวแปร player สร้างตัวแปรขึ้นมาเอง p-l-a-y-e-r player แล้วก็ตามด้วยเครื่องหมายเท่ากับที่เราให้ ก็คือคนที่ 1 ก่อน เริ่มที่คนที่ 1 เมื่อประกาศตัวแปรเสร็จ ทีนี้ตรงตำแหน่งนี้เราก็มาเรียกใช้ ตัวแปรนั้นได้เลย เพราะสิ่งที่เราต้องใช้เราจะต้องเเราจะเลือก player ที่ mark นี่ เพื่อเช็กว่าไอ้ที่ mark นี่เป็น Player คนที่ 1 หรือคนที่ 2 = ที่เราใส่ไว้เป็น 0 น่ะ แก้เป็น แล้วพิมพ์ p เลือก player statement ของเราลงไป อย่าลืมเอา Colon จะไม่เว้นวรรคอย่างนี้นะคะ เราจะได้ตัว mark สำหรับเช็กผู้เล่นคนที่ 1 คนที่ 2 แล้ว ถ้าผู้เล่น Mark นี่อะไรจะเกิดขึ้นนะคะ เดี๋ยวจะลอง Run ดูแล้วใกล้แล้ว เนื่องจากตรงนี้มีต่อ เมื่อมันเช็ก Player นี่ เห็นไหมคะ player *=-1 มันจะต้องไปเช็กก่อนว่า player ที่เข้ามาเป็น player ที่เท่าไร เพราะฉะนั้น พอมี Statement นี้ statement นี้มีเงื่อนไขเราจะลบ : ออก แล้วก็พิมพ์การเช็กค่าครั้งต่อไปเข้ามา player พิมพ์ P ปุ๊บ เลือก Player ใส่เครื่องหมาย * หรือคูณ = 1 เห็นไหมคะ ก็คือมันจะทำการคำนวณว่า player คนที่เท่าไร 1-1 ก็คือ 0 ค่าเริ่มต้น คือ 1 อย่าไปสนใจให้เครื่องมันคำนวณไป เเราไม่ต้องไปสนใจมัน โอ.เค. ไหมคะ อธิบายแล้วจะงงเข้าไปใหญ่ เพราะฉะนั้นตรงนี้คือการคำนวณของมันน่ะ เสร็จแล้วเราจะไปลบคำสั่ง print marker ที่เรา Printmarkers ของเราออก เพราะว่าเราจะไม่ใช้ตัวนี้แล้ว เพราะเดี๋ยวเราจะสร้าง markers ที่เป็น... เพราะคราวที่แล้วเมาส์มันเลื่อนไปแล้วมีตำแหน่ง marker เพราะขั้นต่อไปเราจะสร้าง markers ที่เป็นตัว X กับตัว O ขึ้นมาเพราะฉะนั้น เราจะลบตัวนี้ออก เราก็จะไปที่คำสั่ง print_markers แล้วลบคำสั่งมันออกนะคะ มันก็อยู่นี่ อยู่ตรงเงื่อนไขนี้ ให้เด็ก ๆ ไปที่ตำแหน่ง print_markers แล้วลบเลย กดทำแถบครอบทั้งหมด แล้วก็ Delete ได้เลย ลบออกได้เลย เราไม่ใช้แล้วก็จะลบออก โอ.เค. ไหม ลบหรือยัง หาเจอหรือเปล่า ถ้าหาไม่เจอ มันจะมีวิธีให้ค้นหาอยู่ที่แถบเมนูที่ว่า Fileเห็นหรือเปล่าคะ แล้วกดคำว่า "Find" มันจะมีให้เราหาคำว่า "mark" เดี๋ยว... ดูนะคะ เราจะหาคำว่า "print" เห็นไหมคะ Print_markers นี่ถ้าใช้ Find นี่มันจะไปตำแหน่งนั้นให้ พอเราเจอแล้วเราก็ลบออกได้เลย ใช้วิธีค้นหาได้ ใน Coding บางทีให้นึกถึงเวลา Code จริง ๆ นี่ยังเยอะกว่านี้นะ อันนี้ยังถือว่าแค่ 100 กว่าบรรทัด ถือว่าน้อย เพราะฉะนั้น ก็ใช้ Menu file ให้เป็นประโยชน์ นะคะ ช่วยค้นหาคำในเครื่องนี้ได้นะคะ เพราะฉะนั้น ถ้าจะไปตำแหน่งไหนใช้ตัวนี้ช่วยก็ได้ ถ้าไม่ใช้ก็ปิด เราลบ print marker ไปแล้ว สิ่งที่เราจะทำต่อไปก็คือเราจะมาสร้าง ขอโทษ สร้างฟังก์ชัน draw_markers จะวาดตัว markers เรานั่นเองนะคะ มาดูกัน ฟังก์ชันนี้ มันก็อยู่ตำแหน่งที่เรา ตำแหน่งที่เราลบ print_markers นะคะ อยู่ตำแหน่งนี้เลย Enter ไป 2 ที แล้วก็ใส่ Hashtag (#) เข้าไป แล้วก็บอกว่าเราจะสร้างอะไรคะ แล้วก็บอกว่าเราจะสร้างอะไรคะ บอกไปเลยว่าเราจะสร้างฟังก์ชันที่วาดตัว X หรือตัว O ของเราเองนะคะ คำสั่งในการ สร้าง function ก็คือ De ใช่ไหม เลือก def แล้วก็ตามด้วยชื่อฟังก์ชันที่เราจะสร้าง ก็คือ d-r-a-w Draw ตามด้วย Underscoll _m-a-r-k-e-r-s draw_markers เพราะมีตัว X กับตัว O ก็เลยใส่ S เข้าไปเข้าไปนะคะ ตามด้วยการระบุตำแหน่งของ markers ของเราเองนะคะ เพราะเมื่อจะสร้างมันก็ต้องอบกตำแหน่งที่มันจะสร้างใช่ไหม pas ลบออกแล้วก็ใส่ x นะคะ ตำแหน่งแรก คือ x x statement มันหามาให้แล้ว เท่ากับ= x หรือ y นะงง x pos เราใส่ไป x pos นี่ เอาใหม่ ๆ ตำแหน่งที่เราประกาศ x_pos pos หายไปไหน อ๋อ x_pos เรายังไม่ได้ใส่ใช่ไหม x_pos=ค่าเริ่มต้น คือ 0 เสมอ เห็นไหมคะ ตำแหน่งของแกน x เริ่มที่ 0 เสมอ เสร็จแล้สก็ทำ loop for x in markers สำหรับ x ใน markers นี่นะคะ นะคะ พิมพ์ for เลือก For Loop กด Enter เลือก X ตามเขาเลย แต่ in เปลี่ยนเป็น... อันนี้เปลี่ยนจาก x range เป็น markers ของเรานะคะ เลือก markers statement ของเรา แล้วก็ตามด้วยอไร เครื่องหมาย colonนะคะ เพราะอะไร เพราะ markers ที่เราทำไว้ มันเป็นการระบุตำแหน่งหรือค่าไว้แล้ว ก็คือเป็นค่าว่าง เราเรียกใช้มันมา ก็คือเมื่อสำหรับแกน x นี่ ใน markers นี่นะคะ สิ่งที่เราจะกำหนดต่อไปเงื่อนไขนี่ใน loop นี่ มันต้องตาม loop เมื่อเช็กแกน x แล้วก็ต้องเช็กแกน y เห็นไหมคะ Y pos ช่องตารางที่เคยบอกน่ะ มันต้องเริ่มจาก 00 x0 y0 เสมอนะคะ เพราะฉะนั้น y_pos ของเราก็ = 0 เหมือนกัน Y_pos ตัวแปรนี้ตัวแปร มีค่าเท่ากับ 0 นะคะ เด็ก ๆ ดูตำแหน่ง tab ดี ๆ ด้วยนะ นี่เห็นไหม แถบมันจะเยี้องไป ไปนะคะ มันจะไม่อยู่ตรงกันนะ เพราะมันเป็น loop ในแถว x คือแถวใช่ไหม ต่อไปเราจะทำ loop ใน y for y in x: ก็คือคอลัมน์ตามแถวไปที่ ไปตามนี่นึกออกนะ นี่คือแถว มันจะเช็กไปตามแถวก่อน แล้วค่อยคอลัมน์ในแถวที่ 1 แถวที่ 2 อย่างนี้ไล่ไป คอลัมน์นี้แถวนี้ ๆ ไปตามคอลัมภ์แถวก็ใช้ for loop เหมือนเดิม for loop เปลี่ยนจาก x เป็น y in อะไรคะ in x เอาค่าออก เขากำหนดค่า x แล้วนะ ว่าเป็นเท่าไรเห็นไหมคะ พอ y in x ทีนี้มาเช็ก มาเช็ก loop แล้ว เริ่มจะเช็ก loop แล้วว่าค่า y = 1 เกิดมาร์กลงไปในตำแหน่งนี้ปุ๊บ นะคะ สมมต ๆ ก็คือให้เงื่อนไข if สร้าง if condition ขึ้นมา if y เท่ากับ =1 เราจะมีเงื่อนไขเพื่อตรวจสอบแล้ว เมื่อ y = 1 อะไรจะเกิดขึ้น สิ่งที่จะทำต่อมา เราจะไปกำหนดค่าสีสีที่เราจะใช้ ก็คือสีเขียวกับสีแดง โดยที่สีเขียวจะไว้สร้างตัว X นะคะ สีแดงจะไว้สร้างตัว O green จะสร้าง x Red จะสร้าง O ขึ้นมา ทีนี้ไปตำแหน่งที่ประกาศตัวแปร เพื่อประกาศตัวแปรให้กับสี เห็นไหมคะ สีเขียว สีแดงของเรานั่นเอง มันเป็นตัวแปรนะคะ พิมพ์เอาเองใส่เครื่องหมาย = ใส่ค่า ค่าสีนี้มันจะใส่ตามแนวไอ้นี่ ตอนที่ Run อยู่ไหนนะ แนวไปตามแนวน่ะ แนวเส้นที่เราสร้างนี่ล่ะ แนวตารางที่เราสร้างนี่ล่ะนะคะ ก็คือเริ่มที่ 0 0 แล้วก็เต็ม... ไม่เต็มพื้นที่มาก 255 ให้มันใส่ค่าอยู่ เพราะพื้นที่ของ Screen เราคือ 300 เต็ม 300 อยู่แล้วนะคะ แล้วก็ 0 จะมี 2 ค่า ต่อไป สีแดง red Red= ประกาศตัวแปร Red red = ค่าสีจำสลับนะ เห็นไหม สีเขียว 0/550 สีแดง 255, 0, 0 วงเล็บนะคะ (255 แล้วก็ 2550เพราะอะไร เพราะมันมี 3 คอลัมภ์ 3 แถว ค่ามันก็เลยไปตามคอลัมน์ 3 แถวนั่นล่ะ ที่ขึ้นนั่นล่ะ เห็นไหมคะ ได้ตัวแปรสำหรับสีเขียวสีแดงแล้ว สิ่งต่อไปที่เราจะทำ การวาดตัว X นะคะ คำสั่งที่ใช้วาด ก็คือ pygamne.draw.line ก็คือคำสั่งวาดเส้น มาดูรูปแบบรูปแบบ ประกาศสีก็ใช้แล้ว ตรงนี้นะคะ ตรง pos เราลบ ว่า py... Mod .draw module d ปุ๊บ เลือก modune . ฟังก์ชันที่ชื่อว่า line แบบไม่มี S นะ นี่ มันมี 2 ลาย line ที่เราใช้ line ตัวแรก เราจะระบุค่าใน line ระบุค่าเส้นนั่นเองนะคะ ดูนะคะ ค่าเส้นที่จะระบุ เราต้องบอกตำแหน่งก่อนว่าในหน้าจอนี้ ในหน้าจอนี้เห็นไหม เราต้องเรียกหน้าจอนี้ขึ้นมาด้วยนะคะ เพราะมันจะได้วาดลงไปถูกว่ามันจะวาดลงตรงไหน ก็เลยเรียก Screen line นะคะ ตามด้วย screen ก่อน เห็นไหมคะ เลือก Screen Statement แล้วก็ตามด้วยComma (,๗วรรค แล้วก็ตามด้วยสีที่เราใช้วาด ก็คือ Green Green ของเราก็คือ Green Statement นั่นเอง ก็คือวาดตรงไหน ระบุพื้นที่เห็นไหมคะ ที่เราทำไว้ นี่ ๆ ๆ นี่ นี่ Screen= ก็คือตัวนี้ที่กำหนดจากตัวนี้ขึ้นมานะคะ ก็ไปเรียกใช้มันนะคะ แล้วก็ตามด้วยสี ตัวแปรสี เสร็จแล้วตามด้วยอะไร ตามด้วยตำแหน่งเห็นไหมคะ ตำแหน่งเกน x แกน y เห็นไหมคะ ตำแหน่งแรกดู เพราะเวลาตัวนี้มันไล่มันไล่จากใส่ colon ใส่ Comma (,) แล้วก็ตามด้วยเครื่องหมายวงเล็บ ZXใส่วงเล็บก่อนนะคะ เห็นไหมคะ เพราะในนี้ตำแหน่ง x_pos เลือกตำแหน่ง x_pos นะคะ ตำแหน่งของแกน X ตำแหน่งของแกน x ของเราจะเริ่มที่... คูณ 100 + 15 เลยก็ไม่ได้ มันต้องไปทำการคำนวณก่อน เพื่อลดค่าความคลาดเคลื่อนต่าง ๆ ของมันนะคะ ตำแหน่งนี้ก็คือ ตำแหน่งของ X pos เราเริ่มที่ 0 ให้ X_pos ไป * 100 วรรคนะคะ กด spacebar แล้วก็กด 100 แล้วก็กด Space Bar อีกหนึ่งครั้ง วรรคแล้วก็กด + แล้วก็วรรคตามด้วย 15 เดี๋ยวให้ดูตำแหน่ง ให้ดูตำแหน่งอีกทีหนึ่ง ให้นึกถึง เห็นไหม ตำแหน่ง Y 0 X เริ่มจาก คือ แกนนี้ คือ แกนนอน x0 y0 เพราะฉะนั้น x เริ่มที่นี่ x_pos = X pos= x_pos คือ x_pos * 100 /15 ก็คือมันจะได้ 115 นั่นเอง จะเริ่มจากจุดนี้ 115 ใช่ไหมคะ x_pos ทีนี้มันจะได้แค่จุด แต่ถ้าลากเส้นมันต้องต้องเพิ่มตำแหน่งของแกน y ด้วย เมื่อบอก x ไปแล้วมันก็ต้องมาบบอก y_pos ถูกไหมคะ ก็พิมพ์ Y แล้วเลือก y_pos ก็เป็นคุณเหมือนกัน คูณ ใส่ * spacebar แล้วก็ 100 แล้วก็ + Space Bar + 15 ตำแหน่งเดียวกัน ก็คือเริ่มบรรทัดที่ 115 คอลัมน์ที่ 115 นี่ดูตำแหน่งนะคะ เริ่มจากจุดนี้ เสร็จแล้วให้มันลากมาจากนี้ เพราะฉะนั้น มันก็ต้องเพิ่ม... ก็คือ วงเล็บแรกของเส้น ของเส้นใช่ไหมคะ เพราะฉะนั้น เราจะเพิ่มอีก วงเล็บที่ 2 เห็ฯไหมคะ ก็คือจุดสิ้นสุดของเส้น รูปแบบคำสั่ง line จะบอก... อันนี้วงเล็บแรกนี่คือจุดเริ่ม เพราะฉะนั้นใส่colon แล้วก็ตามด้วยวงเล็บที่ 2 ก็คือจะบอกตำแหน่งของจุดสิ้นสุดของเส้น ก็เหมือนกัน ก็ต้องเริ่มที่ X pos นะคะ สังเกตที่ตำแหน่งที่ 2 ดี ๆ เห็นไหมอยู่ที่ 100 เท่าไร ไม่ถึง 200 ก็เลยบอกว่า อยู่ที่ 185 เพราะไม่ให้ขีดเต็มจอ ถ้าขีดเต็มจอ ก็คือ 100-200 ใช่ไหมคะ นึกออกนะ ถ้าขีดเต็ม ถ้าไอ้นี่เลื่อนไปเต็ม ชิดช่องเลย แต่เราไม่เอาเต็มช่อง เว้นพื้นที่ไว้ให้มัน 15 ช่องไฟ ก็คือ 85 นั่นเองนะคะ เพราะฉะนั้นตรงตำแหน่งสิ้นสุดจะเป็น x_pos= * * spspacebar 100 spacebar +85 เพราะฉะนั้น y ตำแหน่ง y_pos ก็ต้องเป็น Star 100+85 เหมือนกันนะคะ ทีนี้ที่ใส่ต่อจากตัวนี้ line y line width เราเคยประกาศความกว้างของเส้นไปแล้ว ไว้ไปแล้วตอนต้นเห็นไหมคะ ให้มันกว้าง 5 นะคะ เพราะฉะนั้น คือ เรากลัวเส้นที่วาดออกมาเล็กไง เพราะเราก็เรียกใช้มันได้เลย เพราะเรามีแล้ว เราก็ตามด้วยความกว้างของเส้น สร้างของเส้น ก็คือพิมพ์ line_width stetment เห็นไหม ตัวแปรที่เราประกาศใช้ไปแล้ว เลือกมา ได้เลย นั่นคือ เส้นที่ 1 ใช่ไหมคะ เส้นที่ 1 เพิ่งได้เส้นเดียว เพราะฉะนั้น เส้นที่ 2 Copy เลย แล้วค่อยมาเปลี่ยนค่าเอา ไปให้สุดนะไปจนถึง line y เลยนะคะ copy เลยนะคะ copy ตั้งแต่ pygame ไป Copy ได้เลย แล้วก็กดวางแล้วก็กดวางได้เลย สิ่งที่เราจะมาเปลี่ยน ก็คือค่าในตำแหน่งแกนอะไรคะ ปรับให้มันจรTab ให้มันตรงนะคะ เปลี่ยนค่าในแกนอะไรมาดูกัน นี่ x ใช่ไหม นี่คือเส้นที่ 1 ดูเส้นที่ 2 เส้นที่ 2 ค่าเริ่มต้น มันเริ่มจากมุมนี้มานี่เห็นไหมคะ เพราะฉะนั้น แกน x เท่าไร เท่าเดิม แต่แกน x แกน y เปลี่ยนใช่ไหมคะ เพราะฉะนั้น เราไปดูตำแหน่ง y_pos 15 ไม่ได้ แต่ y_posตรงกับตำแหน่งของตัวนี้ เห็นไหมคะ ก็คืออะไรคะ ตำแหน่งนี้ คือ 80 เท่าไร 85 นั่นเองนี่เห็นไหมตำแหน่งมันตรงกัน เพราะฉะนั้น เปลี่ยนตรงนี้เป็น85 เราเปลี่ยนที่ y_pos นะคะ แล้วตรงนี้ 85 เปลี่ยนเป็น 15 ถูกต้องไหม เพราะนี่คือตำแหน่งที่ ลงมานี่ เห็นไหมคะ ตำแหน่งที่ลงมานี่ ลงมานี่ y เราอยู่ที่ 15 เห็นไหมคะ ดูแกนนะคะ แกน y คือ แนวนี้ แนวตั้งนี่ เพราะฉะนั้นจะ 18 โอ.เค. ไหม เช็ก เช็กอย่างไร ดูตัวบนกับตัวล่าง เห็นไหมคะ ตำแหน่ง y ดูที่ตำแหน่ง y เท่านั้น y pos ตำแหน่ง 15 แต่อันล่างต้องเป็น 85 อันนี้ก็เหมือนกัน สลับนะคะ สลับนะคะ โอ.เค. ไหม เปลี่ยน 2 ตำแหน่งนี้เท่านั้นหรอกได้ตัวแกน X แล้ว แก้แล้วนะ ไม่เป็นไรถ้าใครไม่แก้เดี๋ยวตอน Run ก็รู้ วาดออกมาเป็นอะไร เดี๋ยวก็เห็นเอง เดี๋ยวก็เห็นผลเอง ไปต่อ ได้แกน X แล้ว ต่อไป ได้ตัว x แล้วต่อไปเราจะสร้าคำสั่งในการวาดตัว O ก็คือ circle เห็นไหมคะ pygame.drawแต่ค่าในตัว o จะมีแค่ ให้นึกถึงการวาดวงกลม วงกลมา ก็คือตำแหน่งจุดศูนย์กลางใช่ไหมคะ แล้วก็ตำแหน่ง แล้วก็ค่าของศูนย์กลางนะคะ อันนี้ คือ ค่าของจุดศูนย์กลางใช่ไหม เวลาวาดวงกลมจะวาดจากจุดศูนย์กลาง ให้นึกถึงวงเวียน ถูกไหมคะ วงเวียนแล้วก็ไอ้ตัว รัศมีวงเวียน จุดกึ่งกลางแล้วมาวนรัศมีกว้างเท่าไหน วงกลมมันก็จะมีขนาดกว้างตามรัศมีนะ โอ.เค. นะคะ มาดูกัน เมื่อกี้เราได้อะไรแล้วนะ ก็จะเป็นเงื่อนไขที่ 2 นะคะ เงื่อนไข ที่ถ้าไม่ใช่ผู้เล่นคนที่ 1 ผู้เล่นคนที่ 1 วาด X ผู้เล่นคนที่ 2 วาด o เพราะฉะนั้นเห็นไหมคะ กำหนดเงื่อไขตรง ตรง ตรงกันเลย statement if while อันแรก Tab ไปให้มันถึง if เห็นไหมคะ ให้ตรงกัน สังเกต tab ด้วย ต้องตรงนะคะ แล้วก็เปิด if condition Enter เหมือนเดิม พิมพ์ py เลือก pygame นะคะ เลือก moduleตามด้วย .doll draw module circle ฟังก์ชัน circle เห็นไหมคะ cercle บอกแล้วเมื่อเป็นฟังก์ชันให้ใส่วงเล็บเสมอ ทีนี้เหมือนเดิม เหมือน line น่ะเห็นไหม ผิด ๆ ยังไม่เริ่ม อันนี้ต้องเช็กก่อน ไอ้นี่เอาไว้ข้างล่าง if ตามด้วย while while statement ทำไมได้โดน y_pos นะ เราเลือก width statment นะ = อันแรกเป็นที่ 1 ก็คือไม่ใช่คนที่ 1 น่ะ ไม่ใช่ตำแหน่งที่ 1 เขาเป็นตำแหน่งที่ 2 นะคะ เหมือนเดิม : ตกลงไปแล้ว ดึงขึ้นมาก่อน เราเอา past ออกนะคะ เราเอา past ออก ตำแหน่งก็จะคล้าย ๆ กัน เห็นไหม pygame.draw.circleเหมือนกัน screen นะคะ screen statement เหมือนกัน แต่สีของเราเป็นอะไร บอกแล้วว่า ตัว o เป็นสีอะไรคะ สีแดงใช่ไหมคะ เพราะฉะนั้น ตัว O ก็ต้องเป็น Red นะคะ กำหนดสีให้เป็น red r-e-d เลือก นะคะ ตามด้วยค่า ก็คือเปิดวงเล็บ () วงเล็บเปิดปิด ค่าในตัว O ก็คือแกน x ก่อนเสมอ เลือก X pos x_pos กำหนดค่าจุดศูนย์กลางให้เริ่มที่ในรูป เริ่มที่เท่าไร ประมาณ 100 เห็นไหมคะ * 100 + 50 ครึ่งหนึ่งของ ตรงกลางของ เห็นไหมให้มันอยู่ตรงกลาง ก็คือ 150 นั่นเองนะคะ ให้อยู่กึ่งกลางมันก็อยู่ที่ 150 ให้อยู่กึ่งกลางมันก็อยู่ 50 นั่นล่ะ 150 x_pos ก็ใช้เหมือนเดิม เอ้ย * 100 + 50 ตำแหน่ง y_pos ก็เหมือนกัน ก็จุดศูนย์กลาง เริ่มที่จุดศูนย์กลางนะคะ เริ่มที่จุดศูนย์กลางเหมือนกัน ก็เริมก็เลือก y_pos *100 + 50 เหมือนกัน มันถึงจะเป็นตำแหน่งมันถึงจะเป็นตำแหน่งตรงนี้ จุดศูนย์กลางตรงนี้เห็นไหม เพราะหลักการวาด วงกลมให้นึกถึงตอนเราใช้วงเวียนวาด เอาขาวงเวียนเป็นจุดศูนย์กลางนะคะ ไอ้ตรงเหล็กน่ะมันจะเป็นจุดศูนย์กลางที่วางไว้ แล้วไอ้ตรงขามันที่เรากางออกไปน่ะ คือ รัศมีวงกลมน่ะ ก็จะทำให้วงกลมพอหมดรอบ วงกลมมันก็มันก็จะมีรัศมีตามที่กำหนดนะคะ เมื่อกี้ได้ตำแหน่งจุดศูนย์กลางแล้ว ก็คือ คือ ลองแล้ว 38 นี่นี่วงกำลังสวย คือเยอะกว่านี้มันจะคับนึกออกนะ ก็เลยได้ค่ามาที่ 38 นะคะ คือ ลองมาให้แล้ว เพราะฉะนั้นเวลาเราไปทำเราไปวาดเอง ก็ให้ดูรัศมีเท่านี้พอดีไหม ถ้าไม่พอดีเราก็ขยายเพิ่มได้นะคะ ขยายเพิ่มได้อะไรอย่างนี้ นึกออกนะคะ ตามด้วย ให้ไปหลังวงเล็บแล้วบอกค่ารัศมีใส่ colon ซึ่งที่กำหนดของช่องตารางนี้ ก็คือให้ที่ 38 นะคะ แล้วก็บอกอะไรอีก บอกความหนาของเส้น ก็เลือกใช้ line_width นะคะ อันนี้คือบอกค่ารัศมี 38 นี่ บอกค่ารัศมี 38 นี่ ก็คือ รัศมีของวงกลมนะคะ แล้วก็ line while ก็คือบอกความหนาของเส้นที่บอกไว้เห็นหรือเปล่า ได้ตัว O จะบอกว่าวงกลม ก็คือตัว X วงกลมวาดนั่นเองนะคะ ทีนี้ก่อนมันจะทำ เราจะต้องปิด loop เสียก่อน เราเปิด for ไปกี่อัน เปิด for ไป 2 อันใช่ไหม เปิด for x เพราะฉะนั้น ปิดมันด้วยครับ ปิดมันด้วย เห็นไหมคะ พอเปิดไปแล้วนี่ Loop เราน่ะ เราก็ต้องปิด ปิดด้วยตำแหน่ง ปิดด้วยค่า ก็คือทำให้ loop มันวนรอบเพิ่มขึ้นไป เพิ่มทีละ 1 นะคะ เพิ่มทีละ 1 เพราะฉะนั้น บรรทัดใหม่ ตำแหน่งดูตำแหน่งนะ loop แรก อยู่ตรงกับ flour แรกนะคะ for แรกก็คือตัวนี้เห็นไหม นี่ ๆ ๆ นี่ ๆ for ตัวนี้เลย นี่อยู่ตำแหน่งของ y ของ for y นี่นะคะ X ตัวนี้ ดูนะคะ ดูตำแหน่งดี ๆ tab ไปหน่อยเกิน เพราะฉะนั้น y_pos ตัวนี้ก็คือ y_pos ไม่ใช่เท่ากับ + เท่ากับ เครื่องหมาย + ใส่เครื่องหมาย = ครั้งละ 1 ก็เลยใช้ += ใน python นะ เพิ่มขึ้นครั้งละ 1 แต่อันนี้จะเป็น +เท่ากับ 1 ทีนี้ loop ที่ 2 มันจะตรงกับ x นี้ เห็นไหมคะ x ตัวนี้ for x ตัวนี้เห็นไหม ตรงนี้ก็จะเป็น x_pos เหมือนกันเท่ากับ += 1 เหมือนกัน ก็เพิ่มทีละ 1 เพิ่มทีละ 1 วนไปรอบที่ 1 โอ.เค. นะ ดูตำแหน่ง บอกแล้วว่าเวลาทำ loop ดูตำแหน่ง loop พอจะปิดตำแหน่ง loop นะคะ มันจะตรงกับตัวแปรที่ตั้ง เพราะไม่อย่างนั้นเดี๋ยวพอเรากด Ctrl+B แล้ว tab erroไม่ถูก เพราะมันไล่ไม่ถูกว่าไปปิดตรงไหนมันไปปิดตรงไหนนะคะ จากนั้นเราเสร็จแล้วเราทำ function draw_marเพราะฉะนั้น เราจะต้องมาเรียกใช้มัน เรียกใช้ตรงไหน ตรงตำแหน่งที่เรา Run เห็นไหมคะ เพราะฉะนั้นก็มาเรียกใช้งาน มันก็จะเรียกใช้งานเรียกใช้ draw_markers วd-r แล้วก็เลือก Draw marker ฟังก์ชันของเราเลย อย่างลืมใส่วงเล็บไม่อย่างนั้นมันจะไม่รู้ว่าเป็นฟังก์ชันไง จะต้องใส่ต้องใส่วงเล็บให้มันทีหลังนะคะ เสร็จแล้วลองกด Ctrl+B เพื่อทดสอบเดี๋ยวขอปิดตัวที่ทดสอบไว้ตอนแรกเสร็จแล้วนะคะ สำหรับการสร้างแล้วลอง Run ดู โดยกด Ctrl กับ B คลิกสิ X ขึ้นไหม ไม่ขึ้น อะไรหายไปmark ยังไม่ขึ้น ขาดไปตำแหน่งไหนล่ะนี่ ขาดไปตำแหน่งไหนล่ะนี่ Error ยังไม่ขึ้น ยัง Run ไม่เสร็จ เดี๋ยวไปต่อได้ แต่ดูว่าที่เราเช็กมันยังไม่วาด เลือกใช้แล้ว draw_markers ของใครขึ้น Attribute เช็กบรรทัดครับ บรรทัดที่... ค่าอันนี้หรือเปล่าค่าคลิกนี่หรือเปล่า ค่าคลิกถูกต้องไหมเห็นหรือเปล่า เช็กค่าด้วย ค่ามันจะส่งสลับกันไปสลับกันมาน่ะ เช็กดี ๆ ด้วย อือสลับค่าด้วย เดี๋ยวไปต่อ เดี๋ยวไปต่อ ต้องต่อไม่อย่างนั้นมันไม่ขึ้นไง มันไม่ขึ้น มันจะแค่มาร์กไว้ใช่ไหม มันยังไม่โชว์อะไรหายไป เอา ๆ อะไรกัน เมื่อให้มัน mark แล้ว ทีนี้จะมาสร้างฟังก์ชันเพื่อจะเช็ก เช็กว่าใครเป็นคนชนะ นี่นะคะ XO ลงไปแล้ว เมื่อมันครบ 3 น่ะ ถ้ามันเรียงครบนี่ มันก็ต้องมีคนชนะล่ะ เราก็จะมาหาคนชนะกัน เราก็เลยจะมาสร้างฟังก์ชันที่ชื่อ check winner เราต้อง code ให้เสร็จก่อน แล้วค่อยนั้นมา Coding ก่อน Error อยู่ตรงตำแหน่งไหน ที่เราสร้าง draw_markers () แล้ว เห็นไหมคะ เราก็ไปต่อเลยนะคะ นะคะ ตรง draw_markers ตรง 2 พิมพ์ Comment ว่า สร้างฟังก์ชัน check_winner หาคนชนะ ใช้ Check ใช้ check เล็กนะคะ เริ่มที่ตัวแรกเลย de-ed-e เลือก... ทำไมไม่ขึ้นdef ไม่ขึ้น Enter แล้วก็ใส่ชื่อฟังก์ชัน ใส่ฟังก์ชัน check_winner ลงไป เสร็จแล้วทำ Loop ว่าถ้า X นี่ใน มาร์ก มีค่าเท่านี้ เห็นไหมคะ 3 ครั้งนี่ ผลรวมของ X เท่ากับ 3 ก็คือmark ลงไป 3 ครั้ง ว่าอย่างนั้นเถอะ winner จะเท่ากับ 1 คือคนที่ 1 แล้วเมื่อจบเกมนี่ค่าจะเป็นจริง ค่ามันก็จะเป็นจริง ก็คือ Game over ตรง pos นะคะ ใส่ for loop นะคะ ใส่ for loop ค่ะ x เห็นไหมคะ โดยค่า x ของเราใน markers ใน markers x in ตรงนี้เปลี่ยนเป็น markers แทน เลือก marker statement markers มีค่าเท่ากับ ส้า xx ในใน markers มีการ x ลงไปนี่ นี่ X ใน marker นี่ ตรงนี้เงื่อนไขก็จะมาตรวจสอบว่าเลือก ผลรวม sum ก็คือมาจากคำว่า "ผลรวม" นะคะ เลือกใช้ ฟังก์ชัน sum เลือก sum ฟังก์ชั่น ใส่วงเล็บเปิดปิดเหมือนเดิม () sum sum อะไร เรานั่นเองนะคะ Sum ของ X เท่ากับอะไรคะ 3 ก็คือผลรวมของ x นี่ได้รับ ได้ 3 ปุ๊บ นะคะ เราก็บอกเลยว่า เราก็บอกเลย winner ประกาศตัวแปร winner เลย winner อันนี้ต้องพิมพ์เองนะ winner แล้วก็ตามด้วยเครื่องหมายเท่ากับ นะคะ ตัวแปร Winner มีค่า = 1 เห็นไหมคะ แล้วก็เมื่อครบ 3 นี่เมื่อครบ 3 นี่ ถ้า x มันครบ 3 เพราะฉะนั้นคนนี้คือชนะ ถึงว่าจบเกม เพราะว่ากา x เรียงมันครบ เรียงกันครบ X หรือ O เรียกกันครบนี่ ก็คือมีคนชนะแล้ว เรียงครบ 3 อัน คนใดคนหนึ่ง คนใดคนหนึ่งนี่ คนที่กาด้วย x หรือ กาด้วย o น่ะ mark ด้วย x หรือ mark ด้วย 0 นี่ จบเกม เพราะฉะนั้น เลยสร้างตัวแปรชื่อว่า game_over อันนี้พิมพ์เอานะคะ _ พิมพ์ Game ตามด้วย _ o-v-e-r game_over ก็คือจบเกม เท่ากับ True เช็กด้วยว่าเป็นจริงหรือเท็จ ใช้ true กับ false ก็คือถ้าอย่างนี้แสดงว่าจบเกม ก็คือเป็นจริง ก็คือหมายถึงจบเกมทีนี้Loop แรกนี่เช็กจากแถว เช็กจากแถวแล้วนะคะ เราต้องมาประกาศตัวแปรให้ winner กับ game_over เห็นไหมคะ ก็คือ winner โดยมีค่าเริ่มต้นที่ 0 นะคะ ไปประกาศตัวแปรให้ 2 ตัวนี้ ตรงนี้นะคะ ประกาศตัวแปรชื่อว่า "winner" มีแล้ว คลิกได้เลย เท่ากับค่าเริ่มต้นของ winner คือ 0 เริ่มที่ 0 Game Over แล้ว เลือกได้เลย เลือก game_over มาได้เลย แล้วก็ให้ค่าเริ่มต้นเป็น False ที่เช็กเป็น true เพราะฉะนั้น ค่าเริ่มต้นของ game_over จะเริ่มที่ False เสมอ เพราะมันยังเล่นอยู่เสมอนะคะนะคะ เมื่อประกาศตัวแปรเสร็จมาทำเงื่อนไขต่อ loop ที่ 1 แล้ว ก็จะเป็น Loop ที่ 2 เห็นไหมคะ เงื่อนไขนี้ ถ้าไม่ใช่คนที่ 1 ถ้าไม่ใช่คนที่ 1 winner คนที่ 2 winner 2 ก็เหมือนกัน Copy ก๊อบฯ มาได้เลย ก๊อบฯ จากข้างบนมาได้เลยนะคะ แล้วเปลี่ยนเปลี่ยนค่าตรง 3 นี่เท่านั้นเอง วิธีการไม่ต้องคีย์ เลือกตรง if ถึง sum True แล้วเราก็ copy ได้เลย แล้วก็วางมันเสีย ไม่ต้องพิมพ์ใหม่ เพราะเรามาเปลี่ยนค่าไง เปลี่ยนแค่ค่า ค่านี้จาก3 ก็เป็น -3 ค่านี้จาก 2 ก2 คนที่ 2 winner คนที่ 2 ถึงจถึงจะเป็นผู้ชนะ game_over จาก true ก็เป็น... เป็นเห็นไหมคะ Game Over เป็นทรูtrue เหมือนเดิมนะคะ Game_over ยังไม่เปลี่ยน เปลี่ยนตรงตรง sum กับตรง winner แค่จาก 3 กํบ จาก 3 เป็น -3 1 เป็น 2 แค่นั้นเอง โอ.เค. ไหมเปลี่ยน 2 ที่ ตรงนี้กับตรงนี้เปลี่ยน 2 ตำแหน่งพอ จาก 1 เป็น 2 จาก 2 เป็น 3 อันนี้ไม่ต้องพิมพ์ใหม่นะคะ ก๊อบฯ มาได้เลย เพราะคำสั่งเดียวกันเลย เปลี่ยนแค่ค่าของการคำนวนของมันต่อไป ก็คือเมื่อเช็กไปตามแถวแล้ว ต่อไปเห็นไหมคะ ตามคอลัมน์ ก็คือตำแหน่งที่เป็นแนวนี้แนวนี้มันจะเช็กไปตามแนวนี้บ้าง ก็คือเมื่อกี้เรียงตามแนวนอนใช่ไหม ก็คือถ้า X เรียงไป 3 แถว นี่คือแนวนอน ถ้าเรียงตามแนวคอลัมภ์ x หรือ o ครบ ครบทั้ง 3 คอลัมน์นี่ ก็จะใช้เงื่อนไขว่า if markeนะคะ if mark 0เพิ่ม... เพิ่ม If condition เข้าไป เลือก statement mark เลือก Array ค่า array ค่า array เท่ากับ ค่า กดผิดอีกแล้ว ค่าใน mark เริ่มที่ 0 นะ แล้วก็ตามด้วย y pos แล้ว y_pos ตำแหน่งของ Y alay Y นะคะ ในนี้พิมพ์ y pos เลือก y pos ตอนนี้เราจะเช็กไปตามแนวแถวแล้วนะ ตามแนวคอลัมน์แล้วนะ แถวเสร็จแล้ว เช็กคอลัมภ์ในนี้นะคะ แล้วก้ไประบุค่า Y pos ที่ 0 ตำแหน่งเหนือ for x นี่ for เห็นไหม แต่ตำแหน่งตรงกับ fales เลยนะคะpos enter มีค่าเท่ากับ 0 ค่าเริ่มต้น กำหนดค่าเริ่มต้น ให้ y_pos = 0 อย่างนี้นะคะ เพราะไม่งั้นมันจะเช็กเห็นไหม หา y_pos ไม่เจอ เพราะฉะนั้นตรงตำแหน่งมันไม่ได้มี คอลัมน์เดียว เห็นไหมคะ มันก็จะมีคอลัมภ์ที่ 1 กับ 2 ใน Array มันจะนับคอลัมน์แรกเป็น 0 1 2 เพราะฉะนั้น เราก็เพิ่มค่าคอลัมน์เข้าไป วิธีการไม่ต้องพิมพ์นึกออกนะ Coppy ได้ ก๊อบไป คำว่า "markers [0] แล้วใส่ Comma comma แล้วก็กดวางครั้งที่ 1 กดวางครั้งที่ 2 เป็น 1 แล้วก็ช่องที่ 2 ก็เป็น 2 เท่านั้นเอง0 เห็นไหมคะ เริ่มจาก 1 เริ่มจาก 2 ไม่ได้ใส่ , ขอโทษ ๆ มันต้องเป็นบวก บวกเพิ่มขึ้น เข้าไป 1 ช่อง + นะคะ ใส่ + แทนตรง comma (,) ใส่เครื่องหมาย ตรง : ใส่เครื่องหมายบวกแทน ฉันเบลอละ เปลี่ยนเป็นเครื่องหมายบวกนะ ถ้ามี mark ที่ 1 mark ที่ คือ มันครบ 3 อันตามแถว ตามคอลัมน์นี่ 1, 2, 3 ปุ๊บ นะคะ ตำแหน่งนี้สิ่งที่จำทำต่อ ก็คือก็จะมาบอกว่านี่นะคะ เห็นไหมคะ ค่าของตำแหน่งนี้ เท่ากับ 3 แล้วค่อนมาเพิ่มบรรทัดนี้เพอย่างไรมาดู ตรง y_pos นี้ ใส่ = 3 เข้าไป ใส่ค่า เท่ากับนะคะ แล้วก็ตามด้วย 3 ลงไป ในบรรทัดนี้ copy ตรง ก๊อบปี้นี่มาครับ winner กับเพราะ winner ที่เราใช้ ก็คือ winner ที่ 1 กดไวไปหน่อย winner ที่ 1 เห็นไหม นี่ game_over กับ winner ที่ 1 กับ game_over = True นี่ ก็อบมาได้เลย ตัวเดียวกัน จะบอกว่า เมื่อครบอันนี้ ก็คือผู้ชนะ คือ คนนี้นะคะ ถ้าครบคอลัมน์ตามแนวนี้นะคะ ก็ไม่ต้องแก้เห็นไหม เห็นไหมคะ แล้วอะไรต่อ เห็นไหมคะ เช็กกับ ถ้าไม่ใช่คนที่ 1 mark นี่ มันก็ต้องมีของคนที่ 2 mark แก้แค่ Copy นี่เลย จาก if marks อันนี้ จนถึง game_over น่ะ แล้วมาเปลี่ยนค่าตรงไหนคะ จากค่าสุดท้ายค่าสุดท้าย จาก 3 เป็น -3 แล้วก็เปลี่ยนค่าตรงคนที่ 1 เป็นคนที่ 2 เพราะมันเช็กตามคอลัมน์ไง ตอนนี้มันเช็กตามคอลัมน์ ก็เหมือนอันนี้ที่มันเช็กตามแถวเห็นไหมคะ เพราะฉะนั้นก็สไตล์เดียวกันก็ copy มาได้เลย แต่สิ่งที่มีมาเพิ่ม ก็คือLoop ของการเช็ก y_pos นี่ เพิ่มขึ้นมาอีก 1 ตรงบรรทัดสุดท้าย ก็คือเพิ่มคำว่า wมีค่าเท่ากับ += 1 ให้มันเพิ่มรอบ รอบในการทำงาน เพิ่ม loop เข้าไป ทำไมเป็น ++ เข้าไป 1 รอบ เพิ่มข้าไป 1 รอบ วนรอบ x_pos อยู่ตอนนี้ โอ.เค. ไหม ทันนะคะ ทันไหม ทันไหม โอ.เค. เมื่อกี้เช็กแนวนี้ แนวแถว กับแนวคอลัมน์ไปแล้ว กับแนวคอลัมภ์ ทีนี้เช็กทแยงจากนี่นึกออกนะ ทะแยงจากมุมบนลงมามุมล่างนี้ ทั้งด้านซ้ายด้านขวานี่นะคะ เช็กมุมทะแยงก็ต่อจากเมื่อกี้นั่นล่ะ ออกไหนมา แทบจะไม่ต้องพิมพ์เลยนะ เอาตัวแรกมา ก๊อบ if markers ก็อบ if_mark ตัวที่ 1 มาเลยนะคะดูดี ๆ นี่เห็นไหมตัวที่ 1 กับตัวที่ 2 นี่มาเลย แล้วมาเปลี่ยนอะไร ก็อบอันแรกก่อน แล้วค่อยไปเปลี่ยนอันที่ 2 ง่ายกว่า แค่ if ไอ้นี่ ถึง Game_over พอนะคะ ตรงตำแหน่ง y_pos เห็นไหมคะ ต่อจากตำแหน่ง y_pos Crtl v if จะอยู่ตำแหน่งที่ตรงกับเยื้อง y_pos ออกมา 1 นะคะ นี่นะคะ ถ้าตรงให้คลิกย้อน 1 ตำแหน่ง เปลี่ยนค่าใน y_pos เป็น 1 ดูนะคะ ดูค่าที่เปลี่ยน 1, 2, 3 0 1 2 0, 1, 2 โอ.เค. รู้แล้ว 0 อันนี้ 0 ก่อน ช่องแรก 0 ใช่หรือเปล่า ช่องนี้ y_pos เป็น 1 ช่องนี้ y_pos เป็น 2เดี๋ยวนะ 0 0 1 0 2 2 เท่ากับ 3 อ๋อ marker 0, 0, 1, 0 เอาใหม่ ๆ 0, 0, 0 00 10 มันเช็ก ใช่เพราะมันเช็กตามแนวนี้ไง นี่ ๆ ๆ เห็นไหม อันแรกนี่ 0, 0 ถูกแล้ว อันนี้ 2 มันจะเป็น 1 กับ 0 x เป็น 1 x เป็น 1 y เป็น 0 ตัว mark อยู่ที่ช่องที่ คอลัมน์ ๆ คอลัมภ์เริ่มอันนี้ตัวแปรที่ตัวแปรที่ 1 อันนี้ 0 ถูกแล้ว อันนี้ 2 2 ค่าเท่ากับ 3 ถูกแล้ว ก๊อบอันนี้ซ้ำอีก 1 ครั้ง ก็อบจาก Marker นี่ นี่ก๊อบปี้ แล้วก็... ใส่อะไร เครื่องหมาย + ใช่ไหม ใส่ or ขั้นด้วย or ถ้าหรือ ใส่ or เข้าไปนะคะ พอตรง 3 พิมพ์ or ก่อน 1 ครั้ง all แล้วก็กดวางค่าเมื่อกี้ แล้วก็มาเปลี่ยนค่าใน Array เรานี่ ในช่องตารางนี่นะคะ จะเริ่มที่ or 20 11 02 เปลี่ยนค่าในช่องนี้เป็น 2 กับ 0 1 กับ 1 แล้วก็อะไร 02 แล้วก็ 0 กับ 2 ตำแหน่งที่เปลี่ยน โอ.เค. ไหม แล้วก็ค่า 3 จะเป็นค่าสุดท้ายจะเป็น ยังเท่ากับ 3 อยู่ winner เท่ากับอันนี้ ตั้งแต่ตรง if นี่ลงมา เปลี่ยนค่าตรงกลาง แค่นั้น เห็นไหม ค่าตัวเลข เปลี่ยนแต่ค่าตัวเลขจาก 3 เป็น -3 แล้วก็ค่า winner เป็น 2 ยาวไปล้น เยอะเกิน เดี๋ยวจะไม่เห็น ถ้าจะก๊อบตั้งแต่ if mark จะทำการ copy ตั้งแต่ แล้วก็วาง เรามาเปลี่ยนค่าเฉพาะ ดัน tab ไปให้มันตรง Tab ไปให้มันตรง เปลี่ยนค่าตรง 3 เห็นไหมคะ เป็น -3 ใส่เข้าไป เห็นหรือเปล่า ค่าใน array ตรงกันหมดเลย เท่าเดิมไม่ได้เปลี่ยนนะคะ ค่าในนี้เหมือนเดิม แล้วก็มาเปลี่ยนค่าใน winner อีกที่หนึ่ง จาก 1 เป็น 2 แค่นั้น เปลี่ยนอยู่ 1. เห็นไหมคะ จาก 1. เป็น -3 winner เป็น 2 แค่นั้น ทำให้เร็วขึ้น ก๊อบมา ตัวนี้ คือ ตัวที่จะเช็กแถวที่ทะแยงลงมานี่ เห็นไหมช่องที่ 1 ช่องที่ 2 ช่องที่ 3 นี่ ก็คือถ้าแถวนี้มันได้ครบ 3 เมื่อไร คนที่คลิป x คลิป ทะแยงลงมานี่ คนที่คลิก x ก็จะเป็นคนชนะ แต่ถ้า O ครบ O ก็ชนะอย่างนี้นะคะ อันนี้คือการเช็กตามแนวทะแยงของมันเองนะคะ ส่งที่โผล่มาก็คือก่อนจะปิด ก็คือใช้ Keyword ที่ชื่อว่า global เพื่อเรียกใช้ตัวแปร winner กับ game over นั่นเองที่เราประกาศไว้นะคะ ก็คือมาเรียกใช้อยู่ตรงนี้ Keyword global นี่นะคะ อยู่ตรงตำแหน่งกับ x_pos นั่นเองนะคะ วิธีการนะคะ พิมพ์ gl เดี๋ยว global มันจะขึ้นมา ทีนี้มันมีเป็น 2 global blobal กับ global ที่เป็น ฟังก์ชัน เพราะฉะนั้นเราจะเรียกใช้ global คีย์เวิร์ดแล้วก็ตามด้วยตัวแปรนะคะ winner นะคะ แล้วก็ตัวที่ 2 Global เลือก global keyword แล้วก็ตามด้วย game_over กดผิด ga Game Over ขึ้นมาแล้วกด Enter คือ loop มันเยอะเห็นไหม เพราะฉะนั้น มันเลยใช้วิธี Keyword มาช่วยเรียก อยู่ตรงนี้นี่ ค่าเริ่มต้น คือมัน ค่ามันจะต้องกลับไปเช็กซ้ำเห็นไหมคะ เช็ก เพราะฉะนั้น มันจะเรียกมาใหม่ เรียกมาใช้ ก็คือให้มันเริ่ม Winner เข้ามาครั้งแรก มันก็จะค่าเป็น 0 Game_over มีค้าเป็น เค่าเป็น 1 winner ค่าเป็น true เห็นไหมคะ ก็เลยต้องมาเรียกใช้ Keyword global Global จะเป็นการเรียกตัวแปรที่อยู๋ข้างนอกมาใช้งาน ก็คือเรียกตัวนี้มาพอเรียกเสร็จแล้วทำอะไรต่อ เรียกใช้ฟังก์ชัน Winner ตำแหน่ง ตำแหน่งที่เราเช็กmarkers ไง เห็นไหมคะ อยู่ตรงนี้นะคะ อยู่ตรงนี้ ตรงนี้ ๆ เห็นไหมคะ เห็นไหมคะ ก่อนบรรทัด update เห็นหรือเปล่า เรียกมาตรงนี้ เพราะตรงนี้จะเป็นให้ check_markers ก่อนจะอะไร เช็ก Cell mark Player 1 เช็กผู้เล่นเห็นไหมคะ เพราะฉะนั้นตำแอันนี้ ก็คือ check_winner เลือกฟังก์ชัน check_winner ขึ้นมาใช้งาน โอ.เค. เสร็จหรือยัง แล้วก็ไปไปให้มันเช็กว่าถ้า Game_over มีค่าเป็น 0 นี่นะคะ แล้วลองทดสอบโปรแกรม เพราะมันจะต้องเปิดเงื่อนไขเกม Over มาด้วย มันถึงจะเช็กได้ ก็คือเมื่อเล่นเสร็จตอนไหนนะ เช็ก Winner หรอ ย้อนไปอีก ย้อนไปอีก ไอ้นี่เหรอยังไม่ใช่ global หรือ อือ พอ ๆ พอเรียกใช้คีย์เวิลด์ จะเรียก check_winnerเรียกใช้ check_winner () ต้องกำหนดเงื่อนไขก่อนว่าถ้าเกมมัน Over ให้ค่า Game_over เท่ากับ 0 ก็คืออยู่ตรงตำแหน่งบนไหน event.type ก่อนที่จะคลิกเมาศก็คืออยู่ตรงตำแหน่งนี้ ตำแหน่งที่เหนือคลิก Mouse นี่ นะคะ ฟังก์ชัน condition if แล้วก็ เกม Over กำหนดค่าให้ = 0 แล้วมันก็จะมาประโยคนี้ต่อ เราจะลอง Run ดูในขั้นตอนนี้ mark แล้วอะไรแล้ว ใช้ได้ไหม Ctrl + B ครับ กด Ctrl + B เมื่อใส่เงื่อนไข ลืมเรียกอะไรแน่ ๆ เลยทำไม Markers ตัวนี้ไม่ขึ้น เดี๋ยวนะ check_markers มีแล้ว มาแล้ว x_pos dormaexpos Error ไม่ขึ้นเสียด้วย check_winner () drownmarkersไปดูชื่อสิตั้งชื่อถูกไหมนี่ draw_markers () ขึ้นหรือยัง ขึ้นไหมเด็ก ๆ ปรากฎของตัวเองไม่ขึ้นบัดนี้ งงเลย เดี๋ยวนะอะไรหายไป Error ก็ไม่ขึ้นนี่สิปัญหา เดี๋ยวขอ Save แล้วขอเซฟแล้วขอเคลียก่อนนะ เผื่อมัน Error มันค้าง มันเลยหาไม่เจอนี่ ไม่รู้อันไหนเป็นอันไหนนี่ ขอเคลียร์ แล้วขอลองเปิดใหม่Coding ไปเยอะ ๆ เครื่องก็ Error ได้เหมือนกันนะครับ ไม่เฉพาะคน เดี๋ยวจะลง Run ใหม่ Ctrl + B ใหม่ ขึ้นไหนรอบนี้ markers เราไปผิดตรงไหนหว่า Error ก็ไม่ขึ้น ลืมอะไรไป บรรทัดที่ draw markers ไม่ขึ้น ขอดูตำแหน่ง เทียบกับค่าเดิม ค่าผิดหรือเปล่าหว่า ค่าอะไรผิดสักค่าหนึ่งกันแน่ ๆ เลย ขอดู draw_markers () ก่อนนะครับ draw_markers มาแล้ว x_pos = 0 for x in markersถูกต้อง y_pos=0ถูกต้อง ถ้า y = 1 วาดเส้น เส้นทำไมไม่วาดให้นะ ตัวแปรประกาศแล้ว Green Red มันประกาศแล้วนี่ไม่ได้ลืมประกาศตัวแปรก็ประกาศแล้ว draw_screen line screen 85 marker ขึ้นไหม ขึ้นไหม Error ไม่ขึ้นอีกแล้วปัญหา จะบอกว่า Error ก็ไม่ขึ้น มาดู for xบรรทัดนี้ นี่ไหมตำแหน่งตัวเลข ไม่ screen filbackground_grid อันนี้ draw_grid เรียกใช้ไปแล้ว ทำไมตอน Run ไม่ขึ้น นี่ดูยากมากเลย ทำไมไม่ Mark ให้markers ไม่ขึ้น เดี๋ยวขอลบตรงนี้ เพราะเนื่องจากมันไม่ขึ้นมาจากตัวนี้ มันก็ต้องลบจากตรงนี้ทั้งหมดทั้งปวงเลย draw_markers ก๊อบมาเลยทั้งยวง ขอก็อบแล้วลอง Run ใหม่ นั่นไง จัดไป ตำแหน่ง y_pos for ...45 ไล่ไปทีละจุด 47 นี่พอก๊อบแล้วจะเป็นแบบนี้ตลอด 48 c 18 ก๊อบแล้วจะเป็นอย่างนี้ 515051 52 53 ไม่ได้ ก๊อบมาแล้วไม่ได้ ผิดตรงไหนนะ แล้ว game_over กำหนดอันนี้ ก็คือจะสร้างไอ้ตัวกล่องข้อความนะคะ กล่องข้อความเพื่อ... เพื่อแสดงข้อความเมื่อเล่นจบ เดี๋ยวจะลองใส่ให้มันจบ ก็คือจะสร้าง draw_winner ขึ้นมามันจะอยู่ที่ตำแหน่งที่... เดี๋ยวจะลองไปให้มันสุด ให้มันเสร็จแล้วจะ Run ทีเดียว ตัวนี้นะคะ มันจะเอาไว้ที่ตำแหน่งที่ต่อจากที่ต่อจาก game_over เมื่อกี้นี้นะคะ ก็คือตำแหน่งนี้ สร้างฟังกชั่นเอาไว้สำหรับ เป็นเพราะเวอร์ชัน อยู่บ้าน... เครื่องที่บ้านกับเครื่องที่นี่ไม่ Support กันสร้างฟังก์ชันเพื่อสร้างกล่องข้อความ เพื่อเขียนกล่องข้อความนะคะ แสดงว่าใครคือคนชนะแล้วก็จะเอาไว้ให้เล่นซ้ำอีกรอบหนึ่ง สร้างให้เสร็จ เอาให้สุดทำไมไม่ขึ้นตัวเลข d-e-f เลือก def ฟังก์ชัน ฟังก์ชันนี้ชื่อว่า draw_winner draw_Winner draw_ตามด้วย Wนะคะ โอ.เค. ก็คือ บอกว่ากำหนดตัวแปรชื่อ win_text = player แล้วก็ตามด้วย String winner นี่ เป็น winner 1 หรือ winner 2 แล้วก็ตามด้วย win แปลว่าชนอันนี้สามารถเปลี่ยนเป็นภาษาไทยได้ ใน ' นะคะ ประกาศตัวแปรชื่อ Win_text win_text พิมพ์มาก่อนนะคะ เพราะเป็นตัวแปรของเราเองที่สร้างขึ้น Win_text== ' ใส่ข้อความได้ ก็คือ... ผู้เล่น player เมื่อแปลเป็นไทย ก็คือผู้เล่น ในภาษาไทยก็คือผู้เล่นนะคะ แล้วก็ + String s-t เลือก Class_string ที่ตามด้วย winner วงเล็บค่ะ วงเล็บเปิดวงเล็บปิด แล้วก็พิมพ์ winner ลงไป เห็นไหมคะ พิมพ์ Statement winner ลงไปแล้วก็ + ด้วย ข้อความปกตินะคะ ข้อความที่เราต้องการให้โชว์ แล้วก็เครื่องหมาย + เครื่องหมาย ' แล้วก็ผู้เล่นคนที่ ผู้เล่นคนที่อันนี้ ใช่คำว่าผู้เล่น ภาษาไทยแปลว่า ชนะ นะคะ win แปลว่า ชนะแล้ว ต้องการให้มีเว้นวรรคข้างหลัง ก็ใส่... นะคะ นะคะ สิ่งที่จะทำต่อมา ก็คือมาประกาศตัวแปร font กำหนดรูปแบบ font ของเราขาดอะไร อะไรหาย พิมพ์ font f-o-n-t มาที่ประกาศตัวแปรนะคะ พิมพ์ font = pygame.font เรียกใช้ฟังก์ชัน pygame.font pygamepygame_module.font f เลือก font module เลือก .syssys เลือก SysFont เห็นไหมคะ เลือกฟังก์ชัน SysFont ใส่วงเล็บเข้าไป ค่าก็คือ none คีย์เวิร์ดคือ non กับ 40 40 นะคะ กำหนดค่าให้ font ก็จะเล่นได้เลย non เป็น 40 มีค่าเป็น 40 นะคะ เมื่อกี้แสดงข้อความ เมื่อกี้ ตอนนี้ เราประกาศตัวแปร แล้วให้แสดงข้อความบอกแล้วเราให้มันประกาศตัวแปรว่าผู้เล่นชนะแล้วเราไปประกาศตัวแปร เสร็จแล้วขั้นต่อไป ก็คือเราจะทำกรอบให้ข้อความของเรา ก็คือตัวที่ 2 นี่เห็นไหม Win image เรียกใช้ font ที่ประกาเมื่อกี้ประกาศตัวแปรหรือยัง ใบเตยประกาศหรือยัง พอประกาศตัวแปรตัวนี้เสร็จเราก็จะมาสร้างตัวต่อไป ก็คือตัวกรอบ บรรทัดที่ 2 win_img ฟอนต์ที่เราสร้างไว้เมื่อกี้.wintexก่อนอื่น... โอ.เค. นะ ต้องเป็นอันนี้ก่อน win img เราก็จะกลับมาที่บรรทัด มีของเรา นี่ ๆ บรรทัดที่ win draw winner นี่ draw_winner เราก็จะเปลี่ยนเป็น Wimage ทำไมเป็นตัวใหญ่ ปลด Caps Lock ก่อน พิมพ์ win Win_img = เท่ากับเรียกใช้ ฟอนต์ที่เราประกาศไป o เรียก fontstatement ที่เรากำหนดไว้ .render ฟังก์ชัน พอขึ้นฟังก์ชัน render ในวงเล็บตามด้วย wintext ตามด้วยค่า true blue เลือก win_text นะคะ แล้วก็ colon แล้วก็ค่า true เลือก true คีย์เวิลด์ colon แล้วก็ตามด้วยค่าสี b-l-u-e พิมพ์เอา เพราะเรายังไม่ประกาศตัวแปรสีน้ำเงินพอ blue เสร็จแล้วสิ่งที่จะทำต่อไป ก็คือนี่พอพิมพ์ถึง blue เสร็จ เราก็จะมาประกาศตัวแปรค่าสีน้ำเงินตรงสำแหน่งสีเคยประกาศไปแล้ว blue b-l ขึ้นมาแล้วกด Enter ค่าสี คือ อยู่ในวงเล็บ ค่าของ blue ให้เริ่มที่ 00 กับ 255 ก็คือมี 0 0, แล้วก็ตามด้วย 255 255 เมื่อประกาศตัวแปรตรงนี้เสร็จ ตรงนี้เสร็จ เราก็จะเรียกใช้ไอ้ตัว screen_build เห็นไหมคะ นะคะ พอกำหนดตัวแปรสีนี้แล้ว มาที่ตำแหน่งเดิม draw_winner เราเหมือนเดิมแล้วก็พิมพ์ screen statement build เห็นไหมคะ build ฟังก์ชัน ตามด้วย win_img นะคะ เราลบ double cod ออกออกแล้วก็ตามด้วย win เราเลือก win_image statement แล้วก็ใส่ : แล้วก็วงเล็บเปิด วงเล็บปิดอีก 1 ครั้ง อีกหนึ่งครั้ง วงเล็บเปิดวงเล็บปิด ในวงเล็บนั้นเราจะใส่บอกว่าความกว้าง screen // 2 ก็คือ มันจะคำนวณจาก Screen เราสร้างไวมาหารด้วย 2 แล้ว - ด้วย 100 แล้วก็คำนวณจากความสูงของ screen เรา หารด้วย 2 - 50 ก็จะได้กรอบข้อความคือ screen_y ก่อนใช่ไหม เลือกอะไรก่อน เลือก screen_width ก่อน screen_width หารใช่ไหมคะ // 2 แล้วก็ลบออกเท่าไร -100ส่วนอีกตัวหนึ่ง ก็คือ screen_heigheight screen height // 2 เหมือนกัน แล้วก็ลบ 50 ลบ 50 ความสูงลบออกแค่ 50 กรอบข้อความน่ะค่ะ ตัวนี้มันจะวาดกรอบข้อความให้ สิ่งที่จะทำต่อมา ก็คือไปเรียกใช้ วาดว่าพื้นที่นี้สีน้ำเงินนี่ ขึ้นมาให้วาดสี่เหลี่ยมสีน้ำเงิน สี่เหลี่ยมผืนผ้ากรอบที่เป็นสีเขียวขึ้นมา มันจะอยู่ก่อน screen_build นะคะ พิมพ์ก่อน บรรทัดนี้ เลือก pygame module..draw draw.rect เห็นไหม มันจะมีฟังก์ชัน draw_line draw line, draw rangetangle r-e-c-t นะคะ rectan ก็คือ สี่เหลี่ยมผืนผ้า ตามด้วยค่า screen screen_width หาร 2 อันนี้ก็อบมาก็ได้นะ ลืมระบุเขตพื้นที่ก่อน แล้วก็ใส่สีก่อน ขาดไปท่อนหนึ่ง ใส่ Screen เฉย ๆ เรียกใช้ลบ screen_width ออกก่อนเลือก screen statement เฉย ๆ ตามด้วย สี สีที่เราเรียกใช้ก็คือ สีเขียว green statement แล้วค่อยมาระบุตำแหน่ง screen_width ก๊อบมาได้ ก็อบจากตัวนี้ ก๊อปเลย ก๊อบปี้ ใส่ colon ก่อนแล้วค่อยวางนะคะ วางที่ก๊อบมาเมื่อกี้ เปลี่ยนค่าข้างใน เปลี่ยนแค่ตรงตัวหลัง แล้วก็เพิ่มค่า 200 กับ 50 เข้าไป เปลี่ยนเป็น 60 แล้วก็เพิ่มค่า 200 นั้น เพิ่มค่าจากความยาวน่ะ แล้วก็ความสูงของไอ้ตัวกรอบ 200 กับ 50 ก็จะได้ตัวที่มันเป็นเป็นตัวนี้นะคะ หลังจากตัวนี้ดูนี่ เห็นไหม ไอ้สีเขียว ๆ ข้างหลังนี้ ได้พื้นที่สีเขียว ๆ ข้างหลังน่ะขึ้นมา ไอ้นี่ Run ได้ ไอ้ตัวนั้น Run ไม่ได้เลย คืออะไร พอได้กรอบแล้วนะคะ กรอบแล้วนะคะ ตรงนี้เรามาพิมพ์ winner ใส่เข้าไปตรงฟังก์ชันที่เราสร้างไว้ เพราะตอนแรกมันไม่มี เราเรียกใช้มัน มันไปกดโดนอะไรนี่ พิมพ์ w ขึ้นมาแล้วก็เลือก winner เห็นไหม ก็จะเรียก นี่ ๆ ไอ้อันนี้วินเนอร์นี่ขึ้นมา เรียกตัวแปร winner มานะคะ เรียกตัวแปร winner มา เสร็จแล้วให้มันเช็ก เช็กว่าถ้า game_over นี่ จริง ก็คือเล่นจบเกมจริงนี่ draw_winner จะต้องขึ้น เพื่อแสดงว่าใครคือผู้ชนะ มันจะอยู่ต่อจากบรรทัดที่มี cheเราจะเอาไปไว้ตำแหน่งนี้นะคะ มันจะอยู่ระยะเยื้อง มันจะอยู่อยู่... อยู่ก่อน อยู่ตรงกับ display ระยะเยื้องอยู่ตรงกับ display อยู่ตรงกับตัวนี้ เพราะฉะนั้น ใส่ if กำหนดเงื่อนไข if condition เช็กอะไร เช็ก game_over ว่าเป็นจริงหรือเปล่า จบเกมจริงไหม ไหน เห็นไหมคะ game_over = True ปุ๊บ ก็จะไปเรียกใช้ draw winner draw_winner เรียกใช้ฟังก์ชันเลย draw_winner วงเล็บ winner ของเรานะคะ winner ของเราทำไมไม่เรียก ปกติเรียกแล้วขึ้นเลยนี่เอาใหม่ จะเป็นอย่างนี้นะคะ เช็กว่า game_over ใหม่ ถ้าใช่เรียกใช้ ฟังก์ชันนี้ ลอง Run ดูขึ้นไหม เดี๋ยวค่อย Run ทีเดียวเลย ไปต่อ ๆทำกรอบให้สร้างข้อความ Play Again เล่นอีกครั้งหนึ่ง เล่นซ้ำ เล่นใหม่ Again_text นะคะ ตัวนี้คือตัวนี้ จะมีตัวแปรชื่อ ตัวแปรชื่อ again Text ตัวแปรที่ชื่อ again_image กรอบข้อความนั้นนะคะ แล้วก็ แล้วก็ตัวกรอบนะคะ ทีเดียวเลย ตัวนี้เป็นตัวแปรเพราะฉะนั้นพิมพ์ใหม่ = นะคะ แล้วก็เครื่องหมายคำพูด หรือ ' = เล่นagain_img ตัวนี้นะคะ ตัวนี้ไปก๊อบจาก font นี่ font.render เห็นไหมคะ ก็อบจากตัวนี้มาได้ ได้ แต่เปลี่ยนตรง Win_text เป็นเปลี่ยนตรงนี้จาก win_text เป็น again again_text ของเราแทน ก็อบจากตรงนี้ได้เลย ตัวเดียวกัน กรอบเหมือนกันเช่นเดียวกันกับก๊อบตรงนี้เหมือนกัน screen_build ก๊อบมาเลย เพราะมันคือขนาดเดียวกันเลย เห็นไหม เปลี่ยนค่า นะคะ นี่ ก๊อบ screen.blit มาเลย ให้มันเร็วขึ้น ค่าอะไรบ้างเปลี่ยนค่าตรงตรง Win_img เป็น screen_width sเป็นจาก -50 เป็น +10 แค่นั้นเองเปลี่ยนตรงนี้ ลบออกแล้วก็พิมพ์ again แล้วเลือก again_img นะคะ ลบ 100 เปลี่ยนเป็น 80 -50 เป็น + อะไรนะ + 10 เปลี่ยนค่าแค่ตรงนี้นะคะ เห็นไหมคะ จะไล่ให้สุดไปให้สุด สุดขอบกันไปเลยก็ประกาศตัวแปรชื่อ again จะกำหนดค่าสี่เหลี่ยม ไปไหนแล้ว ๆต่อจากตรงฟอนต์นี่นะคะ พิมพ์ ใช้พิมพ์นะคะ เพราะเป็นตัวแปร again again_recgregetangle จะกำหนดค่าให้นะคะ screen yอันนี้เราไปก็อบค่าจากตัวนี้ได้ ตัวนี้เห็นไหม ค่าเดียวกันตัวนี้เห็นไหม เป็นตัวเดียวกันเลยก๊อบปี้เลยนะคะ นี่ เอามาใส่ตรงนี้ ก่อนอื่นพิมพ์ arec ก่อนมันเป็นคลาสนะคะ re re เลือกคลาส re ก็คือตัวนี้ ตัสมหญ่นะคะ แล้วก็วาง screen_width screen y ค่า 80 แล้วก็ 160 50 เปลี่ยนค่าตรงนี้เป็น 80 ตัวนี้เป็น ตัวนี้เป็นลบเท่าไรนิ หาร 2 หาร 2 แล้วก็ไม่มีลบนะคะ ตัวนี้ไม่ต้องลบ ตามด้วย 160 กับ 50 -200 ออก เอา 50 โอ.เค. ประกาศตัวแปรสำหรับสี่เหลี่ยมที่ 2 เมื่อ ประกาศแล้วเอามาใส่บรรทัดก่อนหน้า screen_build นี่ ก็คือ เลือกใช้ pygame ต่อ แล้วก็เลือก screen นะคะ ตรงก่อน screen_build เลือก pygame module.draw.recgtencle แล้วก็กำหนด Screen screen statement ตามด้วยสีgreen_statement เหมือนเดิมนะคะ แล้วก็ตามด้วยอีกตัว ตัวสุดท้าย ตัวที่เราสร้าง again สี่เหลี่ยมผืนผ้าอีกตัวหนึ่ง ก็คือตัวแปร again again_img, โอ.เค. เสร็จหรือยัง แล้วลองเดี๋ยวไปทดสอบ เพิ่ม เพิ่ม Even ตัวนี้ event ตรงนี้ เงื่อนไขเมื่อคลิกนี่ ไม่ได้ทำใหม่นะคะ เดี๋ยวเราจะไปก๊อบ มันอยู่ตรงไหน เดี๋ยวเราจะไปดู ตัวนี้จะอยู่ตรง เราจะเอาตัวเมื่อกี้มาใส่ตรงตำแหน่งนี้ จากตรงนี้นี่ไง เห็นไหม เห็นเปล่า ถึง pos game เห็นไหมคะ เราจะไปก๊อบที่ if event เมาส์คลิกนี่เห็นไหม ก็อบมาเลยไม่ต้องพิมพ์ใหม่ Copy แล้วก็เอามาวางตำแหน่งนี้ได้เลย เห็นไหมคะ แต่จัดให้ตำแหน่งของ if มันอยู่ตรง draw_winner แค่นั้นเอง statement ให้มันตรงกับ draw winner เห็นไหม โอ.เค. นะคะ ก็จะได้ตรงคลิก เมื่อมันคลิกเมาส์ จะได้ค่าอะไร จะได้ค่าอะไร สิ่งที่จะเพิ่ม ก็คือให้ reset ตัวแปร ตัวนี้ก็ไม่ต้องพิมพ์ เราใช้วิธีไปก็อบตัวแปรของเรา copy ตัวแปรนี่ไง ประกาศตัวแปรไว้น่ะ เราจะคืนค่าให้มันเราก๊อบเลยค่ะ นี่ ก็อบปี้ตัวแปรตรงนี้เลย ก็อบแล้วเอามาวางเพื่อ Reset ค่า วางตำแหน่งให้มันตรงกับตำแหน่งของ Pos oujot8t นี่นะคะ ใส่เงื่อนไขว่า if again_rectangle เข้าไปก่อน ลงไปก่อน ตรงนี้นะคะ ใส่ statement if แล้วก็ตามด้วยค่า .collidepoint นะคะ co ตัวนี้มันจะขึ้นมาเอง พิมพ์เลย .co แล้วก็เลือก collidepoint ฟังก์ชันนี่ ใส่วงเล็บเข้าไปในวงเล็บใส่ pos ค่ะ ใส่ตัวแปร pos stetement นี่ ส่วนตรงที่เราจะใส่ ที่เราจะไปก็อบเราจะไปก็อบตัวแปรทั้งหมด เอามานี่ ก๊อบมานี่ จนถึง game_over ก๊อบมาค่ะ ก๊อบปี้มา แล้วก็เอามาวางตรงนี้เลย ตัวที่เราจะใช้มีแค่ markers pos winner นะคะ marker click เราไม่ใช้ เราไม่ใช้ เราก็ลบออกy เราไม่ใช้เราก็ลบออก markers ใช้ pos ใช้นะคะ player ใช้ winner ใช้ player ใช้ ใช้ คืนค่าแล้วจะ Reset ค่าใหม่อีกครั้งหนึ่ง คือ ถ้ามีการคลิกเมาส์ตรงปุ่ม play again หรือ play นี่นะคะ ไอ้ตัวนี้มันก็จะต้องมี Reset ค่ากลับไปเริ่มต้นค่าเริ่มต้นเสมอ แล้วมันก็จะเช็กตำแหน่ง มันก็จะเช็กตำแหน่ง ตัวนี้ว่าจากที่เราสร้างไว้ ก็คือตรงนี้ นี่เห็นไหมคะ ตรงตำแหน่ง for x_inrange append (row) นี่ ตำแหน่งนี้ เพื่อให้มัน reset ค่านี้ด้วย เอาให้เสร็จ ๆ เอาให้เสร็จไม่อย่างนั้นไปต่อไม่ได้คาใจโอ.เค. นะคะ น่าจะเสร็จแล้ว นี่จบแล้ว พอดี อันสุดท้าย มันจะจบที่ไปก๊อบปี้ไอ้ตรงเช็ก mark น่ะ เสร็จแล้วเราลอง Run ctrl+BCtrl B นะคะ Error มาเลยเป็นแถวมาเลย line 101 บรรทัดที่ 101 บอกค่าไม่ถูก ทำมเวอร์ชั่นนี้ขึ้นตลอดเลยได้ไหม เหมือนเดิม โอ.เค. ค่ะ เดี๋ยวจะไปหาวิธีแก้ indentation error ก่อนนError ก่อนนะขึ้นอีกแล้ว ถ้าสมมติเรา Run อันนี้ Run จากตัวเครื่องที่บ้านผ่าน ไม่เข้าใจเหมือนกัน ก็คือผลก็คือ เมื่อคลิก X ตำแหน่งนี้คนที่ 1 นะคะ หรือคนที่ 2 คลิก o ตำแหน่งนี้ เมื่อเล่นไป ถ้าเกิดคนที่ 1 ชนะนี่เห็นไหม เห็นไหม มันก็จะขึ้นข้อความแสดงว่าใครชนะขึ้นมา แล้วก็จะมีข้อความว่าให้เล่นอีกครั้ง เมื่อเรากดที่เล่นอีกครั้งหนึ่งนี่ มันก็จะทำการ Reset ค่าที่เรา Post ขึ้นไป ก็คือเคลียร์ค่า อย่างนี้นะคะ คนที่ 1 ก็ชนะนี่ เพราะเช็กตามทะแยงเพราะเช็กตามทะแยงได้ถูกต้องแต่ถ้าไม่เล่นก็กดปุ่มออกจากเกม ไอ้นี่ Error ไม่ขึ้นเลย มันไปจำค่าอะไรbuild resoul ขึ้นไหม เดี๋ยวลองเคลียค่าไม่ได้เลย control+B ใหม่winner แล้วบอก Tab ไม่ไปด้วย Tab ผิดเคืองมากไม่ขยับเคลื่อนไหวเลย อะไรมันขึ้นมานี่ แนะคะ เดี๋ยวจะขอเคลียร์ indent Error ของเด็ก ๆ ออกไหม test ยัง ออกหรือเปล่าคะ ขึ้น Error อะไร Tab Error อีกแล้ว ไม่เป็นไร เราจะดูกันเองในภายหลัง ถ้าอย่างนั้นเดี๋ยวเราจะพอแค่นี้เช็กปัญหา... ได้ มันก็อยู่ในเครื่องนี่ เออ มันต้องมันต้องเช็กดี ๆ นี่ขนาดนี่ขนาด เขา Run มาก็ได้ เดี๋ยวขอบคุณก่อน ขอบคุณล่ามก่อน สำหรับวันนี้นะคะ ขอบคุณพี่ล่ามที่อยู่ด้วยจนสุด ๆ เลย ขอบคุณมากค่ะ ค่ะ (นักศึกษา) ขอบคุณครับ (อาจารย์) Error เยอะมาก ก็ไม่เยอะ [สิ้นสุดการถอดความ] แ [สิ้นสุดการถอดความ]