الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

انشاء ألعاب بسيطه على ال Console Screen

بدأه Ali Al-Zyoud في 19 مارس 2011 · 9 رد · 1,373 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ان من اهم اسباب التي تطورك في مجال البرمجه هي الابداع ، لماذا نهتم كثيراً جداً ببرامج معقده بعض الشيء وممله ، من حين الى اخر من الجميل ان ننشيء برامج ممتعه لتسليه في تزيد من مهاراتك وتزيد من تفكيرك في حلول المشكلات.

انا سوف ابداء بهذا الموضوع لانشاء سلسله قصيره عن برامج يمكن انشائها في بيئه الكونسل على ال 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 واللعبه .

Console.rar

#2

عندما حاولت تشغيل اللعبة ظهرت لى هذه الرسالة

post-165385-056492000 1300514276_thumb.p

لا ادرى ما السبب

------------------------------

بعد اعادة الترجمة على جهازى اشتغلت اللعبة

شكرا

المرفقات
Untitled.png

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 19 مارس 2011 في 09:09

1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#3
MOHAMED FATHEI كتب:

عندما حاولت تشغيل اللعبة ظهرت لى هذه الرسالة

post-165385-056492000 1300514276_thumb.p

لا ادرى ما السبب

------------------------------

بعد اعادة الترجمة على جهازى اشتغلت اللعبة

شكرا

شكراً على الملاحظه ، اتوقع ان النظام لديك ليس windows 7 64 ، لقد قمت بتغيير ال project configuration اتوقع الان سوف يعمل على معظم الاجهزه .

#4

بعد التحميل و التجريب

اللعبة رائعة بحق أخي الفاضل

و لي عودة إن شاء الله بعد النظر في الكود

تقبل مروري

1
#5

اخوي لعبة رائعة ما شاء الله

ـــــ

القيت نظرة على الكود يبدو انه من مستويات متقدمة في البداية هناك اشياء لم افهمها في بداية الكود واوامره الى if

Mr.Raed

1f557e95a4.jpg
#6

رائع جداً الله يعطيك العافية

كود بسيط و يوقم بالمطلوب

سأقوم بالتغيير فيه و تجربته

أستعد لأسئلتي :(

تم تعديل هذه المشاركة بواسطة GProgrammer في 20 مارس 2011 في 08:41

1
#7
#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;

هذا ما فهمته يا ريت تفيدني بخصوصها

1f557e95a4.jpg
#8
Mr.Raed كتب:

#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;

هذا ما فهمته يا ريت تفيدني بخصوصها

هنا قمت بأستخدام بعض دوال ال windows API لتحكم بمكان ال cursor على الشاشه.

الان باسخدام gotoxy يمكنني ان انقل المؤشر الى اي مكان اريد واكتب ما اريد في ذلك المكان.

#9

السلام عليكم

لعبة جيدة و لكن المزعج هو أن التوزيع المبدئي للأرقام و هذا أمر مزعج :)

char* Array[3][3]=
{
	"1","6","5",
	"8","3","2",
	"7","4"," "
};

post-91400-035200700 1300969441_thumb.pn

أعني أن التوزيع الأولي ثابت و هذا مزعج. طبعا تعرف كيف تعدل، و مستواك ما شاء الله. زادك الله علم

المرفقات
game.PNG
#10
بن العيد كتب:

السلام عليكم

لعبة جيدة و لكن المزعج هو أن التوزيع المبدئي للأرقام و هذا أمر مزعج :)

char* Array[3][3]=
{
	"1","6","5",
	"8","3","2",
	"7","4"," "
};

post-91400-035200700 1300969441_thumb.pn

أعني أن التوزيع الأولي ثابت و هذا مزعج. طبعا تعرف كيف تعدل، و مستواك ما شاء الله. زادك الله علم

اشكرك على ردك ، وكلامك صحيح يمكن عملها بشكل افضل

ولكن من عنوان الموضوع ارد ان ابني بأبسط شكا ممكن ، حيث بنفس النضام سوف اقوم بعمل اللعاب اخرى فيمكن ان يكون تغيير ال chars اسهل، انا هنا لا اهتم بال optimization بقدر اهتمامي بايصال الفكره بشكل مبسط.

وشكراً لك.

مواضيع مشابهة