
عالم الرسوميات في لغة السي!!!
السلام عليكم ورحمة الله تعالى وبركاته ،،،
أقدم لكم هذا البرنامج الذي يمكن المستخدم من الرسم على الشاشة وذلك طبقا للمعايير الدولية الكايبوردية ذات الأزرار التالية ،،،
الزر رقم8: الرسم إلى الأعلى
الزر رقم 2: الرسم إلى الأسفل
الزر رقم 4:الرسم إلى اليسار
الزر رقم 6: الرسم إلى اليمين
الزر رقم 5: المسح العلوي
الزر رقم 0:المسح السفلي
الزر -: المسح اليساري
الزر +: المسح اليميني
الزرEnter : مسح النقطة الحالية
الزر ESC: الخروج من البرنامج
وإليكم هذه الصورة التي توضح كيفية رسم مربع أخضر بالبرنامج ،،،

الكود سورس ،،،
#include <dos.h>
#define MiddleX 159 // 320*200 => X = 320/2 - 1 => X = 159
#define MiddleY 99 // Y = 200/2 - 1 => Y = 99
#define DRAW_PIXEL 0xC // Function for drawing a pixel on screen
#define DELETE_POINT 0x0 // Black Color for Deleting a point(pixel)
#define GREEN_COLOR 0x2 // Color of Pixel
#define PAGE_NUMBER 0x1 // one page no more :)
#define COLUMN MiddleX // Center Screen
#define ROW MiddleY // Center Screen
#define GETCHAR 0x0
#define SET_VIDEO_MODE 0x0
#define VGA_MODE 0x13 // (320*200) 256 color Mode
#define BIOS_INT 0x10 // int 10h
#define KEYBOARD_INT 0x16 // int 16h
#define UP 56 // '8'
#define DOWN 50 // '2'
#define LEFT 52 // '4'
#define RIGHT 54 // '6'
#define DELETE 0x0D // 'ENTER'
#define EXIT 0x20 // int 20h
#define ESC 0x1B //'ESC'
#define GOTO_UP 53 // '5'
#define GOTO_DOWN 48 // '0'
#define GOTO_LEFT 0x2D // '-'
#define GOTO_RIGHT 0x2B // '+'
#define TEXT_MODE 0x03
union REGS IN;
union REGS OUT;
void main(){
IN.h.ah = SET_VIDEO_MODE;
IN.h.al = VGA_MODE;
int86(BIOS_INT,&IN,&OUT);
IN.h.ah = DRAW_PIXEL;
IN.h.al = GREEN_COLOR;
IN.x.bx = PAGE_NUMBER;
IN.x.cx = COLUMN;
IN.x.dx = ROW;
int86(BIOS_INT,&IN,&OUT);
get:
IN.h.ah = GETCHAR;
int86(KEYBOARD_INT,&IN,&OUT);
switch(OUT.h.al){
case UP :
IN.x.dx-=1; // dec dx => dx--
goto DRAW;
break;
case DOWN:
IN.x.dx+=1; // inc dx => dx++
goto DRAW;
break;
case LEFT :
IN.x.cx-=1; // dec cx => cx--
goto DRAW;
break;
case RIGHT:
IN.x.cx+=1; // inc cx => cx++
goto DRAW;
break;
case GOTO_UP:
IN.x.dx-=1; // dec dx => dx--
goto DELTE_A_PIXEL;
break;
case GOTO_DOWN:
IN.x.dx+=1; // inc dx => dx++
goto DELTE_A_PIXEL;
break;
case GOTO_LEFT:
IN.x.cx-=1; // dec cx => cx--
goto DELTE_A_PIXEL;
break;
case GOTO_RIGHT:
IN.x.cx+=1; // inc cx => cx++
goto DELTE_A_PIXEL;
break;
case DELETE:
IN.h.ah = DRAW_PIXEL;
IN.h.al = DELETE_POINT;
int86(BIOS_INT,&IN,&OUT);
goto get;
break;
case ESC:
IN.x.ax = TEXT_MODE;
int86(BIOS_INT,&IN,&OUT);
int86(EXIT,&IN,&OUT);
break;
default:
goto get;
break;
}
DRAW:
IN.h.ah = DRAW_PIXEL;
IN.h.al = GREEN_COLOR;
int86(BIOS_INT,&IN,&OUT);
goto get;
DELTE_A_PIXEL:
IN.h.ah = DRAW_PIXEL;
IN.h.al = DELETE_POINT;
int86(BIOS_INT,&IN,&OUT);
goto get;
}
الشرح ،،،




لكي تستطيعوا ترجمة البرنامج يرجى تحميل برنامج التربو السي++ من هذا الرابط :
لتحميل البرنامج + السورس كود ،،،
