当前位置:文档之家› 炸金花源码

炸金花源码

#include"stdio.h"

#include"stdlib.h"

#include"conio.h"

#include"dos.h"

#define KEY_P 0x1970

#define KEY_R 0x1372

#define KEY_Y 0x1579

#define KEY_ENTER 0x1c0d

#define KEY_ESC 0x11B

#define card_size 10 //牌体大小

int main()

{

void put_card(int color,int number,int card_x,int card_y);/*color:0背景牌3红

桃4方片5米花6黑桃,number:1到13,card_x,y:扑克左上角位置坐标*/ void put_player_info(int pc_pl,int score,int win,int info_x,int info_y);//pc_pl电脑_人,score分数,win0电脑赢,1人赢,xy画图位置

void game_again(int player_score[],int card_info[]);

int pc_pl_bet(int z[]);

void GAME_OVER();

void game_control(int player_bet_money[],int y[]);

void information();

void state();//声明函数

int card_color_number[12]={0,0,0,0,0,0,0,0,0,0,0,0};

int player_money[2]={1000,1000};

game_again(player_money,card_color_number);//初始化扑克,花色,钱game_control(player_money,card_color_number);

return 0;

}

void game_again(int player_score[],int card_info[])

{

int i;//i控制循环,对应按键扫描码

srand((unsigned)time(NULL));//随机数起点

for(i=0;i<12;i=i+2)

{

card_info[i]=rand()%4+3;//随机产生花色

card_info[i+1]=rand()%13+1;//随即产生数值

}

put_card(0,0,10,2);

put_card(0,0,19,2);

put_card(0,0,28,2);//打印背景牌

put_player_info(0,player_score[0],1,37,2);//打印小电脑

put_card(card_info[6],card_info[7],10,11);

put_card(card_info[8],card_info[9],19,11);

put_card(card_info[10],card_info[11],28,11);//利用函数调用,打印任意位置,任意大小,任意花色的扑克

put_player_info(1,player_score[1],1,37,11);//打印小孩

}

void state()

{

window(30,21,60,21);

textcolor(BLACK);

textbackground(WHITE);

clrscr();

}

void game_control(int player_bet_money[],int y[])

{

int ch,bet_money;

int win;

while(1)

{

information();

ch=bioskey(0);//得到按键

switch(ch)

{

case KEY_P:

{

state();

printf("Restart the game?(KEY P again)");

ch=bioskey(0);

if(ch==KEY_P)

{

player_bet_money[0]=1000;

player_bet_money[1]=1000;

game_again(player_bet_money,y);

}

else

{

delline();

gotoxy(1,1);

}

}

break;//按P键重新开始游戏

case KEY_R:

{

state();

printf("Fresh the cord?(KEY R again)");

ch=bioskey(0);

if(ch==KEY_R)game_again(player_bet_money,y);

else

{

delline();

gotoxy(1,1);

}

}

break;//按R键重新发牌

case KEY_ENTER:

state();

printf("Bet?(KEY ENTER again)");

ch=bioskey(0);

if(ch==KEY_ENTER)

{

state();

printf("How Much:");

scanf("%d",&bet_money);

win=pc_pl_bet(y);

if(win==0){player_bet_money[0]+=bet_money;player_bet_money[1]-=bet_m oney;}

else

if(win==1){player_bet_money[1]+=bet_money;player_bet_money[0]-=bet_money; }

else{state();printf("Dogfall");}

put_player_info(0,player_bet_money[0],win,37,2);//打印小电脑

put_player_info(1,player_bet_money[1],win,37,11);//打印小孩

getch();

game_again(player_bet_money,y);

if((player_bet_money[0]<=0)||(player_bet_money[1]<=0)||(player_bet_money[ 0]>=2000)||(player_bet_money[1]>=2000))

GAME_OVER(player_bet_money);

}

else

{

delline();

gotoxy(1,1);

}

}

break;//按ENTER键下注,并比出结果

case KEY_ESC://按两次ESC键退出游戏

{

state();

printf("End the game?(KEY ESC again)");

ch=bioskey(0);

if(ch==KEY_ESC)exit(0);

else

{

delline();

gotoxy(1,1);

}

}

}

}

}

