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);
【题目分析】
- 首先要根据输入的n大小生成一个n*n的二维空间。
- 初始化棋盘并不难,只需要生成行与列的随即值,判断某行某列上是否已经被设置为非0值,如果没有设置便落子(修改为非0值)。
- 打印和遍历、销毁没有什么可说的。
【题目代码】 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;
}