怎么 用c写斗地主的发牌(斗地主发牌程序的实现)

怎么 用c写斗地主的发牌(斗地主发牌程序的实现)

摘要:本文深入浅出地介绍了如何使用C语言编写一个斗地主的发牌过程,将会涉及到C语言中的数组、结构体的使用,从而实现洗牌、发牌、抢地主的算法,相信读者可以通过本文学习到编程中 实现一个斗地主的发牌实现方法。

      摘要:本文深入浅出地介绍了如何使用C语言编写一个斗地主的发牌过程将会涉及到C语言

      使用C语言编写斗地主的发牌是一个相当考验C语言水平的问题,因为斗地主是一种特殊的扑克牌游戏,其中含有洗牌、发牌、抢地主等步骤,它们都需要掌握独特的算法来实现,这里我们就来介绍如何使用C语言来编写斗地主的发牌过程。

      首先应当定义斗地主中所使用的牌,这里我们使用C语言的数组来定义,理论上可以定义108张牌,但是我们这里优化一下只定义54张牌,每个数组由4个元素组成,分别表示花色(shape)、大小(num)、是否是双王(isKing)、归属玩家的序号(belong),具体描述如下:

      • shape:花色,共有四种,分别是黑桃、红心、梅花、方块,代表为数值1、2、3、4。

      • num:大小,13 张分别 对应面值 3~2 再加上J、Q、K、A、小王、大王,最后以 0 表示未发出的牌。

      • isKing: 是否为双王,值为 0 或 1 。

      • belong: 牌归属的玩家序号,值为 0~3,分别表示玩家 1~4。

      定义完成之后,我们需要完成洗牌、发牌和抢地主三个步骤,对于洗牌,我们可以使用随机数C语言中的rand()函数实现,将数组 index 做 horizontal loop,然后用每次循环从未洗牌的位置中随机取一个牌,放入洗牌位置。代码如下:

      for (int i = 0; i < 54; i++) {

       int rand_num = rand() % (54 - i) + i;

       int temp_shape = puke[i]->shape;

       int temp_num = puke[i]->num;

       int temp_king = puke[i]->isKing;

       puke[i]->shape = puke[rand_num]->shape;

       puke[i]->num = puke[rand_num]->num;

       puke[i]->isKing = puke[rand_num]->isKing;

       puke[rand_num]->shape = temp_shape;

       puke[rand_num]->num = temp_num;

       puke[rand_num]->isKing = temp_king;

      }

      发牌阶段,我们可以使用结构体定义3个变量:player1、player2、player3,将game中的puke数组发牌给3个玩家,并将已发牌的牌置为 0 ,代表未发出,代码如下:

      for (int i = 0; i < 54; i++) {

       if (i < 17) {

       player1.cards[i]->shape = puke[i]->shape;

       player1.cards[i]->num = puke[i]->num;

       player1.cards[i]->isKing = puke[i]->isKing;

       puke[i]->shape = 0;

       puke[i]->num = 0;

       puke[i]->isKing = 0;

       }

       else if (i < 34) {

       player2.cards[i-17]->shape = puke[i]->shape;

       player2.cards[i-17]->num = puke[i]->num;

       player2.cards[i-17]->isKing = puke[i]->isKing;

       puke[i]->shape = 0;

       puke[i]->num = 0;

       puke[i]->isKing = 0;

       }

       else {

       player3.cards[i-34]->shape = puke[i]->shape;

       player3.cards[i-34]->num = puke[i]->num;

       player3.cards[i-34]->isKing = puke[i]->isKing;

       puke[i]->shape = 0;

       puke[i]->num = 0;

       puke[i]->isKing = 0;

       }

      }

      最后一步是抢地主,这里我们采用一个int变量 game.lord 来表示地主,值为 0~3 分别表示玩家 1~4,代码如下:

      // 产生随机数 0~2

      srand((unsigned)time(NULL));

      int rand_num = rand() % 3;

      // 设置地主玩家序号

      game.lord = rand_num;

      // 将剩余的三张牌发给地主

      for (int i = 51; i < 54; i++) {

       player[rand_num].cards[i-17]->shape = puke[i]->shape;

       player[rand_num].cards[i-17]->num = puke[i]->num;

       player[rand_num].cards[i-17]->isKing = puke[i]->isKing;

       puke[i]->shape = 0;

       puke[i]->num = 0;

       puke[i]->isKing = 0;

      }

      总结:通过本文介绍的方法,读者可以学会如何使用C语言实现斗地主的发牌过程,其中涉及到C语言中数组、随机函数、结构体的使用,对于初学者来说,学习到这些知识点后可以自己动手实现一把斗地主的发牌程序。

原创文章,作者:启动,如若转载,请注明出处:http://www.bbhxbl.com/show_1307.html