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

C語言實現(xiàn)簡單的五子棋小游戲

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

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

我們需要一個二維數(shù)組去儲存當前的棋盤狀態(tài),然后打印出來。

我們游戲的邏輯是初始化棋盤,打印棋盤,人下棋,打印棋盤,判斷是否游戲結束,電腦下棋,打印棋盤,判斷是否游戲結束,然后回到人下棋過程,結束游戲后,判斷誰贏誰輸還是平局。

判斷輸贏的邏輯是遍歷行,遍歷列,遍歷主對角線,遍歷反對角線,如果都判斷不出輸贏,那么就繼續(xù)游戲。

game.h

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
?
//棋盤大小
#define ROW 10
#define COL 10
?
//初始化
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);
//判斷輸贏
char IsWin(char board[ROW][COL], int row, int col);

game.c

#define _CRT_SECURE_NO_WARNINGS 1
?
#include "game.h"
?
void InitBoard(char board[ROW][COL], int row, int col)
{
?? ?int i = 0;
?? ?int j = 0;
?? ?for (i = 0; i < row; i++)
?? ?{
?? ??? ?for (j = 0; j < col; j++)
?? ??? ?{
?? ??? ??? ?board[i][j] = ' ';
?? ??? ?}
?? ?}
}
?
void DisplayBoard(char board[ROW][COL], int row, int col)
{
?? ?int i = 0;
?? ?for (i = 0; i < row; i++)
?? ?{
?? ??? ?//1.打印一行的數(shù)據(jù)?
?? ??? ?int j = 0;
?? ??? ?for (j = 0; j < col; j++)
?? ??? ?{
?? ??? ??? ?printf(" %c ", board[i][j]);
?? ??? ??? ?if (j < col - 1)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("|");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("\n");
?? ??? ?//2.打印分割行
?? ??? ?if (i < row - 1)
?? ??? ?{
?? ??? ??? ?for (j = 0; j < col; j++)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("---");
?? ??? ??? ??? ?if (j < col - 1)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?printf("|");
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?printf("\n");
?? ??? ?}
?? ?}
}
?
void PlayerMove(char board[ROW][COL], int row, int col)
{
?? ?int x = 0;
?? ?int y = 0;
?? ?printf("玩家下棋:>\n");
?? ?while (1)
?? ?{
?? ??? ?printf("請輸入要下的坐標:>");
?? ??? ?scanf("%d%d", &x, &y);
?? ??? ?//判斷x,y坐標的合法性
?? ??? ?if ((x >= 1 && x <= row) && (y >= 1 && y <= col))
?? ??? ?{
?? ??? ??? ?if (board[x - 1][y - 1] == ' ')
?? ??? ??? ?{
?? ??? ??? ??? ?board[x - 1][y - 1] = '*';
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?printf("該坐標被占用\n");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("坐標非法,請重新輸入:\n");
?? ??? ?} ? ? ??
?? ?}
}
?
void ComputerMove(char board[ROW][COL], int row, int col)
{
?? ?int x = 0;
?? ?int y = 0;
?? ?printf("電腦下棋:>\n");
?? ?while (1)
?? ?{
?? ??? ?x = rand() % row;
?? ??? ?y = rand() % col;
?? ??? ?if (board[x][y] == ' ')
?? ??? ?{
?? ??? ??? ?board[x][y] = '#';
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?
?? ?}
}
?
//返回1表示棋盤滿了
//返回0表示棋盤沒滿
static int IsFull(char board[ROW][COL], int row, int col)
{
?? ?int i = 0;
?? ?int j = 0;
?? ?for (i = 0; i < row; i++)
?? ?{
?? ??? ?for (j = 0; j < col; j++)
?? ??? ?{
?? ??? ??? ?if (board[i][j] == ' ')
?? ??? ??? ?{
?? ??? ??? ??? ?return 0;//沒滿
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?return 1;//滿了
}
?
char IsWin(char board[ROW][COL], int row, int col)
{
?? ?int i = 0;
?? ?int j = 0;
?? ?//橫
?? ?for (i = 0; i < row; i++)
?? ?{
?? ??? ?for (j = 0; j < col - 4; j++)
?? ??? ?{
?? ??? ??? ?if (board[i][j] == board[i][j + 1] && board[i][j + 1] == board[i][j + 2]?
?? ??? ??? ??? ?&& board[i][j + 2] == board[i][j + 3] && board[i][j + 3] == board[i][j + 4]
?? ??? ??? ??? ?&& board[i][j] != ' ')
?? ??? ??? ?{
?? ??? ??? ??? ?return board[i][j];
?? ??? ??? ?}
?? ??? ?}
?? ?}
?
?? ?//豎
?? ?for (i = 0; i < row - 4; i++)
?? ?{
?? ??? ?for (j = 0; j < col; j++)
?? ??? ?{
?? ??? ??? ?if (board[i][j] == board[i + 1][j] && board[i + 1][j] == board[i + 2][j]
?? ??? ??? ??? ?&& board[i + 2][j] == board[i + 3][j] && board[i + 3][j] == board[i + 4][j]
?? ??? ??? ??? ?&& board[i][j] != ' ')
?? ??? ??? ?{
?? ??? ??? ??? ?return board[i][j];
?? ??? ??? ?}
?? ??? ?}
?? ?}
?
?? ?//兩個對角線
?? ?for (i = 0; i < row - 4; i++)
?? ?{
?? ??? ?for (j = 0; j < col - 4; j++)
?? ??? ?{
?? ??? ??? ?if (board[i][j] == board[i + 1][j + 1] && board[i + 1][j + 1] == board[i + 2][j + 2]
?? ??? ??? ??? ?&& board[i + 2][j + 2] == board[i + 3][j + 3] && board[i + 3][j + 3] == board[i + 4][j + 4]
?? ??? ??? ??? ?&& board[i][j] != ' ')
?? ??? ??? ?{
?? ??? ??? ??? ?return board[i][j];
?? ??? ??? ?}
?? ??? ?}
?? ?}
?
?? ?for (i = 0; i < row - 4; i++)
?? ?{
?? ??? ?for (j = col-1; j >= 4; j--)
?? ??? ?{
?? ??? ??? ?if (board[i][j] == board[i + 1][j - 1] && board[i + 1][j - 1] == board[i + 2][j - 2]
?? ??? ??? ??? ?&& board[i + 2][j - 2] == board[i + 3][j - 3] && board[i + 3][j - 3] == board[i + 4][j - 4]
?? ??? ??? ??? ?&& board[i][j] != ' ')
?? ??? ??? ?{
?? ??? ??? ??? ?return board[i][j];
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?
?? ?//判斷是否平局
?? ?if (1 == IsFull(board, ROW, COL))
?? ?{
?? ??? ?return 'Q';
?? ?}
?? ?return 'C';
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
?
#include "game.h"
?
void menu()
{
?? ?printf("***********************\n");
?? ?printf("*******五子棋游戲*******\n");
?? ?printf("**** 1.play ?0.exit ***\n");
?? ?printf("***********************\n");
}
?
// # | * |
//---|---|---
// * | ? |
//---|---|---
// ? | ? | ??
//?
//告訴我們四種游戲的狀態(tài)
//玩家贏-'*'
//電腦贏-'#'
//平局 ?-'Q'
//繼續(xù) ?-'C'
?
?
//游戲的整個算法實現(xiàn)
void game()
{
?? ?char ?ret = 0;//接收四種狀態(tài)的返回值
?? ?//數(shù)組-存放走出的棋盤信息
?? ?char board[ROW][COL] = { 0 };//全部空格
?? ?InitBoard(board, ROW, COL);//初始化棋盤
?? ?//打印棋盤
?? ?DisplayBoard(board, ROW, COL);
?? ?//下棋
?? ?while (1)
?? ?{
?? ??? ?//玩家下棋
?? ??? ?PlayerMove(board, ROW, COL);
?? ??? ?DisplayBoard(board, ROW, COL);
?? ??? ?//判斷玩家是否贏
?? ??? ?ret = IsWin(board, ROW, COL);
?? ??? ?if (ret != 'C')
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?//電腦下棋
?? ??? ?ComputerMove(board, ROW, COL);
?? ??? ?DisplayBoard(board, ROW, COL);
?? ??? ?//判斷電腦是否贏
?? ??? ?ret = IsWin(board, ROW, COL);
?? ??? ?if (ret != 'C')
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?if (ret == '*')
?? ?{
?? ??? ?printf("玩家贏\n");
?? ?}
?? ?else if (ret == '#')
?? ?{
?? ??? ?printf("電腦贏\n");
?? ?}
?? ?else
?? ?{
?? ??? ?printf("平局\n");
?? ?}
}
?
void test()
{
?? ?int input = 0;
?? ?srand((unsigned int)time(NULL));
?? ?do
?? ?{
?? ??? ?menu();
?? ??? ?printf("請選擇:>");
?? ??? ?scanf("%d", &input);
?? ??? ?switch(input)
?? ??? ?{
?? ??? ??? ?case 1:
?? ??? ??? ??? ?game();
?? ??? ??? ??? ?break;
?? ??? ??? ?case 0:
?? ??? ??? ??? ?printf("退出游戲\n");
?? ??? ??? ??? ?break;
?? ??? ??? ?default:
?? ??? ??? ??? ?printf("選擇錯誤,請重新選擇!\n");
?? ??? ??? ??? ?break;
?? ??? ?}
?? ?} while (input);
}
?
int main()
{
?? ?test();
?? ?return 0;
}

功能測試

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

相關文章

  • 將CString字符串輸入轉化成整數(shù)的實現(xiàn)方法

    將CString字符串輸入轉化成整數(shù)的實現(xiàn)方法

    下面小編就為大家?guī)硪黄獙String字符串輸入轉化成整數(shù)的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 快速模式匹配算法(KMP)的深入理解

    快速模式匹配算法(KMP)的深入理解

    本篇文章是對快速模式匹配算法(KMP)進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言中的強符號和弱符號介紹

    C語言中的強符號和弱符號介紹

    這篇文章主要介紹了C語言中的強符號和弱符號介紹,本文用多個實例來講解強符號和弱符號,需要的朋友可以參考下
    2015-03-03
  • 使用C++制作簡單的web服務器(續(xù))

    使用C++制作簡單的web服務器(續(xù))

    本文承接上文《使用C++制作簡單的web服務器》,把web服務器做的功能稍微強大些,主要增加的功能是從文件中讀取網(wǎng)頁并返回給客戶端,而不是把網(wǎng)頁代碼寫死在代碼中,有需要的小伙伴來參考下吧。
    2015-03-03
  • cmake跨平臺構建工具的學習筆記

    cmake跨平臺構建工具的學習筆記

    CMake是一個跨平臺的安裝/編譯工具,通過CMake我們可以通過簡單的語句來描述所有平臺的安裝/編譯過程,下面這篇文章主要給大家介紹了關于cmake跨平臺構建工具的相關資料,需要的朋友可以參考下
    2023-02-02
  • MinGW-w64 C/C++編譯器下載和安裝的方法步驟(入門教程)

    MinGW-w64 C/C++編譯器下載和安裝的方法步驟(入門教程)

    如果電腦沒有安裝MinGW-w64 C/C++編譯器,就無法運行gcc命令,本文主要介紹了MinGW-w64 C/C++編譯器下載和安裝的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++模板元編程實現(xiàn)選擇排序

    C++模板元編程實現(xiàn)選擇排序

    這篇文章主要介紹了C++模板元編程實現(xiàn)選擇排序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • C語言實現(xiàn)查看進程是否存在的方法示例

    C語言實現(xiàn)查看進程是否存在的方法示例

    這篇文章主要介紹了C語言實現(xiàn)查看進程是否存在的方法,涉及C語言針對進程操作的相關實現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • C語言之沒有main函數(shù)的helloworld示例

    C語言之沒有main函數(shù)的helloworld示例

    這篇文章主要介紹了C語言之沒有main函數(shù)的helloworld示例,本文分解了帶main函數(shù)的helloworld示例,從而分析出不需要main函數(shù)的helloworld示例,需要的朋友可以參考下
    2015-03-03
  • C語言實現(xiàn)順序表的基本操作的示例詳解

    C語言實現(xiàn)順序表的基本操作的示例詳解

    順序表是用一段物理地址連續(xù)的存儲單元依次存儲數(shù)據(jù)元素的線性結構,一般情況下采用數(shù)組存儲。本文將通過示例為大家講解一下順序表的基本操作,需要的可以參考一下
    2022-11-11

最新評論

外汇| 渭南市| 洪江市| 瓮安县| 高陵县| 梁河县| 华安县| 谢通门县| 保靖县| 康保县| 渝中区| 长垣县| 民权县| 太白县| 广安市| 基隆市| 南华县| 嵊泗县| 祁连县| 龙胜| 景德镇市| 旬阳县| 昔阳县| 屯门区| 新津县| 武城县| 济阳县| 特克斯县| 察哈| 渭源县| 九寨沟县| 遂平县| 靖宇县| 全州县| 察雅县| 原平市| 江津市| 宜宾市| 扶余县| 依安县| 天台县|