基于C语言实现三子棋小游戏

在写三子棋之前,我们要先了解三子棋的一个大概的图形,以便于我们整理思路。

首先我们要分模块写代码,不要全部写在主函数里面,模块化的代码便于理解,而且给人一种赏心悦目的感觉,如:

game.h

game.c

test.c

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 DisplayBoard(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);

//判断游戏是否有输赢
char IsWin(char board[ROW][COL], int row, int col);

这样的好处是:例如后期想在这个代码的基础上改成十乘十的棋盘的时候,我们只需将头文件中的函数声明处的宏定义改为十即可 ,而不需要在每次传参以及定义处更改,这样便于节省很多不必要的步骤,大大提高写程序的效率。

test.c---游戏思路

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu() {
    printf("***********************\n");
    printf("******* 1.play ********\n");
    printf("******* 2.exit ********\n");
    printf("***********************\n");
}

void game()
{
    //存储数据 - 二维数组
    char board[ROW][COL];
    //初始化棋盘 - 初始化空格
    InitBoard(board, ROW, COL);

    //打印棋盘 - 本质是打印数组的内容
    DisplayBoard(board, ROW, COL);
    char ret = 0;//接收游戏状态
    while (1)
    {
        //玩家下棋
        PlayerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);
        //判断玩家是否赢的游戏
        ret = IsWin(board, ROW, COL);
        if (ret != 'c')
            break;
        //电脑下棋
        ComputerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);
        //判断电脑是否赢的游戏
        ret = IsWin(board, ROW, COL);
        if (ret != 'c')
            break;
    }
    if (ret == '*')
    {
        printf("玩家赢了\n");
    }
    else if (ret == '#')
    {
        printf("电脑赢了\n");
    }
    else
    {
        printf("平局\n");
    }
    DisplayBoard(board, ROW, COL);
}
int main()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    do {
        menu();
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 2:
            printf("退出游戏!\n");
            break;
        default:
            printf("选择错误!\n");
            break;
        }
    } while (1);
    return 0;
}

建议:我们在写代码的时候,每个步骤前可以适当的加一些注释,这样即使代码很长,当我们运行有错误的时候,或者后期回顾的时候,可以很容易的找出错误点,而且能够很清晰的看出哪一块代码是在实现什么功能,不仅方便自己复习,当朋友借鉴的时候也可以让朋友通俗易懂,能够快速产生共鸣。

game.c---游戏的实现

#define _CRT_SECURE_NO_WARNINGS 1
#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++)
    {
        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");
    }
}

//  玩家走
void PlayerMove(char board[ROW][COL], int row, int col)
{
    int x = 0;
    int y = 0;

    printf("玩家走:>\n");
    while (1)
    {
        printf("请输入下棋的坐标:>\n");
        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");

    while (1)
    {
        int x = rand() % row;//0-2
        int y = rand() % col;//0-2
        //判断坐标被占用
        if (board[x][y] == ' ')
        {
            board[x][y] = '#';
            break;
        }
    }
}

// 判满
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];
        }
    }

    //判断三列
    for (i = 0; i < col; i++)
    {
        if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
        {
            return board[1][i];
        }
    }

    //判断对角线
    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];
    }

    //判断平局
    int ret = IsFull(board, row, col);
    if (ret == 1)
    {
        return 'Q';
    }
    //继续
    else
        return 'c';
}

思考提升

从代码中可以看出初始化棋盘没有写死,而判断输赢的时候,代码写死了,这里留给大家思考。

