【C语言游戏】三子棋完整代码和正确结果截图

简介: 【C语言游戏】三子棋完整代码和正确结果截图
🌹作者:云小逸
📝个人主页: 云小逸的主页
📝码云: 云小逸 (YunXiaoYi003) - Gitee.com
🤟motto:要敢于一个人默默的面对自己, ==强大自己才是核心==。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在!学会自己和解,与过去和解,努力爱自己。==希望春天来之前,我们一起面朝大海,春暖花开!==🤟
👏专栏:C语言初阶👏

前言

——————————————————————————————
首先先写上几句话:献给坚持创作的我和点开这篇文章希望进步的你

02.满天繁星有我想成为的==那道光==
03.你摸黑偷偷赶的路,都会变成意外袭来时你==少受的苦==
05.我们都有一颗种子可以让生命==发扬光大​==

game.h文件

#pragma once

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

#define ROW 3
#define COL 3

//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);

//打印棋盘
void DispalyBoard(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);

//
//玩家赢 - '*'
//电脑赢 - '#'
//平局 - 'Q'
//继续 - 'C'
//

char IsWin(char board[ROW][COL], int row, int col);

game.c文件

#define _CRT_SECURE_NO_WARNINGS
#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 DispalyBoard(char board[ROW][COL], int row, int col)
//{
//    int i = 0;
//    for (i = 0; i < row; i++)
//    {
//        //打印数据
//        printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
//        //打印分割信息
//        if(i<row-1)
//            printf("---|---|---\n");
//    }
//}

void DispalyBoard(char board[ROW][COL], int row, int col)
{
    int i = 0;
    for (i = 0; i < row; i++)
    {
        //打印数据
        //printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
        int j = 0;
        for (j = 0; j < col; j++)
        {
            printf(" %c ", board[i][j]);
            if(j<col-1)
                printf("|");
        }
        printf("\n");
        //打印分割信息
        //printf("---|---|---\n");
        if (i < row - 1)
        {
            int j = 0;
            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("请输入坐标:>");
        scanf("%d %d", &x, &y);
        //坐标范围合法的判断
        if (x >= 1 && x <= row && y >= 1 && y <= col)
        {
            if (board[x - 1][y - 1] == ' ')
            {
                board[x - 1][y - 1] = '*';
                break;
            }
            else
            {
                printf("坐标被占用,不能下棋,请选择其他位置\n");
            }
        }
        else
        {
            printf("坐标非法,请重新输入\n");
        }
    }
}

void ComputerMove(char board[ROW][COL], int row, int col)
{
    printf("电脑下棋:>\n");

    int x = 0;
    int y = 0;

    while (1)
    {
        x = rand() % row;//0~2
        y = rand() % col;//0~2
        if (board[x][y] == ' ')
        {
            board[x][y] = '#';
            break;
        }
    }
}

//满了就返回1
//不满  返回0
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;
    for (i = 0; i < row; i++)
    {
        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
        {
            return board[i][1];//
        }
    }

    //列
    int j = 0;
    for (j = 0; j < col; j++)
    {
        if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] != ' ')
        {
            return board[1][j];
        }
    }
    //对角线
    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
    {
        return board[1][1];
    }

    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
    {
        return board[1][1];
    }

    //没有人赢,就要平局
    if (IsFull(board, row, col))
    {
        return 'Q';
    }

    //游戏继续
    return 'C';
}

test.c文件

#define _CRT_SECURE_NO_WARNINGS

#include "game.h"

void menu()
{
    printf("*****************************\n");
    printf("*****  1. play  0. exit *****\n");
    printf("*****************************\n");
}

void game()
{
    char ret = 0;
    char board[ROW][COL] = {0};
    //初始化棋盘的函数
    InitBoard(board, ROW, COL);
    DispalyBoard(board, ROW, COL);
    //下棋
    while(1)
    {
        PlayerMove(board, ROW, COL);
        //判断输赢
        ret = IsWin(board, ROW, COL);

        if (ret != 'C')
        {
            break;
        }
        DispalyBoard(board, ROW, COL);
        ComputerMove(board, ROW, COL);
        //判断输赢
        ret = IsWin(board, ROW, COL);
        if (ret != 'C')
        {
            break;
        }
        DispalyBoard(board, ROW, COL);
    }
    if (ret == '*')
    {
        printf("玩家赢\n");
    }
    else if (ret == '#')
    {
        printf("电脑赢\n");
    }
    else
    {
        printf("平局\n");
    }
    DispalyBoard(board, ROW, COL);
}

int main()
{
    srand((unsigned int)time(NULL));//设置随机数的生成起点的
    
    int input = 0;
    do
    {
        menu();//打印菜单
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误!\n");
            break;
        }
    } while (input);

    return 0;
}

正确结果截图

在这里插入图片描述

最后

十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:

就算无人问津也好,技不如人也罢,千万别让烦恼和焦虑毁了你本就不多的热情和定力。别贪心,我们不可能什么都有,别担心,我们也不可能什么都没有。”
“不要再这样下去,一晚一晚的熬。想东想西,实在是矫情,真的该关掉手机,断了一些没必要的联系,扔掉所有负能量,认认真真的生活,再去做一些正儿八经的事儿。"
“你要留点精力去读书去运动去爱人,去奔赴你想要的生活,不应该把精力浪费在痛苦的社交讨厌的人那里,看起来可以挽回的事情,仔细想想—点都不值得,贪恋过去的快乐注定走不远,过去的就让它过去吧,在热爱生活的同时快乐的小事情。”

最后如果觉得我写的还不错,请不要忘记==点赞==✌,==收藏==✌,加==关注==✌哦(。・ω・。)

愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚==菜鸟==逐渐成为==大佬==。加油,为自己点赞!

目录
相关文章
|
1月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
97 0
|
11天前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
24 1
|
1月前
|
存储 搜索推荐 C语言
深入C语言指针,使代码更加灵活(二)
深入C语言指针,使代码更加灵活(二)
|
1月前
|
存储 程序员 编译器
深入C语言指针,使代码更加灵活(一)
深入C语言指针,使代码更加灵活(一)
|
1月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
82 1
|
1月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
|
1月前
|
C语言
深入C语言指针,使代码更加灵活(三)
深入C语言指针,使代码更加灵活(三)
深入C语言指针,使代码更加灵活(三)
|
1月前
|
存储 算法 安全
C语言实现扫雷游戏
C语言实现扫雷游戏
|
1月前
|
算法 编译器 C语言
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
|
2月前
|
安全 C语言
在C语言中,正确使用运算符能提升代码的可读性和效率
在C语言中,运算符的使用需要注意优先级、结合性、自增自减的形式、逻辑运算的短路特性、位运算的类型、条件运算的可读性、类型转换以及使用括号来明确运算顺序。掌握这些注意事项可以帮助编写出更安全和高效的代码。
50 4