天生棋局(堆上申请二维空间的应用)

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 /*
 4     天生棋局
 5 */
 6 #define N 10
 7 //1.传入一个n在堆空间中产生n*n方格的棋盘(生成一个n*n的二维空间)
 8 int **createboard(int n)
 9 {
10     int **p = (int **)malloc(n*sizeof(int*));
11     for(int i = 0;i<n;i++)
12     {
13         p[i] = (int *)malloc(n*sizeof(int));
14     }
15     
16     return p;
17 }
18 //2.N颗棋子随机落在棋盘上<需要防止落在同一位置上>
19 void initboard(int **p,int n)
20 {
21     int i,j;
22     
23     i = rand()%N;
24     j = rand()%N;
25     p[i][j] = 'x';
26     n -= 1;
27     while(n--)
28     {
29         
30         i = rand()%N;
31         j = rand()%N;
32         while(p[i][j] == 'x')
33         {
34             i = rand()%N;
35             j = rand()%N;
36         }
37         p[i][j] = 'x';    
38     }
39 }
40 //3.打印棋盘,没旗子的用o表示,有棋子的用X表示
41 void printboard(int **p)
42 {
43     int i,j;
44     
45     for(i = 0;i<N;i++)
46     {
47         for(j = 0;j<N;j++)
48         {
49             if(p[i][j] == 'x')
50                 printf("%c\t",p[i][j]);
51             else
52                 printf("%c\t",'o');
53         }
54         putchar(10);
55     }
56 }
57 int main(void)
58 {
59     int ** p = createboard(N);//生成N*N二维空间
60     initboard(p,20);//随机放入20个棋子
61     printboard(p);//打印棋盘
62     
63     return 0;
64 }

 

posted on 2018-11-19 13:32  王朝马汉  阅读(302)  评论(0编辑  收藏  举报

导航