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

基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋游戲

 更新時(shí)間:2022年01月14日 12:16:15   作者:獨(dú)行劍俠  
這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>

用C語(yǔ)言寫三子棋的具體代碼,供大家參考,具體內(nèi)容如下

1、頭文件

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
//標(biāo)識(shí)符定義
#define ROW 3
#define COL 3

//函數(shù)定義
//棋盤初始化
void init_board(char board[ROW][COL], int row, int col);
//打印棋盤
void display_board(char board[ROW][COL], int row, int col);
//玩家下棋
void player_game(char board[ROW][COL], int row, int col);
//電腦下棋
void comeputer_game(char board[ROW][COL], int row, int col);
//判斷輸贏
char is_win(char board[ROW][COL], int row, int col);

2、游戲函數(shù)

#include "game.h"

//棋盤初始化
void init_board(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 display_board(char board[ROW][COL], int row, int col) {
?? ?int i = 0;
?? ?int j = 0;
?? ?int k = 0;
?? ?for (i = 0; i < ROW; i++) {
?? ??? ?for (j = 0; j < COL; j++) {
?? ??? ??? ?printf(" %c ",board[i][j]);
?? ??? ??? ?if (j < COL - 1) {
?? ??? ??? ??? ?printf("|");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("\n");
?? ??? ?if (i < ROW - 1) {
?? ??? ??? ?for (k = 0; k < COL; k++) {
?? ??? ??? ??? ?printf("---");
?? ??? ??? ??? ?if (k < COL - 1) {
?? ??? ??? ??? ??? ?printf("|");
?? ??? ??? ??? ?}
?? ??? ??? ?}?? ??? ??? ??? ?
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
}

//玩家下棋
void player_game(char board[ROW][COL], int row, int col) {
?? ?int x = 0;
?? ?int y = 0;
?? ?while (1)
?? ?{
?? ??? ?printf("請(qǐng)輸入你要落子的坐標(biāo)>:");
?? ??? ?scanf("%d %d", &x, &y);
?? ??? ?if (x <= row && y <= col && x >= 1 && y >= 1) {
?? ??? ??? ?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 comeputer_game(char board[ROW][COL], int row, int col) {
?? ?while (1) {
?? ??? ?int x = rand() % row;
?? ??? ?int y = rand() % col;
?? ??? ?if (board[x][y] == ' ') {
?? ??? ??? ?board[x][y] = '#';
?? ??? ??? ?break;
?? ??? ?}
?? ?}?? ?
}

//判斷輸贏
//1.玩家贏返回*
//2.電腦贏返回#
//3.雙方都不贏,棋盤沒(méi)有位置平局返回p
//4.雙方都不贏,棋盤還有位置繼續(xù)下棋返回c
char is_win(char board[ROW][COL], int row, int col) {
?? ?int x = 0;
?? ?int y = 0;?? ??
?? ?//判斷行
?? ?for (x = 0; x < row; x++) {
?? ??? ?if (board[x][0] == board[x][1] && board[x][1] == board[x][2] && board[x][1] != ' ') {
?? ??? ??? ?return board[x][1];
?? ??? ?}?? ??? ?
?? ?}
?? ?//判斷列
?? ?for (y = 0; y < col; y++) {
?? ??? ?if (board[0][y] == board[1][y] && board[1][y] == board[2][y] && board[1][y] != ' ') {
?? ??? ??? ?return board[1][y];
?? ??? ?}?? ??? ?
?? ?}
?? ?//判斷對(duì)角線
?? ?if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') {
?? ??? ?return board[1][1];
?? ?}?
?? ?if (board[2][0] == board[1][1] && board[1][1] == board[1][2] && board[1][1] != ' ') {
?? ??? ?return board[1][1];
?? ?}
?? ?//判斷棋盤是否有空位
?? ?for (x = 0; x < row; x++) {
?? ??? ?for (y = 0; y < col; y++) {
?? ??? ??? ?if (board[x][y] == ' ') {
?? ??? ??? ??? ?return 'c';
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?return 'p';
}

3、游戲?qū)崿F(xiàn)

#include "game.h"

//打印菜單
void menu() {
?? ?printf("***************************\n");
?? ?printf("********* 三 子 棋 ********\n");
?? ?printf("********* 1. play ?********\n");
?? ?printf("********* 0. exit ?********\n");
?? ?printf("***************************\n");
}

void game() {
?? ?char win = 0;
?? ?//定義棋盤存儲(chǔ)
?? ?char board[ROW][COL];
?? ?//棋盤初始化
?? ?init_board(board, ROW, COL);
?? ?//打印棋盤
?? ?display_board(board, ROW, COL);
?? ?while (1) {
?? ??? ?//玩家下棋
?? ??? ?player_game(board, ROW, COL);
?? ??? ?display_board(board, ROW, COL);
?? ??? ?//判斷輸贏
?? ??? ?win = is_win(board, ROW, COL);
?? ??? ?if (win != 'c') {
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?//電腦下棋
?? ??? ?comeputer_game(board, ROW, COL);
?? ??? ?display_board(board, ROW, COL);
?? ??? ?//判斷輸贏
?? ??? ?win = is_win(board, ROW, COL);
?? ??? ?if (win != 'c') {
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?if (win == '*') {
?? ??? ?printf("恭喜玩家勝利!\n");
?? ??? ?display_board(board, ROW, COL);
?? ??? ?system("pause");
?? ?}
?? ?else if (win == '#') {
?? ??? ?printf("電腦勝利,繼續(xù)加油喲!\n");
?? ??? ?display_board(board, ROW, COL);
?? ??? ?system("pause");
?? ?}
?? ?else {
?? ??? ?printf("平局\n");
?? ??? ?display_board(board, ROW, COL);
?? ??? ?system("pause");
?? ?}

} ?

int main(void) {
?? ?
?? ?int num = 0;
?? ?srand((unsigned)time(NULL));
?? ?do {
?? ??? ?//打印菜單
?? ??? ?menu();
?? ??? ?//選擇菜單
?? ??? ?printf("請(qǐng)選擇菜單>:");
?? ??? ?scanf("%d", &num);
?? ??? ?switch (num)
?? ??? ?{
?? ??? ?case 0:
?? ??? ??? ?break;
?? ??? ?case 1:
?? ??? ??? ?game();
?? ??? ??? ?break;
?? ??? ?default:
?? ??? ??? ?printf("你的選擇錯(cuò)誤,請(qǐng)重新選擇!\n");
?? ??? ??? ?system("pause");
?? ??? ??? ?system("cls");
?? ??? ??? ?break;
?? ??? ?}

?? ?} while (num);
?? ?

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

效果圖片

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

相關(guān)文章

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

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

    這篇文章主要介紹了c++中,vector是一個(gè)十分有用的容器,下面對(duì)這個(gè)容器做一下總結(jié)
    2013-12-12
  • C++使用郵件槽實(shí)現(xiàn)ShellCode跨進(jìn)程傳輸

    C++使用郵件槽實(shí)現(xiàn)ShellCode跨進(jìn)程傳輸

    在計(jì)算機(jī)安全領(lǐng)域,進(jìn)程間通信(IPC)一直是一個(gè)備受關(guān)注的話題,在本文中,我們將探討如何使用Windows郵件槽(Mailslot)實(shí)現(xiàn)ShellCode的跨進(jìn)程傳輸,需要的可以參考下
    2023-12-12
  • C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理初學(xué)者容易犯的6個(gè)錯(cuò)誤分享

    C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理初學(xué)者容易犯的6個(gè)錯(cuò)誤分享

    本篇文章主要介紹了初學(xué)者使用C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理的4個(gè)函數(shù)時(shí)最容易犯的6個(gè)錯(cuò)誤,以及如何避免這些錯(cuò)誤,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2023-04-04
  • C++11的函數(shù)包裝器std::function使用示例

    C++11的函數(shù)包裝器std::function使用示例

    C++11引入的std::function是最常用的函數(shù)包裝器,它可以存儲(chǔ)任何可調(diào)用對(duì)象并提供統(tǒng)一的調(diào)用接口,以下是關(guān)于函數(shù)包裝器的詳細(xì)講解,包括它的基本用法、特點(diǎn)、限制、以及與其他相關(guān)機(jī)制的對(duì)比
    2024-12-12
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之二叉鏈表創(chuàng)建二叉樹

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之二叉鏈表創(chuàng)建二叉樹

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之?二叉鏈表創(chuàng)建二叉樹,下文我們?yōu)榱烁奖愕氖褂枚鏄浣Y(jié)構(gòu)體,可以使用?typedef?對(duì)結(jié)構(gòu)體進(jìn)行命名,具體內(nèi)容需要的小伙伴可以參考一下
    2022-02-02
  • 使用C語(yǔ)言實(shí)現(xiàn)三子棋小游戲

    使用C語(yǔ)言實(shí)現(xiàn)三子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了使用C語(yǔ)言實(shí)現(xiàn)三子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Linux中使用C語(yǔ)言實(shí)現(xiàn)基于UDP協(xié)議的Socket通信示例

    Linux中使用C語(yǔ)言實(shí)現(xiàn)基于UDP協(xié)議的Socket通信示例

    這篇文章主要介紹了Linux中使用C語(yǔ)言實(shí)現(xiàn)基于UDP協(xié)議的socket通信示例,服務(wù)器端與客戶端的功能都非常基礎(chǔ),需要的朋友可以參考下
    2016-03-03
  • C++位操作實(shí)戰(zhàn)掩碼、提取與組裝

    C++位操作實(shí)戰(zhàn)掩碼、提取與組裝

    在C++編程中,位操作是基礎(chǔ)而強(qiáng)大的技術(shù),允許在二進(jìn)制級(jí)別上操作數(shù)據(jù),對(duì)性能優(yōu)化、內(nèi)存節(jié)省和底層硬件控制至關(guān)重要,文章探討了掩碼操作、字節(jié)提取與組裝等技術(shù),并介紹了bitset類模板的使用,幫助處理二進(jìn)制數(shù)據(jù),通過(guò)實(shí)例解析如何設(shè)置、清除、檢查特定位
    2024-10-10
  • C++用Dijkstra(迪杰斯特拉)算法求最短路徑

    C++用Dijkstra(迪杰斯特拉)算法求最短路徑

    Dijkstra(迪杰斯特拉)算法是典型的最短路徑路由算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。主要特點(diǎn)是以起始點(diǎn)為中心向外層層擴(kuò)展,直到擴(kuò)展到終點(diǎn)為止。下面這篇文章就給大家介紹關(guān)于C++用Dijkstra算法(迪杰斯特拉算法)求最短路徑的方法,下面來(lái)一起看看吧。
    2016-12-12
  • C語(yǔ)言巧用二分查找實(shí)現(xiàn)猜數(shù)游戲

    C語(yǔ)言巧用二分查找實(shí)現(xiàn)猜數(shù)游戲

    二分查找也稱折半查找(Binary?Search),它是一種效率較高的查找方法。但是,折半查找要求線性表必須采用順序存儲(chǔ)結(jié)構(gòu),而且表中元素按關(guān)鍵字有序排列,本篇文章教你用二分查找編寫猜數(shù)字游戲
    2022-02-02

最新評(píng)論

海林市| 普安县| 吴旗县| 安陆市| 德江县| 天门市| 连江县| 寻甸| 吐鲁番市| 通河县| 巍山| 宁城县| 合阳县| 邛崃市| 玉屏| 广宁县| 西藏| 芜湖市| 绥江县| 额尔古纳市| 五家渠市| 玉田县| 瑞安市| 金川县| 精河县| 辽中县| 搜索| 康平县| 北辰区| 广宁县| 石家庄市| 平潭县| 岳普湖县| 饶阳县| 龙里县| 江油市| 荆门市| 塔城市| 常州市| 邢台县| 泰兴市|