درس ۲ کار با CD-Rom

در این درس کار با CD-Rom را یاد میگیرید طبعا در همه سیستم عاملها...

رو کاغذ نوشتم باید تایپش کنم!!!

درس 1

 به نام خداوند (تنها جاویدان)

 

 

فایل های استفاده شده

Message

‌BackGround

Source Code

شروع کار با SDL:

اولین کاری که باید انجام بدهیم فراخوانی کردن کتابخانه SDL است که بوسیله دستور  #include (وهمچنین برای این درس)  انجام میشودقبل از هر چیز

 نکته1: در مورد قوانین نحوی  توابع و ساختارهایSDL بگویم که معمولا همه انها با SDL_شروع می شوند مثل ُ SDL_LoadBMP()یا SDL_Surfaceو...

 

نکته2: شما در این درس با توابع

1. SDL_Init()

2. SDL_Quit()

3. SDL_FreeSurface()

4. SDL_LoadBMP()

5. SDL_DisplayFormat()

6. SDL_BlitSurface()

7. SDL_SetVideoMode()

8. SDL_WM_SetCaption()

9. SDL_Delay()

10. SDL_Flip()

11.SDL_GetError()

و با ساختارهای

1. SDL_Surface

2. SDL_Rect

 

اشنا خواهید شد

و نکته که دیگر قبل از ادامه کار باید بگویم این است که SDL

انواع خواص خودش را دارد

Uint8 - the equivalent of an unsigned char 
Uint16 - a 16 bit (2 byte) unsigned integer 
Uint32 - a 32 bit (4 byte) unsigned integer 
Uint64 - a 64 bit (8 byte) unsigned integer 
Sint8 - the equivalent of a signed char 
Sint16 - a 16 bit (2 byte) signed integer 
Sint32 - a 32 bit (4 byte) signed integer 
Sint64 - a 64 bit (8 byte) signed integer 

 

بعداز این نیاز به اماده کردن SDL برای استفاده از توانایی ان در برنامه است این کار بوسیله تابع SDL_Init() انجام می شودکه در صورت نا موفق بودن اجرا مقدار-1را برمیگرداند

SDLمرکب از 8 سیستم است َAudio,Video,Event Handeling,Cd-Rom,File I/o,JoyStick,Timers,Threading که قبل از ایتباده از هرکدام باید اماده شود بوسیله SDL_Init() :

 

int SDL_Init(Uint32 flags);

Flags:

 

SDL_INIT_TIMER

SDL_INIT_AUDIO

SDL_INIT_VIDEO

SDL_INIT_CDROM

SDL_INIT_JOYSTICK

SDL_INIT_EVERYTHING

SDL_INIT_NOPARACHUTE

SDL_INIT_EVENTTHREAD 

 

شما میتوانید با عملگر | دو یا چند مد را اماده کنید

ولی ما معمولا از SDL_INIT_EVERYTHING استفاده می کنیم.

پس کد بعدی برنامه

If (SDL_Init (SDL_INIT_EVERYTHING) == -1)

            Return 1;

در صورت پیش امدن اشکال تابع ()SDL_GetErrorیک مقدار رشته ای از اخرین خطا بر می گرداند

 

حالا وقت اشنایی شما با ساختار SDL_Surface است همه چیز در SDLیک سطح است از مانیتور گرفته تا فایلهای که لود می کنید

 

این ساختار نمایش دهنده قسمتی از حا فظه است که اطلاعات گرافیکی در ان زخیره شده است که اعضای مهم ان عبارت است fotmat که نمایانگر فرمت سطح مثلا 24Bitیا32Bitبودن ان است clip_rectکه از نوع SDL_Rectاست که ساختار مستطیل SDL است حالا ما قصد داریم اشاره گری به صفحه نمایش بدهیم برای این کار باید یک اشاره گر به  سطح تعریف کنید

SDL_Surface *screen = NULL;

و سپس صفحه نمایش را با تابع SDL_SetVideoMode به screenآدرس دهی می کنیم البته در درس 1 ما نیاز به دو سطح دیگر برای نگهداری دو عکس Background.bmp وhelloworld.bmp نیز داریم

SDL_Surface *background = NULL;

SDL_Surface *message = NULL;

حال ما خود تابع load_image(string filename)راتعریف میکنبم

 

SDL_Surface *load_image( std::string filename )

{

    //Temporary storage for the image that's loaded

    SDL_Surface* loadedImage = NULL;

   

    //The optimized image that will be used

    SDL_Surface* optimizedImage = NULL;

  loadedImage = SDL_LoadBMP( filename.c_str() );

      //If nothing went wrong in loading the image

    if( loadedImage != NULL )

    {

        //Create an optimized image

        optimizedImage = SDL_DisplayFormat( loadedImage );

       

        //Free the old image

        SDL_FreeSurface( loadedImage );

    }

    //Return the optimized image

    return optimizedImage;

}

