تشکر

از سایت های تیزهوش و پرشین دیزاینرز و  یک روزه برای لینک دادن به وبلاگم ممنونم و همچنین از مدیر سایت آی آر اسکول به خاطر اهدای یک کرسی استادی و ای-میل و هاستینگ به من ممنونم .

و با تشکر از دوست خوبم حسین روشنی

---

 معرفی خودم :

ایمان شرف الدین دانشجوی سال اول مهندسی کامپیوتر دانشگاه علوم فنون بابل متولد ۲/۱۲/۱۳۶۵ ولی شناسنامه ۱/۱/۱۳۶۶

۳۶ واحدم تو این دو ترم پاس شد

فقط برای اشنایی شما عزیزان.

---

واما یک جواب به شما دوست عزیزی که می گویید C(یا ++C) هیچی ندارد و ارزش بازی نوشتن را ندارد !!!

نمی دانم نمی خواهم ناراحتت کنم ...

ولی شاید اون سه واحد زبان برنامه نویسی پیشرفته ای که پاس کردی

این ذهنیت را در شما ایجاد کرد که ++C هیچی نداره !!! تقصیر استادها ونظام آموزشی دانشگاهای فوق العاده اشغال ایران (منظورم تک تکشون از شریف گرفته تا آزاد شریف ام واسه این خوبه که بعضی نخبه ها توشن که تعدادشون خیلی کمتر از تعداد خرخون هاش خیلی خیلی کمتر) بعد ادعا می کنیم دانشگاهای ما حداقل تا لیسانس عالی ان ( اقا کدوم کشک کدوم دوغ ) من دانشجوهای  دانشگاه اسراییل!! که ما به قول خودمون کشور حسابش نمی کنیم می دیدم این چی game engine 3d می ساختن اون وقت ما هنوز تو win32 console سی پلاس پلاس گیر کردیم...

بر گردیم به بحثمون شاید نظرت عوض بشه اگر بدونی 90 ٪ بازی هایی که بازی می کنی از Need For Speed Underground گرفته تا Quake 4 و Counter-Strike و Prince of persia و... با ++C نوشته شدند

حتی می تونی سرس بازی معروفی مثل Quake 3 که زمانی معروف ترین بازی شبکه بود رو از اینترنت دانلود کنید و SDK بازی Half-life واسه استفاده از engine این بازی (که توسط Counter-Strike هم استفاده می شود) برای ساخت بازی های شبیه Team Fortress و Counter-strike دانلود کنید... 

شاید چیزی از DirectX و OpenGL ندونی ولی base هر دوشون با C نوشتن

حتما از 3d max و Maya استفاده کردی؟یا blender 3dخودمون که دست کمی از این دو تا ندارد هر سه تاشون با ++C نوشتن حتی سرس کد این اخری می تونین از سایتش دانلود کنید و یا سرس نرم افزار gmax که نمونه OpenSource برنامه 3d max است

GIMP و PhotoShop ام با ++C نوشتن (که سرس اولی ام می تونید از سایتش دانلود کنید) و plugin هاشون م با phyton و ++C می نویسند

من نمی دانم دیگه چی بگم ...

در مورد حرف اخر تون که گفتید کاری که پول توش نیست دنبالش نرو؟

؟همین افکار ایران یک کشور عقب مونده کرده که باید عین ... از محصولات کشور های دیگه استفاده کند

برم دنبال چه کاری؟ می دونم جوابت چیه چون این جواب داره حالم بهم می زنه برو دنبال برنامه نویسی database ؟ برنامه حسابداری بنویسم که با crystal report چند تا چیز مزخرف دیگه سرم گرم کنم؟

نمی دونم هر کی نظر خودشو داره

ولی من کار database ام کردم با Visual Basic وDAOوADO

استفاده از Access و SQL 2000 ولی کم کم داره حالم از VB بهم می خوره مگر اینکه بخوام به کسی اموزش بدم که اونوقت باید به خودم تلقین کنم که ازش خوشم میاد ۷۰ در صد VB کارهای این کره خاکی فقط کار database انجام می دهند به خاطر همین microsoft سعی کرد از این لحاظ VB رو برای کار database  اسان طراحی کند

