⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c++ writes sends the sign procedure.txt

📁 可以显示一、二、三、四家的牌
💻 TXT
字号:
  一个c++写的发牌程序 
日期:2007年4月01日 
 【简 介】  可以显示一、二、三、四家的牌,主要是为了训练我的牌感(记牌的能力),对有志于赌博或者桥牌事业的同志可能还有点用,编译为bd.exe,使用方法输入"bd -h"看帮助。

   可以显示一、二、三、四家的牌,主要是为了训练我的牌感(记牌的能力),对有志于赌博或者桥牌事业的同志可能还有点用,编译为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: "<<<" [OPTION]..."<
cout<<"Bridge Dealer"<
cout<<"Example: "<<<" -p4"<
cout<
cout<<" -p number of players, value ranges from 1 to 4"<
cout<<" \""<<<"\" with NO option equals \""<<<" -p1\" "<
cout<<" -n number of deals, default \"1\""<
cout<<" -v,--version print version information and exit"<
cout<<" -h,--help display this help and exit"<
cout<
exit(0); 
} 

static void 
print_version() 
{ 
cout<<<" version "<<
exit(0); 
} 

static void 
dump_one_hand(vector::iterator ori,int sps=0) 
{ 
vector::iterator iter=ori; 
for(int i=0;i
{ 
for(int j=0;j<<" "; 
cout<<<": "; 
for(;(iter!=ori+13) && (*iter)/13==i;iter++) 
{ 
cout<<<" "; 
} 
cout<
} 
} 


static void 
dump_two_hands(vector::iterator o1, vector::iterator o2,int sps=0) 
{ 
vector::iterator iter1=o1; 
vector::iterator iter2=o2; 
int j; 
int cnt; 
for(int i=0;i
{ 
cout<<<": "; 
cnt=2; 
for(;(iter1!=o1+13) && (*iter1)/13==i;iter1++) 
{ 
cout<<<" "; 
cnt=cnt+2; 
} 

for(j=0;j<<" "; 
cout<<<": "; 
for(;(iter2!=o2+13) && (*iter2)/13==i;iter2++) 
{ 
cout<<<" "; 
} 
cout<
} 
} 
//error message routines---------------begin 
static char* bs_errors[]= 
{ 
"Unknown option", 
#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; 
}


 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -