ایران ...

ایران ...
ایران ...
من دیگه امیدی به این ایران ندارم... وقتی تو گوگل ترند
http://google.com/trends
سرچ می کنم SEX ایران سوم **FU ایران اول
ولی تو همه چیزای خوب دیگه اثری از ایران نیست من می تونم بدون ناراحتی خجالت بکشم که ایرانیم........

درس 10 : ساخت کلاس Timer

درس 10 : ساخت کلاس Timer

 

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

 

اساس کار این کلاس دستور SDL_GetTicks() از سیستم time از SDL است که مقدار وقتی که از اماده شدن time می گذرد را در فرمت میلی ثانیه و ثانیه بر می گرداند. اگر شما مثلا برای کاری در برنامه نیازمند دو ثانیه زمان باشید باید زمان فعلی را در متغییری قرار دهید و منتظر شوید اختلاف زمانی که می گذرد از مقدار موجود در ان متغییر برابر2000 شود.

 

 

class timer

{

private:

            int start_time; // zamani ke timer shoro bekaar kard

            int pause_time; // vaghti pause shod zaman paused negah midaare

           

            //vaziat timer

            bool paused;

            bool started;

 

public:

            timer();//taabe saazandeh

 

            void start();

            void stop();

            void pause();

            void play();

           

            /*

              meghdaar saanieh va milisaanieh ke az shooroo kaar gozashte raa

              bar migardaanad dar soorat pause boodan pause_time o barmigardoone

            */

            int get_time();

            // vaziate timer pause ya play boodanesh o ba 1 o sefr neshoon mide

            int vaziat();  

 

};

 

این تعریف اولیه کلاس timer است. Start_time زمان شروع را در خود نگه می دارد زمانی که timer استارت خورد مقدار دهی می شود تابع سازنده کار set کردن متغییرها را انجام میدهد وstart وstop و pause و play هم از اسمشان معلوم است  get_time مقدار زمان را به میلی ثانیه بر می گرداند و vaziat وضعیت timer را در صورت pause بودن مقدار 0 را بر می گرداند

timer::timer()

{

            paused = false;

            started = false;

            start_time = 0;

            pause_time = 0;

}

اینجا هم تابع سازنده کلاس کار تنظیم متغییرها را انجام می دهد .چیز بیشتری واسه توضیح نیست

void timer::start()

{

            //start mizaneh

            started = true;

            //Unpause mikoneh

            paused = false;

            //tedaad milisaanihaa va saaniehaai gozashte az shoro

            //barnaameh raa migirad

            //hamaan vaght shooroo maaraa set mikonad

 

            start_time = SDL_GetTicks();

           

}

 

وقتی timer استارت می خورد ما وضعیت started را true می کنیم timer  را unpause می کنیم   و start_time را به مقدار زمان فعلی ست می کنیم

void timer::stop()

{

            //timer o stop va unpause mikonad

 

            started = false;

 

            paused = false;

}

وقتی هم تایمر stop شد وضیعت started را false می کنیم  و تایمر را unpause می کنیم.

void timer::pause()

{

            if(started && (paused==false))

            {

                        paused = true; //timer o pause mikone

                        //pause time o mohaasebeh mikoneh

                        pause_time =  SDL_GetTicks() - start_time;

            }

}

حال وقتی می خواهیم تایمر را pause کنیم اول چک می کنیم که تایمر در حال کار کردن است و چک می کنیم که pause نباشد .اگر می توانستیم تایمر را pause کنیم flag اش را true می کنیم و وقت را در pause_time نگه می داریم.

int timer::get_time()

{

            if(started)//agar start khorde baasheh

                        if(paused)//age pause shode baashe

                                    return pause_time;

                        else//age nashode baashe time feli menhaaie time shooroo bar migardoone

                                    return SDL_GetTicks()-start_time;

            else

                        return 0;//agar nakhorede bashe sefr bar migardooneh

 

}

این تابع زمان را بر می گر داند در اول کار چک می کنیم که تایمر در حال اجرا است اگر هست چک می کنیم pause هست اگر pause بود ما مقدارpause_time را بر می گردانیم اگر pause نبود ما اختلاف زمان فعلی و و زمان شروع را بر می گردانیم به عنوان مثال اگر در 15000   تایمر استارت خورده باشد و الان 21500 باشد مقدار 6500  را بر می گرداند که به معنی 6.5 ثانیه است.در صورت استارت نخوردن هم مقدار 0 را بر می گرداند.

void timer::play()

{

            if(paused)

            {

                        //unpause mikone

                        paused = false;

                        //dobaareh start_time o set mikonad

                        start_time = SDL_GetTicks() - pause_time;               

 

                        pause_time = 0;

 

            }

 

 

}

این تابع کار unpause کردن را به عهده دارد اول چک می کنیم تایمر pause هست یا نه اگر بود flag (نشان) ش را false می کنیم. در اینجا هم ما start_time را دو باره ست می کنیم و pause_time هم بدون دلیل 0 می کنیم به خاطر این که نم خواهیم متغییر هامون ولگرد باشند!

تابع vaziat هم تعریف نکنیم error  نمی دهد منم تعریف نمی کنم!!

می شود در به در واژه بازار نبود

می شود در به در واژه  بازار نبود

می توان تقدیم کرد و پشیزی به پشیزی نفروخت

می توان عشق به آنها آموخت

OpenGL vs. DirectX: A Comparison

این هم یک مقایسه که نشان دهنده قدرت OpenGL در برابر DirectX

Feature:

OpenGL

DirectX

Vertex Blending

N/A

Yes

Multiple Operating Systems

Yes

No

Extension Mechanism

Yes

Yes

Development

Multiple member Board

Microsoft

