📄 puke.c
字号:
#include <CsAgb.h>
#include <rbasic.h>
#include <Qgraph.h>
#include <rb_stdio.h>
#include <rb_string.h>
#define red RGB(30,0,0)
#define black 0
#define max_sets 50000
extern const unsigned char puke_32[];
extern const unsigned char puke_16[];
extern const unsigned char puke_24[];
extern const unsigned char puke_num[];
//extern void paint_en(u8 xp,u8 yp,u16 color,char ch);
extern u32 rnd(u32 seed);
extern u32 get_time();
extern u8 font_mask[];
extern void wait(u32 count);
extern void (*sys_deamon)();
//const char pokes[]="234567890JQKA";
struct puke_mes
{
u8 id;
u8 num;
};
struct puke_wei
{
u8 type;
u32 wei;
};
void paint_puke16(u8 xp,u8 yp,u8 id)
{
u16 color=id%2?black:red;
u8 index;
u8 i,j;
u8 dot,dot1;
switch (id)
{
case 1:
index=3;
break;
case 2:
index=2;
break;
case 3:
index=0;
break;
case 4:
index=1;
break;
}
for (i=0;i<16;i++)
{
dot=puke_16[index*32+i*2];
dot1=puke_16[index*32+i*2+1];
for (j=0;j<8;j++)
{
if (font_mask[j]&dot) *(mVRAM+240*(yp+i)+xp+j)=color;
if (font_mask[j]&dot1) *(mVRAM+240*(yp+i)+xp+j+8)=color;
}
}
}
void paint_pukenum(u8 xp,u8 yp,u8 id,u8 num,u8 mod)
{
u16 color=mod?(id%2?black:red):RGB(21,20,21);
u8 index=num;
u8 i,j;
u8 dot,dot1;
for (i=0;i<16;i++)
{
dot=puke_num[index*32+i*2];
dot1=puke_num[index*32+i*2+1];
for (j=0;j<8;j++)
{
if (font_mask[j]&dot) *(mVRAM+240*(yp+i)+xp+j)=color;
if (font_mask[j]&dot1) *(mVRAM+240*(yp+i)+xp+j+8)=color;
}
}
}
void paint_puke32(u8 xp,u8 yp,u8 id)
{
u16 color=id%2?black:red;
u8 index;
u8 i,j;
u8 dot,dot1;
switch (id)
{
case 1:
index=3;
break;
case 2:
index=2;
break;
case 3:
index=0;
break;
case 4:
index=1;
break;
}
for (i=0;i<32;i++)
{
dot=puke_32[index*128+i*4];
dot1=puke_32[index*128+i*4+1];
for (j=0;j<8;j++)
{
if (font_mask[j]&dot) *(mVRAM+240*(yp+i)+xp+j)=color;
if (font_mask[j]&dot1) *(mVRAM+240*(yp+i)+xp+j+8)=color;
}
dot=puke_32[index*128+i*4+2];
dot1=puke_32[index*128+i*4+3];
for (j=0;j<8;j++)
{
if (font_mask[j]&dot) *(mVRAM+240*(yp+i)+xp+j+16)=color;
if (font_mask[j]&dot1) *(mVRAM+240*(yp+i)+xp+j+24)=color;
}
}
}
void paint_puke24(u8 xp,u8 yp,u8 id,u8 mod)
{
u16 color=mod?(id%2?black:red):RGB(21,20,21);
u8 index;
u8 i,j;
u8 dot,dot1,dot2;
switch (id)
{
case 1:
index=3;
break;
case 2:
index=2;
break;
case 3:
index=0;
break;
case 4:
index=1;
break;
}
for (i=0;i<24;i++)
{
dot=puke_24[index*72+i*3];
dot1=puke_24[index*72+i*3+1];
dot2=puke_24[index*72+i*3+2];
for (j=0;j<8;j++)
{
if (font_mask[j]&dot) *(mVRAM+240*(yp+i)+xp+j)=color;
if (font_mask[j]&dot1) *(mVRAM+240*(yp+i)+xp+j+8)=color;
if (font_mask[j]&dot2) *(mVRAM+240*(yp+i)+xp+j+16)=color;
}
}
}
void paint_puke(u8 xp,u8 yp,struct puke_mes poke,u8 mod)
{
r_box(xp,yp,xp+30,yp+40,RGB(0,15,5),0);
Q_box(xp+1,yp+1,xp+29,yp+39,RGB(30,30,30));
paint_puke24(xp+2,yp+15,poke.id,mod);
paint_pukenum(xp,yp,poke.id,poke.num,mod);
*(mVRAM+240*yp+xp)=RGB(30,30,30);
*(mVRAM+240*yp+xp+30)=RGB(30,30,30);
*(mVRAM+240*(yp+40)+xp)=RGB(30,30,30);
*(mVRAM+240*(yp+40)+xp+30)=RGB(30,30,30);
}
void paint_puke_b(u8 xp,u8 yp,u8 mod)
{
int i,j,bg;
for (i=0;i<8;i++)
{
bg=i%2;
for (j=0;j<6;j++)
{
bg=!bg;
Q_box(xp+j*5,yp+5*i,xp+j*5+5,yp+i*5+5,bg?(mod?RGB(0,15,5):RGB(21,20,21)):RGB(30,30,30));
}
}
r_box(xp,yp,xp+30,yp+40,RGB(0,15,5),0);
//Q_box(xp+1,yp+1,xp+29,yp+39,RGB(30,30,30));
*(mVRAM+240*yp+xp)=RGB(30,30,30);
*(mVRAM+240*yp+xp+30)=RGB(30,30,30);
*(mVRAM+240*(yp+40)+xp)=RGB(30,30,30);
*(mVRAM+240*(yp+40)+xp+30)=RGB(30,30,30);
}
void mov_puke(u8 xp,u8 yp,u8 step)
{
u8 i;
CS_BackupScreenMem(&gScreen,xp,yp,xp+30,yp+40,VSAVE,MODE_3);
for (i=0;i<step;i++)
{
//r_line(xp+32-i,yp,xp+32-i,yp+40,RGB(30,30,30),1);
CS_RestoreScreenMem(&gScreen,xp-i,yp,xp+30-i,yp+40,VSAVE,MODE_3);
}
Q_box(xp+32-i,yp,xp+30,yp+40,RGB(30,30,30));
}
struct puke_mes get_puke(u8 *puke_sta)
{
struct puke_mes gets;
u8 id,num;
id=rnd(4);
num=rnd(13);
while (puke_sta[num]&font_mask[id])
{
id=rnd(4);
num=rnd(13);
}
puke_sta[num]=puke_sta[num]|font_mask[id];//标志已出
gets.id=id;
gets.num=num;
return gets;
}
void puke_cash(u8 *poke_sta)
{
u8 i;
for (i=1;i<14;i++) poke_sta[i]=0;
}
void member_puke(struct puke_mes *his_puke,u8 id,u8 mod,u8 mod1)
{
u8 i;
u8 xp,yp;
yp=id>2?75:10;
if (id>2) xp=id>3?5:125;
else xp=id>1?125:5;
for (i=0;i<3;i++) if (mod) paint_puke(xp+i*35,yp,his_puke[i],mod1);
else paint_puke_b(xp+i*35,yp,mod1);
}
void show_mem_puke(struct puke_mes *his_puke,u8 id,u8 loc,u8 mod,u8 mod1)
{
u8 xp,yp;
yp=id>2?75:10;
if (id>2) xp=id>3?5:125;
else xp=id>1?125:5;
if (mod) paint_puke(xp+loc*35,yp,his_puke[loc],mod1);
else paint_puke_b(xp+loc*35,yp,mod1);
}
void new_pukes(struct puke_mes *mem_puke,u8 *puke_sta)
{
int i,j;
puke_cash(puke_sta);
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
{
mem_puke[j*3+i]=get_puke(puke_sta);
wait(999+rnd(31));
show_mem_puke(mem_puke+j*3,j+1,i,j==3?1:0,1);
}
}
}
void show_money(u32 money,u8 id)
{
u8 i;
char mes[12];
u8 xp,yp;
for (i=0;i<10;i++)
{
mes[9-i]=money%10+48;
money=money/10;
}
mes[10]='\0';
yp=id>2?58+65:58;
if (id==1||id==4) xp=5;
else xp=5+120;
Q_box(xp+30,yp,xp+100,yp+10,RGB(30,30,30));
cwrite(xp+30,yp,RGB(0,15,5),mes);
}
void show_money_sets(u32 money)
{
u8 i;
char mes[12];
for (i=0;i<10;i++)
{
mes[9-i]=money%10+48;
money=money/10;
}
mes[10]='\0';
Q_box(125,140,235,159,RGB(30,30,30));
cwrite(125,140,RGB(0,15,5),"賭注:");
cwrite(125+30,140,RGB(0,15,5),mes);
}
u32 get_puke_wei(struct puke_mes *pukes)
{
int i;
u32 wei=0;
u32 other=0;
for (i=2;i>=0;i--)
{
wei=wei*50+pukes[i].num;
other=other*5+(4-pukes[i].id);
}
return wei*50+other;
}
struct puke_wei get_puke_type(struct puke_mes *pukes)
{
struct puke_wei re;
struct puke_mes temp;
u8 type;
u8 i;
if (pukes[0].num>pukes[1].num) {temp=pukes[0];pukes[0]=pukes[1];pukes[1]=temp;}
if (pukes[1].num>pukes[2].num) {temp=pukes[1];pukes[1]=pukes[2];pukes[2]=temp;}
if (pukes[0].num>pukes[1].num) {temp=pukes[0];pukes[0]=pukes[1];pukes[1]=temp;}
if (pukes[0].num==pukes[1].num && pukes[0].id<pukes[1].id)
{
temp=pukes[0];pukes[0]=pukes[1];pukes[1]=temp;
}
if (pukes[1].num==pukes[2].num && pukes[1].id<pukes[2].id)
{
temp=pukes[1];pukes[1]=pukes[2];pukes[2]=temp;
}
if (pukes[0].num==pukes[1].num && pukes[0].id<pukes[1].id)
{
temp=pukes[0];pukes[0]=pukes[1];pukes[1]=temp;
}
if (pukes[0].num==pukes[1].num && pukes[2].num==pukes[1].num) type=5;//三条
else if(pukes[1].num==pukes[2].num) type=1;//对
else if (pukes[1].num==pukes[0].num)
{
type=1;
temp=pukes[2];
pukes[2]=pukes[0];
pukes[0]=temp;
if (pukes[1].id<pukes[2].id)
{
temp=pukes[1];pukes[1]=pukes[2];pukes[2]=temp;
}
}
else if(pukes[0].num+1==pukes[1].num && pukes[1].num+1==pukes[2].num)
{
if (pukes[0].id==pukes[1].id && pukes[1].id==pukes[2].id) type=4;
else type=2;
}
else if (pukes[0].id==pukes[1].id && pukes[1].id==pukes[2].id) type=3;
else type=0;
re.type=type;
re.wei=get_puke_wei(pukes);
return re;
}
u8 puke_cmp(struct puke_wei pukes1,struct puke_wei pukes2)
{
if (pukes1.type>pukes2.type) return 1;
if (pukes1.type<pukes2.type) return 0;
return pukes1.wei>pukes2.wei;
}
void puke_show_mes(char *mes)
{
CS_BackupScreenMem(&gScreen,20,40,220,60,VSAVE,MODE_3);
Q_box(20,40,220,60,0);
Q_box(20,40,219,59,RGB(30,30,30));
r_box(21,41,218,58,RGB(0,15,5),0);
cwrite(23,45,RGB(0,15,5),mes);
while (1)
{
CS_ReadKey();
if (CS_IsKeyDown(KEY_B)||CS_IsKeyDown(KEY_DOWN)||CS_IsKeyDown(KEY_RIGHT)) break;
}
CS_RestoreScreenMem(&gScreen,20,40,220,60,VSAVE,MODE_3);
}
u16 puke_play(struct puke_wei wei,u8 who,u16 max,u8 step,u8 *man_sta)
{
u8 i;
u8 mans=0;
u8 next=9;
for (i=0;i<4;i++)
{
if (man_sta[i] && i!=who-1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -