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

📄 puke.c

📁 redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是BASIC高级语言解释执行器。几经修改和扩展
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -