 |
:: ضو فضي ::
تاريخ التسجيل: Aug 2010
المشاركات: 350
|
|
نشاط [ DELTA67 ]
قوة السمعة:80
|
|
19-02-2017, 05:05 PM
المشاركة 4
|
|
1- تصميم واجهة البرنامج:
كما هو موضح على الصور السابقة يتفاعل البرنامج مع اللاعب من خلال تمثيل الرقعة على الشاشة بشكل مربعات تمثل جدولا بــ 8 أسطر و 8 أعمدة.
على يسار الجدول نجد الأرقام العربية من 1 الى 8 وتحته نجد الحروف اللاتينية من A الى H و هذا لتسهيل تمثيل النقلات.
- القطع البيضاء ممثلة بالحروف: P R N B Q K
- القطع السوداء ممثلة بالحروف: p r n b q k
نضع القطع السوداء في أعلى الرقعة و البيضاء أسفلها.
في البرنامج نمثل هذه الرقعةالظاهرة على الشاشة بمصفوفة 18في 18 و نسميها vboard اختصارا لــ visible board…
هذا هو الكود لملأ المصفوفة (الرقعة) عند انطلاق اللعبة و رسمها على الشاشة:
كود:
#include <stdlib.h>
init_board();
print_board();
char vboard[18][18]; // visible board array
char* blackp= "rnbqkbnr"; // black pieces for initial visible board
char* whitep= "RNBQKBNR"; // white pieces for initial visible board
char* notation= "ABCDEFGH";
main(){
init_vboard();
print_vboard();
while(1);
}
//---------------------------------------
init_vboard(){
char i, x, y, n, z=9;
// fill boxes
for(x=0;x<18;x++)
{
i=0;
// x even
if ( (x & 1) == 0 ) { vboard[x][0] = ' ';for(y=1;y<18;y++) vboard[x][y] = '-';}
else // x odd
{ z--; n=z+0x30; // convert to ascii
vboard[x][0] = n; // numbers for notation help
for(y=1;y<18;y++)
{
if ( ((y & 1) == 1)&(x!=17) ) vboard[x][y] = '|';
else{
if(x==1) {vboard[x][y] = blackp[i]; i++;} // black pieces
else if(x==3) vboard[x][y] = 'p'; // black pawns
else if(x==13) vboard[x][y] = 'P'; // white pawns
else if(x==15) {vboard[x][y] = whitep[i]; i++;} // white pieces
// characters for notation help
else if (x==17){vboard[x][0]=' ';if((y & 1)== 1) vboard[x][y]=' ';else{vboard[x][y]=notation[i];i++;}}
else vboard[x][y]= ' '; // empty box
}
}
}
}
}
//-----------------------------------------------
print_vboard(){
char x, y;
for(x=0;x<18;x++)
{
for(y=0;y<18;y++)
{
printf("%c", vboard[x][y]);
}
printf("\n"); //next line
}
printf("\n");
}
لا أدعي أن هذا الكود هو الأفضل من حيث الـ optimisation و لا الأسهل للفهم لكن الهدف هو فهم الفكرة العامة و كل من لديه أي اقتراحات لتعديله أو تحسينه فعلى الرحب و السعة.
أنا أستعمل الكومبايلر BORLAND C++ V5 لكن أظن أنه يمكن استعمال أي كومبايلر C دون مشاكل.
سنعــــود
التعديل الأخير تم بواسطة : DELTA67 بتاريخ 19-02-2017 الساعة 09:57 PM
|