พื้นฐานการพัฒนาเกมคืออะไร? [ปิด]


12

ฉันไม่เข้าใจวิธีการเข้ารหัสวิดีโอเกมอย่างสมบูรณ์

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

คำตอบ:


14

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

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

  1. แอปพลิเคชันของคุณจะออกจากหรือ
  2. มันจะยังคงดำเนินต่อไปจนกว่าผู้ใช้จะกดปุ่ม "ออก"

เดิมพันของฉันคือ # 2 แอปพลิเคชันจะดำเนินต่อไปจนกว่าผู้ใช้จะกดปุ่มเพื่อออกจากแอปพลิเคชันคอนโซลโดยชัดแจ้ง

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

คุณเพิ่งได้รับการแนะนำให้รู้จักกับ Game Loop เกมเป็นเพียงโปรแกรมอื่นที่ทำงานจนกว่าจะออกโดยชัดแจ้งโดยผู้ใช้

ขณะที่อยู่ในลูปเกมเมื่อคุณเล่นเกมการเคลื่อนไหวจะเป็นภาพที่วาดบนหน้าจอในพิกัดเฉพาะ เมื่อผู้ใช้ / ผู้เล่นกดปุ่มทิศทางเช่น[Left]จากนั้นคุณทำให้ภาพของคุณรีเฟรชพิกัดในขณะที่ลดพิกัด X ของมันเพื่อให้คุณแสดงความรู้สึกสำหรับการเคลื่อนไหวไปในทิศทางซ้าย คุณต้องได้รับอินพุตเหล่านี้เพื่อให้ได้สิ่งที่ผู้เล่นต้องการให้ตัวละคร / เรือของเขาทำต่อไป จากนั้น Game Loop จะวนรอบต่อไปจนกว่าคุณจะได้รับการกระทำอื่นที่ต้องการจากผู้เล่นจนกว่าเกมจะออก

ฉันเกรงว่าคำตอบนี้จะเริ่มยาวพอสมควรดังนั้นให้ฉันชี้ให้คุณอีกสองคำถามที่อาจเป็นที่สนใจของคุณฉันหวังว่า

  1. จะเริ่มเขียนเกมแบบฝึกหัดหรืออะไรทำนองนั้นได้ที่ไหน?
  2. ย้ายเทพดาของฉันใน XNA ใช้คลาส

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

ฉันหวังว่านี่จะช่วยได้! =)


4

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

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

สำหรับคำแนะนำฉันจะบอกว่าคุณเขียนโปรแกรมต่อไปเรื่อย ๆ เท่าที่คุณจะทำได้ หากคุณสนใจที่จะมุ่งเน้นไปที่การเขียนโปรแกรมเกมและคุณรู้จักการเขียนโปรแกรมคอนโซลเพียงอย่างเดียวลองทำการผจญภัยหรือ RPG แบบตัวอักษรขนาดเล็ก ด้วยวิธีนี้คุณจะได้ฝึกฝนวิธีการจัดการตัวแปรของคุณใช้ตัวเลขสุ่มและจัดระเบียบโค้ดของคุณ

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

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

มีทางยาวไปข้างหน้า แต่จำไว้ว่าความสนุกกำลังเดินผ่านมัน

ดีแล้วทำต่อไป!


4

เกมคอมพิวเตอร์คือวงวนไม่รู้จบของ:

  • อัปเดต: เลื่อนระดับสถานะเกมหนึ่งช่วงเวลาเล็ก ๆ (เช่น 1/80 วินาที)
  • ระบายสีสถานะเกมปัจจุบัน

มีความหลากหลายของสิ่งเหล่านี้ เกมบางเกมมีการปรับปรุงเพิ่มเติมระหว่างการระบายสีแต่ละครั้งหรืออาจแตกต่างกันไปเพื่อให้การไหลของเกมราบรื่นบนเครื่องต่างกัน แต่นั่นคือรายละเอียดทางเทคนิค

