170 likes | 256 Views
Introduction to g4c. G4C is a simple graphics library, designed to make game programming easier It's very small draw_line, draw_rect, draw_ellipse, fill_rect, fill_ellipse text_out, input, inkey load_sprite, put_sprite, hide_sprite, get_sprite_pos, get_sprite_size , swap_sprite_images
E N D
Introduction to g4c • G4C is a simple graphics library, designed to make game programming easier • It's very small • draw_line, draw_rect, draw_ellipse, fill_rect, fill_ellipse • text_out, input, inkey • load_sprite, put_sprite, hide_sprite, get_sprite_pos, get_sprite_size , swap_sprite_images • register_sprite_proc, disable_sprite_proc, enable_sprite_proc • New functions: register_mouse_proc, copy_sprite_images
Introduction to g4c • I shall now explain some important functions • The others are explained in g4c_help.doc, remember to get it from me at the end • It was written by previous 1'st year students :)
void draw_rect(int x1,int y1,int width, int height); (x, y) width height
void draw_ellipse(int x1,int y1,int width, int height); (x, y) width height
void text_out(char * message,int x, int y); • Writes the specified string in the given location • Can only work with strings • You can convert other data types to strings with sprintf or itoa or ftoa • Example: • Char str[200]; • sprintf(str, “%d”, 15); // str is now “15” • sprintf(str, “%f”, 15.3); // str is now “15.3” • // %d is integer, %f is float
char *input(char * message,int x, int y); • Writes the message in the given location • Then it will wait for the user to enter some text and press enter • The function returns the string the user entered • Always returns a string • You can convert strings to other data types with atoi to convert from strings to integers, or atof to convert them to floats
Sprites • هي رسومات تتحرك على الشاشة • مثلاً شخصيّة في لعبة كالسيارة أو الجندي • لهم خانات في الذاكرة من 0 إلى 29 • حين ترسمها في مكان ثم ترسمها في مكان آخر تُمسح تلقائيُا من المكان القديم • هي لا تمسح ما تحتها
void load_sprite(char* fname, int spritenum) • تحمّل الصورة في الذاكرة في المكان المحدد بالرقم • لكنها لا ترسم شيئاً • يجب أن يكون الملف من نوع.bmp • و يجب أن يكون في مكان ثابت (مثلاc:\images ) أو في نفس مكان ال.exe • لاحظ أنه في الC++ نحتاج إلى تحديد رمز ال \ بطريقة خاصة: • load_sprite(“C:\\images\\ball.bmp”, 1);
void put_sprite(int spritenum,int x,int y); • تضع الsprite في مكان محدد على الشاشة • يجب أن تكون رسمة الsprite قد حُمّلت من قبل في الرقم المحدد • لو ناديتها لتضع نفس الsprite في مكانين متتابعين مختلفين فإنه سيختفي من المكان الأول حين تضعه في المكان الثاني
void swap_sprite_images(int sprite1,int sprite2); • تبدل الصورتين الخاصتين بالsprites • تستخدم في إظهار الحركة – مثلا تبادل القدمين عند المشي • غالبا ما يكون أحد الsprites ظاهرا و الآخر مختفيا
void register_sprite_proc(spriteproc); • تُنادى عادةً في أول البرنامج • و عند حوث تصادم بين اى من 2 sprites او اكثر يقوم البرنامج بتنفيذ الدالة الموجود اسمها بين القوسينspriteproc • و لكن يجب ان تكون الدالة التى بين الاقواس قد تم تعريفها خارج الmain • و يجب أن تكون في صورة • int onsprite(int ,int,void*)
int onSprite(int s1, int s2, void *data) • تكتبها في البرنامج حين تريد التعامل مع تصادم الsprites • لا تناديها أنت, بل يناديها الg4c تلقائيا حين تتصادم الsprites(و أيضا سيعطيها الparameters بأرقام الsprites المصتدمة) • و لكن لكي يناديها الg4c يجب أن تقوم بتسجيلها لديه بواسطةregister_sprite_proc • يمكن أن يكون لها أي إسم, المهم أن يكون تسجيلها بنفس إسمها • أنواع الparamaters لا يمكن تغييرها, ولا الreturn type
Example on the collision callback function void myCollisionFunction(int s1, int s2, void * data) { if( (s1 == player_sprite && s2 == bullet_sprite) || (s1 == player_sprite && s2 == bullet_sprite) ) { text_out(“you die!”, 50 , 50); end_game = true; } }
void register_mouse_proc(MouseProc); • تستخدم لتسجيلcallback مثلها مثلregister_sprite_proc • سينادي الg4c الدالة المسجلة كلما حرك المستخدم الفأرة أو ضغط أي من زرّيها • الدالة الcallback يجب أن تكون في الصورة الآتية:
Example mouse callback int mouseCallback(int x, int y, bool leftBtn, bool rightBtn, void *data) { if ( leftBtn == true && x < 50 && y <100) { fire_cannon_left( ); } if ( leftBtn == true && x < 250 && y <300) { fire_cannon_right( ); } }