به هر حال ایران نیازمند یک رهبر در زمینه IT که ایران را از این فلاکت در بیاره و من هم مثل شما منتظر این رهبر می شینم

به امید خدا ...

 

                     قسم به تک تک چشم های منتظر

                  ما می توانیم بهترین باشیم

                  همانطور که اجدادمان بودند

 

MyGame

می توانید سرس بازی!!! (هنوز هیچیش کامل نشده) را از اینجا دانلود کنید

این سرس حاوی

main.cpp
definations.h
functions.h
artro.ttf
dot.bmp
timer.h
object.h
main.dsw
main.dsp
است که در طول سه درس قبل توضیح دادم.

موفق باشید البته فکر نکنم حتی یک نفر از شما عزیزان داستان را قدم به قدم با من دنبال می کردید !!! ...

نمی دونم چی بگم .

۲۰ قدم برای تبحر در لینوکس

این مقاله از مجله ایران توکس گرفتم

برای حمایت از OpenSource  

-----

۱) دلیلی داشته باشید که چرا می‌خواهید لینوکس را یاد بگیرید؟ درباره منشاء و تاریخچه جامعه لینوکس مطالعه کنید. هرگاه بدانید که جامعه لینوکس از کجا آمده و چگونه به جایگاه کنونی خود دست یافته است، بهتر از زحماتی که قبل از شما کشیده شده است، قدردانی خواهید کرد.
۲) تعداد اموری را که مایل هستید در ماه اول قادر به انجام آن باشید را تعیین کنید. ترجیحا آنها را یادداشت کنید و پیشرفتتان را بررسی کنید. در حدی معقول جاه طلب باشید. اگر چیزی که قرار بود یکماهه یاد بگیرید، دو ماه طول کشید، اشکالی ندارد. یادگیری بهتر مطلبی در دوماه بر یادگیری سطحی طی یکماه ارجحیت دارد.
۳) یادداشت کنید، یادداشت کنید و بازهم یادداشت کنید. تمامی اموری را بر روی کامپیوترتان انجام می‌دهید را ثبت کنید. این یکی از وظایف مهم یک مدیر سیستم است. حتی اگر شما تنها کاربر یک کامپیوتر هستید، باز هم مدیر آن سیستم به شمار می‌روید. این یادداشت‌ها شما را در موقع رفع اشکالات سیستم یاری خواهد کرد و در صورتی که لازم باشد کاری را دوباره انجام دهید، انجام دادن آنرا برایتان آسان‌تر خواهد ساخت.
۴) موارد جالبی را که انتظار نداشتید یاد بگیرید، ولی یادگرفته‌اید را یادداشت کنید. سپس وقتی به حد خوبی رسید، آنرا با دیگران به اشتراک بگذارید. با اینکار به جامعه‌ای که به شما خدمت کرده است، خدمت خواهید کرد. حتی اگر در تمامی عمر خود حتی یک خط کد ننوشته‌اید و هرگز سعی نکرده‌اید تا این کار را انجام دهید، می‌توانید دانسته‌های خود را به اشتراک بگذارید، به این وسیله اثری مضاربه‌ای در زنجیره اشتراک دانسته‌ها خواهید داشت. حتی کوچکترین مستنداتی که شما آنرا نوشته‌اید، به دیگران در طی مسیری که شما آنرا پیموده‌اید، کمک خواهد کرد.
۵) سوالات خود را هوشمندانه بپرسید.
۶) در صورتی که امکان دارد، کامپیوتری را بطور جداگانه و دائمی به اجرای لینوکس اختصاص دهید. درصورتی که کامپیوتری dual boot داشته باشید، زیاد علافه‌مند نخواهید بود تا فضای راحت خود را رها نمایید.
۷) باور داشته باشید که در حال توسعه مهارت‌های خود و طبیعتا دارای وابستگی‌هایی به سیستم‌عاملی که قبل از لینوکس استفاده می‌کردید، هستید. هرگاه بتوانید این وابستگی‌ها را بشکنید، خواهید توانست هکر بادانش‌تر و یا حتی انسان بهتری باشید.
۸) باور داشته باشید که تمامی سیستم‌های عامل جایی به مشکل بر می‌خورند و در مورد برخی از آنها این مشکلات بیشتر است.
۹) همانند بند هشتم، فقط بخاطر اینکه شما نمی‌دانید چگونه کاری را انجام دهید، فکر نکنید که نمی‌توان این کار را انجام داد.
۱۰) لینوکس یعنی جامعه. در صورتی که اشکالی مشاهده می‌کنید که نیاز است برطرف شود، خوب دست به کار شوید. بله! شما. ممکن است فکر کنید که کسی قبل از شما به فکر انجام این کار افتاده باشد. موضوع این است که دو نفر ممکن است با شما موافق باشند و خواهید دید که نتیجه این مسئله چه خواهد شد. به نفع تمامی جامعه.
۱۱) هنگامی که تصمیم گرفتید این کار را انجام دهید، باور داشته باشید که بر شانه غول ایستاده‌اید. هنگام که شروع به کار کنید، تعجب خواهید کرد که چه تعداد کمک برای استفاده شما موجود است.
۱۲) سرگرمی را با یادگیری مخلوط کنید. اگر در سرتاسر یک سفر بخندید، از آن مسافرت دو چندان لذت خواهید برد.
۱۳) باور داشته باشید که هر چیز ارزشمندی به کار و فداکاری نیازمند است. توانایی در کنترل بیتهایی که در کامپیوتر شما جریان دارند، هزینه‌ای دارد که باید پرداخت کنید و هرگاه توانستید این توانایی را بدست آورید، خیلی بهتر خواهید بود.
۱۴) با سرعت پیشرفت فناوری در جهان، باور داشته باشید که هیچ مقصدی وجود ندارد. شما در سفری هستید که مسیر آن دائما تغییر می‌کند، باید از آن لذت ببرید.
۱۵) فناوری را برای دلیل فناوری دنبال نکنید. اگر این کار را بکنید، دلاوری و ابزارهای تکنیکی شما، معنایی برای شما و دیگران نخواهد داشت. با تفکر در مورد اینکه چگونه می‌توانید از فناوری برای رفع مشکلات اجتماعی دنیایی که در آن زندگی می‌کنید، استفاده کنید، بر فناوری چهره‌ای انسانی ببخشید. مهمتر از آن فاصله‌ای کافی از فناوری‌تان داشته باشید تا بتوانید درک کنید در برخی موارد مانند رذالت، فناوری بیش از آنچه راه حل باشد، خود یک مشکل است.
۱۶) باور داشته باشید که افرادی در سرتاسر جهان در حال کار هستند تا تجربه کامپیوتری شما را آسان‌تر سازند. این مسئله هر روز بهتر و بهتر می‌شود. زمان به سمت شماست.
۱۷) به عضویت یک گروه کاربری لینوکس در نزدیکی‌تان در آیید. در http://www.linux.org/groups می‌توانید به دنبال یکی از آنها بگردید. اگر اولین گروه برایتان خوشایند نبود، به دنبال گروه دیگری باشید. اگر در نزدیکی شما گروهی وجود ندارد، خودتان یکی درست کنید!
۱۸) از توسعه دهندگان نرم‌افزارهای آزاد پشتیبانی کنید. آنها خانواده‌ای دارند که باید به آنها رسیدگی کنند و همانند شما آرزوهایی. آنها روی هوا زندگی نمی‌کنند.
۱۹) آهسته، ولی پیوسته حرکت کنید. شاید دو سال طول بکشد تا به جایی که باید، برسید، ولی اگر الان شروع نکنید، هیچگاه به آنجا نخواهید رسید.
۲۰) چون صخره‌ای استوار باشید.

