求救,程式修改!

Home Home
引用 | 編輯 williamleo
2005-12-06 21:30
樓主
推文 x0
請問哪位高手可以將下面本來是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(" (←)(→)改變選牌 (d)Double (SPCAE)改變換牌 (Enter)確定");
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(" (←)(→)改變選牌 (SPCAE)改變換牌 (Enter)確定");
    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..贏了 :) .. %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..贏了 :) .. %d",sty,bet*doub);
}
else
{
  pressanykey("輸了..:~~~");
  game_log(GOLDPOKER,"%s..輸了 :~ .. %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("%s",style[cpu-1]);
move(15,26); prints("%s",style[my-1]);
sprintf(sty,"我的牌%s..電腦的牌%s",
style[my-1],style[cpu-1]);
}

獻花 x0
引用 | 編輯 mnbmnb5266
2010-08-23 22:08
1樓
  
修改程式我還是力不從心,這個我想得需要會編程的專業人員才能辦到吧

獻花 x0