最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用C語言實現簡單的三子棋

 更新時間:2022年06月07日 16:52:49   作者:一零?柒  
這篇文章主要為大家詳細介紹了用C語言實現三子棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

三子棋代碼的實現需要一個簡單的思路做指引,所以我們先來做一下思路的整理,代碼的實現主要分為以下幾個步驟:

1.初始化數組
2.顯示數組
3.電腦走
4.玩家走
5.判斷輸贏

所以,先寫出源文件game.h,如下。

#ifndef __GAME_H__ ?
#define __GAME_H__ ?


#define ROWS 3 ? //定義行 ?
#define COLS 3 ? //定義列 ?

//初始化數組
void init_board(char board[ROWS][COLS], int rows, int cols);
?//顯示數組
void display_board(char board[ROWS][COLS], int rows, int cols);
//電腦走
void computer_move(char board[ROWS][COLS], int rows, int cols);
//玩家走
void player_move(char board[ROWS][COLS], int rows, int cols);
//判斷輸贏
char check_win(char board[ROWS][COLS], int rows, int cols);


#endif//__GAME_H__

接下來再寫出主體的main函數,使這個三子棋的大體先做出來。以下為main.c函數。要實現的主要為選擇界面以及大體的順序。

#define _CRT_SECURE_NO_WARNINGS ??

#include"game.h" ?
#include<stdio.h> ?
#include<stdlib.h> ?
#include<time.h> ?

void menu()
{
? ? printf("*******************************\n");
? ? printf("*****1.paly ? ?2.exit *********\n");
? ? printf("*******************************\n");
}

void game()
{
? ? char ret = 0;
? ? char board[ROWS][COLS] = { 0 };
? ? init_board(board, ROWS, COLS);

? ? while (1)
? ? {
? ? ? ? printf("電腦走:\n");
? ? ? ? computer_move(board, ROWS, COLS);
? ? ? ? display_board(board, ROWS, COLS);
? ? ? ? ret = check_win(board, ROWS, COLS);
? ? ? ? if (ret != 'q')
? ? ? ? {
? ? ? ? ? ? break;
? ? ? ? }

? ? ? ? printf("玩家走:\n");
? ? ? ? player_move(board, ROWS, COLS);
? ? ? ? display_board(board, ROWS, COLS);
? ? ? ? ret = check_win(board, ROWS, COLS);
? ? ? ? if (ret != 'q')
? ? ? ? {
? ? ? ? ? ? break;
? ? ? ? }
? ? }

? ? if (ret == '*')
? ? {
? ? ? ? printf("玩家贏了!\n");
? ? }
? ? else if (ret == 'o')
? ? {
? ? ? ? printf("電腦贏了!\n");
? ? }
? ? else if (ret == ' ')
? ? {
? ? ? ? printf("平局!\n");
? ? }
}

int main()
{
? ? int input = 0;
? ? srand((unsigned)time(NULL));
? ? do
? ? {
? ? ? ? menu();
? ? ? ? printf("請選擇:");
? ? ? ? scanf("%d", &input);
? ? ? ? switch (input)
? ? ? ? {
? ? ? ? case 1:
? ? ? ? ? ? game();
? ? ? ? ? ? break;
? ? ? ? case 2:
? ? ? ? ? ? return 0;
? ? ? ? ? ? break;
? ? ? ? default:
? ? ? ? ? ? printf("輸入錯誤,請重新輸入!\n");
? ? ? ? ? ? break;
? ? ? ? }
? ? } while (input);

? ? system("pause");
? ? return 0;
}

以下為函數模塊功能的的分布實現:

#define _CRT_SECURE_NO_WARNINGS ??


#include"game.h" ?
#include<stdio.h> ?
#include<stdlib.h> ?
#include<time.h> ?


void init_board(char board[ROWS][COLS], int rows, int cols)
{
? ? int i = 0;
? ? int j = 0;
? ? for (i = 0; i < rows; i++)
? ? {
? ? ? ? for (j = 0; j < cols; j++)
? ? ? ? {
? ? ? ? ? ? board[i][j] = ' ';
? ? ? ? }
? ? }
}
void display_board(char board[ROWS][COLS], int rows, int cols) ? ? ? ? ? ? ? ? ? ?//顯示棋盤 ?
{
? ? int i = 0;
? ? for (i = 0; i < rows; i++)
? ? {
? ? ? ? printf("| ?%c | ?%c | ?%c |\n", board[i][0], board[i][1], board[i][2]);
? ? ? ? if (i <= rows - 1)
? ? ? ? {
? ? ? ? ? ? printf("|----|----|----|\n");
? ? ? ? }
? ? }
}

void computer_move(char board[ROWS][COLS], int rows, int cols) ? ? ? ? ? //電腦走 ?
{
? ? while (1)
? ? {
? ? ? ? int x = rand() % 3;
? ? ? ? int y = rand() % 3;
? ? ? ? if (board[x][y] != '*' && board[x][y] != 'o')
? ? ? ? {
? ? ? ? ? ? board[x][y] = 'o';
? ? ? ? ? ? return;
? ? ? ? }

? ? }
}