درس 11 : ساخت دو تابع tanzimFPSو ShowFPS

درس 11 : ساخت دو تابع tanzimFPS و ShowFPS

 

ممکن یک بازی بر روی یک کامپیوتر با سرعت 40  فرم در ثانیه(FPS) اجرا شود و روی کامپیوتری دیگر 260فرم بر ثانیه به خاطر پردازنده حافظه گرافیکی و غیره . مثلا اگر دو کامپیوتر رو شبکه  با هم خیلی فرق داشته باشند دچار مشکل می شوید حتی مثال های غیر شبکه . شما در این درس یاد می گیرید FPS بازی خود را خود تعیین کنید

//tedaad e frame haa dar yek saanie

const int FRAMES_PER_SECOND = 20;

timer fps;

این را ما در فایل definations.h می نویسیم که نشانگر مقدار فرمی است که باید در یک ثانیه نشان داده شود و fps هم یک نمونه از کلاس timer هست چون ما  برای تنظیم FPS نیازمند به یک ساعت ثانیه شمار هستیم.

حال میرویم به سراق تعریف تابع tanzimFPS :

void tanzimFPS(int p1,int p2 = FRAMES_PER_SECOND )

{

            if(p1==1)

            {

             //tanzim e frame rate

     while( fps.get_time() < 1000 / p2 )

     {

          //Allaf...  

             }

            }

            else

            ;//Do Nothing

}

