c语言编写三子棋游戏

(C语言)用C语言编写小游戏——扫雷 用C语言编写的扫雷小游戏 阅读详情

如何用c语言编写三子棋程序

目录

构造运行框架(主函数)

  • 想要的效果:
    出现一个界面让用户选自完游戏或者退出
  • 用到do while循环和switch
  • 将存放主函数的文件命名为test.c

#include<stdio.h>
#include<windows.h>
#include <time.h>
#include "game.h"
int main()
{
    int select;

    srand((unsigned int)time(NULL));
    //一会用来产生随机数的,可暂时忽略
    do
    {
        menu();
        printf("请选择:");
        scanf("%d",&select);
        switch(select)
        {
        case 1: game();
                break;
        case 0: printf("已退出\n");
                return 0;
        default:printf("输入错误\n");
                break;
        }

    }while(select);

    return 0;
}
  • 注意:
    因为玩与不玩分别为1和0,对应条件真假,可直接放入whlie( select)进行判断

将各个功能写成函数

用来输出游戏菜单,记得放在main函数之前防止主函数执行时menu并未声明。

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

}

game函数

game函数即为游戏运行的函数,即整个游戏的运行逻辑,放到test.c中。记得放在main函数之前防止main函数执行时game并未声明。

  • 声明一个3*3的字符数组用来存储下棋内容
  • rows和cols在后文的头文件中用define定义为的是以后方便更改,同时使函数功能不被限制
  • 其中用到的函数后文逐个介绍
  • 函数返回值为int类型为的是在判断输赢时方便结束函数
int game()
{
    char table[rows][cols];
    init(table, rows, cols);
    while(1)
    {

        display(table,rows,cols);
        PlayerMove(table);

        switch(IsWin(table, rows, cols))
        {
            case 'x':
                display(table,rows,cols);
                printf("玩家赢\n");
                return 0;
                break;
            case 'o':
                display(table,rows,cols);
                printf("电脑赢\n");
                return 0;
                break;
            case 'k':
                    break;
            case 'p':
                display(table,rows,cols);
                printf("平局\n");
                return 0;
                break;
        }
        ComputerMove(table);
        switch(IsWin(table, rows, cols))
        {
            case 'x':
                display(table,rows,cols);
                printf("玩家赢\n");
                return 0;
                break;
            case 'o':
                display(table,rows,cols);
                printf("电脑赢\n");
                return 0;
                break;
            case 'k':
                    break;
            case 'p':
                display(table,rows,cols);
                printf("平局\n");
                return 0;
                break;
        }
    }

}
创建一个game.c源文件和game.h头文件

game.c里面写game函数需要的子函数(用来实现游戏运行的每个功能)
game.h中用来声明game.c中的函数。
记得在两个原文建中引头文件。

  • 头文件game.h内容如下
#ifndef __GAME_H__
#define __GAME_H__

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

#define rows 3
#define cols 3


char IsWin(char table[rows][cols],int row, int col);
void PlayerMove(char table[rows][cols]);
void ComputerMove(char table[rows][cols]);
void init(char table[rows][cols],int row, int col);
void display(char table[rows][cols], int row, int col);


#endif
梳理game函数需要的功能(各函数)
  • 棋盘(数组)的初始化——init函数
  • 棋盘的展示——display函数
  • 玩家下棋——PlayerMove函数
  • 电脑下棋——ComputerMove函数
  • 判断输赢——IsWin函数

init函数

为声明好的数组初始化,也是为游戏结束后为数组从新出使化

  • 用到for循环,返回类型为空
void init(char table[rows][cols],int row, int col)
{
    int i, j;
    for(i=0; i<row; i++)
    {
        for(j=0; j<col; j++)
        {
            table[i][j]=' ';
        }
    }
}

display函数

用来展示棋盘,类似遍历二维数组。

  • 返回类型为空
  • 考虑遍历数组需要数组和数组的长度设计参数
  • 不仅仅是遍历还要输出棋盘格
void display(char table[rows][cols], int row, int col)
{
    int i;
    for(i=0; i<row; i++)
    {
        printf(" %c | %c | %c \n",table[i][0],table[i][1],table[i][2]);
        if(i<2)
        {
            printf("___ ___ ___\n");
        }
    }
    printf("\n");
}

