การเขียนโปรแกรมเกม: C # หรือ C ++? [ปิด]


15

ฉันตัดสินใจว่าสิ่งที่ฉันต้องการจริงๆคือทำโปรแกรมเกม ดังนั้นคำถามคือเมื่ออายุ 18 ปีที่ต้องการเรียนรู้การเขียนโปรแกรมด้วยตัวเองภาษาการเขียนโปรแกรมที่เหมาะสมที่สุดระหว่าง C # และ C ++ คืออะไร (ฉันควรระบุว่าฉันไม่สนใจ Unix เพราะฉันเชื่อว่า windows จะยังคงเป็น OS ที่ใช้มากที่สุด)

ฉันรู้พื้นฐานของ C ++ แต่ไม่มีเกี่ยวกับ C # ฉันรู้ว่า C ++ มีคู่มือการสอนเพิ่มเติม, ที่กำลังและสิ่งต่างๆเช่นนั้น, ในขณะที่ C # ไม่ได้, แต่มันง่ายกว่าที่จะเรียนรู้และใช้สำหรับคนคนเดียวในการพัฒนาโปรแกรม, แต่ฉันอ่านแม้ว่าโปรแกรมนั้นจะงงงวย มันง่ายที่จะได้รับแหล่งที่มาของมัน

ฉันต้องการที่จะเน้นเรื่องพื้นฐานเป็นอย่างมากก่อนอื่นฉันต้องบอกว่าฉันชอบ C ++ เพียงเพราะรู้สึกเหมาะสมกับฉันมากขึ้น แต่ฉันต้องพิจารณาว่าฉันทำงานคนเดียว ดังนั้นแม้ว่าฉันจะชอบมันก็อาจจะไม่ใช่สิ่งที่ดีที่สุดที่จะทำ

ฉันไม่แน่ใจว่าจะไปไหนฉันอ่านกระทู้มากมายในเว็บไซต์ต่างๆและดูเหมือนว่า C # กำลังเป็นที่นิยมมากกว่า C ++ แต่ใช่ที่กล่าวว่าฉันยังระบุว่าฉันต้องการจะเขียนโปรแกรมเกม ดังนั้นฉันต้องรู้จุดที่ดีกว่า "C # นั้นง่ายกว่าเพราะการจัดการหน่วยความจำ. net ในขณะที่ C ++ ไม่ใช่" เพราะฉันหามันไม่เจอ


16
คุณอาจพบว่าgamedev.stackexchange.com มีประโยชน์
อดัมเลียร์

1
C # คือสิ่งที่ฉันอยากจะแนะนำcreate.msdn.com/en-US/education/catalog/?devarea=6
Daniel Little

2
ดูที่นี่ด้วย: gamedev.net
Patrick Hughes

คำตอบ:


21

ฉันเรียนรู้ C ++ ด้วยการเขียนโปรแกรมเกม นั่นเป็นประสบการณ์ที่สนุกสนานมาก ฉันขอแนะนำให้คุณทำเช่นเดียวกัน!

อย่างไรก็ตามตอนนี้ฉันเป็นโปรแกรมเมอร์ C # ฉันรู้ว่าฉันจะมีประสิทธิผลมากขึ้นถ้า C # พร้อมใช้งานในเวลานั้น

C # เป็นตัวเลือกที่สมบูรณ์แบบสำหรับการเรียนรู้การพัฒนาเกม มันมีทุกสิ่งที่คุณต้องเริ่มจากกรอบการทำงานกับหนังสือและภาษานั้นยอดเยี่ยมมาก

ผมเคยเห็นหลายสิบของหนังสือโดยเฉพาะเขียนในการเขียนโปรแกรม C # เกมและ Microsoft มีการวางจำนวนมากของความพยายามในการปรับปรุงกรอบของเขารวมทั้งDirectXและXNA

อัปเดต : คุณอาจสนใจสิ่งนี้เช่นกัน มันเป็นบล็อกโพสต์ล่าสุดจากMiguel de Icaza

UPDATE 2013-02-22ไมโครซอฟท์วางแผนที่จะยุติการสนับสนุน XNA


1
ดังนั้นบางทีฉันควรเริ่มรอบ SDL หรืออะไรแบบนั้นกับ C ++ แล้วไปที่ C # ในอนาคต .. มันก็ดูเหมือนว่า C ++ จะถูกแทนที่ด้วย C # ยกเว้นการสร้างเครื่องยนต์ทำไมมันยากที่จะเลือก !
Chronix

