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; }