曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4965|回复: 0
打印 上一主题 下一主题

[栈与队列] 简单的发牌游戏

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2009-8-5 01:51:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序说明
一个简单的扑克牌游戏,用随机数和栈来洗牌,洗好后,将牌发给 4 个玩家,没人 5 张牌。

程序代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSTACK 100    /*最大栈容量*/

int stack [MAXSTACK];    /*栈数组*/
int top = -1;        /*栈顶*/
/*---------------------*/
/*栈数据的存入         */
/*---------------------*/

int push (int value)
{
    if (top >= MAXSTACK) {
        printf ("栈已满\n");
        return -1;
    }
    top++;
    stack [top] = value;
}


/*---------------------*/
/*栈数据的取出         */
/*---------------------*/
int pop ()
{
    int temp;
   
    if (top < 0) {
        printf("栈内容为空\n");
        return -1;
    }
    temp = stack [top];
    top--;
    return temp;
}
void output (int card)
{
    int type;
    type = card / 13 + 3;
    switch (type) {
        case 3:
        printf("红心 %2d ", card % 13 + 1);
        break;

        case 4:
        printf("方块 %2d ", card % 13 + 1);
        break;
       
        case 5:
        printf("梅花 %2d ", card % 13 + 1);
        break;
       
        case 6:
        printf("黑桃 %2d ", card % 13 + 1);
        break;
    }
}
/*-----------------------------*/
/*主程序:洗牌后,将牌发给4个人  */
/*红心  :数组 0~12             */
/*方块  :数组 13~25            */
/*梅花  :数组 26~38            */
/*黑桃  :数组 39~51            */
/*-----------------------------*/
int main(void)
{
    int card [52];            /*扑克牌数组*/
    int pos;            /*牌代码*/
    int i, temp;
    long temptime;
    srand (time(&temptime) % 60);    /*使用时间初始化随机数*/
    for (i = 0; i < 52; i++)
        card [i] = 0;        /*清除扑克牌数组*/
    i = 0;
    while (i != 52) {
       pos = rand() % 52;        /*随机数取值 0~51*/
      
       if (card [pos] == 0) {
         push (pos);
         card [pos] = 1;        /*设置此张牌洗过*/
         i++;
       }
    }       
       
    printf("玩家1   玩家2    玩家3    玩家4 \n");
    printf("===============================\n");
    for (i = 0; i < 5; i++) {    /*发牌给四人循环*/
   
        temp = pop();        /*取出栈数据*/
        output (temp);

        temp = pop();        /*取出栈数据*/
        output (temp);

        temp = pop();        /*取出栈数据*/
        output (temp);

        temp = pop();        /*取出栈数据*/
        output (temp);

        printf("\n");
    }
    return (0);
}
运行及输出
beyes@linux-beyes:~/C/structer/stack> ./card.exe
玩家1   玩家2    玩家3    玩家4
===============================
梅花  7 方块 12 黑桃  6 黑桃 10
黑桃  3 方块  8 红心  9 红心  6
黑桃 13 黑桃  4 红心 11 红心  3
方块  7 方块  5 红心 12 红心  8
黑桃  7 红心  2 方块 13 方块  1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 13:26 , Processed in 0.061821 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表