例子:提供三行改成多行的代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言 风靡一时的黄金矿工游戏实现流程详解

    游戏的玩法主要是通过不断采集地下的黄金和钻石,来得到更高的积分.只有完成任务目标,才可以通过相应的关卡.游戏画面中沙滩上的人物便是玩家的角色,下方深褐色的部分是地下,而黄金和钻石就是玩家需要采集的物品.人物右边的四个方框里的物品是游戏中可以使用的道具. 画面中的虚线就是游戏中的探测器,探测器会不断的左右摆动,当摆动到地下的黄金和钻石的位置时,只需要点击矿坑任意处,便可以发射勘探头采集到这些物品,当然一定要瞄准好再出手呦. 当然想要顺利采集到丰富的资源也不是那么简单的,地下矿坑中,会有各式各样的困

  • C语言实现简单五子棋游戏

    在生活中五子棋是一个十分普遍的一款游戏,今天让我们一起来实现这款游戏. 1.初始化棋盘 char ret; //数据存储在一个二维数组中,玩家下去*,电脑下去#. char board[row][col] = { 0 };//最开始为全是空格 InitBoard(board,row,col);//初始化棋盘 我们利用InitBoard函数来初始化棋盘,用 * 来表示玩家下棋,用 # 来表示电脑下棋. 代码如图: void InitBoard(char board[row][col], int R

  • 基于C语言实现简单扫雷游戏

    在每一个电脑里总有一个固定的小游戏-扫雷,那今天就让我们一起来实现下扫雷. 1.主函数的构建 int main() { int input = 0; do { menu(); printf("请选择是否开始游戏(1/0):>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("游戏退出!"); break; default:

  • C语言 小游戏打砖块实现流程详解

    始祖是美国英宝格公司(en:Atari Games,ja:アタリ (ゲーム))于1976年推出的街机游戏"Breakout"(en:Breakout),由该公司在1972年发行的"PONG"(en:PONG,ja:ポン (ゲーム),世界上第一款电子游戏,类似台球)改良而来.相较于其前作,一个人就可以玩与变化丰富这两项特点让Breakout相当卖座,使各家公司竞相模仿. 因为规则简单与游戏性,现在许多移动电话都有内建打砖块游戏,也有许多因特网小游戏版本,目前在网上可以

  • C语言实现简易的扫雷游戏

    本文实例为大家分享了C语言实现简易的扫雷游戏的具体代码,供大家参考,具体内容如下 在正式讲内容之前先说一说扫雷游戏的规则 游戏规则很简单,点击方格,如果是地雷,游戏失败,找到所有地雷游戏胜利 .刚开始需要碰运气,只要点开一个区域,就可以正式开始了. 3.根据现有情况,判断出一定有雷的位置. 4.进一步计算,因为"2"右边的"1"已经有从属的雷了,所以右边的"2"的正下方没有雷,因此可以判断出左边有两颗雷,满足两个"2". 5.

  • 详解用C语言实现三子棋游戏流程

    目录 三子棋游戏简介 一.分析及实现 1.棋盘 2.落子 3.判断输赢 二.程序演示 三.完整代码 1.main.c 2.game.c 3.game.h 总结 三子棋游戏简介 这是一个简单的三子棋小游戏,估计大家小时候都玩儿过,只要能连成三个,无论是行,列还是对角线,就可以胜利了.是不是很简单呢,那我们来尝试一下用C语言来写一个简单的三子棋游戏. 一.分析及实现 1.棋盘 想要玩游戏,那首先应该有一个棋盘吧.因为我们玩儿的是三子棋,所以来说一个3X3的棋盘应该可以满足要求.这里使用了一个三行三列

  • C语言实现经典扫雷游戏流程

    目录 扫雷小游戏简介 一.分析与实现 1.设计棋盘 2.放置雷以及排雷 二.扫雷小游戏演示 三.源码 总结 扫雷小游戏简介 想必很多人小时候电脑没网的时候都玩儿过这个经典的小游戏,也都被它折磨过.其实这个游戏很简单,通过点击相应位置显示的数字来确定周围雷的数量,在避免踩到雷的同时找出所有的雷就能获得胜利. 这次我们用C语言来实现一个简单的扫雷小游戏. 一.分析与实现 1.设计棋盘 要玩儿扫雷游戏,我们首先应该有一个棋盘.这个棋盘中的雷应该是在开始玩儿游戏的时候就已经布置好了,不能随意变化.但是呢

  • C语言 完整游戏项目坦克大战详细代码

    话不多说 我们今天就来创造出属于我们自己的<坦克大战>,GOGOGO!!! 直接开始吧 这次的源码比较详细,我分了好几个cpp文件,思路更加的清晰,请耐心用心的观看 首先就是我们载入图片的函数tupian.cpp # include "tanke.h" 障碍物 void LaoWang(int * tilex, int * tiley) { IMAGE img; loadimage(&img, _T("res\\tile.bmp")); puti

  • C语言 完整游戏项目推箱子详细代码

    话不多说 我们今天就来创造出属于我们自己的<推箱子>,GOGOGO!!! 直接开始吧 首先是我们用二维数组特定的数字描绘出这个地图 int cas = 0; int map[3][8][8] = { 1,1,1,1,1,1,1,1, 1,3,4,0,0,4,3,1, 1,0,1,3,0,1,0,1, 1,0,1,4,0,1,0,1, 1,0,0,5,0,0,0,1, 1,0,1,0,0,1,0,1, 1,3,4,0,0,4,3,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1

  • 基于C语言实现三子棋小游戏

    在写三子棋之前,我们要先了解三子棋的一个大概的图形,以便于我们整理思路. 首先我们要分模块写代码,不要全部写在主函数里面,模块化的代码便于理解,而且给人一种赏心悦目的感觉,如: game.h game.c test.c game.h---头文件的包含,定义宏变量以及函数声明 #pragma once //头文件的包含 #include<stdio.h> #include<stdlib.h> #include<time.h> //函数的声明 #define ROW 3 #

  • C语言实现三子棋小游戏详解

    在用c语言实现三子棋小游戏之前,我们应当了解三子棋的游戏规则:在九宫格棋盘上,哪一方三个棋子连成一线(一行或一列或对角线)即判定哪一方胜利. 以下为源代码: 1.首先打印出菜单. void menu() { printf("**********************************\n"); printf("**********************************\n"); printf("***** 0.play *********

  • C语言实现三子棋小游戏(vs2013多文件)

    本文通过实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 基本思路: 1.创建一个游戏选择面板. 2.创建并初始化棋盘. 3.玩家落子并判定,电脑落子并判定. 4.判定结果 ,游戏结束! 代码如下: 头文件: #pragma once #include<stdio.h> #include<windows.h> #include<stdlib.h> #include <time.h> #pragma warning(disable:4

  • 用C语言实现三子棋小游戏

    本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1. 规则介绍 三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等.将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了.但是,有很多时候会出现和棋的情况. 2. 编写思路 2.1 选择界面的编写 提供选择界面(设计者可根据自己的喜好设定棋盘的大小:输入何种数字或者符号开始或者退出游戏也可由设计者自己确定数字) static void Menu() { pri

  • C语言版三子棋小游戏

    本文实例为大家分享了C语言版三子棋小游戏的具体代码,供大家参考,具体内容如下 ①游戏效果 有一个3*3的棋盘 每次下棋后(电脑和玩家),棋盘会更新数据 会有菜单提示相关命令进行相关操作 下棋方法是输入坐标 每一局游戏结束后,会询问是否继续. ②主函数逻辑搭建 任何一个项目的实现,最重要的就是逻辑结构搭建,而各个功能的实现就是采取函数(模块化)进行细分. 所以我们需要搭建逻辑,那么逻辑结构是啥呢? 首先会跳出提示菜单,内容为 0退出游戏,1开始/继续游戏,其他键提示错误,并重新输入 按0后提示 "

  • 适合初学者练习的C语言实现三子棋小游戏

    目录 一.写代码前明确下棋时的步骤与顺序 二 根据初步的主函数完成想要的代码 1.写一个函数来初始化棋盘 2.打印棋盘 3.玩家落子 4.电脑落子 5.判断胜负 三.三子棋实现代码 用简单的C语言来实现小时候玩的三子棋游戏,下面是人机对战,当然这个代码的电脑对手是人工智障而不是人工智能 一.写代码前明确下棋时的步骤与顺序 1.创建一个3*3的棋盘. 2.将上面创建的棋盘中每个格初始化成' '状态. 3.打印出初始化完成的棋盘 4.玩家落子 5.电脑落子 6.判断胜负 写代码之前梳理好大概的思路,

  • C语言实现三子棋小游戏(vs2013多文件)

    本文通过实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 基本思路: 1.创建一个游戏选择面板. 2.创建并初始化棋盘. 3.玩家落子并判定,电脑落子并判定. 4.判定结果 ,游戏结束! 代码如下: 头文件: #pragma once #include<stdio.h> #include<windows.h> #include<stdlib.h> #include <time.h> #pragma warning(disable:4

  • C语言实现三子棋小游戏全程详解

    目录 前言 思想提升及重要代码片段 三子棋代码 前言 授人以鱼不如授人以渔,这篇文章重点从思想上的角度来写,助你举一反三,在写代码时不再害怕,真的很想对你有帮助呀,代码放在文章最后啦 思想提升及重要代码片段 为什么要拆成三个文件写:1.便于复用代码.重复的功能只要写一遍就可以了,下次要用在其它程序上时只要更改很小的部分或者可以不用更改.2.便于多人协作.在设计软件之初就可以很清楚地分配各个开发部门的任务.模块的编写者本身只要关注他所写的东西,清楚这一部分的功能,留出接口就可以了.另外,对于整个工

  • 使用C语言实现三子棋小游戏

    目录 1.实现原理 2.实现模块 3.实现逻辑 4.实现结果 本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1.实现原理 采用二位数组保存棋盘信息,棋盘上面的任何一个位置,里头可以放三个信息: 1.空2.用户落子3.电脑落子 下三子棋就是在二维数组种找对应的空位置,进行落子,落完之后立即就要判断落子位置是否有三字连珠,从而判断谁数输谁赢.每走一次棋会有四种情况: *用户1赢*用户2赢*平局(棋盘被沾满)**没有出结果 继续下棋 2.实现模块 文件名      

  • C语言实现三子棋小游戏

    在这里我们要写出一个三子棋的小游戏,能够实现所需要的三字连珠的功能,并且可以使得游戏让玩家进行选择是否继续的功能. 代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 3 #define COL 3 void init_board(char arr[ROW][COL]) { int i=0; int j=0; for

随机推荐