williamleo
|
分享:
▼
x0
|
[Linux] 求救,程式修改!
請問哪位高手可以將下面本來是BBS下的小遊戲,改成UNIX或LINUX單機下可以跑,這是學校老師給的期末報告,因為太難了所以請求好心人士幫忙,感激不盡!
#include "bbs.h"
#undef GP_DEBUG
char card[52],mycard[5],cpucard[5],sty[100],now;
static int forq(a,b) char *a,*b; { char c=(*a)%13; char d=(*b)%13; if(!c) c=13; if(!d) d=13; if(c==1) c=14; if(d==1) d=14; if(c==d) return *a-*b; return c-d; }
int p_gp() { char genbuf[200],hold[5]; char ans[5]; int bet,i,j,k,tmp,x,xx,doub,t,tt;
srandom(time(0)); more("etc/game/gp.welcome",YEA);
while(-1) { clear(); setutmpmode(GOLDPOKER); showtitle("金撲克王", BoardName); ans[0]=0; bet=0; show_money(bet); do { getdata(21, 0,"要下注多少呢(上限1000)? 按 Enter 離開>", genbuf, 5, 1, 0); bet=atoi(genbuf); if(bet<0) bet=0; } while(bet>1000); if(!bet) return 0; if(bet>cuser.money) { pressanykey("你的現金不夠喔.. :)"); return 0; } move(21,0); clrtoeol(); prints("[33;1m (←)(→)改變選牌 (d)Double (SPCAE)改變換牌 (Enter)確定[m"); demoney(bet); show_money(bet); for(i=0;i<52;i++) card=i; /* 0~51 ..黑傑克是 1~52 */ for(i=0;i<1000;i++) { j=random()%52; k=random()%52; tmp=card[j]; card[j]=card[k]; card[k]=tmp; } now=doub=0; for(i=0;i<5;i++) { mycard=card[now++]; hold=1; } qsort(mycard,5,sizeof(char),forq);
for(i=0;i<5;i++) show_card(0,mycard,i); x=xx=tmp=0; while(tmp!=13) { for(i=0;i<5;i++) { move(16, i*4+2); outs(hold<0?"保":" "); move(17, i*4+2); outs(hold<0?"留":" "); } move(11,xx*4+2); outs(" "); move(11,x*4+2); outs("↓"); move(b_lines-1,0); refresh(); xx=x;
tmp=igetkey(); switch(tmp) { #ifdef GP_DEBUG case KEY_UP: getdata(21, 0,"把牌換成> ", genbuf, 3, 1, 0); mycard[x]=atoi(genbuf); qsort(mycard,5,sizeof(char),forq); for(i=0;i<5;i++) show_card(0,mycard,i); break; #endif case KEY_LEFT: case 'l': x=x?x-1:4; break; case KEY_RIGHT: case 'r': x=(x==4)?0:x+1; break; case ' ': hold[x]*=-1; break; case 'd': if(!doub&&cuser.money>=bet) { doub++; move(21,0); clrtoeol(); prints("[33;1m (←)(→)改變選牌 (SPCAE)改變換牌 (Enter)確定[m"); demoney(bet); bet*=2; show_money(bet); } break; } }
for(i=0;i<5;i++) if(hold==1) mycard=card[now++]; qsort(mycard,5,sizeof(char),forq); for(i=0;i<5;i++) show_card(0,mycard,i); move(11,x*4+2); outs(" "); cpu(); #ifdef GP_DEBUG for(x=0;x<5;x++) { getdata(21, 0,"把牌換成> ", genbuf, 3, 1, 0); cpucard[x]=atoi(genbuf); } qsort(cpucard,5,sizeof(char),forq); for(i=0;i<5;i++) show_card(1,cpucard,i); #endif i=win(); if(i<0) { inmoney(bet*2); pressanykey("哇!!好棒喔!!贏了 %d 元咧.. :DDD",bet); game_log(GOLDPOKER,"%s..贏了 :) .. [32;1m%d",sty,bet); } else if(i>1000) { switch(i) { case 1001: doub=15; break; case 1002: doub=10; break; case 1003: doub=5; break; } inmoney(bet*2*doub); pressanykey("哇!!好棒喔!!贏了 %d 元咧.. :DDD",bet*doub); game_log(GOLDPOKER,"%s..贏了 :) .. [32;1m%d",sty,bet*doub); } else { pressanykey("輸了..:~~~"); game_log(GOLDPOKER,"%s..輸了 :~ .. [31;1m%d",sty,bet); } show_money(0); } }
show_card(isDealer,c,x) int isDealer,c,x; { int beginL; char *suit[4] = {"C","D","H","S"}; char *num[13] = {"K","A","2","3","4","5","6", "7","8","9","10","J","Q"};
beginL=(isDealer)? 2: 12; move(beginL, x*4); outs("╭───╮"); move(beginL+1, x*4); prints("│%2s │", num[c%13]); move(beginL+2, x*4); prints("│%2s │", suit[c/13]); /* ←這裡跟黑傑克 */ #ifdef GP_DEBUG move(beginL+3, x*4); prints("│%2d │",c); /* 有點不同喔!! */ #else move(beginL+3, x*4); outs("│ │"); /* 有點不同喔!! */ #endif move(beginL+4, x*4); outs("│ │"); move(beginL+5, x*4); outs("│ │"); move(beginL+6, x*4); outs("╰───╯"); }
cpu() { char i,j,hold[5]; char p[13],q[5],r[4]; char a[5],b[5]; for(i=0;i<5;i++) { cpucard=card[now++]; hold=0; } qsort(cpucard,5,sizeof(char),forq); for(i=0;i<5;i++) show_card(1,cpucard,i);
tran(a,b,cpucard); check(p,q,r,cpucard); for(i=0;i<13;i++) if(p>1) for(j=0;j<5;j++) if(i==cpucard[j]%13) hold[j]=-1; for(i=0;i<5;i++) { if(a==13 || a==1) hold=-1; move(6, i*4+2); outs(hold<0?"保":" "); move(7, i*4+2); outs(hold<0?"留":" "); } pressanykey("電腦換牌前.."); for(i=0;i<5;i++) if(!hold) cpucard=card[now++]; qsort(cpucard,5,sizeof(char),forq); for(i=0;i<5;i++) show_card(1,cpucard,i); }
int win() { int i,j,k,my,cpu,ret; char myx,myy,cpux,cpuy; my=complex(mycard,&myx,&myy); cpu=complex(cpucard,&cpux,&cpuy); show_style(my,cpu);
if(my!=cpu) ret=my-cpu; else if (myx==1 && cpux!=1) ret=-1; else if (myx!=1 && cpux==1) ret=1; else if(myx!=cpux) ret=cpux-myx; else if (myy!=cpuy) ret=cpuy-myy; if(ret<0) switch(my) { case 1: ret=1001; break; case 2: ret=1002; break; case 3: ret=1003; break; } return ret; }
// 同花順、鐵枝、葫、同花、順、三條、兔胚、胚、一隻 int complex(cc,x,y) char *cc,*x,*y; { char p[13],q[5],r[4]; char a[5],b[5],c[5],d[5]; int i,j,k; tran(a,b,cc); check(p,q,r,cc);
memcpy(c,a,5); memcpy(d,b,5); for(i=0;i<4;i++) for(j=i;j<5;j++) if(c>c[j]) { k=c; c=c[j]; c[j]=k; k=d; d=d[j]; d[j]=k; } /* 同花順 */ if(10==c[1] && c[1]==c[2]-1 && c[2]==c[3]-1 && c[3]==c[4]-1 && c[0]==1) { for(i=0;i<4;i++) if(r==5) { *x=1; *y=d[0]; return 1;} *x=1; *y=d[0]; return 5; // 順子 }
if(c[0]==c[1]-1 && c[1]==c[2]-1 && c[2]==c[3]-1 && c[3]==c[4]-1) { for(i=0;i<4;i++) if(r==5) { *x=c[4]; *y=d[4]; return 1;} *x=c[4]; *y=d[4]; return 5; //順子 }
/* 四張 */ if(q[4]==1) { for(i=0;i<13;i++) if(p==4) *x=i?i:13; return 2; }
/* 葫蘆 */ if(q[3]==1&&q[2]==1) { for(i=0;i<13;i++) if(p==3) *x=i?i:13; return 3; }
/* 同花 */ for(i=0;i<4;i++) if(r==5) {*x=i; return 4;} /* 三條 */ if(q[3]==1) for(i=0;i<13;i++) if(p==3) { *x=i?i:13; return 6;}
/* 兔胚 */ if(q[2]==2) { for(*x=0,i=0;i<13;i++) if(p==2) { if((i>1?i:i+13)>(*x==1?14:*x)) { *x=i?i:13; *y=0; for(j=0;j<5;j++) if(a[j]==i&&b[j]>*y) *y=b[j]; } } return 7; }
/* 胚 */ if(q[2]==1) for(i=0;i<13;i++) if(p==2) { *x=i?i:13; *y=0; for(j=0;j<5;j++) if(a[j]==i&&b[j]>*y) *y=b[j]; return 8; }
/* 一張 */ *x=0; *y=0; for(i=0;i<5;i++) if((a=a?a:13>*x||a==1)&&*x!=1) { *x=a; *y=b;}
return 9; }
/* a 是點數 .. b 是花色 */ tran(a,b,c) char *a,*b,*c; { int i; for(i=0;i<5;i++) { a=c%13; if(!a) a=13; }
for(i=0;i<5;i++) b=c/13; }
check(p,q,r,cc) char *p,*q,*r,*cc; { char i; for(i=0;i<13;i++) p=0; for(i=0;i<5;i++) q=0; for(i=0;i<4;i++) r=0; for(i=0;i<5;i++) p[cc%13]++;
for(i=0;i<13;i++) q[p]++; for(i=0;i<5;i++) r[cc/13]++; }
// 同花順、鐵枝、葫、同花、順、三條、兔胚、胚、一隻 show_style(my,cpu) char my,cpu; { char *style[9]={"同花順","四張","葫蘆","同花","順子", "三條","兔胚","單胚","一張"}; move(5,26); prints("[41;37;1m%s[m",style[cpu-1]); move(15,26); prints("[41;37;1m%s[m",style[my-1]); sprintf(sty,"我的牌[44;1m%s[m..電腦的牌[44;1m%s[m", style[my-1],style[cpu-1]); }
|