ChatGPT vs DeepSeek
پرامپت ما
I am making a video game with Unreal Engine 5 and I want a complete C++ code (no basic) to build a fully customizable - modular system for the mechanism of enter and exit on a car like in GTA. The difference is that if I press the F key once, the character gets in as the driver. If I hold F for a long time, a list (a car icon) opens above the targeting crosshair so we can select with the mouse which seat our character should sit on. If that seat is already occupied by someone else, the icon should say "Seat occupied," and if we click on the occupied seat, like carjacking in GTA, that character is kicked out of the car. So when clicking on the occupied seat, a dropdown menu opens below the selected seat that says "Remove character from car," and the second option below it says "Remove from car and sit in their place." If the first option is chosen, only the seated character is removed from the car. If the second option is chosen, that person is kicked out and our character sits there. (While doing this, if directional keys like left, right, back, or forward are pressed, the action is canceled. If F is pressed but someone else is already the driver, nothing happens.) The F key system should work so that when we press F, we can select with the mouse which seat to get into, and if, for example, we press F and click on the front passenger seat, the character sits there. If we press F and the mouse cursor moves over the front passenger seat and then we release F, the character still sits there. If the cursor is not over any seat and we release F, the icon closes. The car's iPhone should appear instead of the cursor (meaning a small part, for example, pops up whenever we are in the car and press F to get out. If we are moving fast, getting out causes the character to fall to the ground like in GTA V. If we are stuck between two walls so the car door cannot open, the rear or front window (where the front is not blocked) breaks and the character exits through it.
نتیجهگیری از پاسخی که از هر دو هوش مصنوعی دریافت کردیم
[پاسخ DeepSeek بهتر بود]
دلیلش اینه که کاملتر، مدرنتر (با استفاده از ویژگیهای UE5 مثل Enhanced Input) و دقیقتر به همه جزئیات پرامپت میپردازه، بدون اینکه ناقص بمونه. ChatGPT هم خوبه و ساختار خوبی داره، اما ناقصه و برخی جزئیات رو سطحیتر پوشش میده. حالا نقاط قوت و ضعف هر کدوم رو جداگانه میگیم.
۱. نقاط قوت و ضعف پاسخ ChatGPT
هوش مصنوعی ChatGPT یک پیادهسازی ساختاریافته و ماژولار ارائه میده که روی کامپوننتهای صحنه (مثل UCarSeatComponent) و Pawn (AVehicleBase) تمرکز داره. کدش تمیز و خواناست، و فرضیههای خوبی (مثل تکنفره بودن و نیاز به تنظیم انیمیشنها در ادیتور) رو ذکر میکنه.
نقاط قوت
- ساختار ماژولار و ساده: فایلها رو به خوبی جدا کرد (مثل کامپوننت صندلی، VehicleBase برای منطق ورود/خروج، و CarPlayerController برای ورودی). این کار ادغام رو آسون میکنه.
- پوشش ویژگیهای کلیدی: فشار کوتاه F برای راننده، نگه داشتن برای UI انتخاب صندلی، مدیریت صندلی اشغالی با گزینههای "Remove" و "Remove & Sit"، لغو با حرکت، و خروج با فیزیک (ejection) در سرعت بالا رو خوب پیاده کرده.
- چکهای ساده و کارآمد: مثلاً IsDoorBlocked با line trace ساده، که برای شروع خوبه و قابل گسترش.
- توضیحات مختصر: overview و assumptions رو واضح نوشته، و به جای کدهای طولانی، جاهایی رو برای Blueprint باز گذاشته (مثل ویجتها).
نقاط ضعف:
- ناقص بودن کد: فایل CarPlayerController.cpp نصفه مونده (در تابع ShowSeatSelection قطع شده)، و بخشهایی مثل TrySelectSeatUnderCursor یا UpdateTargetVehicleAndSeat کامل نیستن. این باعث میشه نشه مستقیم ازش استفاده کرد
- کمبود جزئیات UI و ورودی: ویجتها رو فقط اشاره کرده (USeatSelectionWidget) بدون کد کامل، و از InputComponent قدیمی استفاده کرده (نه Enhanced Input). همچنین، انتخاب با ماوس (hover + release) رو کامل پوشش نداده.
- چکهای فیزیکی ضعیفتر: IsDoorBlocked فقط line trace سادهست و sweep collision نداره، که برای چک واقعی در/پنجره (مثل پرامپت ما) ناکافیه. همچنین، شکستن شیشه رو فقط به عنوان placeholder گذاشته.
- کمتر انعطافپذیر: enum صندلیها محدودتره (۵ تا نقش) و رویدادها (events) کمتری داره، که برای گسترش (مثل multiplayer) سختتره.در کل، ChatGPT مثل یک "اسکلت خوب" عمل میکنه، اما برای یک سیستم "کامل" (که برنامه نویس ها بهش میگن Ready to use) که تو پرامپت مون خواستیم، ناکامله و نیاز به تکمیل دستی داره.
۲. نقاط قوت و ضعف پاسخ DeepSeek
هوش مصنوعی DeepSeek یک سیستم کاملتر با تمرکز روی کامپوننت (UVehicleEntryComponent) و یک Actor مدیر تعامل (AVehicleInteractionManager) ارائه میده. کدش طولانیتره اما همه چیز رو پوشش میده، و از structها و enumهای غنی برای مدیریت حالتها استفاده کرده.
نقاط قوت:
- کامل و آماده تولید: همه فایلها (از جمله .cppها) کامل بودن، با تیکها (Tick)، رویدادها (delegates مثل OnSeatOccupied)، و حتی setup دستورالعملها. میتونیم مستقیم implement کنیم و تست کنیم.
- پوشش دقیق پرامپت: همه ویژگیهای درخواستی ما رو زده: فشار کوتاه برای راننده (با چک اشغالی)، نگه داشتن F با تایمر (HoldTime)، UI انتخاب صندلی با hover/click، منوی dropdown برای کارجکینگ ("remove" یا "take seat")، لغو با کلیدهای جهتدار (CheckMovementInput)، و خروج هوشمند (چک سرعت با LaunchCharacter، sweep برای در/پنجره، و fallback به teleport).
- مدرن و پیشرفته: از Enhanced Input برای F (با triggerهای Started/Completed/Canceled) استفاده کرده. چکهای collision با SweepMultiByChannel دقیقتره (برای در و پنجره) و velocity-based exit (با ragdoll-like) عالیه.
- انعطافپذیری بالا: enumهای غنی (۹ صندلی، حالتهای EInteractionState)، struct برای SeatInfo، و ویجت پایه ++C (UVehicleSeatSelectionWidget) با BlueprintImplementableEvent. customization points و extension ideas (مثل انیمیشن، SFX) رو هم لیست کرده.
- مدیریت حالت بهتر: با enumها و تایمرها، flow رو کنترل میکنه (مثل SelectingSeat یا OccupiedSeatOptions)، و UI رو دینامیک میسازه (CreateSeatSelectionUI).
نقاط ضعف:
- پیچیدگی بیشتر: کد طولانیتر بود و ممکنه برای تازهکارها overwhelming یا گمراه کننده باشد. مثلاً AVehicleInteractionManager یک Actor جداگانهست که باید spawn بشه، در حالی که منطق ورودی بهتره در PlayerController باشه. اما اونی که دیپسیک گذاشته خیلی حرفهایتره درست مثل گیم های AAA
- وابستگی به Blueprint UI رو بیشتر رابط کاربری را به Blueprint سپرده (DisplaySeats به عنوان event)، که خوبه اما اگر بخوایم pure ++C باشه، نیاز به کد بیشتر داریم. همچنین، انیمیشنها (PlayEntryAnimation) placeholderن و نیاز به implement دارن.
- کمتر فشرده: توضیحات architecture رو اول نوشته، اما در کد گاهی تکرار داره (مثل چکهای distance). همچنین، برای multiplayer replication رو ذکر کرده اما implement نکرده.
- فرضیههای خاص: MaxEntryDistance ثابت (۳۰۰) و threshold سرعت (۱۰۰۰) رو hardcoded کرده، که خوبه اما editableتر یا قابل ویرایشتر میتونست باشه.
در کل، DeepSeek مثل یک "پکیج کامل" عمل میکنه که مستقیم به پرامپت (fully customizable - modular) وفاداره و کمتر نیاز به فیکس داره.
@whatsmusicbot