C语言实现小游戏——三子棋(Three Peices Chess)


前言


相信不少小伙伴都玩过五子棋,其实三子棋和它的游戏规则一样,谁在行/列/对角线上连成直线,谁就获得胜利。

接下来用C语言实现它


Code and Explain


首先为了方便代码编写,实现系统试编程。在工程里定义3个文件:

1

其中,tpc.h是用来存放宏定义和函数声明的头文件

tpc.c是头文件中声明函数的具体实现

test.c则是用来测试代码的源文件。

下面给出各个模块的代码并解释:

首先,tcp.h

#ifndef __TPC_H__
#define __TPC_H__

//棋盘的行和列,为了方便修改所以定义成宏。因为是三子棋所以定义为3
#define COLS 3
#define ROWS 3

//下面是各种函数声明
void init_board(char board[ROWS][COLS], int rows, int cols);//初始化棋盘
void    display_board(char board[ROWS][COLS], int rows, int cols);//打印棋盘
void player_move(char board[ROWS][COLS], int rows, int cols);//玩家操作
void computer_move(char board[ROWS][COLS], int rows, int cols);//电脑操作
char check_win(char board[ROWS][COLS], int rows, int cols);//判断输赢

#endif

其次,tpc.c:

#define _CRT_SECURE_NO_WARNINGS
#include "tpc.h"
#include<string.h>
#include<stdio.h>

void init_board(char board[ROWS][COLS], int rows, int cols)//初始化棋盘(数组)
{
    memset(board, ' ', sizeof(char)*cols*rows);//用库函数代替for循环初始化数组,提高效率
}
void    display_board(char board[ROWS][COLS], int rows, int cols)//打印棋盘
{
    int i = 0;
    for (i = 0; i < rows; i++)
    {
        printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][
数据结构习题:已知两人分别执白和黑在一个围盘上下五子,若同一颜色的子在同一条横行、纵行或斜线上连成5个子,则执该颜色子的人获胜。编写程序读入某一时刻下的状态,并判断是否有人即将获胜,即:同一颜色的子在同一条横行、纵列或斜线上连成4个子,且该4个子的两端至少有一端为空位置。 输入的盘大小是19×19,用数字0表示空位置(即没有子),用数字1表示该位置下了一白色子,用数字2表示该位置下了一黑色子。假设同一颜色的子在同一条横行、纵列或斜线上连成的子个数不会超过4个,并且最多有一人连成线的子个数为4。 【输入形式】 从控制台输入用来表示盘状态的数字0、1或2;每行输入19个数字,各数字之间以一个空格分隔,每行最后一个数字后没有空格;共输入19行表示盘状态的数字。 【输出形式】 若有人即将获胜,则先输出即将获胜人的子颜色(1表示白色子,2表示黑色子),然后输出英文冒号:,最后输出连成4个子连线的起始位置(盘横行自上往下、纵列自左往右从1开始计数,横行最小的子在盘上的横行数和纵列数作为连线的起始位置,若在同一行上,则纵列数最小的子位置作为起始位置,两数字之间以一个英文逗号,作为分隔符)。 若没有人获胜,则输出英文字符串:No。 无论输出什么结果,最后都要有回车换行符。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值