程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c語言三子棋-寫一個三子棋,棋盤游戲,用c語言

c語言三子棋-寫一個三子棋,棋盤游戲,用c語言

編輯:編程解疑
寫一個三子棋,棋盤游戲,用c語言

輸出初始棋盤,分為電腦和玩家輸入,輸入一次打印一次棋盤,判斷誰先三點一線完成誰贏最後輸出結果

最佳回答:


 #include<stdio.h>
#include<stdlib.h>
#include<time.h> 


char arr[3][3] = { 0 };            //直接定義外部變量所有的函數可以直接使用    因為考慮到棋盤大小是固定的
int size = 9;                   //棋盤大小固定  每下一個子都會使可以下子的容量-1
void chessboard()                                    //打印棋盤
{
    int i = 0, j = 0;
    printf("   |   |   \n");
    for (i = 0; i < 3; i++)
    {
        printf("_%c_|_%c_|_%c_\n", arr[i][0], arr[i][1], arr[i][2]);   //棋盤對應位置下棋
        if (i < 2)
            printf("   |   |   \n");
    }
}
void player()                                       //玩家下棋
{
    int m = 0, n = 0;
    printf("player(@):");              //輸入的是對應的坐標    
    scanf_s("%d%d", &m, &n);          //玩家輸入的坐標必須在范圍內並且不能是被下過的地方
    if (m<1 || m>3 || n<1 || n>3 || arr[m - 1][n - 1] != ' ')
    {
        printf("this place can not play!\n");    //如果不符合要求則繼續調用這個函數
        player();
    }
    else
    {
        arr[m - 1][n - 1] = '@';   //將棋子放入相應的內容 棋盤容量-1
        size--;
    }
}

void computer()                                     //電腦下棋
{
    printf("computer(#):\n");      
    int m = 0, n = 0;
    srand(time(NULL));          //電腦的坐標是隨機產生的   以時間為種子
    m = rand() % 3;            //對3取余產生0-2的隨機數賦給數組下標
    n = rand() % 3;
    while (arr[m][n] != ' ')     //如果產生的坐標不符合要求則循環產生      (效率比較低)
    {
        m = rand() % 3;
        n = rand() % 3;
    }
    arr[m][n] = '#';               //操作後容量-1
    size--;            
}

int winner()                                        //判斷獲勝者
{                            //雖然代碼多但是效率高  本來想采用函數比較考慮到效率太低就放棄了
    if ((arr[0][0] == arr[0][1] && arr[0][1] == arr[0][2] && arr[0][2] == '@') ||
        (arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2] && arr[1][2] == '@') ||
        (arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2] && arr[2][2] == '@') ||
        (arr[0][0] == arr[1][0] && arr[1][0] == arr[2][0] && arr[2][0] == '@') ||
        (arr[0][1] == arr[1][1] && arr[1][1] == arr[2][1] && arr[2][1] == '@') ||
        (arr[0][2] == arr[1][2] && arr[1][2] == arr[2][2] && arr[2][2] == '@') ||
        (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[2][2] == '@') ||
        (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[2][0] == '@'))
        return 1;                        //玩家獲勝
    else if ((arr[0][0] == arr[0][1] && arr[0][1] == arr[0][2] && arr[0][2] == '#') ||
        (arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2] && arr[1][2] == '#') ||
        (arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2] && arr[2][2] == '#') ||
        (arr[0][0] == arr[1][0] && arr[1][0] == arr[2][0] && arr[2][0] == '#') ||
        (arr[0][1] == arr[1][1] && arr[1][1] == arr[2][1] && arr[2][1] == '#') ||
        (arr[0][2] == arr[1][2] && arr[1][2] == arr[2][2] && arr[2][2] == '#') ||
        (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[2][2] == '#') ||
        (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[2][0] == '#'))
        return 0;                     //電腦獲勝
    else if (size == 0)
        return -1;                     //平局
    else
        return 2;           //只是為了消除編譯的警告並無實際意義
}

int main()
{
    int i = 0, j = 0;    //將數組初始化為空格
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            arr[i][j] = ' ';
        }
    }
    while (1)        //循環對弈直到一方獲勝或者平局
    {
        chessboard();          //循環每次開始都打印棋盤
        if (winner() == -1 || winner() == 0 || winner() == 1)   
        {
            break;
        }
        player();        //每下一個子後都打印棋盤 然後就判斷又沒有人獲勝
        chessboard();
        if (winner() == -1 || winner() == 0 || winner() == 1)
        {
            break;
        }
        computer(); 
    }
    if (winner() == 1)
    {
        printf("player win!\n");
    }
    else if (winner() == 0)
    {
        printf("computer win!\n");
    }
    else
    {
        printf("no one win!\n");
    }
    system("pause");
    return 0;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved