A Drop of the Programming Sea

یک قطره از دریای برنامه نویسی: وبلاگ امیرحسین مهدی‌نژاد، برنامه‌نویس، مدرس برنامه‌نویسی و دانشجوی مهندسی کامپیوتر

A Drop of the Programming Sea

یک قطره از دریای برنامه نویسی: وبلاگ امیرحسین مهدی‌نژاد، برنامه‌نویس، مدرس برنامه‌نویسی و دانشجوی مهندسی کامپیوتر

● TicTacToe - 3*3 XO Game

شنبه, ۷ دی ۱۳۹۲، ۱۲:۲۱ ق.ظ

بازی دو نفره X-O

❶ این بازی به صورت دو نفره صورت می گیرد که یک نفر از حرف X و دیگری از حرف O استفاده می کند.

❷ در این بازی از یک جدول 3*3 استفاده می شود.

❸ بازی با حرف O آغاز می شود.

❹ در هر نوبت هرکدام از بازیکن ها تنها یک بار می توانند حرف مربوط به خود را در جدول بگذارند.

❺ بازیکن ها باید سعی کنند حداقل یک ردیف، ستون و یا قطر از جدول را با حرف مربوط به خود پر کنند و برنده کسی است که اوّلین بار یکی از این حالت ها را ایجاد کند.

 

input
11
output
+---+---+---+
| O |   |   |
+---+---+---+
|   |   |   |
+---+---+---+
|   |   |   |
+---+---+---+

کانال کامپیوتر در اسب | آموزش برنامه نویسی و الگوریتم ها

ورودی:

تا موقعی که بازی تمام نشده، در هر مرحله هر یک از دو بازیکن یک عدد دورقمی به برنامه می دهد که نشان دهنده ی مختصات خانه ای از جدول (X,Y) است. مثلاً 12 یعنی X=1 و Y=2 که اگر این خانه قبلاً در جدول پر نشده باشد، حرف آن بازیکن در این خانه قرار خواهد گرفت و هر دفعه نوبت عوض می شود مگر آنکه حرکتی اشتباه صورت بگیرد.

 

خروجی:

در هر مرحله تا موقعی که بازی تمام نشده باشد جدولی دقیقاً مثل شکل مثال بالا چاپ می شود و بازی وقتی تمام می شود که یکی از عبارات زیر را چاپ کنید:

❶ "O is winner"

❷ "X is winner"

❸  "No winner" 

 

این تضمین شده است که در ورودی اعداد مختصات خارج از جدول مثلا 4, 4 مشاهده نخواهد شد.

 
// A Drop of the Programming Sea - adops.blog.ir
#include <iostream>
using namespace std;
bool win(char**);
void print(char**);
int main()
{
    char** ch = new char*[3];
    for(int i=0; i<3; i++) ch[i] = new char[3];
    for(int i=0; i<3; i++) for(int j=0; j<3; j++) ch[i][j]=' ';
    int PorNashod=9,place,turn=2;
    while(PorNashod)
    {
        cin >> place;
        int y=place%10-1;
        int x=place/10-1;
        if(turn==2)
        {
            if(ch[y][x]==' ')
            {
                ch[y][x]='O';
                PorNashod--;
            }
            else turn--;
        }
        else if(turn==1) if(ch[y][x]==' ')
            {
                ch[y][x]='X';
                PorNashod--;
            }
            else turn++;
        print(ch);
        if(win(ch)&&PorNashod<=4)
        {
            char out = (turn==2)? 'O' : 'X';
            cout << out << " is winner\n";
            return 0;
        }
        turn = (turn==2)? 1 : 2;
    }
    cout << "No winner\n";
    return 0;
}
bool win(char** ch)
{
    if(ch[0][0]==ch[1][1]&&ch[1][1]==ch[2][2]) return true;
    else if(ch[0][2]==ch[1][1]&&ch[1][1]==ch[2][0]) return true;
    for(int i=0; i<3; i++)
    {
        if(ch[i][0]==ch[i][1]&&ch[i][1]==ch[i][2]) return true;
        else if(ch[0][i]==ch[1][i]&&ch[1][i]==ch[2][i]) return true;
    }
    return false;
}
void print(char** ch)
{
    char array[7][13];
    for(int y=0; y<7; y++) for(int x=0; x<13; x++) array[y][x]=' ';
    for(int y=1,i=0; y<=5||i<7; y+=2,i++) for(int x=2,j=0; x<=10||j<13; x+=4,j++)
        {
            if(j%4&&!(i%2)) array[i][j]='-';
            else if(!(j%4)&&i%2) array[i][j]='|';
            if(x<=10&&y<=5)
            {
                array[y-1][x+2]='+';
                array[y+1][x+2]='+';
                array[y+1][x-2]='+';
                array[y-1][x-2]='+';
            }
            if(i<3&&j<3) array[y][x] = ch[i][j];
        }
    for(int y=0; y<7; y++)
    {
        for(int x=0; x<13; x++) cout << array[y][x];
        cout << endl;
    }
    return;
}

 

نظرات  (۲)

ممنون بابت سایت خوبتون فقط کد بازی دوز
پاسخ:
خواهشمندم

BESYAR ALI

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی