วิธีการใช้เอ็นจิ้นเกมเทิร์นเบส


17

ลองจินตนาการถึงเกมอย่าง Heroes of Might and Magic หรือ Master of Orion หรือเกมเทิร์นเบสที่คุณเลือก ตรรกะของเกมที่อยู่เบื้องหลังการเปิดรอบต่อไปคืออะไร? มีวัสดุหรือหนังสือให้อ่านเกี่ยวกับหัวข้อหรือไม่ โดยเฉพาะลองจินตนาการถึงวงเกม:

void eventsHandler(); //something that responds to input
void gameLogic(); //something that decides whats going to be output on the screen
void render(); //this function outputs stuff on screen

สิ่งเหล่านี้จะถูกเรียกว่า 60 ครั้งต่อวินาที แต่วิธีการเลี้ยวเข้ามาที่นี่ได้อย่างไร ฉันอาจจินตนาการว่าใน gameLogic () มีฟังก์ชั่นเช่น endTurn () ที่เกิดขึ้นเมื่อผู้เล่นคลิกปุ่มนั้น แต่ฉันจะจัดการกับมันได้อย่างไร ต้องการข้อมูลเชิงลึก

คำตอบ:


21

ตามเกมเปิดจะถูกควบคุมโดยกลไกของรัฐ โดยทั่วไปคุณจะจัดลำดับชุดสถานะที่สามารถเกิดขึ้นได้ในลำดับที่เป็นตรรกะ

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

ตัวอย่างเช่น

  • รัฐ - เปลี่ยนผู้เล่น
    • ตอนนี้เป็นเทิร์นของผู้เล่น 1
  • การกระทำที่ได้รับอนุญาต
    • โจมตี
      • เลือกศัตรูที่จะถูกโจมตี
    • ป้องกัน
      • เลือกหน่วยที่จะปกป้อง
    • ย้ายหน่วย
      • เลือกหน่วยที่จะย้าย
      • ตรวจสอบเพื่อให้แน่ใจว่าการเคลื่อนไหวได้รับอนุญาต
    • ฯลฯ

เห็นได้ชัดว่าสิ่งนี้จะบอลลูนได้อย่างรวดเร็วเนื่องจากฉันได้ร่างแผน จำกัด อย่างยิ่งเท่านั้น การมีความเข้าใจที่ดีเกี่ยวกับสถานะที่เป็นไปได้ในช่วงต้นจะหมายความว่าคุณควรอยู่ในสถานะที่ดีที่จะนำไปใช้ ฉันขอเน้นย้ำอย่างชัดเจนว่าคุณต้องการให้เกมทำงานอย่างไร .... เกมเทิร์นเบสที่ดีต้องมีการวางแผน IMO เป็นอย่างมาก


โครงการโรงเรียนที่ค่อนข้างเก่าแก่ของฉันซึ่งเป็นความพยายามในการพัฒนา 3 เดือนที่ Final Fantasy Tactics :) ใช้เครื่องของรัฐ sourceforge.net/projects/bpfat
James

เฮ้แล้ว Game Engine สำหรับกลยุทธ์เทิร์นเบสล่ะ? คุณช่วยแนะนำอะไรได้บ้าง อาจเป็น Unreal engine ที่เหมาะสมหรือไม่
Rantiev

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

3

ฉันเพิ่งสร้างเกมวางแผนแบบเทิร์นเบสคล้ายกับ Master of Orion (เป็นผู้เล่นเพียงคนเดียวในตอนนี้ผู้เล่นหลายคนอาจจะซับซ้อนกว่านี้เล็กน้อย แต่เป็นความคิดที่คล้ายกัน) นี่คือสิ่งที่ฟังก์ชั่น คลาสตัวควบคุมเกมหลัก):

//for all computer players:
computerTakeTurn(player)

//for all players
moveShips(player)

//for all players
endTurn(player)//see this function below

//for all planets
planet.repairFleet()

//for all players
resolvePlanetaryConflicts(player)

//check to see if any players were destroyed or if the game is over
checkPlayerDestroyedAndGameOver()

ฟังก์ชั่นเทิร์นผู้เล่นของฉันจะทำหน้าที่เฉพาะสำหรับผู้เล่นที่ไม่ได้รับผลกระทบจากคำสั่งที่เกิดขึ้นระหว่างผู้เล่น:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

ฟังก์ชั่นเหล่านี้จะส่งคืนข้อความสถานะและ / หรือทริกเกอร์เหตุการณ์เพื่อให้ GUI สามารถแสดงสิ่งที่เกิดขึ้นในระหว่างการเปิดหรือให้ผู้เล่นรู้ว่าคอมพิวเตอร์ถูกทำลาย ฯลฯ


คุณช่วยระบุรหัสแหล่งที่มาเพื่อตรวจสอบได้ไหม จะช่วยได้มาก เพียงเพื่อการศึกษา
Dvole

@Dvole ฉันกำลังแปลงโค้ดจาก Silverlight / C # เป็น JavaScript โดยใช้แท็ก Canvas HTML5 เมื่อฉันเสร็จสิ้นฉันวางแผนที่จะเปิดซอร์สโค้ดและในเวลานั้นคุณก็ยินดีที่จะดูว่าฉันได้ใช้ฟังก์ชั่นนี้อย่างไร ถ้ามันช่วยให้บริบทคุณสามารถเล่นเกม Space Strategy ของฉันได้ที่นี่: Astriarch - Ruler of the Stars
Matt Palmerlee

2
@Dvole ฉันใช้เวลาพอสมควร แต่ฉันเพิ่งเปิด Astriarch รุ่น Silverlight หากคุณยังสนใจคุณสามารถดาวน์โหลดซอร์สโค้ดจาก github ที่นี่: github.com/mpalmerlee/Astriarch/tree/Silverlight
Matt Palmerlee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.