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

C語言實現(xiàn)簡單的三子棋游戲源碼

 更新時間:2022年01月05日 08:39:26   作者:Jiawen_captial  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的三子棋游戲源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)簡單的三子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

1、游戲的整體劃分

因為C語言是面向過程的,我將游戲抽象出來玩家下棋,電腦下棋,在判斷輸贏這一過程,又通過對過程的分析,進行了具體函數(shù)的實現(xiàn),分為如下模塊:

游戲主菜單函數(shù)

void menu();

初始化棋盤函數(shù)

void InitBoard(char board[ROW][COL], int row, int col);

打印棋盤函數(shù)

void DisplayBoard(char board[ROW][COL], int row, int col);

玩家下棋函數(shù)

void PlayerMove(char board[ROW][COL], int row, int col);

電腦下棋函數(shù)

void ComputerMove(char board[ROW][COL], int row, int col);

判斷棋盤是否為空的函數(shù)

int IsFull(char board[ROW][COL], int row, int col);

判斷輸贏的函數(shù)

char IsWin(char board[ROW][COL], int row, int col);
//.h文件的源碼,僅供大家參考
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ROW 3
#define COL 3
void menu();
void InitBoard(char board[ROW][COL], int row, int col);
void DisplayBoard(char board[ROW][COL], int row, int col);
void PlayerMove(char board[ROW][COL], int row, int col);
void ComputerMove(char board[ROW][COL], int row, int col);
int IsFull(char board[ROW][COL], int row, int col);
char IsWin(char board[ROW][COL], int row, int col);

2、整體講解及其菜單函數(shù)實現(xiàn)

在對于棋盤方面,利用#define定義了一個大小為3行3列的char類型的數(shù)組,來表示整個的棋盤。整體游戲邏輯的實現(xiàn)使用do……while();循環(huán)和switch多分支語句的配合使用,使得完成整個游戲的邏輯過程。

菜單menu函數(shù)的實現(xiàn)是要配合switch語句來進行的,以便后期對switch語句進行操作,menu函數(shù)具體實現(xiàn)如下:

void menu()
{
?? ?printf("************歡迎來到三子棋游戲中心**************\n");
?? ?printf("************1.開始游戲 ? ? ? ? ? ?**************\n");
?? ?printf("************2.再來一局 ? ? ? ? ? ?**************\n");
?? ?printf("************0.退出游戲 ? ? ? ? ? ?**************\n");
}

3、初始化棋盤和打印棋盤

1.初始化棋盤

利用函數(shù)將數(shù)組傳遞過來,對二維數(shù)組進行遍歷賦值為空字符,從而完成對整個數(shù)組的初始化。具體代碼如下:

void InitBoard(char board[ROW][COL], int row, int col)
{
?? ?for (int i = 0; i < row; i++)
?? ?{
?? ??? ?for (int j = 0; j < col; j++)
?? ??? ?{
?? ??? ??? ?board[i][j] = ' ';
?? ??? ?}
?? ?}
}

2.打印棋盤

打印棋盤時數(shù)組的遍歷要配合條件控制下的字符的打印結合,從而使打印的棋盤不僅僅是單純不變的數(shù)組,是棋盤被|和-分割開,更加的形象。具體實現(xiàn)如下:

