Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Programming

สร้างชีวิต: ของคอนเวย์เกมของชีวิต

by
Difficulty:IntermediateLength:LongLanguages:

Thai (ภาษาไทย) translation by Muhammad Gufron (you can also view the original English article)

บางครั้งแม้กระทั่งง่ายๆตั้งค่าของพื้นฐานกฏขอให้คุณมาสนใจผลลัพธ์เดียวกันนั่นแหละ ในหัดเล่นพวกเราต้องสร้างแกนหลักของเครื่องยนต์ของ Conway นเกมส์ของชีวิตจากความว่างเปล่า

ข้อควรจำ:ถึงแม้สมัยนี้ comment คือเขียนโดยใช้ C#และ XNA คุณควรจะเป็นสามารถใช้เวทมนตร์เดียวกับเทคนิคการและทบทวนคอนเซ็ปท์ในรอบเกือบทุ 2D เกมการพัฒนาสภาพแวดล้อมนะ


บทแนะนำ

Conway นเกมส์ของชีวิตเป็นเซลลูลาร์ automaton นั่นมันออกแบใน 1970s โดยอังกฤษ mathematician ชื่อ,เอ่อ,จอห์น Conway น

ให้สองมิติเส้นกริดของเซลล์กับบางอย่าง"ใน"หรือ"ชีวิต"กับคนอื่นว่า"ปิด"หรือ"ตาย"และตั้งค่าของกฎเกณฑ์นั่น governs ว่าพวกเขามามีชีวิตอยู่หรือตายพวกเราสามารถมีที่น่าสนใจ"ชีวิต"ปลดปล่อยเจ้า--ตรงหน้าของพวกเรา งั้น,ด้วยกายวาดไม่กี่รูปแบบบของเส้นกริดและจากนั้นก็เริ่มการจำลองสถานการณ์เราสามารถเห็นขั้นพื้นฐานชีวิตแบบฟอร์มก้าวหน้าทางไปทั่งตายไปแล้วในที่สุดก็จัง ดาวน์โหลดที่สุดแหล่งแฟ้ม,หรือตรวจสองสาธิตการด้านล่างนี้:

ตอนนี้,นี่"เริ่มเกมแห่งชีวิต"ไม่ใช่เข้มงวดเป็น"เกม"-มันเป็นมากกว่าเป็นเครื่องจักรส่วนใหญ่เป็นเพราะมันไม่มีเล่นแล้วไม่มีเป้าหมายมันเพียงเจริญขึ้นจากพื้นฐานของมันเริ่มต้นเงื่อนไข ยังไงก็มันเป็นเรื่องสนุกๆให้เล่นกันและมีหลายหลักการของแผนการออกแบบเกมแบบที่สามารถสมัครของมันถูกสร้าง เพื่อไม่ให้เสียเวลามาเริ่มกัน!

เรื่องนี้หัดเล่นฉันไปก่อนและสร้างทุกอย่างใน XNA เพราะนั่นคือสิ่งที่ฉันส่วนใหญ่สบายใจด้วย (มีทางต้องเริ่มกับ XNA อยู่ที่นี่ถ้าคุณสนใจ) อย่างไรก็ตามคุณควรจะสามารถที่จะติดตามพร้อมกับมี 2D เกมการพัฒนาสภาพแวดล้อมที่คุณคุ้นเคยกันดีกว่า


กำลังสร้างเซลล์

คนส่วนใหญ่พื้นฐานธาตุใน Conway นเกมส์ของชีวิตเป็นเซลล์ซึ่งเป็น"ชีวิตแบบฟอร์ม"นั่นรูปแบบพื้นที่ทั้งหมดการจำลองสถานการณ์แล้ว แต่ละเซลล์สามารถเป็นหนึ่งในสองอเมริกาว่ายังมีชีวิต"หรือ"ตาย"ได้ สำหรับผลประโยชน์ของมุมมเราจะอยู่กันสองคนนั้นชื่อสำหรับห้องขังอเมริกาสำหรับที่เหลือของหัดเล่นนะ

เซลล์ไม่ต้องย้ายพวกเขาก็แค่ผลกระทบต่อเพื่อนบ้านของพวกเขาจากพื้นฐานของปัจจุบันของรัฐนะ