void player_move(char board[ROWS][COLS], int rows, int cols) ? ? ? ? ?//玩家走 ?
{
? ? int x = 0;
? ? int y = 0;
? ? printf("玩家請輸入位置,如:x y》");
? ? do
? ? {
? ? ? ? scanf("%d %d", &x, &y);
? ? ? ? if (board[x - 1][y - 1] == 'o')
? ? ? ? {
? ? ? ? ? ? printf("該位置已經被占用,請重新輸入:》");
? ? ? ? }
? ? ? ? else if (((x - 1)>3) || ((y - 1)>3) || (x - 1 < 0) || (y - 1 < 0))
? ? ? ? {
? ? ? ? ? ? printf("輸入位置錯誤,請重新輸入:》");
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? board[x - 1][y - 1] = '*';
? ? ? ? ? ? break;
? ? ? ? }
? ? } while (1);
}

static int is_full(char board[ROWS][COLS], int rows, int cols) ? ?//判斷棋盤滿沒有 ?
{
? ? int i = 0;
? ? int j = 0;
? ? for (i = 0; i < rows; i++)
? ? {
? ? ? ? for (j = 0; j <cols; j++)
? ? ? ? {
? ? ? ? ? ? if (board[i][j] == ' ')
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return 0;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? return 1;
}

char check_win(char board[ROWS][COLS], int rows, int cols) ? ? ? ? ? //判斷輸贏 ?
{
? ? int k = 1;
? ? int i = 0;
? ? for (i = 0; i < rows; i++) ?//判斷行
? ? {
? ? ? ? if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && board[i][0] != ' ')?
? ? ? ? {
? ? ? ? ? ? return board[i][0];
? ? ? ? }
? ? }
? ? for (i = 0; i < cols; i++) ?//判斷列
? ? {
? ? ? ? if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]) && (board[0][i] != ' '))
? ? ? ? {
? ? ? ? ? ? return board[0][i];
? ? ? ? }
? ? }
? ? if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[0][0] != ' ')) //判斷正斜
? ? {
? ? ? ? return board[1][1];
? ? }
? ? if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && (board[0][2] != ' ')) //判斷反斜
? ? {
? ? ? ? return board[0][2];
? ? }
? ? if (is_full(board, rows, cols))
? ? {
? ? ? ? return ' ';
? ? }
? ? return 'q';
}

以下為程序運行的三種結果:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Qt的qDebug使用小結

    Qt的qDebug使用小結

    使用qDebug()函數它可以把調試信息直接輸出到控制臺上,本文就來介紹一下qDebug的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2023-06-06
  • C++實現LeetCode(121.買賣股票的最佳時間)

    C++實現LeetCode(121.買賣股票的最佳時間)

    這篇文章主要介紹了C++實現LeetCode(121.買賣股票的最佳時間),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++命名空間 namespace詳解

    C++命名空間 namespace詳解

    定義命名空間,使用namespace關鍵字,后面跟命名空間的名字,然后接一對花括號{ } 即可,{ }中即為命名空間的成員,這篇文章主要介紹了C++命名空間 namespace,需要的朋友可以參考下
    2023-04-04
  • C++實現讀取圖片長度和寬度

    C++實現讀取圖片長度和寬度

    這篇文章主要介紹了C++實現讀取圖片長度和寬度,本文直接給出實現代碼,需要的朋友可以參考下
    2015-04-04
  • 如何利用Emacs來調試C++程序

    如何利用Emacs來調試C++程序

    本文給大家分享的是使用編輯器中的神器Emacs來調試C++程序的方法,非常的細致全面,有需要的小伙伴可以參考下
    2016-03-03
  • C語言中函數與指針的應用總結

    C語言中函數與指針的應用總結

    本篇文章是對C語言中函數與指針的應用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • MFC程序設計常用技巧匯總

    MFC程序設計常用技巧匯總

    這篇文章主要介紹了MFC程序設計常用技巧,實例匯總了MFC程序設計中常見的問題與解決方法,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • C++ 設置和獲取當前工作路徑的實現代碼

    C++ 設置和獲取當前工作路徑的實現代碼

    這篇文章主要介紹了C++ 設置和獲取當前工作路徑的實現代碼,防止DLL加載不到配置和文件,需要的朋友可以參考下
    2017-09-09
  • C++遞歸與分治算法原理示例詳解

    C++遞歸與分治算法原理示例詳解

    這篇文章主要為大家介紹了C++遞歸與分治算法的策略原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • 淺談C語言中include

    淺談C語言中include""與include<>的區(qū)別

    C語言中包含文件有兩種包含符號,一個是<>尖括號,另一個是""雙引號。那么這兩個有什么區(qū)別呢?本文就詳細的介紹一下,感興趣的可以了解一下
    2021-06-06

最新評論

霞浦县| 孟村| 鹤岗市| 延庆县| 弥勒县| 沅江市| 澜沧| 卫辉市| 永昌县| 长海县| 沂南县| 白朗县| 彭泽县| 垦利县| 遂溪县| 浮梁县| 巴林左旗| 沁水县| 介休市| 军事| 乌兰县| 个旧市| 长寿区| 磴口县| 林甸县| 光泽县| 辉南县| 修武县| 阿拉善右旗| 天祝| 库车县| 六枝特区| 越西县| 临颍县| 乌拉特前旗| 蓬安县| 金阳县| 察哈| 包头市| 仁布县| 杭锦旗|