کار این تابع برگرداندن بک اشاره گر به تصویر بهینه شده است

(optimizedImage)پارامتر Filename مسیر فایل BMPاست loadImage یک سطح موقتی برای نگه داری BMP وoptimizedImage سطحی است که از ان استفاده می شود اول از همه تصویر به وسیله تابعSDL_LoadBMP

لود میشود ولی از ان استفاده نمی کنیم زیرا فایل BMP 24 bit می باشد ولی ما می خواهیم صفحه از نوع 32bit باشد ودر صورت استفاده سرعت کار پایین می اید پس ما فرمت عکس را هم فرمت صفحه نمایش میکنیم به وسیله تابع SDL_DisplayFormat و سپس تابع

SDL_FreeSurface استفاده میشود برای ازاد سازی فضای اشغال شده

شکل کلی 3 تابع :

SDL_Surface *SDL_LoadBMP(const char *file);

SDL_Surface *SDL_DisplayFormat(SDL_Surface *surface);

void SDL_FreeSurface(SDL_Surface *surface);

 

سپس تابعی دیگر تعریف میکنیم برای چسباندن عکسها به صفحه نمایش

یا هر سطح به سطح دیگر این کار به وسیله تابع SDL_BlitSurface

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

void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )

{

    //Make a temporary rectangle to hold the offsets

    SDL_Rect offset;

   

    //Give the offsets to the rectangle

    offset.x = x;

    offset.y = y;

    //Blit the surface

    SDL_BlitSurface( source, NULL, destination, &offset );

}

 

این تابع 4 پارامتر میگیرد مختصات مبدا, سطح مقصد و سطح منبع

در اول کار ما مختصات را به یک مسطتیل SDL تبدیل میکنیم چون Blitsurfaceفقط SDL_Rect را قبول میکند

 

const int SCREEN_WIDTH = 640;

const int SCREEN_HEIGHT = 480;

const int SCREEN_BPP = 32;

 

int main( int argc, char* args[] )

{

    //Initialize all SDL subsystems

    if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )

    {

        return 1;   

    }

   

    //Set up the screen

    screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );

   

    //If there was in error in setting up the screen

    if( screen == NULL )

    {

        return 1;   

    }

   

    //Set the window caption

    SDL_WM_SetCaption( "Hello World", NULL );

   

    //Load the images

    message = load_image( "hello_world.bmp" );

    background = load_image( "background.bmp" );

   

    //Apply the background to the screen

    apply_surface( 0, 0, background, screen );

   

    //Apply the message to the screen

    apply_surface( 180, 140, message, screen );

   

    //Update the screen

    if( SDL_Flip( screen ) == -1 )

    {

        return 1;   

    }

   

    //Wait 2 seconds

    SDL_Delay( 2000 );

   

    //Free the surfaces

    SDL_FreeSurface( message );

    SDL_FreeSurface( background );

   

    //Quit SDL

    SDL_Quit();

   

    return 0;   

}

در ابتدا این را بدانید وقتی از SDL استفاده میکنیم همیشه باید

از int main( int argc, char* args[] ) یا int main( int argc, char** args) استفاده کنید در غیر این صورت اشکال میگیرد

تابع SDL_SetVideoMode برای تنظیم صفحه نمابش است

SDL_Surface *SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags);

دو پارامتر اول که کاملا معلوم اند پارامتر  به معنی Bits PerPixel که من به 32 ست میکنم پارامتر 4م هم مقادیر ثابتی دارد که من همیشه به SDL_SWSURFACEست میکنم که به معنی نگهداری در حافظه سیستم است  

مقادیر دیگر هم مثل SDL_HWSURFACEوجود دارد (به Document ها مراجعه

شود )

تابع دیگر

void SDL_WM_SetCaption(const char *title, const char *icon);

 

که تیتر برنامه را مشخص میکند و Icon برنامه

SDL_WM_SetCaption(“Hello World”,NULL);


 

سپس دو عکس را در حافظه لود می کند و انها را به screen می چسباند

 

سپس با تابع SDL_Flip() صفحه نمایش را نوسازی می کند برای نشان دادن عکس لازم است و سپس SDL_Delay() تاخیر میدهد

Visual C++ .Net



اولین کاری که باید انجام بدین دانلود کردن فایل های اجرایی
و هدر SDL است.
میتوانید از این صفحه دانلود کنید تا پایین صفحه Scroll کنید
This




