ان من اهم اسباب التي تطورك في مجال البرمجه هي الابداع ، لماذا نهتم كثيراً جداً ببرامج معقده بعض الشيء وممله ، من حين الى اخر من الجميل ان ننشيء برامج ممتعه لتسليه في تزيد من مهاراتك وتزيد من تفكيرك في حلول المشكلات.
انا سوف ابداء بهذا الموضوع لانشاء سلسله قصيره عن برامج يمكن انشائها في بيئه الكونسل على ال windows لعمل اللعاب او برامج صغيره لتسليه والاستفاده.
قد يسأل البعض لماذا نصنع لعبه على بيئه الكونسول ؟؟؟ سوف اقول ولماذا لا ؟ نعم لن تكون لعبه احترافيه او تمتلك الكثير من الرسوميات ولكن سوفف تساعدنا على فهم القليل عن كيفيه انشاء الالعاب ولن ندخل بشكل مطول في مجال الرسوميات . فلهدف انشاء العاب وبرامج لتسليه على بيئه الكونسول.
اولاً:
لعبه 8 puzzle هذه العبه الشهيره التي التي من خلالها نرتب الارقام. لعبه تعد فكره ممتازه لشلشه الكونسول.
اولاً اعتقد ان الكثيرين هنا لا يستطيعون العمل مع شاشه الدوس او 16 bit systems لذلك سوف انشيء العديد من ال functions التي سوف تحاكي بعض ال function التي تتوفر على ال compilers القديمه مثل gotoxy التي تسمح لك بنقل ال cursor الى مكان اخر في الشاشه.
اولاً نستعرض الكود:
#include<windows.h>
#include<iostream>
#include<conio.h>
using namespace std;
void gotoxy(int x,int y)
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void Rectangle(int x,int y,int width,int height)
{
gotoxy(x,y);
cout<<(char)218;
int i=0;
for(i=0;i<(width-2);i++)
cout<<(char)196;
cout<<(char)191;
for(i=1;i<height-1;i++)
{
gotoxy(x,y+i);
cout<<(char)179;
gotoxy(x+width-1,y+i);
cout<<(char)179;
}
gotoxy(x,y+height-1);
cout<<(char)192;
for(i=0;i<(width-2);i++)
cout<<(char)196;
cout<<(char)217;
cout<<endl;
}
void DrawTextInRect(char* str,int x,int y)
{
Rectangle(x,y,strlen(str)+2,3);
gotoxy(x+1,y+1);
cout<<str;
cout<<endl<<endl;
}
char* Array[3][3]=
{
"1","6","5",
"8","3","2",
"7","4"," "
};
int x=2,y=2;
bool CheckWinning()
{
if(Array[0][0]=="1"&&
Array[1][0]=="2"&&
Array[2][0]=="3"&&
Array[0][1]=="4"&&
Array[1][1]=="5"&&
Array[2][1]=="6"&&
Array[0][2]=="7"&&
Array[1][2]=="8"&&
Array[2][2]==" "
)
return true;
return false;
}
void GetKeyOrder()
{
int c;
c=getch();
switch(c)
{
case 77://Right
if(x>0)
{
Array[x][y]=Array[x-1][y];
Array[x-1][y]=" ";
x--;
}
break;
case 75://Left
if(x<2)
{
Array[x][y]=Array[x+1][y];
Array[x+1][y]=" ";
x++;
}
break;
case 80://Down
if(y>0)
{
Array[x][y]=Array[x][y-1];
Array[x][y-1]=" ";
y--;
}
break;
case 72://Up
if(y<2)
{
Array[x][y]=Array[x][y+1];
Array[x][y+1]=" ";
y++;
}
break;
}
}
int main()
{
while(!CheckWinning())
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
DrawTextInRect(Array[j],i*3,j*3);
GetKeyOrder();
}
system("cls");
cout<<"\n\n YOU WON !!!!!!!!!!!!!!\n\n";
system("pause");
return 0;
}ملاحظهات مهمه:
اولاً انا لن اقوم بمليء الخانات بشل Random فكلما تشغل البرنامج سوف يكون بنفس الشكل دائماً.
يمكن عمل بعض الاختصارات بالبرنامج ولكن ما اهتم به حالياً هو الفكره الهامه وهي التالي:
1- هل انتصرت
2- ارسم ال board
3- اقراء مدخلات
هذه الفكره الاساسيه مادام لم تنتصر سوف تتكرر ال loop من قرائات مدخلات واعاده رسم.
اتمنى ان يحمل الموضوع الفائده.
ملاحظه سوف احمل ملف ال Exe واللعبه .
