二维数组除了在数学中的行列式、矩阵等中有应用,游戏中也常常可以见到。
模拟扑克牌游戏中的发牌过程,随机将 52 张扑克发给两个玩家。
分析:扑克牌中每张牌都包含两个信息:花色(为黑桃、红桃、方块或者梅花)以及大小(为2,3,4,5,6,7,8,9,10,J,Q,K或者A),可以用两个一维字符数组kind和size分别有储。发牌过程则用随机数抽取花色和大小,表示抽取出的一张牌,依次发给两个玩家。为了表示每张牌的状态(未发出、发给玩家1或玩家2),再定义二维数组card存放该信息。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int card[13][4] = {0};
const char kind[4] = {35,36,37,38};//分别对应 #、$、%、& 4个花色
const char size[13] = { '2','3','4','5','6','7','8','9','X','J','Q','K','A' };
int i, j, k;
int sig = 1;
int total = 52;
srand(time(NULL));
while(total)
{
j = rand() % 13;//得0~12的随机数
k = rand() % 4;//得0~3的随机数
if (!card[j][k])//该张牌还未使用过
{
card[j][k] = sig;//玩家一或二已经用了此牌
sig = -sig;//下一次发牌给另一个玩家
total --;
//每张牌只能发一次,循环,你一张,我一张
}
}
printf("玩家一:\n");
for (i = 0; i < 13; i++)
{
printf("%c : ",size[i]);//size都按顺序
for (j = 0; j < 4; j++)
{
if (card[i][j] == 1)
{
printf("%5c",kind[j]);//都是顺着输出的
}
}
printf("\n");
}
printf("玩家二:\n");
for (i = 0; i < 13; i++)
{
printf("%c : ", size[i]);
for (j = 0; j < 4; j++)
{
if (card[i][j] == -1)
{
printf("%5c", kind[j]);
}
}
printf("\n");
}
return 0;
}
因为涉及到随机数的概念,所以每次发牌的结果都是不同的:
这样就大功告成了!