ساخت انجین بازی Game engine

شروع موضوع توسط saalek110 ‏24 آگوست 2019 در انجمن منطق و الگوریتم برنامه‌نویسی

  1. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    ساخت انجین بازی Game engine
     
    آخرین ویرایش: ‏24 آگوست 2019
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  2. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    من در حال ساخت یک بازی سه بعدی هستم. ولی به مشکلاتی برخوردم که می خواهم آنها را به کمک شما برطرف کنم.
    بازی با opengl و زبان سی نوشته شده.
    بازی تجاری نیست و فقط تفریحی است.
    تصمیم من اینه : رسم اشیا با opengl و بقیه کارها با زبان سی.
    دنبال موتورآماده نیستم.
    روی نسخه ویندوزی مدتی است کار می کنم. ممکن است نسخه اندرویدی هم داشته باشد و از طریق سایت با هم در ارتباط هستند. یعنی محیط ساخته شده در ویندوز از طریق سایت به گوشی منتقل می شود.
    انتقال اطلاعات بین ویندوز و گوشی با فایل های دانلودی از سایت است. قسمت اپلود و دانلود سایت را امروز نوشتم.
    Php AND HTML
    بیشتر محیطی ۳ بعدی و زیباسازی منظور است. درخت و خانه های زیبا و ... ولی هوش مصنوعی بازی مسلما لطف خاص خودش را دارد. یک سری حیوانات هم قراره بسازم و روی حرکات نرم آنها کارخواهم کرد.
    در بلندر اشیایی می سازم و به بازی منتقل می کنم. مخصوصا انسان و حیوان.



    قصد دارم کمی هم سرچ کنم در مورد روش ساخت انجین بازی. تا تکنیک های دیگران را بخوانم.


    با دو سری مشکل فعلا روبرو هستم:
    اول: باید در ترسیمات صرفه جویی کرد تا برنامه کند نشود.
    دوم : هوش بازی چطور ساخته شود.
     
    آخرین ویرایش: ‏25 آگوست 2019
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  3. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    در مورد مشکل اول خوب فکر می کنم باید رسم های غیرضروری حذف شود.
    مثلا اشیای دور که به چشم بازیکن نمی آید رسم نشود. و از این جور صرفه جویی ها.
    روش برنامه نویسی پیشنهادی من اینه که هر شی مختصات دو بعدش مشخص باشد(مثلا x و y اش ) و مشخصات بازیکن(player_x و player_y ) هم مشخص باشد و رسم کننده بازی با توجه به سایز اشیا(و افقی یا عمودی بودن ) و دوری از بازیکن تصمیم بگیرد آن اشیا را رسم کند یا نه.
     
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  4. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    در مورد مشکل دوم یعنی هوش برنامه من تصمیم دارم آبجکتهای بازی را دسته بندی کنم.
    برای سادگی فهم مطلب فرض کنید فقط 3 نوع آبجکت داریم. 1-بازیکن 2- دشمن 3-دیوارها
    کار این طوری برای هوش برنامه ساده است. چون 3 نوع جنس بیشتر نیست و با توجه به مختصات و طرز قرارگیری هر یک تصمیماتی می گیرد.

    یک قسمت هوش مربوط به هوش دشمن است که مثلا شما را تعقیب کند و به حضور شما واکنش نشان دهد.
    یک قسمت هوش مربوط به بررسی برخوردها و اجرای اتفاقات بعد برخورد مثل برگشت توپ یا پخش صدای تصادف و ... است.
     
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  5. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    معرفی activeworlds.com : دنیایی مجازی مثل secondlife است. ولی کم هزینه تر است و ساده تر. البته من مجانی ساخت و ساز می کنم.
    ActiveWorlds

    اکتیو ورلد یک نرم افزار ویندوزی دارد که دانلود می کنید. و بعد ساختن اکانت در سایت می توانید در زمین های مجانی آن ساخت و ساز کنید.
    اکثرا اهل ایالات متحده هستند و برای تقویت زبان انگلیسی هم خوب است.

    علت معرفی این نرم افزار این بود که ساخت و سازها در این محیط خیلی ساده انجام می شود. بدون برنامه نویسی میشه یک شهر کامل ساخت.
    من خیلی ایده ها را برای ساخت نرم افزارم از این محیط گرفتم.

    مثلا دیواری را با کلیک کپی می کنید و با چند حرکت کلیدهای جهت کیبورد می گذارید کنار قبلی. یا با 6 چرخش 90 درجه دیوار می چرخد و حکم کف پیدا می کند.
    آنهایی که دنیای شخصی می خرند می توانند آبجکت های ساخته شده 3 بعدی را آپلود کنند. ولی در قسمت مجانی همان ساختمان سازی هست فقط.

    a22.jpg
    عکس بالا یکی از دنیاهای پولی است. جاده اش هنوز لود نشده و اون اشیای قرمز کوچک هم آبجکتهایی هستند که باید لود شوند. درخت ها را یا خود شخص ساخته یا از جایی مجانی یا پولی تهیه کرده.
     
    آخرین ویرایش: ‏24 آگوست 2019
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  6. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    برمی گردم به بحث تاپیک : سطوح در بازی می تواند افقی یا عمودی باید و سطوح عمودی هم می تواند در راستای شمال به جنوب یا شرق به غرب باشد.
    بعضی سطوح هم مایل هستند. مثلا سطح یک تپه که بازیکن روی آن بالا می رود.
    من قصد دارم به هر یک از این سطوح کدی اختصاص دهم. مثلا کدهای 1 تا 8 . و بازیکن هم کدش فرضا صفر باشد.
    در قسمت هوش برخورد برنامه برخورد و تماس بازیکن با هر یک از سطوح را بررسی می کند.

    پس
    تمام اجزای بازی به شکل کد ذخیره می شود. مثلا
    1 10 10 5 5 5 ......
    1 10 10 5 5 10......
    2 5 5 20 20 5.........
    قرمزها کدها و سبزها مختصات است.

    اعداد یک و دو در بالا کدهای اشیا هستند. مثلا 1 دیوار عمودی و 2 دیوار افقی است. و اعداد بعدی اندازه و مختصات و دیگر مشخصات مثل کد تکسچر است.
    تکسچر مثلا دیوار طرح آجری دارد یا لباس بازیکن طرح پارچه دارد یا زمین تکسچر چمن دارد. یعنی عکس چمن روی صفحات افقی انداخته می شود.
    r4.jpg
    برنامه رسم با دانستن این کدها بازی را رسم می کند
    و برنامه هوش با دانستن این کدها جریان بازی را کنترل می کند.

    ولی همه چیز به شکل کد در
    آرایه
    یا فایل
    یا دیتابیس
    یا به شکل کد درون برنامه
    ذخیره می شود.
     
    آخرین ویرایش: ‏24 آگوست 2019
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  7. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    از شی گرایی می خواهم در جهت راحت کردن کدنویسی استفاده کنم.
    مثلا یک انسان یا حیوان در کلاس خودش محاسبه کند کدام قسمت بدنش چقدر فرضا به سمت شمال بیرون زده تا به هوش کلی برنامه(هوش سنترال برنامه ) در محاسبه برخوردها کمک کند.
    خوب دستش به دیوار بخوره فرق داره تا سرش بخورد. مخصوصا در نزاع ها اینها مهم است. مثل شمشیر زنی.


    همچنین حرکت دادن دست و پا به کلاس خود حیوان یا انسان سپرده می شود. و کلاس مذکور گزارشهایی را در موقع لزوم به هوش مرکزی برنامه ارسال می کند.
     
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  8. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113

    پیوست ها:

    آخرین ویرایش: ‏7 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  9. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    آخرین ویرایش: ‏7 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  10. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    ادیت شد.
     
    آخرین ویرایش: ‏7 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  11. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    در ضمن من با چند تا بازی ساز کار کردم و آشنایی دارم. مثل یونیتی و udk
    به نظرم خوبه کمی آشنا بشوید. چون به ما ایده می دهد تا از قسمتهایی از کارهای آنها استفاده کنیم.

    udk.jpg unity3d.jpg
     
    آخرین ویرایش: ‏24 آگوست 2019
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  12. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    تا می توانید ادواتی ایجاد کنید که از حالت run خارج نشوید.

    توصیه ای که خودم می توانم بکنم این است که تا می توانید محیط کار خود را بهتر کنید.
    مثلا برای تنظیم محل یک دیوار مدام از حالت run خارج نشوید . من 3 متغیر برای تنظیم محل هر شی اختصاص دادم که به مختصات x و y و z آن شی اضافه می شود و آن 3 متغیر را می توانم راحت تغییر دهم. مثلا با یک منو. این طوری برای تنظیم محل هر شی کلی در وقت صرفه جویی می شود.

    a3.jpg f4.jpg
    یا اینکه اشیایی که می سازم مختصات همه در فایلی جمع می شود و بعد می توانم همه را یک جا به برنامه اضافه کنم.
    از قدرت برنامه نویسی برای رفاه خود استفاده کنید.
     
    آخرین ویرایش: ‏24 آگوست 2019
    نوشته شده توسط saalek110 در ‏24 آگوست 2019
  13. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    یک سوال : آیا میشه از سرورهای php مجانی برای پردازش بازیهای خود در کامپیوتر استفاده کنیم؟

    یعنی اطلاعات را ارسال کنیم. در سرور پردازش بشود و نتیجه را مدام دریافت و در بازی استفاده کنیم.
     
    آخرین ویرایش: ‏25 آگوست 2019
    نوشته شده توسط saalek110 در ‏25 آگوست 2019
  14. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    من الان یک برنامه php هم روی لوکال و هم یک هاست مجانی php اجرا کردم. زمان اجرا یکی بود. چرا؟

    یعنی کامپیوتر اونها در حد کامپیوتر ماست یا با کنترلهایی سرعت را کم کرده اند؟
    میشه سرورهای مختلف را مقایسه کرد. من فقط یک سرور را امتحان کردم.
    نیاز به تحقیق و بررسی بیشتر دارد. من فعلا نظری ندارم.

    در php زمان max اجرا 30 ثانیه است.

    کد php برای علاقه مندان:

    PHP:
    <?php

    $milliseconds1 = round(microtime(true) * 1000);
    echo $milliseconds1;


    // codes


    echo "<br><br>";    
    $milliseconds2 = round(microtime(true) * 1000);
    echo $milliseconds2;


    echo $milliseconds2-$milliseconds1;

    ?>
    منبع
     
    آخرین ویرایش: ‏25 آگوست 2019
    نوشته شده توسط saalek110 در ‏25 آگوست 2019
  15. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    ادیت شد.
     
    آخرین ویرایش: ‏7 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏25 آگوست 2019
  16. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    افزودن اشکال بدون خروج از برنامه در حالت اجرا:

    یک پوشه درست کنید. فایلهایی را برای خواندن آنجا قرار دهید.
    یک تابع رسم اشکال بسازید.
    با متغیرهایی که از فایل های خوانده شده آن پوشه بدست آورده اید تابع فوق را صدا بزنید.
    مثلا 3 عدد x و y و z را از فایل خواندید. با این 3 عدد مختصات یک کره یا استوانه یا ... را تغییر می دهید. می توانید متغیرهای زیادی در فایل بنویسید تا همه چیز را کنترل کنید. مثل سایز و میزان چرخش و نوع تکسچر و غیره.
    در پوشه خود می توانید بی نهایت فایل قرار دهید تا اشکال متعددی در بازی ایجاد کنید. بعدا می توانید اعداد تنظیم شده را به هر شکلی استفاده کنید و نیازی نیست این روش را همیشه ادامه دهید.
    توجه داشته باشید که برنامه در حال اجرا است و شما با تغییر فایلهای بیرونی در حال طراحی عناصر بازی هستید. در عرض چند دقیقه کلی شکل می سازید. بعد تنظیم هر شکل می توانید فایل را به اسم آن شکل تغییر دهیدRename مثلا برج. Tower
    در تاپیک توابع سی در تالار سی همین انجمن طرز لیست گیری از پوشه و خواندن فایل را نوشته ام.

    a8.gif

    تا می توانید لوازمی بسازید تا بازی را با آنها راحت تر بسازید.
    لوازم بازی را می سازد نه شما.

    چند نوع استفاده میشه کرد.
    نوع اول: در یک روش یک سری اعداد و مختصات تبدیل به فایل سورس شده و جزو برنامه شده.
    نوع دوم: در یک پوشه دیگر مختصاتی که خودش ساخته را رسم می کند. از یک شکل به عنوان الگو استفاده می کنید و حرکتش می دهید و می چرخانید وقتی که محل و زاویه اش خوب بود با زدن یک دکمه از آن کپی می گیرید و در یکی از این پوشه ها انداخته می شود و در طی برنامه مدام در حال رسم است در حالی که فقط به شکل فایل خارج برنامه است.

    سوم: در یک پوشه دستور جمع آوری اعداد به شکل خاصی داده می شود و بعد آن اعداد به شکل خاصی در برنامه استفاده می شود.
    در پست های قبل گفتم قصد دارم متغیرهایی به شکل خام وارد برنامه کنم و هوش برنامه و قسمت رسم برنامه می دانند از آن اعداد خام چطور استفاده کنند. منظور از اعداد خام اینه که به شکل کدهای رسم کننده opengl نیست. فقط یک سری عدد است.

    مسلما اشتباهات زیادی در کار من هست. ولی منظور اینجا تبادل تجربه است. شما خودتان با کمی فکر کردن ممکن است روش های بهتری بیابید.
     
    آخرین ویرایش: ‏29 آگوست 2019
    نوشته شده توسط saalek110 در ‏29 آگوست 2019
    the_king از این پست تشکر کرده است.
  17. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    جهت دوربین:
    یک تجربه ایجاد حرکت دوربین است. مثلا با بالا بردن دوربین احساس بالون دست می دهد.
    یا وقتی در هوا حرکت مداوم باشد احساس هواپیما می دهد. یا تجربه سواری با ماشین در حرکت مدام دوربین روی زمین ایجاد می شود. با ساخت قسمتی از موتور و ماشین و ایجاد یک سری صدا و جلوه بصری این حالت تقویت می شود.
    در اکتیوورلد که در بالا معرفی شد. یک وسایلی بود که ایجاد حالت هواپیما یا ماشین یا قایق میکرد.به نام mover

    همچنین زاویه دوربین که به سمت روبرو باشد یا به سمت پایین احساس های مختلفی ایجاد می کند.
     
    آخرین ویرایش: ‏29 آگوست 2019
    نوشته شده توسط saalek110 در ‏29 آگوست 2019
    the_king از این پست تشکر کرده است.
  18. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    ادیت شد.
     
    آخرین ویرایش: ‏7 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏29 آگوست 2019
  19. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    استفاده از یک متغیر به عنوان یک نشانه و یک مشکل و رفع مشکل:

    PHP:
    void change_key()
              {
    if ( a==0 ) a=1;
    if ( a==1 ) a=0;
               }
    تابع بالا قرار است حالت یک متغیر را برعکس کند ولی اگر در حالت اولیه عدد مورد نظر صفر باشد تابع آن را یک و فوری صفر می کند یعنی کارش را درست انجام نمی دهد.

    راه حل:
    HTML:
     void change_key()
               {
      int lock=1;
      if ( a==0) {a=1;  lock=0;}
       if ( a==1 && lock==1) a=0;
              }
    مثل اینه کسی برود کلید وسیله ای را بزند ولی بعد شک کند که زده یا نزده و دوباره بزند.

    images.jpg

    برنامه کامل آن:
    PHP:
    #include <stdio.h>
    #include <conio.h>
    int a=0;



    void change_key()
               {
      int lock=1;
      if ( a==0) {a=1;  lock=0;}
       if ( a==1 && lock==1) a=0;
              }


    int main(int argc, char **argv) {
     
        a=0;
        change_key();
        printf ("a= %d\n",a);
     
        a=1;
        change_key();
        printf ("a= %d\n",a);
     
     
        getch();
            return 1;
    }
    a1.jpg
    و برنامه ناقص اولی:

    a2.jpg
     
    آخرین ویرایش: ‏1 سپتامبر 2019
    نوشته شده توسط saalek110 در ‏1 سپتامبر 2019
  20. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,715
    تشکر شده:
    1,358
    امتیاز دستاورد:
    113
    نوشته شده توسط saalek110 در ‏7 سپتامبر 2019

به اشتراک بگذارید