คำถามติดแท็ก logic

6
ฉันจะรู้ได้อย่างไรว่าเกมไขปริศนาของฉันเป็นไปได้หรือไม่?
ฉันได้สร้างเกมไขปริศนาขึ้นมาโดยมีจุดประสงค์เพื่อกำจัดแผ่นกระเบื้องสีขาวทั้งหมด คุณสามารถลองได้ในตอนท้ายของคำถาม แต่ละครั้งกระดานจะถูกสุ่มสร้างด้วยแผ่นสีขาวในสถานที่สุ่มบนตาราง 5 * 5 คุณสามารถคลิกที่ไทล์ใดก็ได้บนกริดนั้นและมันจะสลับสีของมันและไทล์ทั้งหมดที่แตะที่ด้านข้าง ภาวะที่กลืนไม่เข้าคายไม่ออกของฉันคือความจริงที่ว่าฉันไม่ทราบว่ามันจะสร้างบอร์ดเป็นไปไม่ได้ วิธีที่ดีที่สุดในการตรวจสอบสิ่งต่าง ๆ เช่นนี้คืออะไร? function newgame() { moves = 0; document.getElementById("moves").innerHTML = "Moves: "+moves; for (var i = 0; i < 25; i++) { if (Math.random() >= 0.5) { $(document.getElementsByClassName('block')[i]).toggleClass("b1 b2") } } } newgame(); function toggle(a,b) { moves += 1; document.getElementById("moves").innerHTML = …

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

6
แยกข้อมูลเกม / ตรรกะจากการเรนเดอร์
ฉันกำลังเขียนเกมโดยใช้ C ++ และ OpenGL 2.1 ฉันคิดว่าฉันจะแยกข้อมูล / ตรรกะออกจากการแสดงผลได้อย่างไร ในขณะนี้ฉันใช้คลาสพื้นฐาน 'Renderable' ที่ให้วิธีเสมือนจริงเพื่อนำมาใช้วาดภาพ แต่วัตถุทุกชิ้นมีรหัสพิเศษเฉพาะวัตถุเท่านั้นที่รู้วิธีการตั้งค่าเครื่องแบบ shader อย่างถูกต้องและจัดระเบียบข้อมูลบัฟเฟอร์อาร์เรย์จุดสุดยอด ฉันลงเอยด้วยฟังก์ชัน gl * จำนวนมากโทรไปทั่วรหัสของฉัน มีวิธีการทั่วไปในการวาดวัตถุหรือไม่?
21 c++  opengl  rendering  logic  data 

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

1
แยกฟิสิกส์และตรรกะเกมออกจากรหัส UI
ฉันกำลังทำงานในเกมตัวต่อที่ง่าย การเล่นเกมประกอบไปด้วยบล็อกที่เคลื่อนไหวได้ค่อนข้างมากในบริเวณเกมดังนั้นมันเป็นการจำลองทางฟิสิกส์ที่ไม่สำคัญ อย่างไรก็ตามการใช้งานของฉันอยู่ในความคิดของฉันไกลจากอุดมคติและฉันสงสัยว่าถ้าคุณสามารถให้คำแนะนำกับฉันเกี่ยวกับวิธีที่จะทำให้ดีขึ้น ฉันแบ่งรหัสออกเป็นสองส่วน: ตรรกะของเกมและ UI อย่างที่ฉันทำกับเกมปริศนามากมาย: ตรรกะของเกมรับผิดชอบกฎทั่วไปของเกม (เช่นระบบกฎอย่างเป็นทางการในหมากรุก) UI แสดงพื้นที่เกมและชิ้นส่วน (เช่นกระดานหมากรุกและชิ้นส่วน) และรับผิดชอบภาพเคลื่อนไหว (เช่นการเคลื่อนไหวของชิ้นส่วนหมากรุก) ตรรกะของเกมแสดงถึงสถานะของเกมเป็นตารางตรรกะซึ่งแต่ละหน่วยเป็นความกว้าง / ความสูงของเซลล์หนึ่งในตาราง ดังนั้นสำหรับกริดที่มีความกว้าง 6 คุณสามารถย้ายบล็อกของความกว้าง 2 ได้สี่ครั้งจนกว่ามันจะชนกับขอบเขต UI ใช้กริดนี้และวาดโดยการแปลงขนาดโลจิคัลเป็นขนาดพิกเซล (นั่นคือคูณด้วยค่าคงที่) อย่างไรก็ตามเนื่องจากเกมแทบจะไม่ได้มีตรรกะของเกมเลยเลเยอร์ตรรกะในเกมของฉัน [1] จึงไม่ต้องทำอะไรมากมายนอกจากการตรวจจับการชน นี่คือวิธีการทำงาน: ผู้เล่นเริ่มลากชิ้นส่วน UI ถามตรรกะของเกมสำหรับพื้นที่การเคลื่อนไหวทางกฎหมายของชิ้นส่วนนั้นและให้ผู้เล่นลากมันภายในพื้นที่นั้น ผู้เล่นปล่อยชิ้นส่วนไป UI จัดเรียงส่วนเข้ากับกริด (เพื่อให้อยู่ในตำแหน่งตรรกะที่ถูกต้อง) UI บอกตรรกะของเกมถึงตำแหน่งโลจิคัลใหม่ (ผ่านวิธีการเปลี่ยนแปลงซึ่งฉันควรหลีกเลี่ยง) ฉันไม่ค่อยมีความสุขกับสิ่งนั้น: ฉันกำลังเขียนการทดสอบหน่วยสำหรับเลเยอร์เกมตรรกะของฉัน แต่ไม่ใช่ UI และมันกลับกลายเป็นว่ารหัสที่ยุ่งยากทั้งหมดนั้นอยู่ใน UI: การหยุดชิ้นส่วนจากการชนกับผู้อื่นหรือขอบเขตและสแนปอินตาราง ฉันไม่ชอบความจริงที่ว่า UI บอกตรรกะของเกมเกี่ยวกับสถานะใหม่ฉันอยากให้มันเรียกmovePieceLeft()วิธีการหรืออะไรทำนองนั้นเหมือนในเกมอื่น ๆ …

3
UPS และ FPS - ฉันควร จำกัด อะไรและทำไม
ขณะนี้ฉันกำลังเขียนเกมโดยใช้ C ++ และ SDL2 และมีสิ่งหนึ่งที่ฉันสงสัย - มีเหตุผลไหมที่จะ จำกัด จำนวนเฟรมต่อวินาที (FPS) และ / หรืออัปเดตต่อวินาที (UPS) ฉันเข้าใจว่าถ้าคุณ จำกัด ยูพีเอสคุณจะต้องควบคุมความเร็วของเกมเป็นหลัก - หากผู้เล่นเคลื่อนที่ 1px ต่อการอัปเดตและคุณอัพเดท 30 ครั้งต่อวินาทีเขาจะเคลื่อนที่ด้วยความเร็ว 30px / s และคุณ อาจช่วยลด CPU ได้เนื่องจากจำนวนการคำนวณต่อวินาทีจะลดลง หากคุณ จำกัด FPS จำนวนการเรียกเลขหมายต่อวินาทีจะลดลงดังนั้นคุณจึงลดการใช้ GPU ของคุณ ฉันหวังว่าฉันจะเข้าใจทุกอย่างถูกต้องถ้าไม่รู้สึกอิสระที่จะแก้ไขให้ถูกต้อง คำถามของฉันคือ - ฉันควร จำกัด อะไรในเกมของฉัน FPS? ยูพีเอส? ทั้งสอง? ทั้ง? มีอีกวิธีที่ดีกว่านี้? เกมนี้ส่วนใหญ่ทำได้อย่างไรและทำไม? คำตอบนั้นได้รับการชื่นชมอย่างมาก!
11 game-loop  logic  sdl2 

3
เหตุใดฉันจึงควรแยกวัตถุออกจากการแสดงผล
Disclamer:ฉันรู้ว่ารูปแบบของเอนทิตีคืออะไรและฉันไม่ได้ใช้ ฉันอ่านมากเกี่ยวกับการแยกวัตถุและการแสดงผล เกี่ยวกับความจริงที่ว่าตรรกะของเกมควรเป็นอิสระจากเอ็นจิ้นการเรนเดอร์พื้นฐาน นั่นเป็นสิ่งที่ดีและสวยงามและมันก็สมเหตุสมผลดี แต่มันก็ทำให้เกิดความเจ็บปวดอื่น ๆ อีกมากมายเช่นกัน: ต้องการการซิงโครไนซ์ระหว่างวัตถุลอจิกและวัตถุการแสดงผล (อันที่ทำให้สถานะของภาพเคลื่อนไหว, สไปรต์ ฯลฯ ) จำเป็นต้องเปิดวัตถุตรรกะให้กับประชาชนเพื่อให้วัตถุแสดงผลอ่านสถานะที่แท้จริงของวัตถุตรรกะ (มักจะนำวัตถุตรรกะที่จะเปลี่ยนได้อย่างง่ายดายในวัตถุทะเยอทะยานและ setter) นี่มันฟังดูไม่ดีสำหรับฉัน ในทางกลับกันมันง่ายมากที่จะจินตนาการว่าวัตถุเป็นตัวแทนของ 3d (หรือ 2d) และยังง่ายต่อการบำรุงรักษา มีวิธีการรักษาการแสดงกราฟิกและตรรกะเกมควบคู่กัน (หลีกเลี่ยงปัญหาการซิงโครไนส์) แต่เป็นนามธรรมออกไปจากเอ็นจิ้นการเรนเดอร์หรือไม่? หรือมีวิธีแยกตรรกะเกมและการเรนเดอร์ที่ไม่ทำให้เกิดข้อเสียข้างต้นหรือไม่? (อาจมีตัวอย่างฉันไม่เข้าใจการพูดที่เป็นนามธรรม)

5
โครงสร้างข้อมูลสำหรับเกมลอจิก / กฎการลดหย่อน / ชุดเบาะแสเพียงพอหรือไม่
ฉันคิดเกี่ยวกับการพัฒนาเกมลอจิกคล้ายกับPuzzle ของ Einsteinซึ่งจะมีเบาะแสที่แตกต่างกันสำหรับการเล่นเกมใหม่ทุกครั้ง โครงสร้างข้อมูลใดที่คุณใช้เพื่อจัดการหน่วยงานต่าง ๆ (สัตว์เลี้ยงสีบ้านเชื้อชาติ ฯลฯ ) กฎการหักเงิน ฯลฯ เพื่อรับประกันว่าเบาะแสที่คุณให้นั้นชี้ไปที่โซลูชันที่ไม่ซ้ำกันหรือไม่ ฉันมีเวลาที่ยากลำบากคิดเกี่ยวกับวิธีการได้รับกฎการหักเงินเพื่อเล่นพร้อมกับเบาะแสที่เป็นไปได้; ความเข้าใจใด ๆ จะได้รับการชื่นชม

1
การแยกโลจิคัล / อัพเดตจากโค้ดการแสดงผล / การวาดในเธรดเดี่ยวโดยใช้โหมดสลีป
ฉันได้อ่านแล้วว่าความเร็วของวัตถุในเกมไม่ควรถูกขัดขวางโดย FPS แต่ควรขึ้นอยู่กับเวลา ฉันจะแยกโค้ดอัปเดต / วาดเพื่อเพิ่มประสิทธิภาพได้สูงสุดโดยไม่ จำกัด อัตราการวาดและให้อัตราการอัปเดตตรรกะอย่างต่อเนื่องตามเวลาได้อย่างไร รหัสหลอกปัจจุบันของฉันเป็นดังนี้ loop { draw(); if (ticksElapsed() > 100) { update(); ticks+= ticksElapsed(); } } ปัญหาคือรหัสการวาดภาพเป็นอุปสรรคต่อประสิทธิภาพของอัตราการอัปเดต () และมันใช้ cpu 100% เพราะถ้าการนอนหลับถูกโยนทิ้งมันจะสลัดฟังก์ชันการวาดภาพ / ลอจิกออก ฉันใช้ SDL ด้วยและดูเหมือนจะไม่มีตัวเลือก vsync ฉันเคยได้ยินคำศัพท์ที่แก้ไขแล้วและเปลี่ยนแปลงเวลาได้อย่างรวดเร็ว แต่ฉันไม่แน่ใจว่าจะทำอย่างไรกับการนอนหลับ ()

4
เอ็นจินเหมือนกับเอ็นจิ้นกระบวนการซอร์สอย่างไร
ใน Source engine (และเป็นผู้บุกเบิก, goldsrc, quake's) วัตถุของเกมจะถูกแบ่งออกเป็นสองประเภทโลกและเอนทิตี โลกคือรูปทรงเรขาคณิตของแผนที่และเอนทิตีคือผู้เล่น, อนุภาค, เสียง, คะแนน, ฯลฯ (สำหรับ Source Engine) ทุกหน่วยงานมีฟังก์ชั่นการคิดซึ่งทำทุกตรรกะสำหรับเอนทิตีนั้น ดังนั้นหากทุกอย่างที่ต้องประมวลผลมาจากคลาสพื้นฐานพร้อมฟังก์ชันคิดเครื่องมือสร้างเกมสามารถเก็บทุกอย่างไว้ในรายการและในทุก ๆ เฟรมวนรอบมันและเรียกฟังก์ชันนั้น ในตอนแรกความคิดนี้มีเหตุผล แต่อาจใช้ทรัพยากรมากเกินไปถ้าเกมมีเอนทิตีจำนวนมาก .. ดังนั้นเอ็นจินเช่น Source ดูแล (กระบวนการอัปเดตวาด ฯลฯ ) ของวัตถุในเกมอย่างไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.