void DisplayBoard(char board[ROW][COL], int row, int col)
{
?? ?for (int i = 0; i < row; i++)
?? ?{
?? ??? ?for (int j = 0; j < col; j++)
?? ??? ?{
?? ??? ??? ?printf("%c", board[i][j]);
?? ??? ??? ?if (0 == j || 1 == j)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("|");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("\n");
?? ??? ?for (int k = 0; k < col; k++)
?? ??? ?{
?? ??? ??? ?if (0 == i || 1 == i)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("--");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
}

4、玩家下棋和電腦下棋

1.玩家下棋

玩家下棋時,定義了兩個整型的變量,用來充當數(shù)組的下標。當玩家輸入數(shù)組的下標位置在合適的范圍的時候,在當前下標賦值了字符‘*’來代表玩家的下棋。并且下棋成功后,將棋盤的情況打印出來,便于玩家了解當前游戲的局勢和情況。具體實現(xiàn)如下:

void PlayerMove(char board[ROW][COL], int row, int col)
{
?? ?int r = 0, c = 0;
?? ?printf("請輸入您要下棋的位置:\n");
?? ?while (1)
?? ?{
?? ??? ?scanf("%d %d", &r, &c);
?? ??? ?r = r - 1;
?? ??? ?c = c - 1;
?? ??? ?if (board[r][c]==' ')
?? ??? ?{
?? ??? ??? ?board[r][c] = '*';
?? ??? ??? ?printf("下棋成功\n");
?? ??? ??? ?DisplayBoard(board, ROW, COL);
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("輸入的位置有誤或已被占用,請重新輸入:\n");
?? ??? ?}
?? ?}
}

2.電腦下棋

電腦下棋時原來同玩家一樣,區(qū)別在于電腦用的不是直接從鍵盤輸入的值,而是利用rand函數(shù)隨機生成的值,具體實現(xiàn)如下

void ComputerMove(char board[ROW][COL], int row, int col)
{
?? ?int r = 0, c = 0;
?? ?printf("電腦走>\n");
?? ?while (1)
?? ?{
?? ??? ?r = rand() % row;
?? ??? ?c = rand() % col;
?? ??? ?if (board[r][c] == ' ')
?? ??? ?{
?? ??? ??? ?board[r][c] = '#';
?? ??? ??? ?DisplayBoard(board, ROW, COL);
?? ??? ??? ?break;
?? ??? ?}
?? ?}
}

5、判斷輸贏

當棋盤中橫、豎或者對角線的值相等的時候就可分出勝負,如果棋盤已經(jīng)被下滿并且沒有分出勝負,那就是平局。采用比較暴力遍歷比較,返回4種不同的狀態(tài):
1、玩家贏 - ‘*’
2、電腦贏 - ‘#’
3、平局 - ‘Q’
4、繼續(xù) - ‘C’
具體實現(xiàn)如下:

char IsWin(char board[ROW][COL], int row, int col)
{
?? ?int i = 0;
?? ?for (int i = 0; i < row; i++)
?? ?{
?? ??? ?if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
?? ??? ?{
?? ??? ??? ?return board[i][1];
?? ??? ?}
?? ?}
?? ?for (int i = 0; i < i; i++)
?? ?{
?? ??? ?if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
?? ??? ?{
?? ??? ??? ?return board[1][i];
?? ??? ?}
?? ?}
?? ?if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
?? ?{
?? ??? ?return board[1][1];
?? ?}
?? ?if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
?? ?{
?? ??? ?return board[1][1];
?? ?}
?? ?int ret = IsFull(board, row, col);
?? ?if (ret == 1)
?? ?{
?? ??? ?return 'Q';
?? ?}
?? ?return 'C';
}

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

相關文章

  • C++實現(xiàn)移動立方體示例講解

    C++實現(xiàn)移動立方體示例講解

    這篇文章主要介紹了C++實現(xiàn)移動立方體,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • C++ vector操作實現(xiàn)

    C++ vector操作實現(xiàn)

    這篇文章主要介紹了C++ vector操作實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • OpenCV畫任意圓弧曲線

    OpenCV畫任意圓弧曲線

    這篇文章主要為大家詳細介紹了OpenCV畫任意圓弧曲線,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語言實現(xiàn)四窗口聊天

    C語言實現(xiàn)四窗口聊天

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)四窗口聊天,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言入門學習筆記之typedef簡介

    C語言入門學習筆記之typedef簡介

    typedef為C語言的關鍵字,作用是為一種數(shù)據(jù)類型定義一個新名字,下面這篇文章主要給大家介紹了關于C語言入門學習筆記之typedef簡介的相關資料,需要的朋友可以參考下
    2021-11-11
  • C/C++ 開發(fā)神器CLion使用入門超詳細教程

    C/C++ 開發(fā)神器CLion使用入門超詳細教程

    這篇文章主要介紹了C/C++ 開發(fā)神器CLion使用入門超詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • C++ 類的構造函數(shù)詳解及實例

    C++ 類的構造函數(shù)詳解及實例

    這篇文章主要介紹了C++ 類的構造函數(shù)詳解及實例的相關資料,學習C++ 的朋友對構造函數(shù)肯定不陌生,非常重要的基礎知識,這里就詳細介紹下,需要的朋友可以參考下
    2016-12-12
  • C++11中的stoi & stod用法

    C++11中的stoi & stod用法

    這篇文章主要介紹了C++11中的stoi & stod用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C語言實現(xiàn)代碼雨效果

    C語言實現(xiàn)代碼雨效果

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)代碼雨效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++實現(xiàn)LeetCode(72.編輯距離)

    C++實現(xiàn)LeetCode(72.編輯距離)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(72.編輯距離),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論

克什克腾旗| 九江县| 湟中县| 太湖县| 诸城市| 万载县| 淳安县| 昔阳县| 融水| 贞丰县| 贵州省| 武平县| 定兴县| 沙雅县| 遂溪县| 昌图县| 砚山县| 芦溪县| 杂多县| 德化县| 辽中县| 洪雅县| 郓城县| 秀山| 芦溪县| 洱源县| 四平市| 阳西县| 邯郸市| 北安市| 西华县| 绿春县| 肃南| 鄂尔多斯市| 伊吾县| 五原县| 宁津县| 罗江县| 鸡泽县| 东乌珠穆沁旗| 平泉县|