C语言实现简单三子棋程序

C语言实现简单三子棋程序的完整攻略包括以下步骤:

  1. 定义游戏规则和棋盘

首先需要定义游戏规则,规定每个玩家的棋子形状和放置的位置等信息。同时需要定义一个3x3的棋盘数组,用于记录每个位置上的棋子情况。

#include <stdio.h>

#define ROW 3
#define COL 3

// 定义棋盘
char board[ROW][COL] = {
    {' ', ' ', ' '},
    {' ', ' ', ' '},
    {' ', ' ', ' '}
};

void print_board()
{
    printf("  1   2   3\n");
    printf("1 %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
    printf(" ---|---|---\n");
    printf("2 %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
    printf(" ---|---|---\n");
    printf("3 %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
}
  1. 实现玩家交替落子

按照游戏规则和棋盘的定义,玩家交替进行游戏。需要实现一个函数,根据玩家输入的行列数目,判断该位置是否可以下子,如果可以,就在对应位置上放置该玩家的棋子,并更新棋盘。同时需要判断游戏是否结束,如果棋盘已经填满或者某个玩家已经连成三个棋子,就宣告游戏结束。

int is_full()
{
    int i, j;
    for (i = 0; i < ROW; i++) {
        for (j = 0; j < COL; j++) {
            if (board[i][j] == ' ')
                return 0;
        }
    }
    return 1;
}

int check_win(char c)
{
    int i;
    for (i = 0; i < ROW; i++) {
        if (board[i][0] == c && board[i][1] == c && board[i][2] == c)
            return 1;
        if (board[0][i] == c && board[1][i] == c && board[2][i] == c)
            return 1;
    }
    if (board[0][0] == c && board[1][1] == c && board[2][2] == c)
        return 1;
    if (board[0][2] == c && board[1][1] == c && board[2][0] == c)
        return 1;
    return 0;
}

void play_game()
{
    int row, col;
    char c = 'X';

    while (1) {
        printf("Player %c's turn:\n", c);
        printf("Please input row and col (e.g. 1 2):\n");
        scanf("%d %d", &row, &col);

        if (row < 1 || row > 3 || col < 1 || col > 3) {
            printf("Invalid input, please input valid row and col (1~3):\n");
            continue;
        }

        if (board[row-1][col-1] != ' ') {
            printf("The place has already been taken, please input again:\n");
            continue;
        }

        board[row-1][col-1] = c;
        print_board();

        if (check_win(c)) {
            printf("Player %c wins!\n", c);
            break;
        }

        if (is_full()) {
            printf("Game ends in a draw!\n");
            break;
        }

        if (c == 'X')
            c = 'O';
        else
            c = 'X';
    }
}
  1. 进行游戏并输出结果

在主函数中,调用上述三个子函数,依次执行游戏规则、玩家交替落子和胜负判断等操作。

int main(void)
{
    printf("Welcome to the 3x3 Tic-tac-toe game!\n");
    print_board();
    play_game();
    return 0;
}
  1. 示例1

假设玩家1执黑子,玩家2执白子,依次放置棋子如下:

Welcome to the 3x3 Tic-tac-toe game!
  1   2   3
1   |   |   
 ---|---|---
2   |   |   
 ---|---|---
3   |   |   
Player X's turn:
Please input row and col (e.g. 1 2):
1 1
  1   2   3
1 X |   |   
 ---|---|---
2   |   |   
 ---|---|---
3   |   |   
Player O's turn:
Please input row and col (e.g. 1 2):
2 2
  1   2   3
1 X |   |   
 ---|---|---
2   | O |   
 ---|---|---
3   |   |   
Player X's turn:
Please input row and col (e.g. 1 2):
1 2
  1   2   3
1 X | X |   
 ---|---|---
2   | O |   
 ---|---|---
3   |   |   
Player O's turn:
Please input row and col (e.g. 1 2):
3 3
  1   2   3
1 X | X |   
 ---|---|---
2   | O |   
 ---|---|---
3   |   | O 
Player X's turn:
Please input row and col (e.g. 1 2):
2 3
  1   2   3
1 X | X |   
 ---|---|---
2   | O | X 
 ---|---|---
3   |   | O 
Player O's turn:
Please input row and col (e.g. 1 2):
3 1
  1   2   3
1 X | X |   
 ---|---|---
2   | O | X 
 ---|---|---
3 O |   | O 
Player X's turn:
Please input row and col (e.g. 1 2):
2 1
  1   2   3
1 X | X |   
 ---|---|---
2 X | O | X 
 ---|---|---
3 O |   | O 
Player X wins!

输出结果为“Player X wins!”,表示玩家1胜利。

  1. 示例2

假设玩家1执白子,玩家2执黑子,依次放置棋子如下:

Welcome to the 3x3 Tic-tac-toe game!
  1   2   3
1   |   |   
 ---|---|---
2   |   |   
 ---|---|---
3   |   |   
Player O's turn:
Please input row and col (e.g. 1 2):
1 1
  1   2   3
1 O |   |   
 ---|---|---
2   |   |   
 ---|---|---
3   |   |   
Player X's turn:
Please input row and col (e.g. 1 2):
2 2
  1   2   3
1 O |   |   
 ---|---|---
2   | X |   
 ---|---|---
3   |   |   
Player O's turn:
Please input row and col (e.g. 1 2):
1 2
  1   2   3
1 O | O |   
 ---|---|---
2   | X |   
 ---|---|---
3   |   |   
Player X's turn:
Please input row and col (e.g. 1 2):
2 1
  1   2   3
1 O | O |   
 ---|---|---
2 X | X |   
 ---|---|---
3   |   |   
Player O's turn:
Please input row and col (e.g. 1 2):
1 3
  1   2   3
1 O | O | O 
 ---|---|---
2 X | X |   
 ---|---|---
3   |   |   
Player O wins!

输出结果为“Player O wins!”,表示玩家1失败。

以上就是用C语言实现简单三子棋程序的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现简单三子棋程序 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言实现静态顺序表的实例详解

    C语言实现静态顺序表的实例详解 什么是静态顺序表? 顺序表是一种连续的存储结构,在内存中占用一段连续的空间,可以用数组结构来实现。静态顺序表是指在创建时就分配一定大小的存储空间,无法动态调整大小。 如何实现静态顺序表? 在C语言中,我们可以利用数组结构来实现静态顺序表。具体实现方式如下: 首先,我们需要定义一个结构体来表示顺序表: #define MAXSI…

    C 2023年5月23日
    00
  • win10系统左下角搜索栏点击Win+C无反应的解决方法

    当我们在Win10系统中使用搜索栏,偶尔会遇到点击Win+C无反应的问题。这可能是由于系统故障、Win10更新问题或安装软件不当等原因引起的。以下是解决这个问题的完整攻略,可以帮助您解决这个问题。 问题分析 当搜索栏出现在左下角时,在Windows 10操作系统上单击Win+C组合键时,应该会打开Cortana语音助手,但是有时候无论怎么按,都没有反应。这种…

    C 2023年5月23日
    00
  • C语言编程中函数的基本学习教程

    C语言编程中函数的基本学习教程 1. 函数的定义及使用方法 C语言中函数是一块可重用的、能实现特定功能的代码块,它以函数名作为标识符,一旦定义就可以在程序的任何地方被调用。C语言中函数的定义通常包含返回值类型、函数名以及函数参数,具体格式如下: 返回值类型 函数名(参数列表) { // 函数体 } 其中,返回值类型是指函数返回值的数据类型,函数名是指函数的名…

    C 2023年5月23日
    00
  • 在Go语言程序中使用gojson来解析JSON格式文件

    要在Go语言程序中使用gojson解析JSON格式文件,你需要按照以下步骤操作: 步骤1 安装gojson工具 你需要先在计算机上安装gojson工具,可以通过以下命令安装: go get github.com/ChimeraCoder/gojson/gojson 步骤2 生成Go语言结构体 使用gojson工具,我们可以将JSON文件转换成Go语言结构体。…

    C 2023年5月23日
    00
  • C语言与C++项目实现相互调用

    C语言与C++项目实现相互调用 前言 C语言和C++是程序员们在开发过程中经常使用的编程语言,两种语言有着相似的语法以及基础概念,但是在细节方面却存在较大的差异。由于C++是在C语言基础上的扩展,因此,C语言与C++的项目实现相互调用是可行的。 在本文中,我们将详细介绍如何在C语言项目和C++项目之间实现相互调用,并提供两个示例来说明该过程。 准备工作 在开…

    C 2023年5月23日
    00
  • 亲自教你使用 ChatGPT 编写 SQL JOIN 查询示例

    下面是使用 ChatGPT 编写 SQL JOIN 查询示例的完整攻略。 前提知识 在学习如何使用 ChatGPT 编写 SQL JOIN 查询示例之前,需要掌握一些基本的 SQL 知识,如表的关系型数据模型、SELECT 语句、WHERE 语句、AND 和 OR 语句等。如果您对 SQL 有基本的了解,那么可以直接开始学习 JOIN 查询的知识。 JOIN…

    C 2023年5月23日
    00
  • C++设计一个简单内存池的全过程

    下面我将详细讲解C++设计一个简单内存池的全过程。 概述 内存池是为了提高内存分配与释放效率而提出的一种技术。一般情况下,内存池会提前分配一定的内存,并将分配出的内存按照一定的规则进行管理。当需要内存时,内存池会从已经预分配的内存中寻找可以使用的内存块。当不需要使用某个内存块时,该内存块会被归还给内存池进行管理。 下面我们将按照以下步骤设计简单的内存池。 步…

    C 2023年5月23日
    00
  • 简单实现C语言2048游戏

    以下是详细讲解“简单实现C语言2048游戏”的攻略。 简介 2048是一款十分受欢迎的数字游戏,玩家需要在一个4×4的棋盘上通过滑动数字方块达到2048这个数字,游戏规则简单、操作容易掌握,深受大众喜爱。在本文中,我们将通过C语言简单实现2048游戏。 实现步骤 1. 初始化 初始化棋盘,给出初始的两个数字,用二维数组存储棋盘,如下所示: int board…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部