曲径通幽论坛

标题: 简单的发牌游戏 [打印本页]

作者: beyes    时间: 2009-8-5 01:51
标题: 简单的发牌游戏
程序说明
一个简单的扑克牌游戏,用随机数和栈来洗牌,洗好后,将牌发给 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





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2