ขั้นตอนการอัปเดตที่เกิดขึ้นระหว่าง 50 และ 100 เท่าในแต่ละวินาที (ใช่บ่อยครั้ง) ทำสิ่งนี้:

  • อัพเดทเกมฟิสิกส์ บอกได้เลยว่านักแสดงมีความเร็ว การอัปเดตควรเลื่อนเขาไปนิดหน่อยในทิศทางที่ถูกต้อง นอกจากนี้ถ้าคุณใช้เครื่องมือฟิสิกส์มันควรตรวจสอบการชนกับแอคชั่นหรืออุปสรรคอื่น ๆ
  • อัปเดตกฎของเกม นี่คือสิ่งที่ทำให้มันเป็นเกมและไม่ใช่การทดลองทางฟิสิกส์ บอกว่ามีกระสุนนัดนักแสดง กฎของเกมบอกผู้เล่นให้หักคะแนนสุขภาพ X และสัญลักษณ์แสดงหัวข้อย่อยจะหายไป
  • การอัพเดท AI บางครั้งนักแสดงที่ควบคุมด้วยคอมพิวเตอร์ควรจะตัดสินใจในสิ่งที่ควรทำ ไปทางซ้ายหรือขวา ค้นหาเส้นทางสู่สถานที่ที่น่าอยู่ ยิงอาวุธ
  • การควบคุมอินพุต อัปเดตนักแสดงของผู้เล่นตามปุ่มที่กดบนแป้นพิมพ์
  • อัปเดตกราฟฉาก สิ่งนี้สามารถพัฒนาแอนิเมชั่นได้ในขั้นตอนเดียวหรืออัปเดต GUI เพื่อแสดงว่าตอนนี้ผู้เล่นมีพลังชีวิตน้อยลง 10 คะแนน มีวัตถุประสงค์เพียงอย่างเดียวคือทำให้เกมดูดีและรู้สึกดี

คุณเริ่มจากที่ไหน

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

ฉันคิดว่าคุณสามารถสร้างคลาสได้ ทำคลาสบอล มีสมาชิกต่อไปนี้: x, y, deltaX, deltaY ทั้งหมดเป็นจำนวนเต็มและในระดับพิกเซล ตอนนี้เขียนวงนี้

forever, do this {
  start measure time (in milliseconds)
  //physics part
  add deltaX to x
  add deltaY to y
  if x is bigger than the screen width, assign -deltaX to deltaX
  if y is bigger than the screen height, assign -deltaY to deltaY
  if x is less than 0, assign -deltaX to deltaX
  if y is less than 0, assign -deltaY to deltaY

  //paint
  paint the ball at x, y
  stop measuring time, assign this to workTime
  make the thread sleep for (25 - workTime) milliseconds
}

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

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

ทำไมต้องนอนเป็นเวลา (25 - เวลาทำงาน) มิลลิวินาที หากคุณทำเช่นนี้การจำลองจะทำงานด้วยการอัพเดต 40 ครั้งและสีต่อวินาที มันจะค่อนข้างราบรื่น ถ้าคุณจะข้ามส่วนสลีปภาพเคลื่อนไหวจะกระตุกและใช้ CPU 100% นอกจากนี้ความเร็วของลูกบอลก็ขึ้นอยู่กับความเร็วของเครื่องที่ใช้ด้วย ตอนนี้ความเร็วแนวตั้งของลูกคือ 40 * deltaY พิกเซลต่อวินาที


2

ใช้โปรแกรมคอนโซลของคุณที่ใช้คณิตศาสตร์และเมื่อคุณตอบถูกต้องแล้วให้ยิงปาปาบางส่วน ... มันกลายเป็นเกม

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

เกมซิมเป็นตัวอย่างที่ดีของจริงถึงเสมือนจริง เมื่อไม่นานมานี้ฉันได้อ่านบทสัมภาษณ์กับคนที่อยู่เบื้องหลังเกมซิมและเกือบทั้งหมดยกเว้นว่าเกิดจากการอ่านเกี่ยวกับหัวข้อที่พยายามอธิบายโลกรอบตัวเราจากนั้นควบคุมด้วยสูตรทางคณิตศาสตร์และนำไปสู่สภาพแวดล้อมเสมือนจริง เพื่อเป็นตัวแทนของมัน ตัวอย่าง SimCity เกิดจากการพยายามจำลองพื้นฐานของเศรษฐกิจ

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

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


ฮ่า ๆ "วิดีโอเกมเป็นฐานข้อมูลชุดข้อมูลที่ จำกัด เร็วมาก" น่าจะเป็นแค่การเพิ่มความสับสน
michael.bartnett

1

สิ่งที่คุณต้องเข้าใจคือการฝึกอบรม พวกเขาหนุนเกม เมื่อคุณเข้าใจถึงพลังของเมทริกซ์แล้วคุณจะเห็นว่าเกมลดการใช้คณิตศาสตร์อย่างง่ายได้อย่างไร

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.