ตอนนี้ในแง่ของพวกเขาตั้งโปรแกรม functionality มันมีสามคน behaviors เราจำเป็นต้องให้พวกเขา:

  1. พวกเขาต้องการที่จะคอยติดตามของตำแหน่งขอบเขตและรัฐดังนั้นพวกเขาได้ตีวงเหลือและดึงดูดอย่างถูกต้อง
  2. พวกเขาต้องการจะเปิด/ปิดระหว่างมีชีวิตอยู่และตายเมื่อมีการคลิกซึ่งจะอนุญาตให้ผู้ใช้เพื่อที่จริงให้น่าสนใจสิ่งที่เกิดขึ้น
  3. พวกเขาต้องการที่จะดึงดูดเป็นสีขาวหรือดำถ้าพวกเขาตายหรือยังมีชีวิตอยู่ตามลำดับ

ทั้งหมดของเหนือสามารถเป็นประสบความสำเร็จโดยสร้างห้องขังเรียนซึ่งจะมีรหัสทางด้านล่าง:


ที่เส้นกริดและมันกฏ

ตอนนี้นั่นกันและมือถือจะต้องทำตัวอย่างถูกต้อง,เราต้องการจะสร้างเส้นกริดที่จะหยุดพวกมันทั้งหมดแล้วด้วยอะไรซักอย่างตรรกะที่บอกได้แต่ละคนไม่ว่ามันน่าจะยังมีชีวิตอยู่ยังมีชีวิตอยู่ตายหรือตายแล้ว(ไม่มีซอมบี้!)ย

กฏมันค่อนข้างจะเป็นธรรมดา:

  1. มีอยู่ห้องขังกับน้อยกว่าสองคนอยู่เพื่อนบ้านตายเหมือนว่าสาเหตุมาจากใต้-เยอะเลย
  2. มีอยู่ห้องขังกับสองหรือสามคนอยู่เพื่อนบ้านอยู่ที่ฝนคนรุ่นใหม่
  3. มีอยู่ห้องขังมากกว่าสามองอยู่เพื่อนบ้านตายเหมือนว่าโดย overcrowding น
  4. มีตายแล้วมือถือกับตาที่สามงอยู่เพื่อนบ้านก็จะกลายเป็นอยู่อย่างที่ถ้า reproduction น

นี่คือรีภาพจะนำทางกฎพวกนี้อยู่ในภาพทางด้านล่างนี้ แต่ละห้องโดยเน้นสีน้ำเงินลูกศรจะได้รับผลกระทบจากมันที่ตรงเวลาของเจ้าเริ่มถูกนักฏอยู่ด้านบน อีกนัยนึงก็คือมือถือ 1 จะต้องตายมือถือ 2 คนจะอยู่ยังมีชีวิตอยู่ห้อง 3 จะต้องตายและห้องขัง 4 จะมามีชีวิตอยู่

งั้นเป็นเกมส์จำลองวิ่งการปรับปรุงที่คอยเวลาศนคนเดียวจะคอยดูกันของกฎพวกนี้สำหรับทั้งหมดของเซลล์คนเดียว นั่นสามารถสำเร็จลุล่วงด้วยการตามรหัสในห้องเรียนใหม่ฉันจะโทรหาเส้นกริด:

สิ่งเดียวที่เราจะหายตัวไปจากที่นี่นคือเวทย์มนต์ GetLivingNeighbors วิธีการซึ่งเพียงนับจำนวนของเซลล์ปัจจุบันเป็นเพื่อนบ้านเป็นยังมีชีวิตอยู่ในปัจจุบัน งั้นเพิ่มวิธีการของเราตารางเรียน:

โปรดจำไว้ว่าในด้านบนรหัสคนแรกถ้าคำให้การของแต่ละคู่เป็นเพียงดูนั่นเราไม่ได้อยู่ที่ขอบของคนเดียว ถ้าเราไม่ต้องดูเราจะหนีเข้าไปในหลายข้อยกเว้นจาก exceeding ขอบเขตของอาเรย์นะ แล้วก็ตั้งแต่เรื่องนี้จะนำนับไม่เคยถูก incremented ตอนที่เรากำลังตรวจสผ่านขอบนั่นหมายความว่าเกมส์"ถือว่า"ขอบตายดังนั้นมันเป็นก้อนกำลังถาวรแดงขาวตายแล้วเซลล์รอบๆของเกมหน้าต่าง


