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

基于C語(yǔ)言實(shí)現(xiàn)三子棋游戲的示例代碼

 更新時(shí)間:2022年07月15日 15:07:03   作者:小劉同學(xué)L  
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言數(shù)組實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

1.創(chuàng)建文件 

test.c (游戲的測(cè)試邏輯)game.c(游戲的實(shí)現(xiàn)邏輯)gane.h(游戲?qū)崿F(xiàn)函數(shù)的聲明)

game.c 和game.h屬于游戲?qū)崿F(xiàn) test.c屬于游戲測(cè)試

test.c 源文件(源文件添加)——game.c 源文件(源文件添加)——game.h(頭文件添加)

三個(gè)文件 

2.首先在test.c文件寫(xiě)一個(gè)主函數(shù),主函數(shù)里面有一個(gè)測(cè)試函數(shù),測(cè)試函數(shù)里面寫(xiě)菜單、進(jìn)入游戲、退出游戲

代碼展示:

void menu()
{
    printf("***************************\n");
    printf("********  1.play   ********\n");
    printf("********  0.exit   ********\n");
    printf("***************************\n");
}
 
void test()
{
    int input = 0;
    do
    {
        menu();
        printf("請(qǐng)選擇:->");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            printf("三子棋\n");
            break;
        case 0:
            printf("退出游戲\n");
            break;
        default:
            printf("選擇錯(cuò)誤\n");
            break;
        }
    } while (input);
}
 
#include <stdio.h>
int main()
{
    test();
    return 0;
}

注意:

(1)一般用do while (游戲可能會(huì)玩很多次,最少一次)

(2)先打印一個(gè)菜單

(3)switch語(yǔ)句,要記得break,要記得default

接下來(lái) 把printf("三子棋\n")  改成 game(); 然后開(kāi)始寫(xiě)游戲部分。 

3.三子棋代碼

思路:(\n 不要忘記寫(xiě))

(1)棋盤(pán)用數(shù)組

(2)假設(shè)玩家走用' * ',電腦走用' # ',所以用字符類型的數(shù)組(3*3的)

row 中文意思是行 column 中文意思是列   init 英文最初的簡(jiǎn)寫(xiě)

引用自己寫(xiě)的文件 把#include < >改成 #include " "

(3)棋盤(pán)初始化

函數(shù)的聲明在頭文件里

(4)打印棋盤(pán) (打印數(shù)據(jù)、分割行),把數(shù)據(jù)行和分割行看做一大部分,最后一部分沒(méi)有分割行而已。

(5)玩家下棋,打印棋盤(pán),電腦下棋,打印棋盤(pán)。

(6)每下一步棋后,會(huì)有四種結(jié)果 玩家贏,電腦贏,平局,繼續(xù)玩 。所以要進(jìn)行判斷。

玩家贏 ‘*’,電腦贏‘#’,平局‘Q’,繼續(xù) ‘C’

game.h 部分代碼展示

#pragma once
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
#define ROW 3
#define COL 3
 
//初始化棋盤(pán)
void Initboard(char board[ROW][COL], int row, int col);//define 定義的ROW,COL是常量,而這里的row,col都是變量,所以不能替代
void Displayboard(char board[ROW][COL], int row, int col);//打印棋盤(pán)
void player_move(char board[ROW][COL], int row, int col);//玩家下棋
void computer_move(char board[ROW][COL], int row, int col);//電腦下棋
 
char is_win(char board[ROW][COL], int row, int col);//判斷輸贏以及平局和繼續(xù)玩

game.c代碼展示

#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;
    int j = 0;
    for (i = 0; i < row; i++)
    {
        //打印數(shù)據(jù)
        //printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);//固定的數(shù)字0,1,2 會(huì)把棋盤(pán)給固定住,所以不能這樣寫(xiě)
        for (j = 0; j < col; j++)
        {
            printf(" %c ", board[i][j]);
            if (j < col - 1)
                printf("|");
        }
        printf("\n");
        //打印分割行
        if (i < row - 1)
        {
            for (j = 0; j < col; j++)
            {
                printf("---");
                if (j < col - 1)
                {
                    printf("|");
                }
            }
            printf("\n");
        }
    }
    
}
 
int is_full(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;
}
 
void player_move(char board[ROW][COL], int row, int col)
{
    int x = 0;
    int y = 0;
    printf("請(qǐng)輸入坐標(biāo):->");
    while (1)
    {
        scanf("%d %d", &x, &y);
        //判斷坐標(biāo)是否在棋盤(pán)范圍
        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)被占用,請(qǐng)重新輸入!\n");
            }
        }
        else
        {
            printf("坐標(biāo)非法\n");
        }
    }
}
 
