C语言实现简单的三子棋游戏源码

yizhihongxing

下面是“ C语言实现简单的三子棋游戏源码”的完整攻略:

一、三子棋游戏规则

三子棋又叫井字棋游戏,是一款传统的二人对弈类游戏。双方玩家交替将自己的棋子放置在 3x3 的棋盘格子上,先连成一条线(直线、横线、斜线)的为胜者。

二、游戏实现思路

1. 程序结构

本游戏程序的基本框架由以下几个部分构成:

/*
 *  三子棋游戏
 *  main函数
 *  初始化棋盘
 *  显示棋盘
 *  玩家下子
 *  判断游戏是否结束
 *  电脑下子
 *  判断游戏是否结束
*/
int main(){
    //省略
}

void print_board(){
    //省略
}

int player_move(){
    //省略
}

int computer_move(){
    //省略
}

2. 初始化棋盘

首先,我们需要初始化一个3×3的棋盘,用二维数组表示。每个位置默认为空(设为' ')。

示例代码:

char board[3][3];

void init_board(){
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            board[i][j] = ' ';
        }
    }
}

3. 显示棋盘

接下来,实现一个函数,将当前的棋盘状态进行打印。

示例代码:

void print_board(){
    //显示棋盘行号
    printf("  1 2 3 \n");
    //分割线
    printf(" -------\n");
    for(int i=0;i<3;i++){
        //显示列号
        printf("%d|", i+1);
        for(int j=0;j<3;j++){
            printf("%c|",board[i][j]);
        }
        printf("\n");
        //分割线
        printf(" -------\n");
    }
}

4. 玩家下子

接下来,实现玩家下子的函数。该函数获取玩家输入的坐标,检查输入是否合法并更新棋盘状态。

示例代码:

int player_move(){
    int row,col;
    while(1){
        printf("请输入您要下的坐标(例:1 2):");
        //获取坐标
        scanf("%d %d",&row,&col);
        //判断坐标是否合法
        if(row<1 || row>3 || col<1 || col>3){
            printf("坐标输入有误,请重新输入!\n");
        }
        else if(board[row-1][col-1] != ' '){
            printf("该位置已有棋子,请重新输入!\n");
        }
        else{
            //更新棋盘
            board[row-1][col-1] = 'X';
            return check_game_over();
        }
    }
}

int check_game_over(){
    //判断是否有一方胜出
    for(int i=0;i<3;i++){
        if(board[i][0] != ' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2]){
            return 1;
        }
        if(board[0][i] != ' ' && board[0][i] == board[1][i] && board[1][i] == board[2][i]){
            return 1;
        }
    }
    if(board[1][1] != ' ' && ((board[0][0] == board[1][1] && board[1][1] == board[2][2]) || (board[0][2] == board[1][1] && board[1][1] == board[2][0]))){
        return 1;
    }
    //判断是否平局
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(board[i][j] == ' '){
                return 0;
            }
        }
    }
    return 2;
}

5. 电脑下子

最后,实现电脑下子的函数。该函数随机生成一个坐标,在棋盘上落子。

示例代码:

int computer_move(){
    int row,col;
    while(1){
        row = rand() % 3;
        col = rand() % 3;
        if(board[row][col] == ' '){
            board[row][col] = 'O';
            return check_game_over();
        }
    }
}

三、完整源码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//三子棋棋盘
char board[3][3];

//初始化棋盘
void init_board(){
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            board[i][j] = ' ';
        }
    }
}

//显示棋盘
void print_board(){
    //显示棋盘行号
    printf("  1 2 3 \n");
    //分割线
    printf(" -------\n");
    for(int i=0;i<3;i++){
        //显示列号
        printf("%d|", i+1);
        for(int j=0;j<3;j++){
            printf("%c|",board[i][j]);
        }
        printf("\n");
        //分割线
        printf(" -------\n");
    }
}

//玩家下子
int player_move(){
    int row,col;
    while(1){
        printf("请输入您要下的坐标(例:1 2):");
        //获取坐标
        scanf("%d %d",&row,&col);
        //判断坐标是否合法
        if(row<1 || row>3 || col<1 || col>3){
            printf("坐标输入有误,请重新输入!\n");
        }
        else if(board[row-1][col-1] != ' '){
            printf("该位置已有棋子,请重新输入!\n");
        }
        else{
            //更新棋盘
            board[row-1][col-1] = 'X';
            return check_game_over();
        }
    }
}