กำลังปรับปรุงคนเดียวในดิสครีต name วงเวลาก้าว

ถึงตอนนี้ทั้งหมดตรรกะนั้นเราก็ติดตั้งเพื่อใช้งานคือเสียงแต่มันไม่ได้ทำตัวเหมาะสมถ้าเราไม่ระวังตัวเพื่อให้แน่ใจว่าของระบบจำลองวิ่งอยู่ในดิสครีต name เวลาที่จะค่อยเป็นค่อยไป นี่เป็นแค่ฝันขอบอกว่าทั้งหมดของเซลล์ของเราจะถูกปรับปรุงเป็นเวลาเดียวกันกับสำหรับผลประโยชน์ของมุมมอง ถ้าเราไม่ได้รับคำสั่งเข้าใจเรื่องนี้เราจะเอาพฤติกรรมแปลกๆเพราะคำสั่งซึ่งอยู่ในห้องขังเป็นเช็คก็จะสำคัญหรอกดังนั้นที่เข้มงวดกฎของเราตั้งจะถอยห่างกันและมินิ-ความวุ่นวายจะ ensue น

สำหรับตัวอย่างของเราวอยู่เหนือขั้นตลอดเซลล์จากซ้ายไปขวา,ดังนั้นถ้ามือถือไว้บนซ้ายเราเพิ่งตรวจสอบมามีชีวิตอยู่มันจะเปลี่ยนจำนวนสำหรับห้องขังกลางตอนนี้เรากำลังเช็คและอาจจะทำมันให้มามีชีวิตอยู่ แต่ถ้าเรากำลังตรวจจากขวาไปซ้ายแทนที่เซลล์ที่ถูกต้ออาจจะตายแล้วและคนที่เหลือไม่มามีชีวิตอยู่ยังดังนั้นของกลางเซลล์ต้องอยู่ตายไปแล้ว นี่มันแย่มากเพราะมันเป็นการขัดแย้ง! เราควรจะตรวจเซลล์ในการสุ่มคำสั่งเราต้องการ(มุนวนขึ้น!) แล้วขั้นต่อไปควรจะเป็นเหมือนกันนะ

โชคดีที่นี่เป็นจริงค่อนข้างง่ายที่จะดำเนินในนรหัสมอส ทั้งหมดที่เราต้องการคือการมีสองเส้นกริดของเซลล์ที่อยู่ในความทรงจำสำหรับคนต่อไปของรัฐของระบบของเรานะ ทุกครั้งที่เราวางแผนต่อไปของรัฐของห้องขังเราเก็บมันในครั้งที่สองของแนวตารางสำหรับคนต่อไปของรัฐของระบบทั้งหมด งั้นตอนที่เราเจอคนต่อไปของรัฐของทุกเซลล์ของเราปรับใช้พวกเขาทั้งในเวลาเดียวกัน ดังนั้นเราสามารถเพิ่ม 2D อาเรย์ของ booleans nextCellStates เป็นตัวแปรส่วนตัวและเพิ่มวิธีการที่เส้นกริดคลาส:

ในที่สุด,อย่าลืมซ่อมของคุณปรับปรุงวิธีการอยู่เหนือมัน assigns ผลต่อรัฐแทนที่ตัวปัจจุบันหนึ่งแล้วโทรหา SetNextState ที่สุดของปรับปรุงวิธีการหลังจากที่บางอย่างเสร็จสมบูรณ์แล้ว


วาดแนวตาราง

ตอนนี้เราเสร็จแล้ว trickier ส่วนของคนตามเหตุผลที่เราต้องการที่จะสามารถวาดมันบนหน้าจอ แนวตารางจะวาดกันและมือถือโดยเรียกพวกเขาวาดวิธีการของหนึ่งที่ครั้งเพื่อที่มีชีวิตทุกเซลล์จะเป็นผิวดำและความตายที่จะเป็นสีขาว

