欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

判斷輸贏的邏輯是遍歷行,遍歷列,遍歷主對(duì)角線,遍歷反對(duì)角線,如果都判斷不出輸贏,那么就繼續(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("請(qǐng)輸入要下的坐標(biāo):>");
?? ??? ?scanf("%d%d", &x, &y);
?? ??? ?//判斷x,y坐標(biāo)的合法性
?? ??? ?if ((x >= 1 && x <= row) && (y >= 1 && y <= col))
?? ??? ?{
?? ??? ??? ?if (board[x - 1][y - 1] == ' ')
?? ??? ??? ?{
?? ??? ??? ??? ?board[x - 1][y - 1] = '*';
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?printf("該坐標(biāo)被占用\n");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("坐標(biāo)非法,請(qǐng)重新輸入:\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];
?? ??? ??? ?}
?? ??? ?}
?? ?}
?
?? ?//兩個(gè)對(duì)角線
?? ?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'
?
?
//游戲的整個(gè)算法實(shí)現(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("請(qǐng)選擇:>");
?? ??? ?scanf("%d", &input);
?? ??? ?switch(input)
?? ??? ?{
?? ??? ??? ?case 1:
?? ??? ??? ??? ?game();
?? ??? ??? ??? ?break;
?? ??? ??? ?case 0:
?? ??? ??? ??? ?printf("退出游戲\n");
?? ??? ??? ??? ?break;
?? ??? ??? ?default:
?? ??? ??? ??? ?printf("選擇錯(cuò)誤,請(qǐng)重新選擇!\n");
?? ??? ??? ??? ?break;
?? ??? ?}
?? ?} while (input);
}
?
int main()
{
?? ?test();
?? ?return 0;
}

功能測試

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

相關(guān)文章

  • C++中的string庫函數(shù)常見函數(shù)的作用和使用方法

    C++中的string庫函數(shù)常見函數(shù)的作用和使用方法

    這篇文章主要介紹了C++中的string庫函數(shù)常見函數(shù)的作用和使用方法,庫函數(shù)的靈活應(yīng)用是程序員的一大重要技能,本文通過實(shí)例實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • C語言實(shí)現(xiàn)鏈表與文件存取的示例代碼

    C語言實(shí)現(xiàn)鏈表與文件存取的示例代碼

    這篇文章主要和大家分享C語言實(shí)現(xiàn)鏈表與文件存取的示例代碼,可以實(shí)現(xiàn)建立鏈表,然后把鏈表數(shù)據(jù)存儲(chǔ)到文件中,然后把文件數(shù)據(jù)存儲(chǔ)到數(shù)組中并輸出,感興趣的可以學(xué)習(xí)一下
    2022-04-04
  • 如何利用C語言實(shí)現(xiàn)最簡單的HTTP服務(wù)器詳解

    如何利用C語言實(shí)現(xiàn)最簡單的HTTP服務(wù)器詳解

    這篇文章主要給大家介紹了關(guān)于如何利用C語言實(shí)現(xiàn)最簡單的HTTP服務(wù)器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • C++ vector的用法小結(jié)

    C++ vector的用法小結(jié)

    這篇文章主要介紹了c++中,vector是一個(gè)十分有用的容器,下面對(duì)這個(gè)容器做一下總結(jié)
    2013-12-12
  • 利用C++11原子量如何實(shí)現(xiàn)自旋鎖詳解

    利用C++11原子量如何實(shí)現(xiàn)自旋鎖詳解

    當(dāng)自旋鎖嘗試獲取鎖時(shí)以忙等待(busy waiting)的形式不斷地循環(huán)檢查鎖是否可用,下面這篇文章主要給大家介紹了關(guān)于利用C++11原子量如何實(shí)現(xiàn)自旋鎖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-06-06
  • C++中char*轉(zhuǎn)換為LPCWSTR的解決方案

    C++中char*轉(zhuǎn)換為LPCWSTR的解決方案

    最近在學(xué)習(xí)C++,遇到了一個(gè)char*轉(zhuǎn)換為LPCWSTR的問題,通過查找資料終于解決了,所以下面這篇文章主要介紹了C++中char*轉(zhuǎn)LPCWSTR的解決方案,文中通過詳細(xì)的示例代碼介紹的很詳細(xì),有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • 在Ubuntu中安裝VSCode并配置C/C++開發(fā)環(huán)境的方法步驟

    在Ubuntu中安裝VSCode并配置C/C++開發(fā)環(huán)境的方法步驟

    這篇文章主要介紹了在Ubuntu中安裝VSCode并配置C/C++開發(fā)環(huán)境的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C語言鏈表實(shí)現(xiàn)簡易通訊錄

    C語言鏈表實(shí)現(xiàn)簡易通訊錄

    這篇文章主要為大家詳細(xì)介紹了C語言鏈表實(shí)現(xiàn)簡易通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 詳解C++作用域與生命周期

    詳解C++作用域與生命周期

    這篇文章主要介紹了C++作用域與生命周期的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • c++中vector<int>和vector<int*>的用法及區(qū)別

    c++中vector<int>和vector<int*>的用法及區(qū)別

    這篇文章主要介紹了c++中vector<int>和vector<int*>的用法及區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2013-10-10

最新評(píng)論