این تابع دو متغییر می گیرد و اگر دومی را ندادیم مقدار پیش فرض را می فرستد پارامتر اول تعیین می کند که این تابع فعال باشد یا نه پارامتر دوم هم مقدار FPS را تعیین می کند همه کار این تابع را شرط حلقه while انجام می دهد البته قبلا باید در تابع main ,  fps.start() را نوشته باشیم این حلقه هر مقدار میلی ثانیه که ما بخواهیم تاخیر می اندازد مثلا اگر بخواهیم 20 فرم در ثانیه اجرا شود یعنی هر فرم 1000 تقسیم بر 20 که می شود 50 میلی ثانیه باید تاخیر بیاندازد .این را در فایل functions.h قرار می دهیم.

 

خوب حالا نوبت تابع ShowFPS است :

معمولا این تابع را برای این در بازی ها می گذارند که کاربر با مثلا انتخاب گزینه ای از منو Options بتواند FPS بازی را بر روی کامپیوتر خود ببیند برای اینکه قدرت سخت افزاری کامپیوتر خود را با بقیه بسنجد.

//baraaie mohaasebeie FPS

int frame = 0;

timer update ;

TTF_Font *fpsFont;

SDL_Color textColor = { 0, 0, 0 };

SDL_Surface *fpsSurface = NULL;

این ها را در فایل definations.h می نویسیم frame مقدار فرم ها را در خود نگه می دارد update هم در شمارش به ما کمک می کند fpsFont و fpsSurface هم برای نمایش بر روی صفحه استفاده می شوند textColor هم رنگ سیاه است.

void ShowFPS()

{

         frame++;

        //If a second has passed since the caption was last updated

        if( update.get_time() > 1000 )

        {

            //A temp string

            char charFPS[ 64 ];

           

            //Calculate the frames per second and create the string

            sprintf( charFPS, "%i", frame  );

           

            //Reset the caption

           

   fpsSurface = TTF_RenderText_Blended( fpsFont, charFPS, textColor );

                                   

            //Restart the update timer

            update.start();    frame = 0;

          }

                        apply_surface( 20, 20, fpsSurface, screen );

}

فرم در هر اجرا زیاد می شود درون if بعد از گذشت هر 1 ثانیه اعمالی انجام می دهد در اصل ما می خواهیم بدانیم در هر ثانیه چند فرم اجرا می شود پس در اخر if ما update را reset می کنیم و frame را هم 0 می کنیم در این بین هم ما کار تبدیل frame از integer به char را انجام می دهیم به خاطر این که تابع TTF_RenderText_Blended فقط رشته قبول می کند. سر اخر هم کار چسباندن به screen انجام می شود.

 

 

ایران ...

ایران ...
ایران ...
من دیگه امیدی به این ایران ندارم... وقتی تو گوگل ترند
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  نمی دهد منم تعریف نمی کنم!!