//判断游戏是否结束
int check_game_over(){
    //判断是否有一方胜出
    for(int i=0;i<3;i++){
        if(board[i][0] != ' ' && board[i][0] == board[i][1] && board[i][1] == board[i][2]){
            return 1;
        }
        if(board[0][i] != ' ' && board[0][i] == board[1][i] && board[1][i] == board[2][i]){
            return 1;
        }
    }
    if(board[1][1] != ' ' && ((board[0][0] == board[1][1] && board[1][1] == board[2][2]) || (board[0][2] == board[1][1] && board[1][1] == board[2][0]))){
        return 1;
    }
    //判断是否平局
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(board[i][j] == ' '){
                return 0;
            }
        }
    }
    return 2;
}

//电脑下子
int computer_move(){
    int row,col;
    while(1){
        row = rand() % 3;
        col = rand() % 3;
        if(board[row][col] == ' '){
            board[row][col] = 'O';
            return check_game_over();
        }
    }
}

//三子棋游戏主函数
int main(){
    int result = 0,player_turn = 1;
    //初始化随机数种子
    srand(time(NULL));
    init_board();
    print_board();
    while(1){
        if(player_turn){
            result = player_move();
            print_board();
            if(result == 1){
                printf("您赢了!\n");
                break;
            }
            else if(result == 2){
                printf("平局!\n");
                break;
            }
            player_turn = 0;
        }
        else{
            printf("电脑下子:\n");
            result = computer_move();
            print_board();
            if(result == 1){
                printf("电脑赢了!\n");
                break;
            }
            else if(result == 2){
                printf("平局!\n");
                break;
            }
            player_turn = 1;
        }
    }
    return 0;
}

四、示例说明

示例一

三子棋游戏
  1 2 3 
 -------
1| | | |
 -------
2| | | |
 -------
3| | | |
 -------
请输入您要下的坐标(例:1 2):2 2
  1 2 3 
 -------
1| | | |
 -------
2| |X| |
 -------
3| | | |
 -------
电脑下子:
  1 2 3 
 -------
1| | | |
 -------
2|O|X| |
 -------
3| | | |
 -------
请输入您要下的坐标(例:1 2):3 1
  1 2 3 
 -------
1| | | |
 -------
2|O|X| |
 -------
3|X| | |
 -------
电脑下子:
  1 2 3 
 -------
1| | | |
 -------
2|O|X| |
 -------
3|X| |O|
 -------
请输入您要下的坐标(例:1 2):2 1
  1 2 3 
 -------
1| | | |
 -------
2|O|X| |
 -------
3|X|X|O|
 -------
电脑下子:
  1 2 3 
 -------
1|O| | |
 -------
2|O|X| |
 -------
3|X|X|O|
 -------
电脑赢了!

示例二

三子棋游戏
  1 2 3 
 -------
1| | | |
 -------
2| | | |
 -------
3| | | |
 -------
请输入您要下的坐标(例:1 2):2 2
  1 2 3 
 -------
1| | | |
 -------
2| |X| |
 -------
3| | | |
 -------
电脑下子:
  1 2 3 
 -------
1| | | |
 -------
2| |X| |
 -------
3|O| | |
 -------
请输入您要下的坐标(例:1 2):3 1
  1 2 3 
 -------
1| | | |
 -------
2| |X| |
 -------
3|O| |X|
 -------
电脑下子:
  1 2 3 
 -------
1|O| | |
 -------
2| |X| |
 -------
3|O| |X|
 -------
请输入您要下的坐标(例:1 2):2 3
  1 2 3 
 -------
1|O| | |
 -------
2| |X|X|
 -------
3|O| |X|
 -------
平局!

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

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