فایل ZIP را باز کنید سپس پوشه درون ان را باز کنید در این پوشه سه پوشه وجود دارد فایلهای SDL.libوSDLmain.libرا از پوشه
Libبه پوشه LibویژالC++خود کپی کنید مثلا در
C:Program FilesMicrosoft Visual Studio .NET 2003Vc7lib
سپس به پوشهInclude ویژالC++رفته و پوشه جدیدی به اسم SDL بسازید مثلا:
C:Program FilesMicrosoft Visual Studio .NET 2003Vc7Include
و فایلهای SDL,include را درون ان بریزیدسپس فایل SDL.dllاز پوشه
Lib به پوشه windows/system32 کپی کنید حالا یک روژه جدید Win32
بسازید



Okرا بزنید وسپس مطمئن شوید یک Empty project ساخته اید


یک فایل Cpp جدید به پروژه اضافه کنید

و کد زیر را درون ان Paste کنید
#include "SDL/SDL.h"
int main( int argc, char* args[] )
{
//Start SDL
SDL_Init( SDL_INIT_EVERYTHING );
//Quit SDL
SDL_Quit();
return 0;
}
سپس به قسمت تنظیمات پروژه بروید

در پوشه C/C++در قسمت Code generation | Runtime Libraryرا به Multi-threaded DLL تغییر دهید

در پوشه Linker در قسمتInput>Additional Dependencies تایپ کنید
SDL.lib SDLmain.lib


حالا پروژه خود را کمپایل کنید

Visual C++ 6



اولین کاری که باید انجام بدین دانلود کردن فایل های اجرایی
و هدر SDL است.
میتوانید از این صفحه دانلود کنید تا پایین صفحه Scroll کنید
This




فایل ZIP را باز کنید سپس پوشه درون ان را باز کنید در این پوشه سه پوشه وجود دارد فایلهای SDL.libوSDLmain.libرا از پوشه
Libبه پوشه LibویژالC++خود کپی کنید مثلا در
C:Program FilesMicrosoft Visual StudioVC98Lib
سپس به پوشهInclude ویژالC++رفته و پوشه جدیدی به اسم SDL بسازید مثلا : C:Program FilesMicrosoft Visual StudioVC98Include
و فایلهای SDL,include را درون ان بریزیدسپس فایل SDL.dllاز پوشه
Lib به پوشه windows/system32 کپی کنید حالا یک روژه جدید تحت عنوان Win32 ApplicationیاWin32 Console Application بسازید


سپس گزینه An empty project را انتخاب کنید و Finish را بزنید
سپس به قسمت Project>Settings بروید ودر برگه C/C++ در قسمت Category گزینه Code Generation را انتخاب کنید و سپس Used RunTime Library را به Multithreaded DLL تغییر دهید سپس در برگه Link در جعبه Object/library Modules تایپ کنیدُِSDL.lib SDLmain.ib




سپس یک فایل به پروژه خود اضافه کنید و کد زیر را درون ان Paste کنید و برنامه را اجرا کنید


#include "SDL/SDL.h"
int main( int argc, char* args[] )
{
//Start SDL
SDL_Init( SDL_INIT_EVERYTHING );
//Quit SDL
SDL_Quit();
return 0;
}

Eclipse &G++ l


نصب SDLروی Eclipse :

اولین کاری که باید انجام بدین دانلود کردن فایل های اجرایی
و هدر SDL است.
میتوانید از این صفحه دانلود کنید تا پایین صفحه Scroll کنید


حالا RPM را اجرا کنید و بگزارید نصب شود
حالا یک Managed Project بسازید


سپس به Project>Properties بروید

سپس به قسمت C/C++ Build بروید و Libraries را انتخاب کنید
روی ADD کلیک کنید و SDL را تایپ کنید



و کد زیر را تایپ کنید
#include "SDL/SDL.h"
int main( int argc, char* args[] )
{
//Start SDL
SDL_Init( SDL_INIT_EVERYTHING );
//Quit SDL
SDL_Quit();
return 0;
}
برای G++ هم فقط کافیست RPM را نصب کنید و کد بالا را در مثلا Mysource.cpp ذخیره کنید و در Shell این را تایپ کنید
g++ -o myprogram mysource.cpp -lSDL
و با دستور ./myprogram برنامه را اجرا کنید

KDevelop



نصب SDLروی KDevelop :
اولین کاری که باید انجام بدین دانلود کردن فایل های اجرایی
و هدر SDL است.
میتوانید از این صفحه دانلود کنید تا پایین صفحه Scroll کنید
this



حالا RPM را اجرا کنید و بگزارید نصب شود
سپس KDevelop را اجرا کنید و یک project جدید بسازید


پروژه جدید خود را از نوع SDL بسازید


حالا می توانید برنامه خود را اجرا کنید