【C语言】案例四十八 综合案例——天生棋局(围棋棋盘)

本案例详细介绍了如何使用C语言动态创建、初始化、输出和销毁一个围棋棋盘。棋盘大小和棋子数量由用户输入决定,棋子位置通过随机函数生成。如果棋盘上存在两颗棋子在同一行或同一列,则判断为好棋,否则反之。程序分为四个功能函数:创建棋盘、初始化棋盘、输出棋盘和销毁棋盘,以及一个主函数来整合这些功能。
摘要由CSDN通过智能技术生成

案例描述
本案例要求创建一个棋盘,在棋盘生成的同时初始化棋盘,根据初始化后棋盘中棋子的位置来判断此时的棋局是否为一局好棋。具体要求如下:

  1. 棋盘的大小根据用户的指令确定
  2. 棋盘中的棋子数量也由用户指定
  3. 棋子的位置由随机函数随机确定,若生成的棋盘中有两颗棋子落在同一行或者是同一列,则判定为”好棋“,否则判定为“不是好棋”

案例分析
本案例需要根据用户输入的数据分别确定棋盘的大小和棋子的数量,所以棋盘大小和棋子数量是不确定的。为了避免存储空间的浪费,防止因空间不足造成的数据丢失,本案例可动态的申请堆上的空间,来存储棋盘。
从棋盘的创建到释放,大致包含一下几个步骤:

  1. 创建棋盘。棋盘的创建应包含空间的申请,用于存储棋盘中对应的信息
  2. 初始化棋盘。创建好的棋盘是一个空的棋盘,棋盘在现实之前应先被初始化
  3. 输出棋盘。创建并初始化的棋盘包含棋盘的逻辑信息,棋盘的输出应包含棋盘的格局。
  4. 销毁棋盘。动态申请的空间需要被释放

当然在创建棋盘之前,需要获取用户设置的棋盘信息,在初始化棋盘之时,也应根据用户设置的棋子数量来设置棋盘信息。

案例实现
1,案例设计
根据案例分析中的棋局生成的步骤设计程序,可将程序代码化为四个功能函数和一个主函数

  1. 创建棋盘
    案例分析中已经提出,棋盘信息存放在动态生成的堆空间中。棋盘由n*n个表格组成,其形式类似矩阵,所以本案例中设计使用二级指针指向棋盘地址,在该函数中应实现棋盘空间的动态申请,并返回一个指向棋盘的二级指针。
  2. 初始化棋盘
    在创建棋盘时,实质只开辟了存储空间,空间中尚未存放棋盘信息,所以在生成棋盘之前需要初始化棋盘信息。
    棋盘信息的初始化可以利用指针完成。当棋盘上的棋子数量确定后,在棋盘范围内使用随机数函数随机确定每个棋子的位置。
  3. 输出棋盘
    根据由前两个函数确定的棋盘信息搭建棋盘棋盘的外观可使用制表符搭建。若棋盘对应的位置有棋子,则将制表符替换为表示棋子的符号
  4. 销毁棋盘
    在创建棋盘时申请的堆空间,应在使用完毕后手动释放
  5. 主函数
    主函数中实现棋盘大小和棋子数量的设置,其中应定义一个二级指针,指向创建棋盘的函数返回的棋盘地址,随后依次调用初始化棋盘函数、输出棋盘函数和销毁棋盘的函数。

完整代码

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

//创建一个棋盘
int ** creatBoard(int n)
{
   
	int **p = (int **)calloc(sizeof(int *),n);
	//使用二级指针指向棋盘地址,棋盘空间的动态申请
	int i = 0;
	for(i = 0;i < n; i++)
	{
   
		p[i] = (int*)calloc(sizeof(int),n);
	}
	
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值