练习题目“天生棋局”

1、传入一个n 在堆空间中产生n*n方格的棋盘
int ** createBoard(int n);
int createBoard1(int ***p,int n);
2、N颗棋子随机落在棋盘上<需要防止落在同一位置>
int initBoard(int **p,int n);
3、打印棋盘
int printBoard(int **p,int n);
如果有两颗棋子落同一行或者同一列则输出好棋,否则输出不是好棋。
将棋局中的棋子打印出来空位用O,有旗子的用X表示。随意就行。
4、销毁棋盘
int destroyBoard(int **p,int n);
int destroyBoard1(int ***p,int n);

【题目分析】

  1. 首先要根据输入的n大小生成一个n*n的二维空间。
  2. 初始化棋盘并不难,只需要生成行与列的随即值,判断某行某列上是否已经被设置为非0值,如果没有设置便落子(修改为非0值)。
  3. 打印和遍历、销毁没有什么可说的。

【题目代码】

6这段代码在ubuntu下编译看着效果要好一些,打印棋牌上的内容是用的中文的一些字符,在Windows下编译看着有点不对称。不过可以自己修改一下落子的样式。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
int createBoard(int ***p, int n)
{
	*p = (int**)malloc(sizeof(int*) * n);
	if (NULL == *p)
	{
		return -1;
	}
	for (int i = 0; i < n; i++)
	{
		(*p)[i] = (int*)malloc(sizeof(int) * n);
		if (NULL == (*p)[i])
		{
			return -1;
		}
		memset((*p)[i], 0, sizeof(int) * n);
	}
	return 0;
}
 
int initBoard(int **p, int n, int nCount)
{
	for (int i = 0; i < nCount; i++)
	{
		int x = 0;
		int y = 0;
		srand(time(NULL));
		do
		{
			x = rand() % n;
			y = rand() % n;
		} while (p[x][y] != 0);
		if (nCount > 5)
			p[x][y] = 1;
		else
			p[x][y] = 2;
	}
	return 0;
}
 
int displayBoard(int **p, int n)
{
	int row = 0;
	int column = 0;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (p[i][j] == 0)
			{
				printf("+ ");
			}
			else
			{
				if (p[i][j] == 1)
					printf("●  ");
				else
					printf("○  ");
				row += 1;
			}
		}
		if (row >= 2) 
			printf("★ ");
		else
			printf("- ");
		row = 0;
		putchar(10);
	}
 
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (p[j][i] == 1)
				column += 1;
		}
		if (column >= 2)
			printf("★ ");
		else
			printf("- ");
		column = 0;
	}
 
	putchar(10);
	return 0;
}
 
int destoryBoard(int ***p, int n)
{
	for (int i = 0; i < n; i++)
	{
		free((*p)[i]);
	}
	free(*p);
}
 
int main(int argc, char *argv[])
{
	int **p;
	createBoard(&p, 20);
	initBoard(p, 20, 6);
	initBoard(p, 20, 5);
	displayBoard(p, 20);
	destoryBoard(&p, 20);
	return 0;

}

发表评论