PlayerMove函数

接受用户玩家坐标(用户想要下棋的位置)存到数组中用于展示

  • 参数需要数组
  • 需判段用户输入坐标的合法性
void PlayerMove(char table[rows][cols])
{
    int x,y;
    printf("请输入坐标:");

    while(1)
    {
        scanf("%d,%d",&x,&y);
        if(x<=rows&&y<=cols)
        {
            if(table[x-1][y-1]==' ')
            {
                table[x-1][y-1]='x';
                break;
            }
            else
            {
                printf("坐标已被占用\n");
            }
        }
        else
        {
            printf("非法坐标,重新输入:");
        }
    }

}

ComputerMove函数

用户下棋后电脑下棋

  • 用到rand( )函数,记得引time.h
  • rand用来产生随机数,也就是说电脑下棋的位置是随机的,需电脑变聪明需做另外的设计,这里不做说明
  • 不像玩家下棋需要判断合法性,我们这里直接生成合法坐标,但需判断是否被占用
  • rand( )%rows是为产生的随机范围在[0,2]即合法范围
void ComputerMove(char table[rows][cols])
{
    int x=0,y=0;
    while(1)
    {

        x = rand()%rows;
        y = rand()%cols;
        if(table[x][y]==' ')
        {
            table[x][y]='o';
            break;
        }
    }
}

IsWin函数

用来判断输赢,和平局情况

  • game函数中判读输赢时用到switch语句,其case的值是字符,所以此函数返回值也应为char类型实现链式访问
  • 判断赢分为横行竖行和斜,还有平局
  • 玩家下棋后和电脑下棋后都需要判断
char IsWin(char table[rows][cols],int row, int col)
{
    int i = 0,j = 0;
    //hang
    for(i=0; i<row; i++)
    {
        if(table[i][0]==table[i][1]&&table[i][0]==table[i][2])
            return table[i][0];
    }
    //lie
    for(i=0; i<col; i++)
    {
        if(table[0][i]==table[1][i]&&table[0][i]==table[2][i])
            return table[0][i];
    }
    //xie
    if((table[0][0]==table[1][1]&&table[0][0]==table[2][2])||
        (table[0][2]==table[1][1]&&table[0][2]==table[2][0]))
    {
        return table[1][1];
    }
    for(i=0; i<row; i++)
    {
        for(j=0; j<col; j++)
        {
            if(table[i][j]==' ')
                return 'k';
        }
    }
    return 'p';
}

执行结果展示

这里写图片描述

这里写图片描述

用C语言开发小游戏实战教程 本文还有配套的精品资源,点击获取 简介:用C语言编写小游戏是提高编程技巧和理解计算机图形学的好方法。本教程针对初学者,涵盖了C语言基础语法、标准输入输出、结构体与指针、图形库、游戏循环、事件处理、碰撞检测、动画和帧率、内存管理、调试技巧、文件I/O、算法与数据结构以及游戏设计原则。通过实际编写小游戏,你将掌握这些知识点,并增强解决问题和调试代码的能力。从简单的猜数字游戏开始... 阅读详情

相关推荐

C++常见面试题总结

C++常见面试题总结

xu_fu_yong的专栏 8万+

C语言经典游戏代码大全(珍藏版)

发现很多朋友都想要一些小项目来练手,却找不到从哪里寻找,给大家整理了游戏项目开发源代码汇总。

C214574728的博客 11万+

杂记 | 使用keycloak实现SSO单点登录(新手向,概念、原理、逻辑、详细步骤、难点解释)

使用keycloak实现SSO单点登录(概念、原理、逻辑、详细步骤、难点解释)

野生猿林仔的博客 2万+

【C语言】 -- 三子棋(代码+解析)

三子棋详解

Ljy_cx_21_4_3的博客 2776

linux下wayland协议修改键盘映射

linux下wayland协议,修改键盘映射,实验环境是Ubuntu24,其他wayland协议窗口应该也是可以的。

qq_15027967的博客 1068

Cadence16.6安装教程

如需安装所需的软件,请到文章末尾处查看 安装步骤: 安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。 试装系统:win10 64bit 1.解压安装包(共5个压缩包,每个都要解压) 2.以管理员身份运行安装程序。 3.选择License Manager。 4.点击NEXT。 5.选择I accept,然后点击NEXT。 6.选择License Manage...

