指针数组和扑克牌的洗牌与发牌

Posted kazoo310

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针数组和扑克牌的洗牌与发牌相关的知识,希望对你有一定的参考价值。

Date:1.2

在rand()之前使用srand()?

使用:每次产生随机数不同

不使用:每次产生的随机数相同

  1. #include "stdafx.h"  
  2. #include <time.h>  
  3. #include <stdlib.h>  
  4.     
  5. #define SUITS 4  
  6. #define FACES 13  
  7. #define CARDS 52  
  8.     
  9. void shuffle(unsigned int wDeck[][FACES]) //洗牌 deck表示一副牌  
  10. {  
  11.     for (size_t card = 1; card <= CARDS; card++)  
  12.     {  
  13.         size_t row;  
  14.         size_t column;  
  15.         do {  
  16.             row = rand() % SUITS;  
  17.             column = rand() % FACES;  
  18.         } while (wDeck[row][column] != 0);  
  19.         wDeck[row][column] = card;  
  20.     }  
  21. }  
  22.     
  23. void deal(unsigned int wDeck[][FACES], const char *wFace[], const char *wSuit[])  
  24. {  
  25.     for (size_t card = 1; card < CARDS; card++)  
  26.     {  
  27.         for (size_t row = 0; row < SUITS; row++)  
  28.         {  
  29.             for (size_t column = 0; column < FACES; column++)  
  30.             {  
  31.                 if (wDeck[row][column] == card) {  
  32.                     printf("%5s of %-8s%c", wFace[column], wSuit[row], card % 2 == 0 ? ‘\\n‘ : ‘\\t‘);  
  33.                 }  
  34.             }  
  35.         }  
  36.     }  
  37.     
  38. }  
  39.     
  40.     
  41. int main()  
  42. {  
  43.     unsigned int deck[SUITS][FACES];  
  44.     memset(deck, 0, sizeof(deck));  
  45.     
  46.     srand(time(NULL));  
  47.     shuffle(deck); //洗牌  
  48.     
  49.     const char *suit[SUITS] = { "红桃","方块","梅花","黑桃" };  
  50.     const char *face[FACES] = { "Ace","Deuce","Three" ,"Four" ,"Five" ,"Six" ,"Seven" ,"Eight",  
  51.         "Nine","Ten","Jack","Queen","King" };  
  52.     
  53.     deal(deck, face, suit); //发牌  
  54.     
  55.     getchar();  
  56.     return 0;  
  57. }  

 

技术分享图片

 

算法有缺陷( deal()函数 如果已有 wDeck[row][column] == card 循环还是会继续 ),之后改进。

以上是关于指针数组和扑克牌的洗牌与发牌的主要内容,如果未能解决你的问题,请参考以下文章

IT兄弟连 Java语法教程 综合案例

模拟斗地主洗牌发牌

代码实现:模拟斗地主洗牌和发牌,牌没有排序

4月6日--关于算法数的练习题--扑克洗牌

java斗地主扑克 扑克牌 洗牌 发牌 Collection 集合练习

模拟斗地主洗牌发牌-JAVA