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];
/*若为第二次喊牌
linux下的扑克游戏,linux下多线程扑克游戏框架.doc相关推荐
- linux编写一个简单的端口扫描程序,小弟我在linux下写了个简单的多线程端口扫描程序,运行时出现有关问题,请问一下(2)...
当前位置:我的异常网» Linux/Unix » 小弟我在linux下写了个简单的多线程端口扫描程序, 小弟我在linux下写了个简单的多线程端口扫描程序,运行时出现有关问题,请问一下(2) www. ...
- linux用mame玩游戏,Ubuntu下用kxmame运行精彩的街机游戏
闲得无聊,试试在Ubuntu玩一下那些经典的街机游戏,搜了下论坛,一般是用gxmame,先看看"添加/删除"里有没有,查找"gxmame",没有,倒是有个kxm ...
- linux 射击 游戏,Ubuntu下安装第一人称射击游戏 Nexuiz 2.4.2(图)
Ubuntu下安装第一人称射击游戏 Nexuiz 2.4.2(图) Nexuiz 是最流行的基于 DarkPlaces 引擎的开源第一人称射击游戏之一.经过漫长的开发旅程,在2008年05月11日,该 ...
- Windows 和 Linux 应用程序从上到下调用层次比较
刚毕业的时候,做了将近一年的Window下的程序开发,主要用MFC,那是也不明白程序在操作系统角度从上到下的整个调用层次.遇到调用库函数,不明白,就查MSDN,每个月1500行代码左右,那时以为这就是 ...
- linux 程序定时重启tomcat,linux下实现tomcat定时自动重启
tomcat自带的脚本中没有提供直接restart的模式,但是有start和shutdown两种模式.要实现restart模式,实际上只需要判断是否已经启动tomcat,若已经启动则限制性shutdo ...
- java socket windows linux,socket在windows下和linux下的区别
windows到Linux代码移植遇到的问题 1.一些常用函数的移植http://www.vckbase.com/document/viewdoc/?id=1586 2.网络------转载& ...
- linux svn 启动命令行,Linux下启动、关闭SVN服务
Linux下启动/关闭Oracle 一.Linux下启动Oracle Linux下启动Oracle分为两步: 1)启动监听: 2)启动数据库实例: 1.登录服务器,切换到oracle用户,或者以ora ...
- linux命令之man及ubuntu下man
Linux man命令的使用方法(整理收集自网络) Linux提供了丰富的帮助手册,使用Linux man命令来查看一些不熟悉的命令的使用方法,还可以用来查询系统库文件中的一些函数定义和使用方法. L ...
- linux下杀死全部进程,linux下批量杀死进程
ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15 管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符 ...
最新文章
- 如何实现点击微信内置浏览器返回按钮,返回指定页面,或者原地刷新
- Jenkins 流水线 获取git 分支列表_某小型公司持续集成工具 jenkins 实践
- 雷军玩谐音梗:称米粉为“小粽子” 因为粽子“心中有MI”
- rstp 转hls_海康大华RTSP转HLS直播
- rom lg g2 f320d android 4.4.2,LG G2(F320K/S/L/D8001/D802)官方KDZ刷机教程
- 群晖transmission 下载失败 权限设置 permission denied
- Jmeter+badboy
- 日志易使用系列四:日志采集 Agent 的配置
- 【Axure原型分享】评论元件
- 2000元台式电脑组装配置单2021 2000元组装电脑配置清单
- IDEA Unable to import maven project: See logs for details具体解决方法
- 阿里小蜜商家版投入测试 为商家服务扩容
- 史上最超级KB的10个故事~你撑到第几个才发抖
- algorithm——并查集
- UEFI 中的Gmac网卡驱动实现
- 袁国宝:左晖走了,留下什么?
- 用python打印购物小票和证书
- java主从服务器的配置
- nifi apache_Apache Nifi的工作原理-浏览数据流,不要淹没其中
- 北大光华本科女强人的超长综合面经
热门文章
- 专杀工具源码 V1.5
- java毕业生设计高校教材征订管理系统计算机源码+系统+mysql+调试部署+lw
- PVCBOT【21号】挑战者--人形机甲战士
- 【蓝桥杯选拔赛真题29】python堆砖块 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
- Zebra源码分析-SingleDataSource
- react中label标签关联的用法
- 为Jupyter Notebook添加Kernel(Win10+Ubuntu18.04)
- 大学计算机VBScript试题,一步一步学VBScript(5)之WSH对象四
- 苹果笔记本没有计算机管理员,苹果电脑忘记管理员密码怎么办_mac电脑忘记管理员密码的处理办法...
- Linux Maven 安装教程