ที่จริงเส้นกริดไม่จำเป็นต้องวาดอะไรแต่มันเป็นเรื่องชัดขึ้นได้จากของผู้ใช้มุมมถ้าเราเพิ่มบางเส้นกริดบรรทัด. นี่จะอนุญาตให้ผู้ใช้มากกอย่างง่ายดายเห็นมือถือขอบเขตของแล้วก็สื่อสารของปรับขนาดกล่องสร้างกล่อวิธีการตาม:

โปรดจำไว้ว่าในด้านบนรหัสผมได้รับแจ้งมาว่าเราต้องพิกเซลเดี่ยวและยืดเส้นมันเพื่อสร้างมานานมากและบางสาย. ของคุณโดยเฉพาะเกมเครื่องยนต์อาจจะให้เรียบง่าย DrawLine วิธีการที่คุณสามารถกำหนดสองจุดและมีบรรทัดโดยการวาดระหว่างพวกเขาซึ่งจะทำให้มันง่ายกว่าที่ด้านบน


เพิ่มระดับสูงเกมตรรกะ

ตอนนี้เรามีพื้นฐานชิ้นส่วนเราต้องทำให้เกมไปเราต้องการที่จะนำมันทั้งหมดเข้าด้วยกัน ดังนั้นสำหรับการเริ่มต้นในเกมขอเป็นหลักเรียน(ที่เป็นคนเริ่มทุกอย่าง),เราต้องเพิ่มเป็นสามค่าคงที่เหมือนที่มิติของเส้นกริดและอัตราเร็วเฟรม(ว่ามันเร็วแค่ไหนที่มันจะปรับปรุง)และทั้งหมดอีกอย่างเราต้องการเหมือนพิกเซลเดี่ยวของภาพ,ความละเอียดในการแสดงผลและต่อไปเรื่อยๆ

เรายังต้องเริ่มการใช้งานหลายของพวกนี้เหมือนกำลังสร้างการติดต่อการตั้งค่าขนาดหน้าต่างสำหรับเกมส์และอยากให้แน่ใจว่าตัวชี้ของเมาส์มาอยู่เหคือมองเห็นได้ดังนั้นเราสามารถคลิกที่ปุ่มห้องขังของตัวเอง แต่ทั้งหมดของพวกนี้เป็นเครื่องยนต์-เจาะจงและไม่น่าสนใจมากดังนั้นเราจะข้ามตรงมันและประเด็นเลยเถอะ (แน่นอนถ้าคุณกำลังตามมาอยู่ใน XNA คุณสามารถดาวน์โหลดงซอร์สโค้ดตัวนี้เพื่อให้รายละเอียดทั้งหมดอน)

ตอนนี้เรามีทุกอย่างตั้งและเตรียมพร้อมที่จะไป,เราจะต้องสามารถวิ่งเล่นเกม! แต่ไม่ใช่ดังนั้นเร็วมากเพราะมีปัญหาเราไม่สามารถทำอะไรก็ได้เพราะเกมมักจะวิ่งหนี มันเป็นไปไม่ได้ต้องวาดระบุรูปร่างได้ลอกเลียนเพราะพวกเขาจะแตกแยกกันอย่างที่คุณวาดพวกเขาดังนั้นเราต้องการที่จะสามารถหยุดชั่วคราวในเกม มันคงยังจะดีถ้าเราสามารถเคลียร์คนเดียวถ้ามันกลายเป็นเลอะเทอะนิดหน่อยเพราะของเรา creations จะบ่อยขึ้นอกเหนือการควบคุมไปแล้วและทิ้งหลักฐานไว้

ดังนั้นให้เพิ่มการหัสที่จะหยุดชั่วคราวในเกมส์เมื่อไหร่ที่คน spacebar คือกดดังและชัดเจนที่หน้าจอหากคือแบ็คสเปซถูกกด:

