สวัสดีและยินดีต้อนรับ.
ฉันต้องการที่จะให้การแก้ปัญหา สำหรับความท้าทายของ tic tac toe
ตอนนี้จำไว้มีมากมาย การแก้ปัญหาที่กำหนด
นี่จะเป็นวิธีแก้ปัญหาของฉัน
หากวิธีการแก้ปัญหาของคุณแตกต่างกัน ตราบใดที่คุณปฏิบัติตามแนวทางการเขียนโปรแกรมที่ดีและคุณใช้
ภาษาโปรแกรม c ถูกวิธี ก็ไม่เป็นไร
ฉันแค่ให้วิธีแก้ปัญหาของฉัน
ฉันแน่ใจว่ามันสามารถปรับปรุงได้
มาเริ่มกันเลยดีกว่า
ฉันจะสร้างใหม่ โครงการนี้เรียกว่า tic-tac-toe อย่างชัดเจนและเรากำลังจะ
เริ่มพยายามปรับมัน
ฉันพยายามทำลายมันเหมือนที่ฉันทำ ในคำอธิบายของการบรรยาย
ฉันจะสร้าง เพียงไม่กี่โมดูลหรือฉันควรจะพูดบางฟังก์ชั่น
หวังว่านี่จะเป็น โอเคและทำงานได้ดีสำหรับคุณ
ฉันใช้เคสอูฐในการตั้งชื่อทั้งหมดของฉัน ข้อตกลงที่ฉันคุ้นเคย
แยกกันได้จริงๆ เป็นไฟล์ต้นฉบับหลายไฟล์เช่นกันถ้าเราต้องการ
ดังนั้นเราจึงมีหลักของเรา
มากำจัด printf นี้กันเถอะ
ฉันจะรวม รวมถึงเพิ่มเติม
นี้จะช่วยให้ฉันโดยทั่วไป ทำการเคลียร์ระบบของเราและสิ่งที่ดีสองสามอย่าง
อนุญาต ฉันยังคิดว่าลบถ่าน
ดังนั้นนอกจาก2 .นี้แล้ว ห้องสมุด มารวม Conio กันเถอะ ชม.
และสิ่งที่อยากทำและฉัน ต้องการโจมตีปัญหานี้
ฉันต้องการที่จะลองโมดูล มากเท่าที่ฉันจะทำได้.
ฉันบอกว่าฉันกำลังจะไป เพื่อใช้อาร์เรย์มิติเดียว
อาร์เรย์ 2 มิติ อาจทำงานได้ดีขึ้น
แต่ฉันกำลังจะดำเนินการ โดยใช้อาร์เรย์มิติเดียวที่แสดงถึงเกมของเรา
บอร์ด บอร์ด tic-tac-toe ของเรา
ฉันจะสร้างสิ่งนี้ เป็นตัวแปรระดับโลก
ฉันใช้ตัวแปรโกลบอล ที่นี่เพราะฉันยังไม่ได้แสดงแนวคิดของ
ส่งข้อมูลโดยอ้างอิงในค.
ฉันไม่อยากทำให้คุณสับสน
จะได้ไม่ต้องใช้ global data ที่นี่และฉันสามารถส่งข้อมูลไปยังฟังก์ชันได้
แต่ฉันจะทำ จำเป็นต้องใช้ผ่านโดยการอ้างอิง
ฉันจะต้องผ่านไปมา พอยน์เตอร์และเรายังไม่ได้พูดถึงเรื่องนั้นเลย
ฉันจะใช้ข้อมูลทั่วโลก
ยกโทษให้ฉัน จำไว้ว่าข้อมูลทั่วโลกคือ มักจะไม่ใช่สิ่งที่ควรทำแต่เพราะว่าเรากำลังพยายาม
สาธิตการเรียนรู้ แบ่งพิชิต และเราพยายามแสดงให้เห็น วิธีใช้ฟังก์ชั่น ต้องใช้
global data เพราะเรา ยังไม่ได้พูดถึงพอยน์เตอร์เลย
ดังนั้นข้อมูลทั่วโลกของฉันที่นี่ที่ฉันกำลังจะไป ที่จะใช้เป็นสี่เหลี่ยมจัตุรัสของฉันที่แสดงถึงตารางของฉัน
กระดานโอเอกซ์ของฉัน
จะโสดแล้วนะ พื้นที่มิติขององค์ประกอบ 10
ส่วนใหญ่เนื่องจาก I ไม่ต้องการใช้องค์ประกอบ 0
ฉันจะใช้อาร์เรย์นี้เพื่อ เลือกตัวเลขเพื่อเล่นเกม
มันจะยังอนุญาตให้สำหรับ ฉันมีพิกัดของฉัน
ฉันจะเริ่มต้นสิ่งนี้ โดยมีค่าเพียง 1 ถึง 9
และนี่จะเป็น character array เพราะผมต้องใส่
x และ o เข้าไป
เราไม่ได้พูดถึงตัวละคร อาร์เรย์ยัง แต่จะอนุญาตให้ฉันใส่อักขระเดี่ยว
มันเหมือนกับแนวคิดอาร์เรย์ของ ints ยกเว้นว่ามีอักขระ
ตัวละครจำไว้มี คำพูดเดียวรอบตัวพวกเขา
ดังนั้น 1 2 3 9, 0 ตรงนั้น o ฉันจะข้ามไปฉันจะไม่ใช้
เพราะฉันต้องการใช้สิ่งเหล่านั้น
ทำให้การเขียนโปรแกรมง่ายขึ้นเล็กน้อย
ฉันสามารถใช้ค่าที่ผู้ใช้ ป้อนเป็นดัชนี เป็นดัชนีที่ถูกต้อง
ฉันยังต้อง สร้าง 2 ตัวแปรทั่วโลกสำหรับการเลือกในเทิร์นของผู้เล่น
ดังนั้นการเลือกจะเป็นสิ่งที่พวกเขา ป้อนผ่านแป้นพิมพ์อย่างใดอย่างหนึ่งถึง
9 ขึ้นอยู่กับตำแหน่ง พวกเขาต้องการวาง x หรือ o
ผู้เล่นจะไปเพียง แสดงว่าเป็นเทิร์นของผู้เล่น
ผู้เล่นคนใดคนหนึ่งหรือผู้เล่นที่ 2
ฉันไม่ต้องการข้อมูลระดับโลกอื่น ๆ
ฉันแค่ต้องการฟังก์ชั่นของฉัน ประกาศที่นี่
ฉันจะเริ่ม ด้วยการสร้าง 3 ฟังก์ชั่น
ผมจะได้ 3 การประกาศฟังก์ชัน
กำลังจะมีเลยค่ะ เพื่อตรวจสอบชัยชนะ
มันจะไม่ใช้ข้อมูลใด ๆ
มันจะคืนค่า int
ฉันจะมีอันที่ไม่ ส่งคืนข้อมูลใด ๆ ที่เพิ่งแสดงบอร์ดด้วยอักขระที่ถูกต้อง
นอกจากนี้ยังไม่ใช้ข้อมูลใด ๆ
และฉันก็จะมี ฟังก์ชันที่เพิ่งทำเครื่องหมายบนกระดาน
สิ่งนี้จะรับอินพุตของผู้ใช้
และขึ้นอยู่กับสิ่งที่พวกเขาเข้ามา มันจะวาง x หรือ o ในตำแหน่งที่ถูกต้องในอาร์เรย์แล้ว
display อาร์เรย์นั้นโดยใช้บอร์ดแสดงผล
นี่เลยจะบอกว่า กระดานเครื่องหมาย และนั่นจะทำเครื่องหมายด้วย
x หรือ o
ดังนั้นฉันจึงสามารถนำสิ่งนี้กลับมาใช้ใหม่ได้
ฉันสามารถใช้ซ้ำได้สำหรับ ผู้เล่นหนึ่งหรือผู้เล่นที่ 2
ประกาศฟังก์ชั่น 3 อย่างเพื่อให้ฉันสามารถ วางฟังก์ชันของฉันไว้ที่ใดก็ได้ในโปรแกรม
ฉันได้ประกาศไว้ด้านบนแล้ว
แล้วจะสังเกตได้ว่า 2 ตัวนี้ ฟังก์ชันไม่ส่งคืนข้อมูลใด ๆ และมีเพียงฟังก์ชันเดียวที่ใช้พารามิเตอร์
มาใช้งานฟังก์ชั่นเหล่านี้กันเถอะ ก่อนที่เราจะดำเนินการเล่นเกม
อย่างแรกเลย ดำเนินการตรวจสอบเพื่อชัยชนะ
ฟังก์ชันนี้โดยทั่วไปจะไปที่ ทำงานที่มันจะตรวจสอบกระดานเพื่อดูว่ามีการชนะหรือไม่
มันจะมี จำนวนมากของคำสั่ง if
ฉันอาจจะปรับปรุงได้ รหัสนี้ค่อนข้างน้อย
แต่ขอติชมหน่อยนะครับ ในที่นี้เพราะเราควรมีความคิดเห็นที่ด้านบนสุดของฟังก์ชันของเราเสมอ
สิ่งเหล่านี้ค่อนข้างง่าย
เราควรจะมีชื่อฟังก์ชัน
โดยพื้นฐานแล้วจะบอกว่า ฟังก์ชั่นจะส่งกลับสถานะเกมหนึ่งถ้าเกม
จบลงแล้ว บอกคุณว่าถ้าคุณชนะ ผลลบหนึ่งถ้า เกมกำลังดำเนินอยู่และ
0 ถ้าเกมจบลงและเสมอกัน
ดังนั้นฟังก์ชันนี้จึงตรวจสอบสำหรับ หนึ่งกำลังส่งคืน int
งั้นฉันไปล่ะ ไปข้างหน้าและกำหนดสิ่งนี้
และทั้งหมดนี้คือ มันจะดูที่อาร์เรย์ดูว่ามีจุดใดบ้าง
ในนั้นถ้า 3x ตรงกัน
จึงมีมากมาย คำสั่ง if ต่างกัน
แล้วเราจะรู้ได้อย่างไรว่าผู้เล่นคนนั้นคือหนึ่ง
เรารู้ว่าถ้าผู้เล่นเป็น หนึ่งถ้าตรงกันในแนวทแยงแถวหรือคอลัมน์
เลยต้องเช็คทีละอย่าง หนึ่งในสถานการณ์เหล่านั้น
และเรารู้แถวใน คอลัมน์ตามอาร์เรย์
ดังนั้นถ้ากำลังสองของฉันเท่ากับ ถึงกำลังสอง และกำลังสอง
และกำลังสอง เท่ากับกำลังสอง 3 นั่นหมายความว่าเรา มีการแข่งขันในแถวแรกของเรา
ฉันก็เลยไป สร้างผลตอบแทนที่นี่
ข้างบนนี้บอกเลย ส่งคืนค่าเริ่มต้นนี้เป็น 0
เราจะเริ่มต้นสิ่งนี้ เป็น 0 สำหรับเกมโอเวอร์
และถ้าเรามีนัดกันใน แถวแรกฉันจะกลับหนึ่งเกมจบลงแล้ว
เราก็ต้องมีซีรี่ย์ อื่น ๆ ถ้าตรงกันและจริง ๆ แล้วฉันไม่ต้องการกลับมา
หนึ่งฉันต้องการตั้งค่าผลตอบแทนของฉัน
เพราะเรากลับมาได้แต่มัน ทำให้โปรแกรมติดตามยากขึ้น
ไม่งั้นเราจะไป ตรวจสอบแถวอื่นๆ ทั้งหมดของเรา
ผมจะคัดลอกและวาง รหัสบางส่วนที่นี่เพราะเป็นรหัสที่ซ้ำซ้อนมากมาย
สิ่งเดียวที่เป็น ที่น่าสนใจคือถ้าเราเสมอกัน
ดังนั้นให้ฉันใส่ทั้งหมด อื่น ๆ ถ้าสำหรับผู้ชนะ
แล้วฉันก็จะไป ส่งกลับค่าที่แตกต่างกัน
แทนที่จะมีอย่างอื่นอีกเพียบ ถ้าฉันใส่เครื่องหมายแอมเพอร์แซนด์ได้
แต่นั่นยิ่งอ่านยากกว่านั้นอีก
ถ้าเรามีคู่กัน ในแถวแรก
และมาทำให้แน่ใจว่า .ของเรา การเยื้องถูกต้อง
ถ้าเรามีการแข่งขันในแถวที่สองของเรา นั่นคือสิ่งที่คนที่สองกำลังทำ
ถ้าเรามีการแข่งขันในแถวที่สามของเรา กลับหนึ่ง เพิ่มบรรทัดใหม่เพื่อให้อ่านง่าย
ไม่ต้องมีวงเล็บ เพราะเป็นประโยคเดียว
ในบรรทัดที่ 37 ดูเหมือนว่า เรากำลังจับคู่ 1, 4 และ 7
นี่จึงดูเหมือน a ตรงแนวทแยงกลับหนึ่ง
สี่สิบ เรากำลังจับคู่ 2 5 และ 8
ที่ดูเหมือนแมตช์ของเซ็นเตอร์ ลงไป ดังนั้นคอลัมน์ที่สอง
3 6 คุณสามารถเห็น แมตช์อื่นๆ เช่นกัน
โดยพื้นฐานแล้วเราต้องจับทุกแมตช์ สำหรับแถว คอลัมน์ และแนวทแยง
และนั่นคือสิ่งที่เราทำกับทั้งหมด คำสั่งเหล่านี้มองในอาร์เรย์
ตอนนี้สิ่งหนึ่งที่บอกเราว่าถ้าเรา ไม่มีแมตช์หรือเราเสมอกันคือเราต้องเปรียบเทียบทั้งหมดและ
โดยพื้นฐานแล้วตรวจสอบให้แน่ใจว่าไม่ใช่ตัวเลขที่เริ่มต้น
ถ้าเรามีอาร์เรย์สแควร์ และไม่มี 1 2 3 1 2 3 4 5 6 8 หรือ
9 สำหรับ ค่านั้นหมายความว่าเราเสมอกันเพราะมี
0 หรือ x
เราจะได้เขียนอย่างอื่นได้อีก
ถ้ามันบอกว่าเสมอกันและเราสามารถตั้งค่าผลตอบแทนได้ เป็น 0 ส่งคืนค่าเท่ากับ 0
และอีกครั้ง นี่เป็นเพียงพื้นๆ ตรวจสอบสิ่งนี้เป็นอย่างอื่นถ้าถ้าตัวเลขเหมือนกัน
ตามที่ได้เริ่มต้น
ถ้าต่างกันหมดละก็ นั่นหมายความว่าเราสามารถคืนค่า 0 ได้
มาใส่กัน
ไม่งั้นถ้าเราไม่มี เสมอและเราไม่มีผู้ชนะ นั่นหมายความว่าเรายังทำไม่เสร็จ
ประโยคอื่นสุดท้ายก็พูดได้ คืนค่าเท่ากับค่าลบหนึ่ง
เพราะจำไว้ ฟังก์ชันคือ ส่งคืนค่าลบสำหรับเกมที่กำลังดำเนินการ
หนึ่งรายการสำหรับเกมจบลง และ 0 สำหรับเกมที่ไม่มีผล
แล้วสิ่งสุดท้ายที่อยากทำ คือฉันต้องการคืนค่าส่งคืน
ดังนั้นฉันจะไป บอกว่า return คืนค่ากลับ
และจะทำหน้าที่นี้ให้สมบูรณ์
และคุณสังเกตเห็นอะไรเมื่อ เรากำลังทำสิ่งนี้ เรากำลังแบ่งแยกและพิชิต
ทั้งหมดที่เราเน้นไปทางขวา ตอนนี้กำลังตรวจสอบบอร์ดเพื่อดูว่าจะชนะหรือไม่
เราจะทำงานในขนาดเล็ก ชิ้นนี้และเราจะทำการทดสอบอย่างต่อเนื่อง
ทำให้เราสามารถโฟกัสไปที่ .ของเราได้ การออกแบบและยังช่วยให้เราสามารถลดหรือแยกข้อผิดพลาดของเราได้ง่ายขึ้น
ตอนนี้เราเสร็จแล้วกับ บอร์ดเกม เราต้องการดำเนินการต่อและนำบอร์ดแสดงผลไปใช้
บอร์ดแสดงผลเป็นเพียง จะไปโชว์หน้ากระดาน
ที่ต้องทำทั้งหมดนี้คือ วาดอาร์เรย์ในรูปแบบเฉพาะ
เราจะเขียน a ฟังก์ชั่นที่เรียกว่าจอแสดงผล
มันจะไม่ส่งคืนข้อมูลใด ๆ มันจะไม่ใช้พารามิเตอร์ใด ๆ
สาเหตุที่เป็นฟังก์ชันหมายเลข
หนึ่งเป็นเพราะเราต้องวาดกระดานหลายครั้ง และยังดีกว่าเพราะทำงานเฉพาะเจาะจง
ตอนนี้อันนี้ก็จะมี ฟังก์ชั่น printf จำนวนมากอยู่ในนั้น
และมันจะมี พวงของการจัดรูปแบบ
ดังนั้นฉันจะคัดลอกและวาง
ที่มีเอกลักษณ์ของที่นี่คือ ฉันล้างหน้าจอทุกครั้ง
แต่ถ้าคุณพูดว่าระบบและ windows แล้วคุณพูดว่า cls นั่นจะเป็นการล้างหน้าจอ
มันแค่ทำให้สะอาดขึ้น
เราจะไปกันแค่ ทำ printfs จำนวนมาก
เราจะพิมพ์ชื่อเกมออกมา เราจะพิมพ์โปรแกรมเล่น 1 และ 0 ออกมา
แล้วเราจะไป เพื่อพิมพ์กระดาน
กระดานก็จะสวยหน่อยๆ จัดรูปแบบด้วยแถบคู่ขนานแล้วเราจะพิมพ์
ค่าของค่าทั้งหมดในอาร์เรย์
และถ้าค่าเป็น x หรือ 0 มันจะแสดง
หากไม่เป็นเช่นนั้น ระบบจะแสดง a เราจะได้ใช้ตัวเลขนั้นเลือกออปชั่นในการวาดและนั่นก็คือ
นั่นคือฟังก์ชันทั้งหมดนี้ทำ
ตอนนี้เราเสร็จแล้วกับ แสดงบอร์ด ตอนนี้เราต้องการสร้างฟังก์ชันสุดท้ายของเรา
ซึ่งเป็นการทำเครื่องหมายกระดาน
มาร์คบอร์ดกำลังจะเซ็ตตัว อาร์เรย์ที่มีค่าเฉพาะ
และมันจะพิมพ์ เครื่องหมายใน x หรือ o
ดังนั้นมันจึงใช้ตัวละคร
นี่จะทำอะไรน่ะ มันจะมีอีกหลายอย่างถ้างบ
ดังนั้นในกระดานเครื่องหมายของเรา
เรา อยากจะแสดงความคิดเห็นโดยพื้นฐานแล้วบอกว่านี่ กำลังจะตั้งกระดานด้วยอักขระที่ถูกต้อง
x หรือ o ในจุดที่ถูกต้องในอาร์เรย์
ดังนั้นหวังว่าจะสมเหตุสมผล
ตามที่คุณเห็นรหัส I ต้องจบความคิดเห็นของฉัน
อยากจัดรูปแบบให้สวย มันเลยเป็น 2 เส้นตรงนี้
และทั้งหมดนี้กำลังจะทำ จะตรวจสอบดูว่าผู้ใช้ป้อนอะไร
โปรดจำไว้ว่า เรามีข้อมูลทั่วโลก 2 รายการ ค่าสำหรับสิ่งที่ผู้ใช้ป้อน
เราก็มีค่า สำหรับผู้เล่นปัจจุบัน
ดังนั้นการเลือกจะเป็นพื้น สิ่งที่ป้อนผ่านแป้นพิมพ์
เรายังไม่ได้ดำเนินการนี้เลย เพราะเราจะนำไปใช้ในหน้าที่หลัก
ผู้เล่นกำลังจะเป็น ผู้เล่นปัจจุบัน
เราต้องการทั้งสองอย่าง เหล่านี้เพื่อสร้างเครื่องหมายของเรา
สิ่งที่เราจะทำก็คือเรา จะมีคำสั่งอื่นๆ อีกจำนวนมาก,
if else statement.
เราจะตรวจสอบตัวเลือก ซึ่งเป็นสิ่งที่ผู้ใช้ป้อน
และถ้าตัวเลือกเท่ากับ 1 เรา ต้องการวาดบางอย่างในสี่เหลี่ยมนั้น
เรายังต้องการให้แน่ใจว่า ว่าสี่เหลี่ยมนั้นมีอยู่
ดังนั้นถ้ามันเท่ากับ 1 และไม่ใช่ ปัจจุบันเท่ากับ 1 ซึ่งหมายความว่าโดยพื้นฐานแล้วมีคนใส่
x . แล้ว หรือ o ตรงนั้นและเราใช้งานไม่ได้
ถ้ามันเท่ากับหนึ่งและพวกเขา ป้อนค่าหนึ่ง หมายความว่าเราสามารถตั้งค่าอาร์เรย์เป็นค่าเฉพาะได้
เราจะตั้งค่าอาร์เรย์เป็นอะไร ถูกส่งผ่านทั้ง o the x
และเราจะทำซ้ำ เพื่อทำสิ่งนี้สำหรับแต่ละตัวเลือก
ถ้าเลือก 2 3 4 5 6 8 หรือ 9
ดังนั้นอีกหลายอย่าง ifs ที่ทำสิ่งเดียวกัน
หากผู้ใช้ป้อนตัวเลือก 2 เราจะ จะทำให้แน่ใจว่าการเยื้องนั้นดีและมีกำลังสอง
เราจะทำเครื่องหมายสี่เหลี่ยม 2 ด้วยสิ่งที่เราผ่านที่นี่
และขึ้นอยู่กับว่าเทิร์นของผู้เล่นมันเป็นยังไง คือ, เราจะผ่านค่า an หรือ x
สิ่งสุดท้ายที่เราต้องทำใน ฟังก์ชั่นนี้คือเราต้องตรวจสอบ
ถ้าผ่านอะไรมาบ้าง นอกเหนือจากหนึ่งถึง 9 นั่นเป็นการย้ายที่ไม่ถูกต้อง
ดังนั้นคำสั่งอื่นสุดท้ายของเรา ที่นี่จะพิมพ์ข้อความว่าย้ายไม่ถูกต้อง มันจะ ทำเครื่องหมายผู้เล่นลงหนึ่ง
เพราะจำผู้เล่น เป็นหนึ่งหรือ 2
และเราจะทำเครื่องหมายผู้เล่น กลับมาแล้วเราจะเพิ่มมันในลูปของเราในฟังก์ชันหลักของเรา
แล้วสิ่งสุดท้ายนี้ก็ได้ ถ่านแค่หยุดโปรแกรมชั่วคราวเพื่อให้ผู้ใช้ต้องกด
กลับมาหลังจากย้ายที่ไม่ถูกต้อง
มิฉะนั้นการย้ายที่ไม่ถูกต้องจะ ปรากฏแล้วลบทันทีเพราะ
เราจะวาดกระดานใหม่อีกครั้ง
เพื่อให้ได้รับถ่านหยุดชั่วคราว
มันบังคับให้คุณกดปุ่ม Enter เพื่อป้อนค่าอื่นต่อไป
และนี่คือ 3 หน้าที่ของเรา
จำไว้ว่าฟังก์ชั่นนี้ ไม่ส่งคืนสิ่งใด
ดังนั้นเราจึงสามารถเก็บไว้ที่ด้านล่าง
ตอนนี้เราต้องจริงๆแล้ว ใช้การเล่นเกม
การเล่นเกมดำเนินไป ในหน้าที่หลัก
สำหรับการเล่นเกมนี่คือที่ที่ เราจะขอให้ผู้ใช้ป้อนตัวเลข
เราจะวาด บอร์ดเราจะตรวจสอบการชนะ
เราจะสร้าง 2 ตัวแปรท้องถิ่นที่นี่ และเราจะเริ่มต้นโปรแกรมเล่นของเรา
มาต่อกันที่ สร้างจำนวนเต็ม I.
นี่จะใช้สำหรับลูปของเรา
และเครื่องหมายของเราจะเป็น x หรือ o ขึ้นอยู่กับว่าเป็นตาของใคร
มาร์คจะเป็น x หรือ o ฉันเชื่อ
มาร์คจะเป็น x หรือ o
และทางเลือกจะเป็นอย่างไร ผู้ใช้ป้อนผ่านแป้นพิมพ์
ดังนั้น 2 ตัวแปรโลคัล
เราจะตั้งค่า .ของเราด้วย ผู้เล่นซึ่งเป็นตัวแปรระดับโลก
ตอนแรกก็จะไป เป็นผู้เล่นคนหนึ่งในการเริ่มเกม
จากนั้นเราจะมีลูป
เราจะมีพื้นฐาน วนซ้ำจนกว่าเราจะเล่นเสร็จ
ฉันจะใช้ do while วนซ้ำที่นี่เพราะฉันต้องการให้ดำเนินการอย่างน้อยหนึ่งครั้ง
ฉันต้องการแสดง คณะกรรมการอย่างน้อยหนึ่งครั้ง
ดังนั้นผมจะแสดง เล่นกระดานและเล่นเกมจนกว่าฉันจะได้เสมอหรือชนะ
ดังนั้นฉันจะทำมันให้นานที่สุด เนื่องจาก I เท่ากับลบ 1
ลบ 1 แทนอะไร, มัน แสดงว่าเกมอยู่ในระหว่างดำเนินการ
ฉันจะได้กลับมา ค่าสำหรับการตรวจสอบการชนะ
และคุณจะเห็นว่าในวินาทีนั้น แต่โดยพื้นฐานแล้วเมื่อฉันมีลูปที่ทำสิ่งเดิมซ้ำๆ
และจนกว่าเกมจะจบลง
และเกมกำลังจะเป็น มากกว่าถ้ามันไม่เป็นลบอย่างใดอย่างหนึ่ง
แล้วเราต้องทำอะไรก่อน
อย่างแรกที่ต้องทำคือ เราต้องแสดงกระดาน
ฉันก็เลยเรียกมันว่า .ได้ บอร์ดแสดงผลการทำงาน
จากนั้นเราต้องคำนวณผู้เล่น
และผู้เล่นเริ่มต้นจากผู้เล่นคนหนึ่ง
สิ่งที่เราจะทำที่นี่คือ
เราจะใช้ ternary operator และเราจะบอกว่า หากผู้เล่น mod 2
ผู้เล่นเท่ากับ 1 อื่นเท่ากับ 2
เป็นแนวทางในการตัดสิน ผู้เล่นที่เหมาะสม
การวนซ้ำแต่ละครั้งจะดำเนินต่อไป เพื่อเปลี่ยนจากหนึ่งเป็น 2 หรือ 2 เป็นหนึ่ง
เมื่อเริ่มเป็นผู้เล่นคนหนึ่ง มันจะบอกว่าผู้เล่น
mod 2 หนึ่งหารด้วย 2 หรือเศษ ของหนึ่งหารด้วย 2 คือสิ่งที่หนึ่ง
ดังนั้นถ้าเป็นหนึ่ง คุณ จะเป็นผู้เล่นที่หนึ่ง
และเมื่อคุณกลับไปเพื่อ ซ้ำต่อไป ผู้เล่นจะเท่ากับ
2 เพราะ เราจะเพิ่มมัน
2 mod 2 คือ 0
ดังนั้นถ้ามันไม่เท่ากับ หนึ่ง จากนั้นผู้เล่นจะเท่ากับผู้เล่นที่
2
มันจะตั้งค่าเป็น .เท่านั้น ผู้เล่นคนหนึ่งถ้าผู้เล่น mod 2 เป็นหนึ่ง
จำไว้นะเทอร์เนอร์คนนั้น ผู้ประกอบการหวัง
สิ่งต่อไปที่ฉันต้องทำคือฉัน ต้องรับข้อมูลจากผู้ใช้
นี่ฉันจะพูดว่า ฉันจะไป เพื่อขอให้ผู้ใช้ป้อนตัวเลข
ฉันจะบอกว่าเปอร์เซ็นต์ผู้เล่น d ผู้เล่น 1 หรือ 2 ใส่ตัวเลขแล้วฉันจะใส่เครื่องเล่น
พิมพ์ผู้เล่นหนึ่งหรือ 2
แล้วจะไปอ่าน ข้อมูลจากผู้ใช้โดยใช้ scanf
และนั่นจะเป็นจำนวนเต็ม ที่จะเป็นตัวแทนของจุดบนกระดานตั้งแต่
1 ถึง 9
และฉันกำลังจะไปเก็บ ในตัวแปรทางเลือกของฉัน
ทางเลือกคือหนึ่งนิ้ว ดังนั้น I ต้องผ่านในที่อยู่และฉันต้องบอกว่าทางเลือก
เฉพาะถ้ามันเป็นสตริงฉันจะ ไม่ผ่านในที่อยู่
จากนั้นฉันก็สามารถกำหนดได้โดยทั่วไป ไม่ว่าจะเป็นเครื่องหมายอะไร
ฉันต้องตรวจสอบว่าเครื่องหมาย เป็น x หรือไม่ขึ้นอยู่กับผู้เล่น
ดังนั้นฉันจะใช้ โอเปอเรเตอร์ไตรภาคอีกครั้ง
และฉันจะมอบหมาย เพื่อทำเครื่องหมายทั้ง x หรือ o
ถ้าผู้เล่นเท่ากับ 1 ฉันจะไป เพื่อกำหนดให้ทำเครื่องหมาย x ตัวพิมพ์ใหญ่ x
ไม่งั้นฉันจะไป กำหนดให้เป็น o ตัวพิมพ์ใหญ่ o
ดังนั้นโอเปอเรเตอร์ไตรภาคนี้จึงมาก มีประโยชน์เมื่อคุณต้องกำหนดตัวแปรตามเงื่อนไข
ที่พูดนี้อีกแล้ว ถ้าผู้เล่นเท่ากับ 1 เครื่องหมายจะเท่ากับ
x
มิฉะนั้น มันจะเท่ากับ o
เครื่องหมายคำถามแสดงถึง if การประเมินบูลีนเป็นจริง ทวิภาคแสดงว่าเป็นเท็จหรือไม่
ตอนนี้ฉันได้รับจดหมายที่ถูกต้องแล้ว ฉันสามารถเรียกฟังก์ชันของฉันเพื่อทำเครื่องหมายกระดานโดยพูดว่า
mark กระดานผ่านใน x หรือ o
หลังจากที่ฉันทำเครื่องหมายกระดานและพวกเขา ทำการเลือกแล้วฉันต้องตรวจสอบว่ามีผู้ชนะหรือไม่
ฉันมีตัวแปรของฉัน ฉันซึ่ง จริงๆควรจะเป็นชื่อที่ดีกว่า
มาเช็คสถานะกันเถอะ เกม ตรวจสอบสถานะหรือสถานะของเกมว่าเป็นอย่างไร
และสถานะของเกมก็จะเป็น เท่ากับหนึ่งลบหนึ่งหรือ 0
สถานะเกมกำลังจะไปที่ เท่ากับสิ่งที่ได้รับคืนจากเช็คเพื่อชัยชนะ
เพราะจำไว้ ฟังก์ชันนี้จะ คืนค่าหนึ่งเป็น 0 หรือลบหนึ่ง
หนึ่งถ้าเกมจบลงด้วย ผลลัพธ์ ลบหนึ่งหากเกมกำลังดำเนินอยู่ 0 ถ้ามันจบลงโดยไม่มีผล
ตอนนี้ที่เราเก็บเกม สถานะ เราต้องการเปลี่ยนเงื่อนไขของการวนซ้ำ
ดังนั้นหากสถานะของเกมคือ เท่ากับลบหนึ่ง เราจะกระโดดออกจากวง
อย่างอื่นเราต้องทำ คือการเปลี่ยนเทิร์นของผู้เล่น
เราจะเปลี่ยนเทิร์นของผู้เล่นได้อย่างไร เราแค่เพิ่มผู้เล่นทีละคน
แบบนั้นครั้งหน้าจะขึ้น และมันจะเป็น 2 และผู้เล่นจะเท่ากับ
2 และเราจะกลับลงไป
เมื่อพวกเขาทำผิดพลาดอะไร เกิดขึ้นในเทมเพลตที่ไม่ถูกต้องซึ่งจะลดจำนวนผู้เล่นลง
เมื่อคุณลดจำนวนผู้เล่นลง คุณกลับไปที่ผู้เล่นที่ถูกต้อง
ดังนั้นถ้าเป็นหนึ่ง คุณจะลดเป็น 0 เทิร์นถัดไปจะเป็นเทิร์นเดียว มันคือเทิร์นเดิมของคุณอีกครั้ง
นั่นเป็นเหตุผลที่เราเพิ่มมัน
ตอนนี้ถ้าเป็นผู้เล่นที่ 2 เราเพิ่มขึ้นทีละหนึ่ง
และสิ่งที่เกิดขึ้นคือ 2 หาร 2 ได้ 0
มันเลยกำหนด ผู้เล่นกลับไปหนึ่ง
นั่นเป็นวิธีที่ได้ผล
แต่นี่คือเหตุผลทั้งหมด
เราทำมากที่นี่
คุณไม่ควรเขียนทั้งหมด รหัสนี้และทดสอบในครั้งเดียว
คุณควรจะได้ร่วมงานกับ การแบ่งและพิชิต ทดสอบอย่างต่อเนื่องในขณะที่คุณรันโค้ด
เดี๋ยวจะจัดให้ วิธีแก้ปัญหานี้ แต่ให้เรียกใช้และทดสอบ
มันจะทำงานเหมือนที่ทำใน การสาธิตจากการบรรยายที่ท้าทาย
แต่อีกครั้ง ศึกษารหัสนี้แล้วสร้าง แน่ใจว่าคุณเข้าใจสิ่งที่เกิดขึ้น
การใช้อาร์เรย์และการหาร พิชิตแนวทาง แต่ดูว่าวิธีการหลักนี้ดูดีเพียงใด
ง่ายมากที่จะรู้ว่ามันคืออะไร เกิดขึ้นในวิธีการหลัก
กระดานแสดงผล เปลี่ยนผู้เล่น และคุณ อาจต้องการแสดงความคิดเห็นที่นี่
เปลี่ยนเทิร์นแล้ว รับข้อมูลที่นี่ด้วย
แล้วตั้งค่าให้ถูกต้อง ตัวอักษร ตั้งค่าตัวละครที่ถูกต้องตามเทิร์นของผู้เล่น
ไม่จำเป็นจริงๆ ข้อคิดเห็นเหล่านี้เนื่องจากฟังก์ชันอธิบายได้มาก
ทำเครื่องหมายกระดานตั้งกระดานตาม ตัวเลือกของผู้ใช้หรือตัวเลือกที่ไม่ถูกต้อง
แล้วเช็คสถานะเกม เพื่อชัยชนะค่อนข้างชัดเจน
แล้วเราก็กระโดดออกมา ถ้าเกมจบลง
มาสร้างสิ่งนี้กันเถอะ
หวังว่าจะไม่มีข้อผิดพลาดไม่ คำเตือนเราไม่ได้ซึ่งเป็นสิ่งที่ดี
มาเริ่มกันเลย แล้วคุณจะไป ดูว่ามันใช้งานได้เหมือนในการสาธิตของเรา
สิ่งแรกที่ทำคือ กำลังจะแสดงผลหน้าจอ
และจะยอมให้ ให้เราพิมพ์ enter
และมีกริดของเราหนึ่ง 2 3 4 5 6 7 8 9 อาร์เรย์ของเรา
มันบอกฉันว่าผู้เล่นคนหนึ่ง ป้อนบางสิ่งและฉันกำลังป้อนข้อมูลที่ถูกต้อง
และมันก็วาดมันและ มันล้างหน้าจอ
มันเลยดูน่าสมเพช
และตอนนี้มี x ใน 3
ตอนนี้ถึงตาของผู้เล่นที่ 2
ฉันจะปล่อยให้ทำสิ่งที่ไม่ถูกต้อง
มันบอกว่าการเคลื่อนไหวที่ไม่ถูกต้องจะหยุดชั่วคราว
ฉันตีกลับฉันได้รับ ไปอีกครั้งผู้เล่น 2
ตอนนี้ฉันตีหนึ่ง วาดใหม่ กับ o ในที่เดียว
และฉันทำสิ่งนี้ต่อไปจนกระทั่ง เรามีผู้ชนะหรือผู้แพ้
ดังนั้นขอให้เป็นผู้ชนะสำหรับ o ดังนั้น
ทีนี้ x จะเท่ากับ 2 o คือ จะเท่ากับ 5, x จะเป็น
6 และ o จะเป็น 9
เกมจบลงเพราะเราเพิ่งเสมอ 3 0s
สิ่งหนึ่งที่ฉันลืมไปก็คือ หลังจากวนรอบเพื่อแสดงความยินดีที่คุณชนะ
และสิ่งที่เราต้องทำก็คือ เราต้องตรวจสอบสถานะเกม
หากสถานะเกมเท่ากับ หนึ่ง นั่นหมายถึงผู้เล่นคนหนึ่ง และมันจะเป็นผู้เล่นคนสุดท้ายที่ชนะ
ดังนั้นเราจะพิมพ์ออกมา เปอร์เซ็นต์ผู้เล่น d ชนะ
ไม่งั้นเราจะไป เพียงพิมพ์ออกมาจับฉลาก
เพราะถ้าเราหลุดพ้น และสถานะเป็นลบ เรารู้ว่าเกมจบลงแล้ว
และได้ผลลัพธ์ก็อาจจะทำให้เราต้องมีสิ่งนั้นอยู่ได้ถ้า
คำสั่งเพื่อแสดงผลลัพธ์
ตอนนี้เรามาเรียกใช้อีกครั้งในฐานะผู้ชนะ
และตอนนี้เราจะ เห็นใครบางคนชนะ
ดังนั้นฉันจะใส่ valid ตัวเลขตรงนี้ทำให้
x ชนะอย่างรวดเร็ว และต้องทำในนี้จริงๆ โปรแกรมเพราะอันนั้นหายไป
ไปเลย ผู้เล่นคนหนึ่งชนะและ มันเล่นเสียงดีอีกเสียงที่นั่น
นี่เป็นการบรรยายที่ยาวนาน
ฉันขอโทษสำหรับการบรรยายยาว
ศึกษารหัสนี้ ฉันจะ ให้เป็นไฟล์ต้นฉบับ
หวังว่าเรียนรู้มากเกี่ยวกับ วิธีการแบ่งแยกและพิชิต
ขอขอบคุณ