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

لعبه X , O ;

مغلق
بدأه Eng.C# في 17 أبريل 2005 · 5 رد · 582 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني اول لعبه ابرمجها 00

اعرف انها سهله جدا

لكني وقفت عند نقاط 00

هذه محاولتي يوجد اخطاء ارجو ارشادي لها 00

وكيف استطيع ان احسب من الفائز باللعبه في النهايه 00

#include < iostream.h >
void p1 ( void ); 
void p2 ( void);
char a[3][3];
char x,o;
int i,j;
void main () 
{
	for ( int i=0;i<3;i++)
  for ( int j=0;j<3;j++)
  {
 	 a[j]='1';
  }
  switch ()
  {
  case 9:
  case 7:
  case 5:
  case 3:
  case 1: p2();
  case 8:
  case 6:
  case 4:
  case 2: p1();
  }
}
void p1 ( void ) 
{
	char user1;
	cout << " welcome to the user number 1 " << endl;
  cout << " Enter the number of row";
	cin >>a[j];
   cout << " Enter the number of colum";
	cin>>j;
	cout << " [ "<< i<<"]["<<j <<"] = ";
	cin >> user1;
	if ( user1==x)
	{
  p2();
	}
   
}
void p2 ( void)
{
  char user2;
  cout << " welcome to the user number 2 " << endl;
	cout << " Enter the number of row";
	cin >> i;
    cout << " Enter the number of colum";
	cin>>j;
	cout << " [ "<< i<<"]["<<j <<"] = ";
	cin >> user2;
	if ( user2==o)
	{
  p1();
	}

}
52gv0m.gif
#2

أعتقد هناك خطأ:

switch ()

أعتقد يجب أن يكون هناك شيء داخل القوسين؟

كما أني لم أفهم قواعد اللعبة

#3

السلام عليكم

و كما قال الأخ الكريم hasan_aljudy فيجب أن يكون متغير أو ماشابه ذلك مثل :

int choice;

switch(choice)

و إستعمل هذه لكي تقارنها و حاول الأخذ منها شىء فشىء ::

#include <iostream>
#include <string>

using namespace std;

enum SquareState { blank = ' ', X = 'X', O='O'};

class gameBoard
{
     private:     
         const int WIDTH;
         const int HEIGHT;
         int* GameBoard;
     public:
          gameBoard() : WIDTH(3), HEIGHT(3)
          {
               GameBoard = new int[9];
               for (int i = 0; i < 9; i++)
                    *(GameBoard + i) = blank;
          }
         ~gameBoard() {delete[] GameBoard;}
         void setX(int h, int w);
         void setO(int h, int w);
         bool isTaken(int h, int w);
         SquareState isLine(); 
         void draw();
};

void gameBoard::setX(int h, int w)
{
     *(GameBoard + h*HEIGHT + w) = X;
}

void gameBoard::setO(int h, int w)
{
     *(GameBoard + h*HEIGHT + w) = O;
}

bool gameBoard::isTaken (int h, int w)
{
     return *(GameBoard + h*HEIGHT + w) != ' ';
}

SquareState gameBoard::isLine()
{
     if(*GameBoard==X && *(GameBoard +1)==X && *(GameBoard +2)==X)
          return X;
     if(*GameBoard==O && *(GameBoard +1)==O && *(GameBoard +2)==O)
          return O;
     if(*(GameBoard +3)==X && *(GameBoard +4)==X && *(GameBoard +5)==X)
          return X;
     if(*(GameBoard +3)==O && *(GameBoard +4)==O && *(GameBoard +5)==O)
          return O;
     if(*(GameBoard +6)==X && *(GameBoard +7)==X && *(GameBoard +8)==X)
          return X;
     if(*(GameBoard +6)==O && *(GameBoard +7)==O && *(GameBoard +8)==O)
          return O;
     
     if(*GameBoard==X && *(GameBoard +3)==X && *(GameBoard +6)==X)
          return X;
     if(*GameBoard==O && *(GameBoard +3)==O && *(GameBoard +6)==O)
          return O;
     if(*(GameBoard +1)==X && *(GameBoard +4)==X && *(GameBoard +7)==X)
          return X;
     if(*(GameBoard +1)==O && *(GameBoard +4)==O && *(GameBoard +7)==O)
          return O;
     if(*(GameBoard +2)==X && *(GameBoard +5)==X && *(GameBoard +8)==X)
          return X;
     if(*(GameBoard +2)==O && *(GameBoard +5)==O && *(GameBoard +8)==O)
          return O;
     
     if(*GameBoard==X && *(GameBoard +4)==X && *(GameBoard +8)==X)
          return X;
     if(*GameBoard==O && *(GameBoard +4)==O && *(GameBoard +8)==O)
          return O;
     if(*(GameBoard +2)==X && *(GameBoard +4)==X && *(GameBoard +6)==X)
          return X;
     if(*(GameBoard +2)==O && *(GameBoard +4)==O && *(GameBoard +6)==O)
          return O;
     return blank;
}

void gameBoard::draw()
{
     cout << endl;
     for(int i=0; i < HEIGHT; i++)
     {
          cout << (char)*(GameBoard + i*HEIGHT);
          for(int c=1; c < WIDTH; c++)
               cout << " | " << (char)*(GameBoard + i*WIDTH + c);
          cout << endl << "---------" << endl; 
     }
}