Thorough Specification

Yes

No

Two-sided lighting

Yes

No

Volume Textures

Yes

No

Hardware independent Z-buffers

Yes

No

Accumulation buffers

Yes

No

Full-screen Antialiasing

Yes

Yes

Motion Blur

Yes

Yes

Depth of field

Yes

Yes

Stereo Rendering

Yes

No

Point-size/line-width attributes

Yes

No

Picking

Yes

No

Parametric curves and surfaces

Yes

No

Cache geometry

Display Lists

Vertex Buffers

System emulation

Hardware not present

Let app determine

Interface

Procedure calls

COM

Updates

Yearly

Yearly

Source Code

Sample

SDK Implementation

از سایت cprogramming.com

درس 9 : ساخت کلاس object برای تکان دادن اشیا و انجام اعمال دیگر

قبل از شروع درس این را بگویم که تا امروز این پروژه دارای چند فایل است

1. main.cpp

2. object.h

3.  functions .h

4. definations.h

5. timer.h

البته تا  الان شما هیچ کدام از این فایل هارا ندیدید ! اگر کمی صبر کنید توضیحات همه این ها را می اورم.

1.این که main برنامه هست و فعلا کار خاصی انجام نمی دهد

2.این هم در این درس توضیح می دهم

3.این یکی شامل توابع عمومی هست که در برنامه استفاده می شود

4.شامل تعریف متغییر ها و ثابت های کلی است

5.در درس بعد توضیح  می دهم

 

 

خوب حالا وقت توضیح کلاس object رسیده شکل اولیه این کلاس به شکل زیر است

 

class object

{

private:

             

      int x;//mokhtasaate X

      int y;//mokhtasaate Y

      int xVel;//sorat object dar raastaaie x

      int yVel;//sorat object dar raastaaie y

      SDL_Surface *pic;//axe object

public:

      //taabe saazandeh

      object(int p1,int p2,SDL_Surface *p3,int p4,int p5);

      //Move Object baa greftane parameter

      //RIGHT LEFT UP DOWN in harkathaaraa

      //anjaam midahad     

      void moveO(const int);

      //Object raa be screen michasbaanad

      void show();

      //be noghte baa X,Y delkhaah miravad

      void moveToPoint(int,int);         

};

 

xوy مختصات مبدا شی هست xVelوyVel هم همان velocity یا سرعت شی در راستاهای xوy است pic هم یک سطح است که عکس شی را در ان قرار می دهیم به ساختار SDL_Surface در درس های قبل نگاهی بیاندازید

کار moveO و moveToPoint هم تکان دادن شی است

object::object(int p1,int p2,SDL_Surface *p3,int p4,int p5)

{

  xVel = p1;

  yVel= p2;

  pic = p3;

  x = p4;

  y = p5;

}

تابع سازنده با گرفتن 5 پارامتر متغییر ها را تنظیم می کند.

void object::moveO(const int p1)

{

    switch(p1)

    {

       case LEFT :

                           if(x>xBoundLeft) // check mikonad ke az chap mahdoodeh khaarej nashavad

                             x-=xVel;

                           break;

       case RIGHT :

                   if(x+pic->w<xBoundRight)// check mikonad baraie raast        

                             x+=xVel;

                           break;

       case UP :

                           if(y>yBoundUp) // vaase baalaa

                             y-=yVel;

                           break;

       case DOWN :

                           if(y+pic->h<yBoundDown) // vaase paain

                             y+=yVel;

                           break;         

             

    } 

    

} 

خوب یکسری از این ها در Definations.h تعریف شده اند با فرستادن پارامتر مناسب شی را حرکت می دهد و متغییر های Bound هم محدوده حرکت اشیا را تعیین می کنند

void object::show()

{

     apply_surface(x,y,pic,screen,NULL);    

}        

تابع show هم کار چسباندن به screen را انجام می دهد

void object::moveToPoint(int p1,int p2)

{

            if((x != p1)||(y !=p2))

            {

                        if(x<p1)

                                    x += xVel;

                        else

                                    x -= xVel;

                        if(y<p2)

                                    y += yVel;

                        else

                                    y -= yVel;

            }

}

تابع moveToPoint هم که فعلا BUG دارد با گرفتن نقطه تا وقت برابری X,Y شی با آن نقطه یکی یکی به x,y اضافه می کند.

به نام خدا :

پروژه را امروز شروع می کنم

شاید به این لیست بعدا یه چیزایی اضافه بشود.

حداقل چیزایی که لازم داریم :

1.اسم و طرح بازی ( هر دوشون طراحی کردم بعدا می گم )

2.یک کلاس object برای تکان دادن سطوح در صفحه

3.یک کلاس timer که شبیه این ساعت های ورزشی عمل کند واسه تنظیم فرم و نمایش FPS (Frame Per Second) بازی

4.یک کلاس برای مدیریت موس

5.یک کلاس camera برای scroll کردن map و دنبال یک شی رفتن

6.یک تابع برای تشخیص بر خورد دوشی یا دو مربع با هم

7.کار با SDL_Mixer برای صدا گزاری رو بازی

8.ارائه روشی برای دریافت ورودی string از keyboard مثلا IP سرور

9. کار با شبکه به وسیلهSDL_Net  

10.طراحی منو و شخصیت های بازی

11. چگونه دکمه های منو را شفاف کنیم که زیرشون دیده بشود

12.شاید از Multi-Threading هم استفاده کردیم

13.روشی برای خواندن map بازی

14. ...

 

این لیستی از کارهای مورد نیاز برای ساختن هر بازی بعدا لیست تخصصی بازی خودم می گم اگر شما هم می خواهید چیزی به لیست اضافه کنید می توانید