谢谢关注“小鱼教你模数电”,各平台同号 8万+

C语言基础:三子棋小游戏的C语言实现(超详解释+源码)

友友们好,今天和大家一起做一个简单的——三子棋小游戏。如下:游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,先连成三棋一线者视为胜利;棋盘被摆满棋子仍未分出胜利,视为平局。

linsc_05的博客 1520

io_uring vs epoll ,谁在网络编程领域更胜一筹?

简介:从定量分析的角度,通过量化 io_uring 和 epoll 两种编程框架下的相关操作的耗时,来分析二者的性能差异。 本文作者:王小光,「高性能存储技术SIG」核心成员。 背景 io_uring 在传统存储 io 场景已经证明其价值,但 io_uring 不仅支持传统存储 io,也支持网络 io。io_uring 社区有众多的开发者尝试将 io_uring 用于网络应用。我们之前也在《你认为 io_uring 只适用于存储 IO?大错特错!》中也探索过 io_uring 在网络场景的应用及其

阿里云云栖号 3034

C语言编写三子棋小游戏

打印完棋盘,准备写玩家下棋的函数,在输入玩家坐标时应让系统判断输入的坐标是否在所打印的棋盘范围之内,再判断该玩家所在的位置是否已经被占满,如果被占满则提醒坐标被占用,不能下棋,同时如果输入的格式不正确或错误,则提醒输入错误。,对玩家的选择进行判断是否进行游戏,如果进行则进行game()函数,退出则结束程序,输入错误则提示玩家选择错误并重新打印菜单供玩家选择,同时在玩家游戏结束时也应该重新打印游戏菜单,让玩家选择是否重新开一局。然后是电脑下棋的函数,用随机函数生成位置即可,但要判断生成的点是否已经被占用。

2201_75728939的博客 942

当Flowable遇上AI:智能流程决策的未来探索

本文探讨了Flowable工作流引擎与AI技术的融合,构建智能流程决策系统的前沿实践。通过动态流程控制、机器学习优化表达式、自然语言生成规则等创新方法,显著提升业务流程的自动化水平和决策效率。重点解析了AI如何赋能Flowable核心引擎,实现从静态规则到动态智能的跨越式发展。

weixin_29271053的博客 392

EDSR图像超分辨程序复现(踩坑及解决记录)

EDSR图像超分辨程序复现(踩坑及解决记录)

Sunny_Coder的博客 3642

C语言编写三子棋游戏详解及代码

  学了C语言也有一段时间了,三子棋算是第一个自己编写的代码量上百行的程序。自己真正系统的写完之后,许多东西都有了一个明悟,收获颇丰。   首先,想要写一个稍微正式一点的程序出来,函数必不可少,有了函数,那么相应的就需要函数的声明,如果涉及到的函数较多,一个个在主文件里声明就显得代码很繁琐,而且跨文件使用的时候就又需要进行声明。   在这里,我把所有的 函数声明、定义常量,以及头文件统统打包到了"...

EndOrBegin的博客 1024

【小白深度教程 1.32】手把手教你从多视角图像进行 3D 重建(SfM 算法)

重建的目标是从一组照片中推导场景的几何结构,假设摄像机位置和内部参数是已知的或可以从图像集中猜测。 这是通过使用多个照片,在其中应用运动结构法(Structure from Motion,SfM)来解决像素级对应问题,部分地恢复3D信息来实现的。

2401_87064292的博客 2160

(C语言)用C语言编写小游戏——三子棋

用C语言实现的简易三子棋游戏

m0_64051621的博客 3395

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

c语言 编写三子棋的思路,C语言实现简单的三子棋游戏

C语言:三子棋游戏,供大家参考,具体内容如下首先,我们从main函数开始写起,分析游戏的整体逻辑int main(){int input=0;srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf("%d",&input);switch(input){case 1:game();break;case 0:printf("...

weixin_32073537的博客 186

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C语言编写三子棋游戏

首先玩游戏要先创建一个简单的菜单 当我们选择1的时候进入游戏,选择0的时候退出游戏,这里我们可以用switch,case语句写也可用if和else if完成,这里我用第一种方法,代码如下。 为了方便代码的修正和正规性,我们创立头文件和另一个源文件,这样也使观感更加。 之后我们要创建一个空函数用来进行游戏的开始内容如下 1. 初始化棋盘 2.打印数据和分割行 我们要避免游戏的局限性,所以在头文件里定义ROW(行)和COL(列) 接着开始打印数据和分割行 *在这里我们要注意的是,有一种方法是只在三子棋阶段

weixin_53831496的博客 759

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

三子棋小游戏_C语言编写

三子棋: three_chess.h: (函数的声明) #ifndef _THREE_CHESS_H #define _THREE_CHESS_H #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define ROW 3 #define ...

weixin_44772874的博客 188

使用C语言编写三子棋小游戏

使用C语言编写三子棋小游戏: 首先进行分析: 1.需要将游戏实现分为三个部分:头文件,函数功能实现,游戏组合测试。 2.游戏可以循环进行,不必多次打开,可采用 do...while循环结构。 3.游戏为电脑和玩家对弈 4.游戏棋盘为3*3格式,需使用二维数组,并初始化棋盘,显示棋盘内容。...

weixin_64282862的博客 1034

c语言三子棋小游戏程序设计书,这是一篇C语言编写的一个三子棋小游戏程序

这是一篇C语言编写的一个三子棋小游戏程序#define _CRT_SECURE_NO_WARNINGS#include #include "标头.h"#pragma once#define ROW 3#define COL 3#include#include///函数声明void InitBoard(int board[ROW][COL], int row, int col);void Displ...

weixin_36079903的博客 193

C语言编写三子棋小游戏详解

C语言三子棋相接处

weixin_75245339的博客 198

新手学习C语言,入门小游戏的编写(三子棋)

【C语言】入门级游戏——三子棋(n子棋)

shacks的博客 1245

用C语言简单编写一个游戏:三子棋

用C语言编写一个游戏:三子棋 一、简单说明 三子棋又叫做井字棋、圈圈叉叉、一条龙等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子连成一条线,就算赢得游戏。但是很多时候也会出现和棋的情况。 二、思路步骤 用C语言编写三子棋代码,相对来说比较简单。和扫雷游戏一样,用到的还是数组方面的知识。三子棋可以看成是一个三行三列的二维数组,然后对里面的每个元素进行赋值。接下来我们看看编写一个三子棋所需要的大致步骤。 1.创建一个游戏棋盘并初始化,需要一个print()函数来打印棋盘。我们用‘x’

m0_55916917的博客 422

用C语言编写三子棋小游戏

三子棋游戏编写    #define row 3 #define col 3 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt; void player(char arr[row][col], int rows, int cols)//玩家下棋 { int i = 0; int j = 0;...

spaceman_c的博客 363

用C语言编写简单游戏——三子棋

先简单介绍一下三子棋的规则,方便我们接下来的编程和理解。规则如下: 在九宫格棋盘上,只要将自己的三个棋子走成一条线(横、竖、对角线),对方就算输了。 规则很简单,但是我们应该从哪里入手完成这个三子棋程序呢? 首先,我们的游戏程序应该先有个菜单页面,这个菜单页面用来让用户操作选择玩游戏,或是退出。 界面可以很简单,只需要几条 printf 语句即可: ...

R_T_P_A_D的博客 1904

c语言编写简单三子棋游戏

简单的三子棋程序 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int Menu(){ printf("**********************\n"); printf("1.开始游戏\n"); printf("0.退出游戏\n"); printf("**********...

weixin_44358757的博客 153

用c语言编写三子棋游戏

提示:本文章详细讲三子棋游戏程序的建立目录前言一、代码展示二、编写步骤三 注意总结在编写程序时,一定要有模块化的思想,比如在上面的代码中,我将游戏主体分开来写,编写多个函数来实现其功能。模块化可以使代码更加清晰,可以更快的找到代码中的错误,同时避免了一处出错,整个程序都不能运行。

shen3033g的博客 745
上一篇: 对一维数组的大小和地址的思考,及对数组使用sizeof和strlen函数的不同输出
下一篇: 编程实现英语句子按单词倒叙-C语言
Ruichen_L
博客等级 码龄9年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值