int pc_pl_bet(int z[])

{

int pc_pl;

int i,j;

put_card(z[0],z[1],10,2);

put_card(z[2],z[3],19,2);

put_card(z[4],z[5],28,2);//打印电脑牌

for(i=1;i<6;i+=2)

for(j=1;j<6-i;j+=2)

{

if(z[j]

{

pc_pl=z[j];

z[j]=z[j+2];

z[j+2]=pc_pl;//排列电脑三张牌

if(z[j+6]

{

pc_pl=z[j+6];

z[j+6]=z[j+8];

z[j+8]=pc_pl;//排列玩家三张牌

}

}

if(z[0]==z[2]&&z[2]==z[4])z[0]=4;else z[0]=0;

if(z[6]==z[8]&&z[8]==z[10])z[6]=4;else z[6]=0;//同花顺,牌权放在z[0]、z[6]中

z[2]=z[1]-z[3];z[4]=z[3]-z[5];z[8]=z[7]-z[9];z[10]=z[9]-z[11];

if(z[2]==0&&z[4]==0)z[0]=16;if(z[8]==0&&z[10]==0)z[6]=16;

if(z[2]==1&&z[4]==1)z[0]+=8;if(z[8]==1&&z[10]==1)z[6]+=8;

if((z[2]&&z[4])==0)z[0]+=2;if((z[8]&&z[10])==0)z[6]+=2;

if((z[2]*z[4])>1)z[0]+=2;if((z[8]*z[10])>1)z[6]+=2;

if(z[0]>z[6])return 0;

else if(z[0]

else

{

if((z[0]==16)||(z[0]==12)||(z[0]==8))//比“炸”比“顺连”比“连”

if(z[1]>z[7])return 0;

else return 1;

}//当牌权相等时候,判断,待完~

if(z[0]==6)//比“顺对”

{

if(z[1]>z[7])return 0;

else return 1;

}

if(z[0]==2)//比“对”

{

if(z[1]>z[7])return 0;

else return 1;

}

if(z[0]==1)//比“单”

{

if(z[1]>z[7])return 0;

else if((z[1]==z[7])&&(z[3]>z[9]))return 0;

else if((z[1]==z[7])&&(z[3]==z[9])&&(z[3]>z[9]))return 0;

else if((z[1]==z[7])&&(z[3]==z[9])&&(z[3]==z[9]))return 3;

else return 1;

}

}

}

void put_player_info(int pc_pl,int score,int win,int info_x,int info_y)//pc_pl电脑_人,score钱,win0电脑赢,1人赢,xy画图位置

{

window(info_x,info_y,info_x+card_size-1,info_y+card_size-2);

textcolor(BLACK);

textbackground(WHITE);

clrscr();

if(pc_pl==0)

{

cprintf(" ______");

gotoxy(1,2);

cprintf(" | ____ |");

gotoxy(1,3);

if(win==0)

cprintf(" || $$ ||");

else

cprintf(" || ||");

gotoxy(1,4);

cprintf(" ||____||");

gotoxy(1,5);

cprintf(" | _____|");

gotoxy(3,5);

textcolor(RED);

putch('*');

textcolor(BLACK);

gotoxy(1,6);

cprintf(" / \"\"\"\" \\");

gotoxy(1,7);

cprintf("(________)");

gotoxy(1,8);

cprintf("Money:%d",score); }

else

{

gotoxy(1,2);

cprintf(" _");

gotoxy(1,3);

cprintf(" .' '.");

gotoxy(1,4);

if(win==1)

cprintf(" / $ $ \\");

else

cprintf(" / o o \\");

gotoxy(1,5);

cprintf("( (_ )");

gotoxy(1,6);

cprintf(" \\ _ /");

gotoxy(1,7);

cprintf(" `._.'");

gotoxy(1,9);

cprintf("Money:%d",score);

}

}

void GAME_OVER(int player_end_money[])

{

int ch;

int money[2]={1000,1000},y[12]={0,0,0,0,0,0,0,0,0,0,0,0};

window(1,1,80,25);

textcolor(RED);

textbackground(WHITE);

clrscr();

gotoxy(10,4);

printf("---------------------");

gotoxy(10,6);

printf("COM %d",player_end_money[0]);

gotoxy(10,8);

printf("---------------------");

gotoxy(10,10);

printf("YOU %d",player_end_money[1]);

gotoxy(10,12);

printf("---------------------");

gotoxy(16,16);

printf("Play Again?(ENTER)");

ch=bioskey(0);

if(ch==KEY_ENTER)

game_again(money,y);

else

{

printf("Thank You for palying!\nPress anykey to exit.");

getch();

}

}

void put_card(int color,int number,int card_x,int card_y)/*color:0背景牌3红桃4方片5米花6黑桃,number:1到13,card_x,y:扑克左上角位置坐标*/

{

int i,j;

textmode(C80);

window(card_x,card_y,card_x+card_size-1,card_y+card_size-2);//window(x1,y1, x2,y2)

textcolor(BLACK);

textbackground(WHITE);

clrscr();

/*下面程序段输出纸牌边框*/

gotoxy(1,1);

putch(0xda);/*定位并输出纸牌左上角图形字符*/

for(i=2;i

{

gotoxy(i,1);/*定位光标*/

putch(0xc4);/*输出横线字符*/

}

gotoxy(card_size-1,1);

putch(0xbf);/*定位并输出纸牌右上角图形字符*/

for(i=2;i

{

gotoxy(1,i);

putch(0xb3);/*输出左边框*/

gotoxy(card_size-1,i);

putch(0xb3);/*输出右边框*/

}

gotoxy(1,card_size-1);

putch(0xc0);/*定位并输出纸牌左下角图形字符*/

for(i=2;i

putch(0xc4);/*输出横线字符*/

}

gotoxy(card_size-1,card_size-1);

putch(0xd9);/*定位并输出纸牌右下角图形字符*/

if((color==3)||(color==4))textcolor(RED);

else if((color==5)||(color==6))textcolor(BLACK); else

{

for(i=2;i

for(j=2;j

{

textcolor(BLUE);

gotoxy(i,j);

putch(6);/*输出背景*/

}

}/*输出纸牌颜色,红桃方片为红色,黑桃米花为黑色,0时候打印背景牌*/ if((number<10)&&(number>1))/*输出纸牌number*/

{

gotoxy(2,2);

putch(number+48);/*输出左上角的文字*/

gotoxy(card_size-2,card_size-2);

putch(number+48);/*输出右下角的文字*/

}

else if(number==1)

{

gotoxy(2,2);

putch(65);

gotoxy(card_size-2,card_size-2);

putch(65);

}

else if(number==10)

{

gotoxy(2,2);

putch(49);

gotoxy(3,2);

putch(48);

gotoxy(card_size-3,card_size-2);

putch(49);

gotoxy(card_size-2,card_size-2);

putch(48);

}

else if(number==11)

{

gotoxy(2,2);

putch(74);

gotoxy(card_size-2,card_size-2);

putch(74);

}

else if(number==12)

{

gotoxy(2,2);

putch(81);

gotoxy(card_size-2,card_size-2);

putch(81);

}

else if(number==13)

{

gotoxy(2,2);

putch(75);

gotoxy(card_size-2,card_size-2);

putch(75);

}

//else printf(" Over number");

/*下面程序段输出color*/

if(color!=0)

{

gotoxy(2,3);

putch(color);

gotoxy((card_size+1)/2,(card_size+1)/2);

putch(color);

gotoxy(card_size-2,card_size-3);

putch(color);

}

}

void information()

{

window(50,2,60,19);

textcolor(BLACK);

textbackground(WHITE);

clrscr();

cprintf("Information");

cprintf("==========="); }

相关主题
文本预览
相关文档 最新文档