linux下的扑克游戏,linux下多线程扑克游戏框架.doc

linux下多线程扑克游戏框架

linux下多线程扑克游戏框架

/*

*rc.c

*文件描述:

*1)提供了linux下“升级”(北方常见的一种扑克玩法)游戏的框架。

*2)库:glibc2.15;编译环境:gcc4.7.2;内核:3.8.4

* 3) 编译:gcc -pthread -DDEBUG -o rc rc.c

*作者:漂流骑士

*发布时间:2013.4.3

*/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define PLAYERCOUNT4

#define PLAYED_CARDS_NO 4

#define PLAYING_WAITING 10

#define BUFFER_RECV 128

#ifdef DEBUG

#define DPRINTF(s) printf s

#else

#define DPRINTF(s)

#endif

#define ERR_HANDLER(s) {perror s;exit(-1);}

typedef enum

{

STAGE_HANPAI = 0,

STAGE_CALC

}stage_t;

typedef struct barrier_hanpai_tag

{

int mailbox_hanpai;/*空闲标志。0为空闲,1为繁忙*/

pthread_mutex_t m_hanpai[2];/*m_hanpai[0]与同步信号配套的互斥量

m_hanpai[1]确保喊牌期间运行控制线程(RC线程)首先执行*/

pthread_cond_t c_hanpai_P2RC;/*喊牌期间,玩家发给运行控制线程的同步信号*/

}barrier_hanpai_t, *barrier_hanpai_p;

typedef struct barrier_calc_tag

{

int mailbox_calc;/*空闲标志。0为空闲,1为繁忙*/

pthread_mutex_t m_calc[2];/*m_calc[0]与同步信号配套的互斥量

m_calc[1]确保出牌(计算)期间运行控制线程首先执行*/

pthread_cond_t c_calc_P2RC;/*计算期间,玩家发给运行控制线程的同步信号*/

}barrier_calc_t, *barrier_calc_p;

typedef struct barrier_tag

{

int sqno;/*玩家序号*/

pthread_t player[PLAYERCOUNT];

pthread_mutex_t m_global;/*确保运行控制线程每局均能首先运行*/

pthread_mutex_t m_interplayer;/*玩家线程间的互斥*/

pthread_cond_t c_RC2P;/*喊牌、计算期间,RC线程发给玩家线程的信号*/

pthread_cond_t c_ready_P2RC;/*每局牌开始时的同步*/

struct barrier_hanpai_tag barrier_hanpai;

struct barrier_calc_tag barrier_calc;

}barrier_t, *barrier_p;

typedef void (*sighandler_t)(int);

sigset_t signal_set;

int repeatflag_hanpai = 1, repeatflag_calc = 1, quitflag = 0;

int player_hanpai_decision = 0xca;

char player_status_play = 0;

char player_status_hanpai = 0;

sigjmp_buf jmpbuf_hanpai[4];

sigjmp_buf jmpbuf_calc[4];

void hanpai(int counter, int sqno, barrier_p mybarrier)

{

char buffer[10];

/*若为第二次喊牌

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值