//電腦下棋
void computer_move(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;
        }
    }
}
//判斷每一步棋后是輸贏,還是平局,還是繼續(xù)玩
char is_win(char board[ROW][COL], int row, int col)
{
    int i = 0;
    for (i = 0; i < row; 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 < col; 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[1][1] != ' ')
    {
        return board[0][0];
    }
    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
    {
        return board[1][1];
    }
    int a = is_full(board, row, col);
    if (1 == a)
    {
        return 'Q';
    }
    return 'C';
}

test.c 部分代碼展示

#include "game.h"
 
void menu()
{
    printf("***************************\n");
    printf("********  1.play   ********\n");
    printf("********  0.exit   ********\n");
    printf("***************************\n");
}
 
void game()
{
    char board[ROW][COL] = { 0 };
    Initboard(board, ROW, COL);//棋盤(pán)初始化,內(nèi)容為空格
    Displayboard(board, ROW, COL);//打印棋盤(pán)
    char ret = 0;
    //下棋
    while (1)
    {
        player_move(board, ROW, COL);
        Displayboard(board, ROW, COL);
        ret = is_win(board, ROW, COL);
        if (ret != 'C')
        {
            break;
        }
        computer_move(board, ROW, COL);
        Displayboard(board, ROW, COL);
        ret = is_win(board, ROW, COL);
        if (ret != 'C')
        {
            break;
        }
    }
    if (ret == '*')
    {
        printf("恭喜你,取得勝利!\n");
    }
    else if (ret == 'Q')
    {
        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ò)誤\n");
            break;
        }
    } while (input);
}
 
 
int main()
{
    test();
    return 0;
}

以上就是基于C語(yǔ)言實(shí)現(xiàn)三子棋游戲的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言三子棋的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C/C++中使用局部/全局變量初始值或默認(rèn)值問(wèn)題

    C/C++中使用局部/全局變量初始值或默認(rèn)值問(wèn)題

    這篇文章主要介紹了C/C++中使用局部/全局變量初始值或默認(rèn)值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • C++實(shí)現(xiàn)LeetCode(81.在旋轉(zhuǎn)有序數(shù)組中搜索之二)

    C++實(shí)現(xiàn)LeetCode(81.在旋轉(zhuǎn)有序數(shù)組中搜索之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(81.在旋轉(zhuǎn)有序數(shù)組中搜索之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 一文詳解C++關(guān)鍵字nullptr及與NULL的區(qū)別

    一文詳解C++關(guān)鍵字nullptr及與NULL的區(qū)別

    這篇文章主要給大家詳細(xì)介紹了C++關(guān)鍵字nullptr,及?NULL與nullptr的區(qū)別,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • C語(yǔ)言實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)任意進(jìn)制的代碼詳解

    C語(yǔ)言實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)任意進(jìn)制的代碼詳解

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)任意進(jìn)制,運(yùn)用一個(gè)數(shù)組,通過(guò)數(shù)字每次取任意進(jìn)制模,存在數(shù)組中, 再通過(guò)倒取數(shù)組中的數(shù)值,來(lái)實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換,如果遇到十六進(jìn)制,利用ASCII碼值  數(shù)字字符和大寫(xiě)字母 相差55的特性來(lái)解決,文中有詳細(xì)代碼示例,需要的朋友可以參考下
    2024-05-05
  • C++實(shí)現(xiàn)inline hook的原理及應(yīng)用實(shí)例

    C++實(shí)現(xiàn)inline hook的原理及應(yīng)用實(shí)例

    這篇文章主要介紹了C++實(shí)現(xiàn)inline hook的原理及應(yīng)用,需要的朋友可以參考下
    2014-08-08
  • C語(yǔ)言實(shí)現(xiàn)掃雷小游戲詳解

    C語(yǔ)言實(shí)現(xiàn)掃雷小游戲詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • opencv3/C++圖像濾波實(shí)現(xiàn)方式

    opencv3/C++圖像濾波實(shí)現(xiàn)方式

    今天小編就為大家分享一篇opencv3/C++圖像濾波實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • C語(yǔ)言實(shí)現(xiàn)班級(jí)成績(jī)管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)班級(jí)成績(jī)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)班級(jí)成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 獲取C++變量類型的簡(jiǎn)單方法

    獲取C++變量類型的簡(jiǎn)單方法

    這篇文章主要介紹了獲取C++變量類型的簡(jiǎn)單方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • C語(yǔ)言實(shí)現(xiàn)掃雷小游戲

    C語(yǔ)言實(shí)現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評(píng)論

舟山市| 宽城| 宜良县| 公主岭市| 紫金县| 大城县| 高台县| 获嘉县| 新兴县| 内江市| 阳新县| 西丰县| 西和县| 北辰区| 容城县| 望谟县| 垫江县| 甘南县| 都兰县| 大埔县| 江源县| 泸州市| 玉环县| 曲水县| 永顺县| 漠河县| 景泰县| 双峰县| 贡嘎县| 虎林市| 利川市| 永靖县| 甘南县| 乐安县| 青海省| 河曲县| 虎林市| 峡江县| 大关县| 双辽市| 洪洞县|