相关文章

  • C#中实现Json序列化与反序列化的几种方式

    下面是关于C#中实现Json序列化与反序列化的几种方式的完整攻略。 一、前言 在C#中,常用来处理Json数据的方式是Json序列化和反序列化。在开发Web应用、移动应用等过程中,处理Json数据是很常见的操作。本文将介绍C#中实现Json序列化与反序列化的几种方式,供大家参考使用。 二、Json序列化 1.使用JavaScriptSerializer类进行…

    C 2023年5月23日
    00
  • C语言编程gcc如何生成静态库.a和动态库.so示例详解

    生成静态库和动态库是C语言编程中一个重要的概念。在本文中,将详细讲解如何通过gcc生成静态库和动态库以及如何使用它们。 生成静态库 静态库也称为静态链接库,是一组目标文件的归档。这些文件在编译期间与程序一起链接并在运行时加载到程序中。静态库的优点是能够使程序不依赖于外部库的存在,因为这些库已经被链接到程序中。 生成静态库的步骤 以下是生成静态库的步骤: 编写…

    C 2023年5月23日
    00
  • C语言实现实验设备管理系统

    C语言实现实验设备管理系统 简介 C语言是一种面向过程的编程语言,广泛应用于系统软件、存储管理、操作系统、网络协议等领域。实验设备管理系统是一种重要的实验室管理工具,在实验室管理中得到广泛应用。本文将详细讲解如何使用C语言实现实验设备管理系统。 环境配置 在开始编写代码之前,需要先配置好C语言的开发环境。以下是环境配置的基本步骤: 安装C语言编译器,建议选择…

    C 2023年5月23日
    00
  • C++ 学习之旅二 说一说C++头文件

    C++ 学习之旅二 说一说C++头文件 在C++编程中,我们有时需要引入头文件来使用其中的函数和变量等内容。那么什么是头文件?如何使用头文件呢?本文将从以下两个方面来详细讲解C++头文件的使用: 头文件的作用 如何使用头文件 头文件的作用 头文件(Header File)是一种特殊的文件,一般用来存放程序中的函数声明、define值和类声明等等。头文件的作用…

    C 2023年5月23日
    00
  • 华为揽阅M2平板电脑做工怎么样?华为揽阅M2 10.0指纹平板拆机全过程图解

    华为揽阅M2是一款高性能的平板电脑,其外观和内部设计都十分精细,以下是关于此设备做工的详细分析以及拆机攻略。 华为揽阅M2平板电脑做工分析 外观设计 华为揽阅M2采用了一块10.1英寸的IPS触控屏幕,屏幕分辨率为1920*1200像素,支持10点触控和电磁笔输入。整个设备的外观采用了金属材质,手感舒适,整机重量为约500克。 在机身的四周布置了一些按钮、接…

    C 2023年5月22日
    00
  • 荣耀畅玩8C手机怎么样?荣耀畅玩8C全面评测

    荣耀畅玩8C手机怎么样?荣耀畅玩8C全面评测 前言 荣耀畅玩8C是一款2018年10月上市的入门级智能手机。作为荣耀畅玩系列产品的一员,荣耀畅玩8C主打高性价比,具有充足的配置和不错的性能表现。在这篇文章中,我们将对荣耀畅玩8C进行全面评测,从外观、配置、性能以及其他方面对其进行详细剖析。 外观设计 荣耀畅玩8C采用了6.26英寸的水滴屏,分辨率为1520x…

    C 2023年5月22日
    00
  • 到底如何?适配华为Mate9的5A Type-C数据线评测

    初步了解华为 Mate 9 和 5A Type-C 数据线 华为 Mate 9 是一款高端手机,标配 USB Type-C 接口。而 5A Type-C 数据线则是一款由华为公司生产的数据线,可以用来连接手机和电脑,支持快充和传输数据等功能。 在进行华为 Mate 9 的适配过程中,首先需要初步了解这两个设备。 确认适配方案 根据初步了解的信息,我们需要确认…

    C 2023年5月23日
    00
  • iOS 14.3/iPadOS 14.3开发者预览版 Beta 2(18C5054c)怎么升级?

    下面是 iOS 14.3/iPadOS 14.3 开发者预览版 Beta 2 升级的完整攻略,包括两条示例说明: iOS 14.3/iPadOS 14.3 开发者预览版 Beta 2 升级攻略 1. 准备工作 在升级前,请务必备份你的设备数据以防意外情况发生。此外,为了能够顺利升级,你还需要: 确保你的设备支持升级到 iOS/iPadOS 14.3 开发者预…

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