通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 my小屋
联系我们
设为首页
加入收藏

 

qq,asp,php,jsp,xml,sql,.net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>应用软件>>系统工具>>正文 新版上线![旧版]
注:打开慢时请稍等

原创:一个c++写的发牌程序

http://www.iyit.net  日期:2006-5-29 10:22:42  来源:csdn   点击:
参加讨论】可以显示一,二,三,四家的牌

主要是为了训练我的牌感(记牌的能力),对有志于赌博或者桥牌事业的同志可能还有点用

编译为bd.exe,使用方法输入"bd -h"看帮助

以下是源代码(处理命令行参数的代码参考了vim):



#include
#include
#include
#include
using namespace std;

#include
#include
#include

static char program_name[]="bd";
#define the_version "0.1"

namespace info{
enum { west=0,north=1,east=2,south=3,};
};
static char* deno[]={"spade","heart","diamond","cotton",};
static char card_symbol[]="23456789tjqka";

// p - pointer to argument
// idx - index in argument
// default value
static int
get_number_arg(char* p,int def)
{
if (isdigit(*p))
{
def = atoi(p);
}
return def;
}

static void
print_help()
{
cout<<"usage: "< cout<<"bridge dealer"< cout<<"example: "< cout< cout<<" -p number of players, value ranges from 1 to 4"< cout<<" \""< cout<<" -v,--version print version information and exit"< cout<<" -h,--help display this help and exit"< cout< exit(0);
}

static void
print_version()
{
cout<#define bs_unknown_option 0
"too many arguments",
#define bs_too_many_args 1
"argument missing after",
#define bs_arg_missing 2
"garbage after option",
#define bs_garbage 3
"too many extra commands",
#define bs_extra_cmd 4
"invalid argument for",
#define bs_invalid_arg 5
};
//error message routines---------------end

int
main(int argc, char** argv)
{
int argv_idx = 1; /* active option letter is argv[0][argv_idx] */
int players=1;
int number_of_deals=1;
bool want_argument=false;

while(argc>0)
{
if(argv[0][0]=='-')
{
char c=argv[0][argv_idx++];
switch(c)
{
case 0:
//do nothing
argv_idx=-1;
break;
case '-': // "--" don't take any more options
if(strcmp(argv[0]+argv_idx,"version")==0){
print_version();
}
else if(strcmp(argv[0]+argv_idx,"help")==0){
print_help();
}
argv_idx=-1;
break;
case 'h':
print_help();
break;
case 'v':
print_version();
break;
case 'p': // 1,2,3,4 players, default 1
if (argv[0][argv_idx]){ // "-p{tag}"
players=get_number_arg(argv[0]+argv_idx,1);
argv_idx=-1;
}
else{ // "-p {tag}"
want_argument=true;
}
break;
case 'n': //number of deals, default 1
if (argv[0][argv_idx]){ // "-n{tag}"
number_of_deals=get_number_arg(argv[0]+argv_idx,1);
if(number_of_deals<=0) number_of_deals=1;
argv_idx=-1;
}
else{ // "-n {tag}"
want_argument=true;
}
break;
default:
break;
}


//handle options with argument
if(want_argument)
{
if (argv[0][argv_idx]){
cerr< exit(1);
}

--argc;
if (argc<1){
cerr< exit(1);
}
++argv;
argv_idx = -1;

switch(c)
{
case 'p':
players=get_number_arg(argv[0],1);
argv_idx=-1;
break;
case 'n':
number_of_deals=get_number_arg(argv[0],1);
if(number_of_deals<=0) number_of_deals=1;
argv_idx=-1;
break;
default:
; //impossible
}
}

}
else{
argv_idx=-1;//do nothing
}
// if there are no more letters after the current "-", go to next
// argument. argv_idx is set to -1 when the current argument is to be
// skipped.
if (argv_idx <= 0    argv[0][argv_idx] == 0)
{
--argc;
++argv;
argv_idx = 1;
}
}
//init
srand(time(0));

//original card
//value: spade, 0-12; heart, 13-25; diamond 26-38; cotton 39-51;
//array index: west, 0-12; north, 13-25; east 26-38; south 39-51;
const int dim=52;
int cards[dim];

for(int i=0;i {
cards[i]=i;
}
vector h(dim);
h.assign(cards,cards+dim);

//redeal
bool need_id=number_of_deals>1;
for(int k=0;k {
random_shuffle(h.begin(),h.end());
sort(h.begin()+info::west*13,h.begin()+info::west*13+13);
sort(h.begin()+info::north*13,h.begin()+info::north*13+13);
sort(h.begin()+info::east*13,h.begin()+info::east*13+13);
sort(h.begin()+info::south*13,h.begin()+info::south*13+13);

//dump
if(need_id){
cout<<"id: "< }
switch(players)
{
case 1:
dump_one_hand(h.begin()+info::south*13);
break;
case 2:
dump_two_hands(h.begin()+info::east*13,h.begin()+info::west*13,26);
break;
case 3:
dump_one_hand(h.begin()+info::north*13,26);
dump_one_hand(h.begin()+info::east*13);
dump_one_hand(h.begin()+info::south*13,26);
break;
case 4:
dump_one_hand(h.begin()+info::north*13,26);
dump_two_hands(h.begin()+info::east*13,h.begin()+info::west*13,26);
dump_one_hand(h.begin()+info::south*13,26);
break;
default:
;//impossible
}
cout< }
return 0;
}

编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:最后防线 winxp八种安全模式揭密
下一篇:没有了
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
最新更新 热点排行 推荐新闻
原创:一个c++写的发牌程序
最后防线 winxp八种安全模式揭密
用注册表对系统进行全方位维护和管理
总结:内存卡故障解决小秘技
windows组策略为共享目录安全保驾护航
原创:一个c++写的发牌程序
最后防线 winxp八种安全模式揭密
用注册表对系统进行全方位维护和管理
总结:内存卡故障解决小秘技
windows组策略为共享目录安全保驾护航
红黑过招 winrar破解“磁盘加密王”
windows常见文件修复技巧
vb游戏攻略
c/c++语言void及void指针深层探索
传统计算机病毒传播能力破坏性在提高
用事件查看器解决系统问题
windows管理工具开3389好简单
批处理文件大全
dos入门
windows六天通 阶段教学(第一天)
优秀公益广告作品欣赏(8)
java数据类型转换
windows xp专业版iis连接数的更改
新开放qq免费挂级网站
优秀公益广告作品欣赏(7)
免费在qq上看在线电影电视听音乐
qq最新版下载 2006 beta2 体验新感受 
office2007简体中文版浮出水面 美图抢
qq珊瑚虫外挂4.0版本发布!
免费把qq炫铃设为本机qq的系统提示音
传统计算机病毒传播能力破坏性在提高
内存为何有“两面性”
amd水货盒装cpu识别方法
ip地址资源2012年枯竭 部署ipv6很紧迫
古老问题有新解:世上先有鸡蛋后有鸡
dreamweaver mx 2004从零开始(1)
利用css改善网站可访问性
如何让mm的脸通透可人
msn8.0下载
asp 五大高效提速技巧
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights © 2004-2006 iyit.net all rights reserved.
网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息