class Game
{
public:
     gameBoard* doInput(string player, gameBoard* gb);
     bool inRange(int test);
};
gameBoard* Game::doInput(string player, gameBoard* gb)
{
     gb->draw();
     string letter;
     if (player.compare("one") == 0)
          letter = "X";
     else if (player.compare("two") == 0)
          letter = "O";
     else return gb;
     int input1, input2;
     do {
          do {
                cout << "\nPlayer " << player.c_str()
                    << ", please enter a row number to put an "
                    << letter.c_str() << ": ";
               cin >> input1;
          }while(!inRange(input1));
          do {
               cout << "\nPlease enter a column number to put an " 
                    << letter.c_str() << ": ";
               cin >> input2;
          }while(!inRange(input2));
     }while (gb->isTaken(input1,input2));
     if (player.compare("one") == 0)
          gb->setX(input1, input2);
     else gb->setO(input1, input2);
  system("cls");
     return gb;
}

bool Game::inRange(int test)
{
     return test > -1 && test < 3;
}

int main()
{
     gameBoard* gb = new gameBoard;
     Game g;
     string player1, player2;
     cout << "Welcome to Tic Tac Toe!"
          << "\nPlayer one, please enter your name: ";
     cin >> player1;
     cout << "\nPlayer two, please enter your name: ";
     cin >> player2;
  system("cls");
     
     while (gb->isLine() == ' ')
     {
          gb = g.doInput("one",gb);
          gb = g.doInput("two",gb);
     }
     gb->draw();
     if(gb->isLine() == X)
          cout << "\nPlayer one, you win!"
               << "\nGame Over.";
     else cout << "\nPlayer two, you win!"
               << "\nGame Over.";
     return 0;
}

و السلام

#4

اخي حسن

اللعبه عباره عن اراي .. [3][3] ...

الاعب الاول بأدخال الحرف x ...

اللاعب الثاني يقوم بأدخال الحرف o ...

اي من اللاعبين يستطيع ان يجعل حرفه متتالي 3 مرات فهو الرابح

يعني

x x x

or

x

x

x

وهكذا

اخي GameDev4Arab

حبه حبه عليي اللعبه شغاله ميه الميه 00

لكني ازا بدي ادرس الكود حياخد معي وقت اكثر من برمجه اللعبه 000

اريد انا افهم ؟؟؟؟؟؟؟

لا اريد الحل !!!!!!!!!

ومشكورين

52gv0m.gif
#5

أخي, عندك خطأ في الـ switch, لم تعلق على ذلك. خطأ برمجي يعني, الكومبايلر لا يستطيع ترجمة الكود الى برنامج.

لا أدري ما هذا:

 switch ()
 {
 case 9:
 case 7:
 case 5:
 case 3:
 case 1: p2();
 case 8:
 case 6:
 case 4:
 case 2: p1();
 }

لم كتبت الكود بهذه الطريقة؟ حاول إعادة التفكير فيه.

أعتقد الأفضل أن يكون سير البرنامج بعمل لووب لا تنتهي الا بانتهاء اللعبة (و ذلك بفوز احد الطرفين) و في كل مرة يتم إعطاء الدور للاعب الأول ثم اللاعب الثاني و بعد كل دور يتم استدعاء فنكشن للتحقق ما إذا كانت اللعبة انتهت بفوز احد الطرفين.

قد تقول لي ان هناك مشكلة لديك في ايجاد طريقة لمعرفة من الفائز مثلا .. و لكني أقول لك الأمور إن شاء الله ستصبح أسهل عندما تعطي لبرنامجك تركيب أفضل, فحاول إعادة كتابة الكود بصيغة أفضل مما هي عليه فهذا يسهل العملية كثيرا.

يعني شي مثل (و هذا ليس أفضل شيء)

#include <iostream>
#include <string>
using namespace std;

int main()
{
    char board[3][3];

    //initialize the array
    for(int i = 0; i < 9; i++)	//kind of a hack
        board = 0;

    bool winner = false;

    while( !winner )	//while there is no winner yet
    {
        playerX( board );	//let X play on the board
        checkWinner( board, winner );	//check if this board has a winner, and set the winner flag
        playerO( board );	// let y play
        checkWinner( board, winner );	//check if this board has a winner, and set the winner flag
    }
}

بالنسبة لحساب من الفائز, الطريقة الوحيدة اللتي تخطر على بالي الآن هي تتبع جميع الاحتمالات!!!

مر على جميع الصفوف و شوف هل يحتوي أي سطر منها على نفس الحرف مكررا ثلاث مرات؟ إذا كانت الإجابة نعم فهناك ثلاث احتمالات: إما أن x ربح, أو o ربح, أو لم يربح أحد (يعني الصف لا يزال فارغ)

و نفس الشي مر على جميع الأعمدة ..

و بعدين عندك حالتين خاصتين , و هي الخط المائل (هل له اسم معين؟) الخط القطري؟ الأعوج؟ لا أدري.

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 18 أبريل 2005 في 08:58

#6

السلام عليكم

أخي نوري أنا وضعط لك الكود لكي تقارن و تحمل بعض الأفكار منه

هذا كل شىء أخي

و السلام

هذا الموضوع مغلق.

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