المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : برمجة الألعاب الدرس الأول



ErrorMsg
18-05-2003, 11:57 AM
كلما حاولت أن أكتب شيء ظهر بطريقة مقلوبة أرجو من القائمين على المنتدى تفعيل زر code الي الزر تبعه عليه # مثلا عند وضع

#include "allegro.h"

تظهر مقلوبة أرجو من القائمين جعل اتجاه الكود من اليسار لليمين

include "allegro.h"بشكل مؤقت لن أكتب # قبل include أضفها أنت
وسأكتب comment بعد كل أمر حتى يظهر بشكل صحيح

سأشرح في هذا الدرس تركيب أي برنامج مكتوب على allegro
لا تفزع من كثرة الأسطر لأنها ستتكرر في كل برنامج بمعنا أنك فقط رح تعمل copy + paste
يبدأ البرنامج ب
include "allegro.h" // this is the lib header
ثم يأتي ال main على الشكل الآتي
int main(int argc,char *argv[]) //the main function
ثم الحاصرتين {} وبينهما البرنامج
ثم في نهاية نضيف بعض من سحر allegro
END_OF_MAIN(); // this is a trik
هنا يكمن جمال هذه المكتبة بحيث أ، هذا الذي أضفناه في الأخير يحول main إلى بعض خزعبلات windows مثلا winmain في بعض الكمبايلرات وفي بعضها الآخر main بحيث يضمن أن برنامجك سيعمل
----------------------------
داخل الحاصرتين اكتب الآتي قبل كل شيء
allegro_init(); // start
ثم نختار عدد الألوان الذي نريد
set_color_depth(8); // 256 colors
أو
set_color_depth(16); // 16-bit colors
ثم نحجز شاشة رسومية بالأمر
set_gfx_mode(GFX_AUTODETECT_FULLSCREEN , 320, 200, 0, 0); // hmm
أو
set_gfx_mode(GFX_SAFE , 320, 200, 0, 0); // hmm
الأولى تحجز شاشة على fullscreen والثاني fullscreen أو عادي بس آمن يعني دايما تعمل
طبعا ليس كل الكروت تدعم كل ال resulutions لذلك يجب أن نفحص هل ذلك جائز أي يصبح الكود
// now try full secreen with acceleration
if (set_gfx_mode(GFX_AUTODETECT_FULLSCREEN , 320, 200, 0, 0) != 0) // test
{
// if fail try safe (may be windowed mode)
if (set_gfx_mode(GFX_SAFE , 320, 200, 0, 0) != 0)
{
// if fail return to text mode and exit
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
// the format of allegro_message is like printf
allegro_message("Unable to set any graphic mode\n%s\n", allegro_error);
exit(1);
}
}
لم تنجح معي أن أجعلها تبدو صحيحة لذا أنظر الملف المرفق g_main.cpp في init_graph()
طبعا تستطيع استبدال 320 و 200 ب 640 و 480 او أي شي آخر
----------------------------------
مذا لدينا الآن ؟
شاشة رسومية , نستطيع الآن نعطي الأوامر التي ترسم
--------------------
سأكمل فيما بعد ...
انظر ال demo (http://retrospec.sgn.net/allegro/alleg.4020.examples.demo.x86.zip)
-------------------------------------------------------------------------

ErrorMsg
18-05-2003, 01:57 PM
أين كنا ... أه
نستطيع أن نرسم الأشياء الآن
putpixel(screen,x,y,makecol(255,0,0)); // red dot
لاحظ makecol تعطيها R G B فتعطيك اللون بغض النظر هل الشاشة 256 لون أم 16 بت
بنفس الطريقة getpixel تعطي اللون
وأيضا
line (screen,x1,y1,x2,y2,makecol(0,0,255)); //blue line
rect(screen,x1,y1,x2,y2,makecol(255,255,255)); // white rect
triangle(screen,x1,y1,x2,y2,x3,y3,makecol(0,255,0); // a green triangle
وهناك مضلع ودوائر ....
واذا اردت أ، ترسم على Bitmap بدل الشاشة استبدل screen باسم الBitmap
أقصد بال Bitmap هو مكان في الذاكرة يمكنك أ، تخزن فيه صور

screen هي Bitmap معرف داخل allegro كل ما يرسم فيها يظهر على الشاشة
في نظام 256 لون تعمل pal عن طريق
PALETTE pal1
تستطيع تحميل ملفات tga bmp lbm pcx عن طريق load_bitmap
BITMAP *mypic=load_bitmap("C:\\delme.bmp",pal1); // hmm
وتستطيع تفعيله ال pal عن طريق اذا كانت الصورة 256 لون
set_palette(pal1); // aaa
-----------------------
لمسح الشاشة
clear_bitmap(screen); // woo
ولطلاء الشاشة بلون
clear_to_color(screen,makecol(255,255,0)); // haha
-------------------------------------

ErrorMsg
18-05-2003, 02:08 PM
كل الذي مضى لم يكن مهما جدا لأنه من النادر أن نستعمله أما الآن فهذه الأوامر هي التي يجب تذكرها
وهو blit وفيرحاناته المختلفة وهي
blit masked_blit streach_blit وأخيرا masked_streach_blit
وصيغتها كالآتي
لنفرض أنك تريد أن ترسم صورة محملة من ملف bmp على الشاشة
blit(Mybmp, screen, 0, 0, x,y, width, height); // Hmm
اما masked فتعني أن تجعل الخلفية شفافة

اللون الشفاف هو أول لون في pal أي 0 في حالة 256 لون
وهو أيضا الزهري السحري 255,0,255 في طور الألوان الحقيقية

وstreach تعني مع تغير الشكل

Mr. Black Man
18-05-2003, 10:48 PM
شكراً لك على الدرس ;) ":"

Kasser
20-05-2003, 02:38 PM
اذا ماكنت مخطئ هذا لغة C ؟

BuGaTTi
21-05-2003, 01:07 AM
شكر ا اخي على الشرح ولكن اتمنى ان تضع كود كل درس في المرفقات

لان شكل هذه الاكواد في المنتدى ( تعقد ) :0)


شكرا للمره الثانيه

Mr. Black Man
21-05-2003, 04:55 AM
الرسالة الأصلية كتبت بواسطة كاسر الألعاب
اذا ماكنت مخطئ هذا لغة C ؟

إنت مخطىء :o هذه ليست لغة ال C إنما مكتبة ال Allegro :)

ErrorMsg
27-05-2003, 01:31 PM
الكود ++C نعم صحيح و السي كما نعلم تحتوي على الكثير من المكتبات مثل iostream.h و stdio.h و غيرها هذا الكود عبارة عن ++C ولكنه يستخدم مكتبة allegro.h
يبدأ ب include "allegro.h #
-----------
انظر الدرس رقم صفر (http://www.montada.com/showthread.php?s=&threadid=206455)