2
เข้าใจว่า C # นั้นยอดเยี่ยมสำหรับการประสบความสำเร็จในการพัฒนาเกมไม่ใช่เพื่อการพกพาในบางแพลตฟอร์มของเกมหรือความกังวลอื่น ๆ สถานการณ์กรณีที่ดีที่สุดคือเมื่อคุณรู้ว่ามี dev เกมเพียงพอที่จะใช้ทั้งสองและคุณเลือก C ++ หรือ C # ขึ้นอยู่กับแพลตฟอร์มเป้าหมาย
Klaim

นอกเหนือจากนั้น +1 อย่างชัดเจน ฉันยังคงชอบ C ++ โดยส่วนตัว แต่เป็นเพราะโครงการส่วนใหญ่ของฉันต้องการการเข้าถึงระดับต่ำด้วยเหตุผลเฉพาะบางโครงการ
Klaim

12

บริษัท เกมส่วนใหญ่ใช้ภาษา C ++ หรืออาจใช้สคริปต์ไพ ธ อนหรือภาษาอื่น ๆ ที่ทำงานอยู่เบื้องหลัง Moreso เนื่องจากการผูกสำหรับ OpenGL และ DirectX มีจุดมุ่งหมายที่ C ++ (ถึงแม้ว่าฉันค่อนข้างแน่ใจว่าคุณสามารถทำสิ่ง Direct3d ได้มากใน C #) แต่สำหรับการเขียนโปรแกรมเกม C ++ เป็นภาษาหลัก

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

ฉันจะเริ่มต้นด้วยสิ่งที่ง่ายมากก่อน สำหรับ 2d stuff SDL (Simple Directmedia Layer) นั้นใช้งานได้ง่ายกว่ามาก (สำหรับเกมแบบบนลงล่าง) เมื่อคุณเข้าสู่ 3D I โดยส่วนตัวฉันคิดว่า OpenGL ง่ายต่อการเรียนรู้ (แต่นี่เป็นความเห็นทั้งหมด) MS มีบทช่วยสอน / ตัวอย่างที่ดีในเอกสาร DirectX SDK ของพวกเขาดังนั้นมันจึงคุ้มค่าที่จะดู บทเรียนของ Nehe แม้ว่าจะล้าสมัยไปสักหน่อยก็ยังดีอยู่

แต่คุณจะตอบคำถามของคุณโดยทั่วไปแล้วจะทำใน C ++


1
SlimDX ให้บริการ wrapper DirectX สำหรับ. NET
Danny Varod

1
"สำหรับการเขียนโปรแกรมเกม C ++ เป็นภาษาหลัก" ฉันไม่เห็นด้วยกับข้อความนั้น ตลาดเกมมีความกว้างมากกว่าเกมคอนโซล AAA เพียงอย่างเดียวนั่นเป็นส่วนที่เล็กกว่าของตลาดมากกว่าที่ผู้คนมักจะตระหนัก ฉันจะบอกว่ามีเกมมากมายที่เขียนในภาษาเช่น ActionScript มากกว่า C ++
MattDavey

8

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

ถ้าคุณต้องการเริ่มทำเกมฉันขอแนะนำให้เรียนรู้ C # หากคุณรู้พื้นฐานของ C ++ อยู่แล้วคุณไม่ควรมีปัญหาในการเลือก C # การทำให้ C # เป็นเครื่องมือของคุณมีข้อดี มันเป็นเรื่องง่ายที่จะเรียนรู้ภาษา (เทียบกับ C ++) และเป็น "ภาษาที่มีการจัดการ" ซึ่งหมายความว่ามันจะทำการประปาหน่วยความจำให้คุณโดยอัตโนมัติ ) นอกจากนี้ยังช่วยให้คุณสามารถเข้าถึง XNA Framework ของ Microsoft ที่ทำให้การประปาที่น่าเบื่อยิ่งขึ้นสำหรับคุณ นั่นทำให้คุณมีสมาธิกับสิ่งต่าง ๆ เช่นวงจรเกมและการออกแบบโดยไม่ต้องกังวล (มากเกินไป) เกี่ยวกับการทำให้มันใช้งานได้ จริงทั้งหมดนี้ระบบประปามีค่าใช้จ่ายซึ่งหมายความว่าคุณอาจจะไม่ได้สร้างเกมสามมิติระดับอุตสาหกรรม แต่คุณเพิ่งเข้าสู่การเขียนโปรแกรมเกม ดังนั้นฉันสงสัยว่าคุณจะทำ Halo ต่อไปในความพยายามครั้งแรกของคุณ :)

นี่คือการโพสต์ชันสูตรโดยคนที่พัฒนาเกม XNA ที่ประสบความสำเร็จ (Weapon of Choice) เขาให้รายละเอียดว่าการใช้ C # / XNA ช่วยประหยัดเวลาในการพัฒนาของเขาอย่างไรเมื่อเทียบกับการใช้ C ++ http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

ดังที่กล่าวไว้คุณควรลงทุนเวลาอย่างน้อยก็รู้ว่าสิ่งต่าง ๆ ทำงานอย่างไรในพื้นหลัง โปรแกรมเมอร์ C ++ จะทำอย่างไร การเรียนรู้ที่จะสร้างเกมใน C ++ อาจทำให้การเข้าร่วมทีมพัฒนาเกมอื่นง่ายขึ้น (เนื่องจากเกมส่วนใหญ่ทำงานใน C ++) หากสิ่งที่คุณต้องการคือการได้รับความนิยมในอุตสาหกรรมเกม แต่ถึงแม้ว่าคุณจะไม่เคยใช้ C ++ การรู้ว่าการทำงานของ internals สามารถทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้นได้ไม่ว่าคุณจะใช้ภาษาใด


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

ฉันต้องการเพิ่มคำถามนี้ที่ C # ยังมี XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) เพื่อประโยชน์ของมัน XNA เป็นมากง่ายต่อการเลือกขึ้นกว่าที่ไม่มีการจัดการ DirectX
Vitor Py

1
@DominicMcDonnell: คุณสามารถมีปัญหาเกี่ยวกับหน่วยความจำโดยการอ้างอิงถึงสิ่งที่ซ่อนอยู่ที่ไหนสักแห่งใน runtimes ที่มีการจัดการเช่น C # ด้วยและเมื่อมันมาถึงคุณจะต้องล่ามันให้หนักขึ้นเพราะคุณจะไม่คิดถึงการใช้ทรัพยากร
Jan Hudec

@JanHudec ฉันไม่ทราบว่า ฉันคิดว่าคุณอาจพูดได้ว่าการทำงานให้เรียบง่ายและง่ายขึ้น แต่ปัญหาก็ยากที่จะติดตามและนิสัยในการใช้ภาษาก็ช่วยให้คุณสร้างแนวทางได้
Dominique McDonnell

3

ฉันส่งเสริม C ++ เป็นอย่างมากสำหรับการพัฒนาเกม มีอุปสรรคพิเศษเล็กน้อยด้วยข้อดีและข้อเสียต่าง ๆ หนึ่งในเหตุผลที่ดีที่สุดคือการพกพา

ด้วย C # คุณสามารถพัฒนาได้มากขึ้นในวันนี้และมีเอ็นจิ้นที่ยอดเยี่ยมที่มีการตั้งโปรแกรมไว้อย่างแน่นอน ทั้งสองนี้เป็นภาษาที่ดีสำหรับการเขียนโปรแกรมเกมหากคุณกำหนดเป้าหมายเฉพาะแพลตฟอร์ม Windows / Xbox คุณจะมีเหตุผลที่ต้องพึ่งพา C # เป็นพิเศษ

ภาษาที่ฉันคิดว่าคุณควรเรียนรู้ที่สุดคือ OpenCL หรือ CUDA ซึ่งเป็นภาษา GPGPU บางภาษา โดยส่วนตัวแล้วฉันชอบ OpenCL มากเพราะดูเหมือนว่าจะอยู่ได้นานกว่าและเติบโตต่อไปมันเป็นสไตล์ C เท่านั้น มีOpenTKซึ่งเป็น wrapper ที่ดีสำหรับ C ++ หรือ C #

ฉันสงสัยอยู่เสมอว่าการเขียนโปรแกรมเกม Ruby เป็นอย่างไรกับการเร่งด้วยฮาร์ดแวร์ ...


3

การเขียนโปรแกรมเกมแบบ Raw จะทำให้คุณค่อนข้างเย็นชา การทำงานกับการโทรกราฟิกระดับต่ำทั้งใน C # หรือ C ++ เป็นฝันร้ายเล็ก ๆ น้อย ๆ และคุณไม่ต้องการสร้างวงล้อของการเรนเดอร์ 2D Sprite ในแบบจำลองสามมิติ เมื่อคุณอยู่คนเดียวและต้องการเรียนรู้การเขียนโปรแกรมทางออกที่ดีที่สุดของคุณคือการหากรอบที่ทำให้คุณก้าวไปข้างหน้าเล็กน้อย

เนื่องจากคุณมีความคุ้นเคยกับภาษาที่ใช้ภาษา C ข้อเสนอแนะของฉันคือการทำให้Unity 3Dดู ไม่เพียง แต่จะได้รับความสนใจอย่างจริงจังในการรับเอามาใช้ในเชิงพาณิชย์จากร้านค้า dev เกมและมีตัวเลือกแพลตฟอร์มที่น่าสนใจ (รวมถึงพีซี, android, iPhone และ runtimes บนเว็บ) แต่ก็ยังมีรุ่นฟรีที่ใช้งานง่ายมาก เพื่อแสดงวิธีย้ายจากแนวคิดไปสู่การใช้งาน ดีที่สุดของทั้งหมด (IMO) หนึ่งในภาษาสคริปต์ที่รองรับคือ C #


2

ฉันทำเกมในชั้นเรียนเมื่อสองปีก่อน (ตอนนั้นฉันอายุ 18 ด้วย) และเราทำมันใน C # ในขณะที่ฉันสังเกตเห็นว่าโปรแกรม C # ขนาดใหญ่มักจะทำงานช้ากว่าโปรแกรม C ++ ขนาดใหญ่ แต่ C # ก็ต้องการการทำงานที่น้อยลง การจัดการหน่วยความจำจะทำโดยอัตโนมัติและสำหรับขอบเขตของเกมแรกมันเร็วพอ (เกมของเราเป็น RTS แบบผู้เล่นหลายคนแบบตาร์คราฟ 2D เต็มรูปแบบ)

ฉันรูทสำหรับ C # เพราะควรจัดการได้ง่ายกว่า อย่างไรก็ตามหากคุณต้องการที่จะเป็นนักพัฒนาเกมระดับมืออาชีพโปรดจำไว้ว่ามันจะทำงานได้บนแพลตฟอร์มของ Microsoft เท่านั้น (ถึงกระนั้น C # อาจเป็นก้าวที่ดีสำหรับ C ++ และถ้าฉันต้องเรียนรู้สองภาษาใหม่ฉันจะพยายามเรียนรู้ C # ก่อน)


C # ทำงานบน Mono (cross platform) ด้วยเช่นกันอย่างไรก็ตามบางส่วนของเฟรมเวิร์ก (เช่น WPF) ไม่รองรับ
Danny Varod

1
@ Danny Varod ฉันไม่ชอบแนะนำ Mono สำหรับการพัฒนาเกมข้ามแพลตฟอร์มเพราะถึงตอนนี้พวกเขายังคงสาย Microsoft ในแง่ของคุณสมบัติและฉันไม่คิดว่ามันจะเปลี่ยนแปลง นอกจากนี้ข้อดีหลัก ๆ ของการพัฒนาด้วย C # สำหรับแพลตฟอร์ม Microsoft คือ XNA และจนกว่า Mono จะให้ DirectX มันจะไม่ทำงานบนแพลตฟอร์มที่ไม่ใช่ MS
zeak

1
Mono จะต้องจัดเตรียม wrapper OpenGL ที่เข้ากันได้เนื่องจากตามที่คุณระบุ DirectX เป็น Microsoft จุดของฉันเป็นเพียงที่ C # สามารถพอร์ตบางส่วน
Danny Varod

2
ระหว่าง Unity, monogame (opensource XNA สำหรับ mono) และ OpenTK มีไลบรารีเกมที่ดีมากมายสำหรับ mono
หิน

1

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


ขอขอบคุณที่ตอบคำถามแรกของคุณในโปรแกรมเมอร์ Exchange Stack
DeveloperDon

C ++ ยังคงเป็นภาษาพกพามากที่สุดจนถึงทุกวันนี้ โดยเฉพาะแพลตฟอร์มมือถือบางรุ่นมี Java บางรุ่นมี C # แต่ส่วนใหญ่ไม่มีทั้งสองอย่าง แต่ทุกคนจะต้องมี C ++; เครื่องเสมือนจะต้องดำเนินการในสิ่งที่คอมไพล์ไปยังรหัสเครื่องดั้งเดิมและบางสิ่งอยู่ในปัจจุบันคือ C ++ เสมอ
Jan Hudec
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.