SMLF و پروژه گرافیکی - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

SMLF و پروژه گرافیکی

+1 امتیاز
سلام به همگی و وقت بخیر.
دوستان من برای پروژه برنامه نویسی ام یک گیم انتخاب کردم بازی محبوب دودل جامپبا کتاب خونه گرافیکی SMLF . سوالاتی در باره روند کد زنی دارم و نمیدونم از این کتابخونه چطور استفاده کنم.
مثلا چطور باید منو ورود درست کنم و پرش اون موجود و صدا گذاری و چیدن پله ها و.... خیلی سوالات دیگه. کلا پروژه باید چیکار کرد و از کجا شروع کرد. چطور باید نوشت.
اگر کسی تا حالا این بازی نوشته یا پروژه ای انجام داده روند و خط فکری پروژه رو میتونه بهم راهنمایی کنه ؟
سوال شده خرداد 12, 1402 بوسیله ی Mohammadi  

1 پاسخ

+1 امتیاز
 
بهترین پاسخ
خیلی خوبه که برای پروژه برنامه نویسی تون بازی Doodle Jump را انتخاب کردید . نکاتی را در مورد  استفاده از کتابخانه گرافیکی SMLF بهتون بگم. در اینجا یک نمای کلی از مراحلی که باید انجام دهید آورده شده است:
 
1. با SFML آشنا شوید: قبل از رفتن به دل پروژه، ابتدا اصول SFML را یاد بگیرید. برای یادگیری نحوه ایجاد پنجره، رسم اشکال و مدیریت ورودی کاربر، آموزش ها و مستندات رسمی را مرور کنید: https://www.sfml-dev.org/tutorials/2.5/
 
2. بازی را به اجزاء تقسیم کنید: بازی Doodle Jump را تجزیه و تحلیل کنید و آن را به اجزای کوچکتر تقسیم کنید. برخی از اجزای اصلی عبارتند از:
    - شخصیت بازیکن (Doodler)
    - سکوها (پله ها)
    - زمینه
    - جلوه های صوتی و موسیقی
    - حلقه بازی و منطق
    - تشخیص برخورد
    - سیستم امتیازدهی
 
3. راه اندازی پنجره و حلقه بازی: یک پنجره با استفاده از SFML ایجاد کنید و حلقه اصلی بازی را راه اندازی کنید. حلقه بازی رویدادها را مدیریت می کند، وضعیت بازی را به روز می کند و اشیاء بازی را رندر می کند.
 
4. شخصیت بازیکن را بسازید: شخصیت Doodler را طراحی کنید و مکانیک حرکت و پرش آن را اجرا کنید. می‌توانید از کلاس‌های «sf::Sprite» و «sf::Texture» SFML برای بارگذاری و نمایش تصویر کاراکتر استفاده کنید. برای مکانیک پرش، می توانید از معادلات فیزیک پایه برای شبیه سازی گرانش و کنترل سرعت عمودی شخصیت استفاده کنید.
 
.5پیاده‌سازی پلتفرم‌ها: طراحی پلتفرم‌ها و پیاده‌سازی ایجاد و حرکت آنها. پلتفرم‌ها می‌توانند با استفاده از شی‌های sf::RectangleShape ایجاد شوند. می‌توانید تابعی ایجاد کنید برای ایجاد پلتفرم‌ها در فواصل منظم و حرکت آنها به سمت پایین هنگامی که بازیکن بالاتر پرش می‌کند.
 
 
6. پیاده‌سازی تشخیص برخورد: زمانی که شخصیت بازیکن بر روی یک پلتفرم فرود می‌آید را تشخیص دهید. می‌توانید از تشخیص برخورد مستطیل ساده برای بررسی اینکه آیا تصویر دودل با مستطیل پلتفرم تداخل دارد استفاده کنید.
 
 
7.افکت صوتی و موسیقی اضافه کنید: از کلاس های sf::SoundBuffer و sf::Sound کتابخانه SFML برای بارگذاری و پخش افکت های صوتی مانند پرش، فرود بر روی پلتفرم و سایر رویدادهای بازی استفاده کنید. همچنین می‌توانید از کلاس sf::Music برای پخش موسیقی پس‌زمینه استفاده کنید.
8. پیاده سازی سیستم امتیازدهی: امتیاز بازیکنان را بر اساس میزان پرش آنها پیگیری کنید. می‌توانید امتیاز را با استفاده از کلاس‌های «sf::Text» و «sf::Font» SFML نمایش بدید.
 
9. پولیش و بهینه سازی: هنگامی که مکانیک های اولیه بازی کار می کنند، می توانید با افزودن انیمیشن ها، بهبود رابط کاربری و بهینه سازی عملکرد، بازی را جلا بدید.
 
به یاد داشته باشید که از کوچک شروع کنید و بازی را به صورت تدریجی بسازید. ابتدا روی کارکردن مکانیک های هسته تمرکز کنید و سپس در حین حرکت، ویژگی ها و جلا دادن بیشتری را اضافه کنید. در پروژه تان موفق باشید!
#include <SFML/Graphics.hpp>
#include <time.h>
using namespace sf;

struct point
{ int x,y;};

int main()
{
    srand(time(0));

    RenderWindow app(VideoMode(400, 533), "Doodle Game!");
    app.setFramerateLimit(60);

    Texture t1,t2,t3;
    t1.loadFromFile("images/background.png");
    t2.loadFromFile("images/platform.png");
    t3.loadFromFile("images/doodle.png");

    Sprite sBackground(t1), sPlat(t2), sPers(t3);

    point plat[20];

    for (int i=0;i<10;i++)
      {
       plat[i].x=rand()%400;
       plat[i].y=rand()%533;
      }

	int x=100,y=100,h=200;
    float dx=0,dy=0;

    while (app.isOpen())
    {
        Event e;
        while (app.pollEvent(e))
        {
            if (e.type == Event::Closed)
                app.close();
        }

    if (Keyboard::isKeyPressed(Keyboard::Right)) x+=3;
    if (Keyboard::isKeyPressed(Keyboard::Left)) x-=3;

    dy+=0.2;
    y+=dy;
    if (y>500)  dy=-10;

	if (y<h)
    for (int i=0;i<10;i++)
    {
      y=h;
      plat[i].y=plat[i].y-dy;
      if (plat[i].y>533) {plat[i].y=0; plat[i].x=rand()%400;}
    }

	for (int i=0;i<10;i++)
    if ((x+50>plat[i].x) && (x+20<plat[i].x+68)
    && (y+70>plat[i].y) && (y+70<plat[i].y+14) && (dy>0))  dy=-10;

	sPers.setPosition(x,y);

    app.draw(sBackground);
    app.draw(sPers);
    for (int i=0;i<10;i++)
    {
    sPlat.setPosition(plat[i].x,plat[i].y);
    app.draw(sPlat);
    }

    app.display();
}

    return 0;
}

 

پاسخ داده شده خرداد 12, 1402  بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
انتخاب شد شهریور 8, 1402 بوسیله ی مصطفی ساتکی
...