มันคงจะยังช่วยถ้าเราทำให้มันชัดเจนแล้วว่าเกมส์มมันเป็นยัหยุดเล่นชั่วคราวงั้นตอนที่เราเขียนของเราวาดวิธีการให้เพิ่มการหัสสร้างพื้นหลังไปแดงและเขียนคำว่า"หยุดชั่วคราวอยู่"ในพื้นหลัง:

นั่นแหละ! ทุกอย่างที่ควรตอนนี้ต้องทำงานดังนั้นคุณสามารถทำให้มันเป็นโชคดีจังอันนี้ง่ายแขนงมีชีวิตแบบฟอร์มและเห็นว่าเกิดอะไรขึ้น! ไปสำรวจที่น่าสนใจรูปแบบการคุณสามารถทำโดยหมายถึงจากวิกิพีเดียบนหน้าอีกครั้ง คุณยังสามารถเล่นกับอัตราเร็วเฟรม,มือถือขนาดและแนวตารางขนาดต้อง tweak มัคุณจะชอบที่นี่


เพิ่มการปรับปรุง

ตอนนี้เกมเป็นงานได้เต็มที่และไม่มีอะไรน่าอายในการเรียกมันว่างวันเลย แต่หนึ่ง annoyance คุณอาจจะสังเกตคือของคุณการคลิกเมาส์ภายไม่เคยลงทะเบียนตอนที่คุณกำลังพยายามที่จะปรับปรุงห้องขังดังนั้นเมื่อคุณคลิกและลากตัวของเมาส์องข้ามเส้นมันจะทิ้ง dotted เส้นข้างหลังมากกว่ากลิ่นแรงขนาดหนึ่ง นี่มันเกิดขึ้นเพราะอัตราการที่เซลล์ปรับปรุงอัตราการคลิกเมาส์ค้างคือการตรวจสอบแล้วมันไกลเกินไปอย่างช้าๆนะ ดังนั้นเราแค่ต้อง decouple อัตราการเล่นเกมปรับปรุงและอัตราการคืออ่านข้อมูล

เริ่มต้นด้วย defining ที่ปรับปรุงอัตราและอัตราเร็วเฟรมต่างหากในหลักเรียน:

ตอนนี้ตอนที่กำลังเริ่มการทำงานเกมใช้อัตราเร็วเฟรม(เฟรม/วินาที)เพื่อกำหนดว่ามันเร็วแค่ไหนที่มันจะอ่านเมาส์นำเข้าข้อมูลและวาดซึ่งควรจะเป็นเรียบเนียน 60 อัตราเฟรมต่อวินาที comment อย่างน้อยที่สุด:

งั้นเพิ่มเป็นตัวจับเวลาของแนวตารางเรียนเรื่องนั้นมันจะเพียงปรับปรุงเมื่อมันต้องการจะเป็นอิสระแยกจากที่อัตราเร็วเฟรม:

ตอนนี้คุณควรจะวิ่งแข่งตอนอะไรก็ตามความเร็วคุณต้องการแม้แต่จะมาช้าไป 5 ปรับปรุงต่อสองดังนั้นคุณได้ให้นาฬิกาของคุณระบบจำลองปลดปล่อยเจ้า--ในขณะที่ยังคงสามารถวาดดีเรียบเนียนบรรทัดที่เต็มอัตราเร็วเฟรมอน


สรุป

ตอนนี้คุณมีเรียบเนียนและทำงานเกมส์ของชีวิตบนมือของคุณนะแต่ในกรณีที่คุณต้องการที่จะสำรวจมันไกลกว่านี้มีอยู่เสมอมากก tweaks คุณสามารถเพิ่มไปยังมัน ด้วยตัวอย่างเช่นตารางอยู่ในปัจจุบันคิดเอาเองว่านอกเหนืองขอบทุกอย่างตายไปแล้ว คุณอาจจะแก้ไขมันช่างเป็นคนเดียไปรอบๆดังนั้น glider จะบินไปตลอดกาล! ไม่มี shortage ในการเต้นของเรื่องนี้โด่งดังเล่นเกมดังนั้นปล่อยจินตนาการของพวกคุณหลุดออก

ขอบคุณสำหรับอ่านหนังสือฉันหวังว่าคุณได้เรียนรู้บางอย่าเป็นประโยชน์อย่างวันนี้!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.