纸牌游戏新版小猫钓鱼设计制作

news2025/1/15 12:51:51

新版纸牌游戏《小猫钓鱼》设计制作

此游戏设计是我新创制的简单的卡牌游戏。属于儿童益智类游戏,适用于儿童的认知教育。
游戏规则很简单:找配对的牌消去。
游戏设置2个玩家对玩,鱼池置牌21张,玩家每人5张牌,二人轮转钓鱼,每次换牌5张,直到钓满21条鱼。一局连一局,相互竞争,为提高兴趣有小红花助力点赞高分赢家。
基本操作由玩家手控,通过人机互动,达到培养儿童目的。
这设置主要培养儿童的心理素质,在少儿心理的成长和发展阶段,逐步完善心理的感知和认知,意识和思维,注意力和记忆。多玩游戏,在游戏中学习,对儿童少儿心理发展有所裨益。
程序采用扑克牌形式,纸牌标示牌点和牌花色,另有动物图案,此设置能吸引儿童,提高游戏兴趣,达到培养目的。
程序只设置了2例图案,可另行增加图案。
程序有游戏时间设置,有计分设置,此是游戏的考量。有点竞技的味道。

下面是纸牌游戏设计的通用部分:
shuffle_cards ( ){    //  洗牌设计       }
cardback ( ){    //发牌时隐藏牌面显示牌背图案    }
transcards ( ){   //传入牌序号num转为牌点和牌花色,画出牌张     }
print_t ( ){   //打印标题提示等文字 
                     //**  参数:位置 sx ,  sy,字串 t$,文字尺寸 tsize }

我多年程序设计的方法就是崇尚简捷简洁,用最简单的语言写图形界面,设计最简单的算法达到程序要求。卡牌制作和文字显示可作为卡牌游戏程序的通用功能函数。程序设计提供了界面设计图案和文字显示方法,卡牌制作,洗牌设计和定位画出卡牌的方法。
程序设计的是手机界面,代码是用MySpringC编译器在安卓手机上编写的,简单的语言表述,设计思路适用于初学者。可制作成安卓手机桌面app应用程序。程序提供了一个框架,VB ,  VS 或 JAVA  改写可作为参考。
此样例可复制粘贴到编译器直接使用。

 

8e22ec568bed439aa4259c0aeeaa32fe.png

//以下是源码:

//***********************************************
//*    纸牌游戏《小猫钓鱼》  Version   1.1.0    
//*    制作:张纯叔   ( micelu@126.com )        
//***********************************************
Canvas cs ;       //画布
string sBarDes[10];
int nBarId[10];
float src[4];  //ClearDraw (cls) clear screen
string s,ss,ss1,ss2,ss3 ;     //print ,  test
string s1,s2,s3,s4,s5,s6,s7,s8,s9 ;  //print text
int sx,sy,dx,dy,px,py;      //draw
int i,j,n,t,k;    //t = times
int num;      //select card number
int pn ;        //发牌序号数
int kn ;       //钓鱼计数
int p1,p2,c1,c2,px1,py1,px2,py2 ;  //找配对
 int pnum[108];    //洗牌后的牌序列(2付牌)
int cardnum,cardstyle;   //牌点牌花色
string cas1,cas2,cas4;   //牌点牌花色图案$
string cas3,cas5 ;            //牌背花色, 下注图案
double Rn;    //random number
string t$;     //提示文字
int tsize;      //textsize
int isdo ;    //控制操作:  1 可操作 , 0 不可操作
int context;    //canvasProc
int obj;
int id;
int event;      //canvasProc
int tim[3];   //get Time & show finished time
 int thh,tmm,tss;
 int oldhh,oldmm,oldss;
 int newhh,newmm,newss;
 int mms;               //show using time
 string hhts,mmts,ssts;
 string ts,ts1,ts2;    
int round ;
int score0,score1,total0,total1 ;   //show score
int mode ;      //设置卡牌花色
int wnum ;      //切换玩家 2-4
int nn,wn,sn,en ;    //北西南东牌序号
int spn[5];     //user south 牌序列
    //int epn[5];     //user east   牌序列
int npn[5];     //user north 牌序列
    //int wpn[5];    //user west  牌序列
int ypn[21];    //鱼池  牌序列
int yn ;
string sx$[15] ;     //卡牌花色

 

main(){
setDisplay(1);
  cs.SetBackground(0,120,0);
  cs.Active();
  cs.SetProc (context, mycanvasProc);
   sBarDes[0]="重新开始";
   nBarId[0]=100;
   sBarDes[1]="开   局 ";
   nBarId[1]=101;
   sBarDes[2]="换   牌 ";
   nBarId[2]=102;
   sBarDes[3]="切换玩家";
   nBarId[3]=103;
   sBarDes[4]="退出程序";
   nBarId[4]=104;
   sBarDes[5]="📱" ;
   nBarId[5]=105;
   setToolBarHeight(6);
   setButtonTextSize(13);
   setToolBarBackgroundColor(255,0,120,0);
   setButtonColor(255,0,0,240);
   setButtonTextColor(255,255,255,0);
   setToolBar(100,myToolBarProc,sBarDes,nBarId,6);
  setTitle("纸牌游戏-小猫钓鱼   ");
//**********
    cas3="🐡";       //预设牌背图案   //sx$牌面花色
    cas5="🐹";       //预设图案   
sx$[1]="🐭" ; sx$[2]="🐮" ; sx$[3]="🐯" ; sx$[4]="🐰" ;
sx$[5]="🐊" ; sx$[6]="🐍" ; sx$[7]="🦄" ; sx$[8]="🐑" ;
  sx$[9]="🐵" ; sx$[10]="🐓" ; sx$[11]="🐶" ;
sx$[12]="🐷" ; sx$[13]="🐼" ; sx$[14]="🐻" ;
      drawcover ();
      round=0 ;   kn=0 ;     //start round
      score0=0 ;  score1=0 ;
      total0=0 ;    total1=0 ;    
      isdo=0 ;
 while (){}
  }//main ()

drawcover (){     // 画启动界面封面版本号
     cs.SetColor (255,0,120,0);  //back color
     cs.DrawRect (0,0,720,1030);
     cs.SetColor (255,0,250,0);
     cs.DrawRect (50,320,650,326);
     cs.SetColor (255,250,0,0);
     cs.DrawRect (52,322,648,324);
    px=300;    py=90;   //3♠
        num=2 ;   
        transcards ();
    px=390;    py=90;   //3❤
        num=15;    
        transcards ();
    px=480;    py=120;   //9♣
        num=34;    
        transcards ();
     px=570;    py=120;   //9🔶
        num=47;   
        transcards ();
     t$=cas5 ;
     sx=450;   sy=350;    tsize=140;
     print_t ();
     t$="纸牌游戏" ;
     sx=100;   sy=160;   tsize=60;
     print_t ();
     t$="小猫钓鱼" ;
     sx=100;   sy=260;   tsize=80;
     print_t ();
     t$="欢迎加入纸牌游戏团" ;
     sx=135;   sy=440;   tsize=50;
     print_t1 ();
     cs.SetTextStyle (0);    //0正常,1粗体
     ss="Copyright  v.1.1.0   micelu@126.com ";
     cs.SetTextSize (22);
     cs.SetColor (255,250,250,250);
     cs.DrawText (ss,50,360);      
     cs.Update ();
     isdo=0 ;
}//drawcover ()

mycanvasProc (int context,int obj,int id,int event,float x,float y){
       if (isdo==0) return ;
//纸牌区域点击切换玩家
      cs.SetFillMode (1);//0不填色,1填色   
  if (x>155&&x<560&&y>38&&y<165&&wnum==0){  
       nn=(int)((x-158)/80) ;     //纸牌排列坐标
       num=npn[nn] ;
       if (num>53) num=num-54 ;   //二付牌
       p1=num ;
       c1=(num-num/13*13) ;
       if (num>51) c1=55 ;   //大小王
       px1=nn*80+158 ;    //调整画牌left,top
       py1=38 ;
                 }    //北家

 if (x>150&&x<570&&y>810&&y<950&&wnum==1){
       sn=(int)((x-158)/80) ;     //纸牌排列坐标
       num=spn[sn] ;
       if (num>53) num=num-54 ;   //二付牌
       p1=num ;
       c1=(num-num/13*13) ;
       if (num>51) c1=55 ;   //大小王
       px1=sn*80+158 ;    //调整画牌left,top
       py1=815 ;
                  }    //南家

   if (x>50&&x<680&&y>300&&y<690){  //鱼池区域
     dx=(int)((x-50)/90) ;     //纸牌排列坐标
     dy=(int)((y-300)/130) ;
         yn= dy*7+dx ;    //还原牌序号
         num=ypn[yn] ;
         if (num>53) num=num-54 ;   //二付牌
         p2=num ;
         c2=(num-num/13*13) ;
         if (num>51) c2=55 ;   //大小王
         px2=dx*90+50 ;    //调整画牌left,top
         py2=dy*130+300;
                  }     //鱼池

      catchit () ;   //找配对
 }//mycanvasProc ()

catchit (){
   //**** get pair and cut off
   if (c1==c2){
          if (wnum==0){  
              npn[nn]=-2 ;    //防误
              score0=score0+10 ;   
              total0=total0+10 ;  
              px=600 ;   py=50 ;         }
          if (wnum==1){ 
              spn[sn]=-3 ;    //防误
              score1=score1+10 ;   
              total1=total1+10 ;    
              px=600 ;    py=830 ;       }
         cardback () ;     //已钓鱼显示牌背图
             kn=kn+1 ;      //钓鱼计数
     cs.SetColor (255,0,120,0);  //擦除,消牌计分
     cs.DrawRect (px1,py1,px1+81,py1+130);
     cs.DrawRect (px2,py2,px2+81,py2+126);
     cs.Update () ;      
           ypn[yn]=-1 ;       //防误
           c1=-4 ;   c2=-6 ;   p1=-5 ;  p2=-7 ;    //防误
                       }

  if (p1>51&&p2>51){    //大小王对 p1 p2 =55
          if (wnum==0){  
              npn[nn]=-2 ;    //防误
              score0=score0+10 ;   
              total0=total0+10 ;   
              px=600 ;   py=50 ;         }
          if (wnum==1){ 
              spn[sn]=-3 ;    //防误
              score1=score1+10 ;   
              total1=total1+10 ;   
              px=600 ;    py=830 ;       }
         cardback () ;
         kn=kn+1 ;
     cs.SetColor (255,0,120,0);  //擦除,消牌计分
     cs.DrawRect (px1,py1,px1+81,py1+130);
     cs.DrawRect (px2,py2,px2+81,py2+126);
     cs.Update () ;      
           ypn[yn]=-1 ;       //防误
           c1=-4 ;    c2=-6 ;   p1=-5 ;  p2=-7 ;    //防误
                      }      
 
   for (k=0;k<21;k++){  //
        px2=(k-k/7*7)*90+50;
        py2=k/7*130+300;
        if (ypn[k]== -1){   //擦除鱼池已消牌
     cs.SetColor (255,0,120,0);  
     cs.DrawRect (px2,py2,px2+81,py2+126);
           cs.Update () ;    }
                    }

    cs.SetFillMode (1);//0不填色,1填色
//**** show test print 算法测试调试,可注释掉 
    cs.SetTextSize (22);
    cs.SetColor(255,0,130,0); 
    cs.DrawRect (0,960,718,1020);  // clear print
    cs.SetColor(255,0,250,0); 
       s2="用牌pn = "+intToString (pn) ;
               cs.DrawText (s2,5,980) ;
        s3="pnum= "+intToString (num) ;
              cs.DrawText (s3,240,980) ;

        s4="p2 = "+intToString (p2) ;
             cs.DrawText (s4,140,1010) ;
        s5="c2 = "+intToString (c2) ;
             cs.DrawText (s5,240,1010) ;
        s6="p1 = "+intToString (p1) ;
             cs.DrawText (s6,340,1010) ;
        s7="c1 = "+intToString (c1) ;
             cs.DrawText (s7,440,1010) ;
        s8="nn = "+intToString (nn) ;
             cs.DrawText (s8,540,980) ;
        s9="sn = "+intToString (sn) ;
             cs.DrawText (s9,540,1010) ;
        ss2="yu = "+intToString (yn) ;
             cs.DrawText (ss2,640,1010) ;
       ss1="已钓kn = "+intToString (kn) ;
             cs.DrawText (ss1,5,1010) ;
  //显示局数,得分
    cs.SetColor(255,0,120,0); 
    cs.DrawRect (0,35,155,250);  // clear print
    cs.DrawRect (0,730,155,930);  // clear print
        t$=ts ;    //show start time
        sx=15;   sy=25;   tsize=24;
            print_t ();   
        t$="第 "+intToString (round)+" 局" ;    
        sx=15;   sy=70;   tsize=32;
            print_t1 ();   
        t$="总分:"+intToString (total0) ;    //北家
        sx=15;   sy=115;   tsize=26;
            print_t ();   
        t$="得分:"+intToString (score0) ;    
        sx=15;   sy=160;   tsize=26;
            print_t ();   
        t$="总分:"+intToString (total1) ;    //南家
        sx=15;   sy=845;   tsize=26;
            print_t ();   
        t$="得分:"+intToString (score1) ;    
        sx=15;   sy=890;   tsize=26;
            print_t ();   
        cs.Update () ;

 //****  核验钓鱼是否完成
     if (kn==21) {    //已钓鱼21条
         t$="钓鱼完成  🐠" ;
         sx=140;   sy=390;   tsize=80;
         print_t ();   
         t$="钓鱼完成 >   下一局  >    开局" ;
         sx=140;   sy=600;   tsize=36;
         print_t ();   
   showtimes () ;   //finished & show times
         t$=ts1 ;
         sx=200;   sy=490;   tsize=40;
             print_t ();   
         t$=ts2 ;
         sx=200;   sy=530;   tsize=40;
             print_t ();   
        //print 最后得分
        t$="总分:"+intToString (total0) ;    
        sx=15;   sy=115;   tsize=26;
            print_t ();   
        t$="得分:"+intToString (score0) ;    
        sx=15;   sy=160;   tsize=26;
            print_t ();   
        t$="总分:"+intToString (total1) ;    
        sx=15;   sy=845;   tsize=26;
            print_t ();   
        t$="得分:"+intToString (score1) ;    
        sx=15;   sy=890;   tsize=26;
            print_t ();   
         isdo=0 ;    
                    }
        if (total0>total1){    //北家
             t$="🌷";  sx=15;   sy=230;   tsize=50;
            print_t ();       }
        if (total1>total0){    //南家
             t$="🌷";  sx=15;   sy=780;   tsize=50;
             print_t ();       }

}//catchit ()

ad993a790f3942d18c3b57ab222a86a5.png

71000f1e70e7454cabf290c46efcac18.png 

 

set_mode (){    //设置2种卡牌花色
       mode=mode+1 ;  
  if (mode>1) mode=0 ;
      cs.SetColor (255,0,120,0);   //backcolor
      cs.DrawRect (0,0,720,1030);
   shuffle_cards () ;
        t$="纸牌游戏 >>  选择卡牌花色,洗牌验牌,开始游戏" ;
        sx=20;   sy=40;   tsize=30;
        print_t ();
   for (k=0;k<108;k++){    //显示卡牌花色
        px=(k-k/9*9)*78+8;
        py=k/9*70+90;
        num=pnum[k] ;    // 显示已洗牌序列
        transcards () ;      
               }
  //**** renew and start ****
          nn=0 ;   npn[nn]=0 ;  
          sn=0 ;   spn[sn]=0 ;  
          yn=0 ;   ypn[yn]=0 ;  
      round=0 ;     //start round
      score0=0 ;  score1=0 ;
      total0=0 ;    total1=0 ;    
           isdo=0 ;
}//set_mode ()

6fee1f50ad0a4d53bd93bdbea788d81b.png

 

//纸牌序列:
//cardP num   0 to 12 黑桃 A234..JQK
//cardP num 13 to 25 红心 A234..JQK
//cardP num 26 to 38 梅花 A234..JQK
//cardP num 39 to 51 方块 A234..JQK
//52 大王  53 小王
// VB6,VS2007 编程:设picturebox: 
// cardP(54)图片数组
// 图片高宽为单张纸牌图大小
// 预制扑克牌序列图片底图,程序启动时按序将
// 每单张图片BitBlt..SRCCOPY到图片数组,
// cardP (i)就是整付牌的图片,洗牌发牌都要用到。
// 本程序简化用 num 序号表示54张牌
//********************
//如果鱼池21张牌同点数超过2张,
//一付牌就钓不完鱼,故宜用二付牌。
//二付牌一起洗牌也可能造成
//同点数牌超4张集中在鱼池起首21张,此情况较少,
//则可前后二付牌分开洗牌。

shuffle_cards (){    //洗牌设计
     cs.SetColor (255,0,120,0);   //backcolor
     cs.DrawRect (0,0,720,1030);
     cs.Update ();
      for (i=0;i<108;i++){ pnum[i]= -1  ;  }
      pn=0;  
//*** * 洗牌 **********************
  for (i=0;i<108;i++){    //洗牌, 54 ->108二付牌
      ResetPiece:        //已生成牌有相同则重新生成
      Rn=random()*108;  //随机洗牌, 54 一付牌
             num=(int )(Rn);
             pnum[i]=num ;
         for (k=0;k<i; k++){
         if (num==pnum[k]) goto ResetPiece ;        }
                    }

   for (k=0;k<108;k++){  //显示牌背面图案
        px=(k-k/9*9)*78+8;
        py=k/9*70+90;
    //cardback ();  //洗牌后可显示牌背或不显示
   num=pnum[k] ;
  //transcards ();  //用于洗牌查验测试,游戏时注释掉
          }
 }//shuffle_cards ()

start (){    //开始游戏,先发中间鱼池21张
      cs.SetColor (255,0,120,0);   //backcolor
      cs.DrawRect (0,0,720,1030);
      cs.SetColor (255,0,160,160);   //backcolor
      cs.DrawRect (30,290,690,700);
         t$="纸牌游戏 >>     开局" ;
          sx=50;   sy=250;   tsize=30;
          print_t ();
          cs.Update () ;
   for (k=0;k<21;k++){  //显示牌面图案
        pn=k ;    yn=k ;
        ypn[yn]=pnum[pn]; 
        num=pnum[pn] ;
        px=(k-k/7*7)*90+50;
        py=k/7*130+310;    
            sleep (200) ;
        transcards ();                }
   
     // pn=20 ; 已发21张牌
    for (k=0;k<5;k++){  //玩家各发5张牌
        pn=pn+1 ;  nn=k ;
        npn[nn]=pnum[pn];  
        num=npn[nn];  
        px=nn*80+160 ;   //set position
        py=50;   //北家  
        transcards ();     
             sleep (200) ;
        pn=pn+1 ;  sn=k ;
        spn[sn]=pnum[pn];  
        num=spn[sn];  
        px=sn*80+160 ;   //set position
        py=830;   //南家  
        transcards ();         } //玩家5圈牌

      cs.SetColor (255,0,120,0);   //clear print
      cs.DrawRect (2,210,310,260);
           round=round+1 ;
           score0=0 ;  score1=0 ;
           wnum=0 ;    kn=0 ;
           yn=-1 ;   
           c1=-4 ; c2=-6 ; p1=-5 ; p2=-7 ;  //防误
           isdo=1 ;
  getTime (tim);      //取得系统时间
       oldhh=tim[0];
       oldmm=tim[1];
       oldss=tim[2];
   hhts=intToString (tim[0]);
   mmts=intToString (tim[1]);
   ssts=intToString (tim[2]);
   if (oldhh<10)hhts="0"+hhts;
   if (oldmm<10)mmts="0"+mmts;
   if (oldss<10)ssts="0"+ssts;
       ss2=hhts+" : "+mmts+" : "+ssts;
   ts="开始 >  "+ss2;   //show start time
       change_id () ;      //玩家
       catchit () ;     //显示局数及其他
}//start ()

605f27dcdc0447ea93971a10fa3b4f70.png

26003d8183c3425484e001049dc95c24.png 

 

deal (){    //补牌换牌:游戏中换牌
       if (isdo==0) return ;
   if (wnum==0){    //北家换牌
    cs.SetColor(255,0,120,0); 
    cs.DrawRect (158,38,562,165);  
            cs.Update () ;
            sleep (200) ;
    for (k=0;k<5;k++){  //显示牌面图案
        pn=pn+1 ;  nn=k ;
        if (pn>107) { pn= 0 ;    }   //二付牌发完
        npn[nn]=pnum[pn];  
        num=npn[nn];  
        px=nn*80+160 ;   //set position
        py=50;   //北家  
           sleep (200) ;
        transcards ();     
                   }     }
   if (wnum==1){    //南家换牌
    cs.SetColor(255,0,120,0); 
    cs.DrawRect (158,810,562,960);  
            cs.Update () ;
            sleep (200) ;
    for (k=0;k<5;k++){  //显示牌面图案
        pn=pn+1 ;  sn=k ;
        if (pn>107) { pn= 0 ;      }   //二付牌发完
        spn[sn]=pnum[pn];  
        num=spn[sn];  
        px=sn*80+160 ;   //set position
        py=830;   //南家  
            sleep (200) ;
        transcards ();     
                   }     }
        catchit () ;    //显示调试信息
}//deal ()

fd83a5e658f6400491a0a68088fcc74e.png

 

transcards (){  //num 转换 cardnum, cardstyle
//牌序号转为牌点和牌花色,传入px,py 画出牌张
//此为游戏通用设置,启动界面画牌
       if (num==-1) return ;
       if (num>53) num=num-54 ;    //二付牌
    //**** draw cards 圆角 ****
      cs.SetTextStyle (0);    //0正常,1粗体
      cs.SetColor (255,250,160,0);  //框线
      cs.DrawRect (px+10,py-10,px+68,py+115);
      cs.DrawRect (px,py-1,px+79,py+104);
      cs.DrawCircle (px+10,py,9);
      cs.DrawCircle (px+10,py+105,9);
      cs.DrawCircle (px+69,py+105,9);
      cs.DrawCircle (px+69,py,9);
      cs.SetColor (255,250,250,250);  //牌面白色
      cs.DrawRect (px+13,py-8,px+65,py+113);
      cs.DrawRect (px+2,py,px+76,py+103);
      cs.DrawCircle (px+12,py+2,10);
      cs.DrawCircle (px+12,py+103,10);
      cs.DrawCircle (px+66,py+103,10);
      cs.DrawCircle (px+66,py+2,10);
     //******* 画出牌面
        cardnum=(num-num/13*13)+1;
        cardstyle=num/13;
        cas1=intToString(cardnum);
        if(cardnum==1) cas1="A";
        if(cardnum==11) cas1="J";
        if(cardnum==12) cas1="Q";
        if(cardnum==13) cas1="K";
        if (cardstyle==0) cas2="♠";
        if (cardstyle==1) cas2="❤";
        if (cardstyle==2) cas2="♣";
        if (cardstyle==3) cas2="🔶";
   if (num>51){ cas2="  " ;  cas1="  " ;  } //大小王
     if(cardstyle==0||cardstyle==2) {
            cs.SetColor (255,0,0,0);     }
     if(cardstyle==1||cardstyle==3) {
            cs.SetColor (255,250,0,0);      }
     cs.SetTextSize (30);
     n=0;
     if (cardnum==10) n=8;           
     cs.DrawText (cas1,px+14-n,py+20);
     cs.DrawText (cas2,px+5,py+50);        
          cs.SetTextSize (26);
     if (mode==0) cas4="🐠" ;      //牌面图案
     if (mode==1) cas4=sx$[cardnum] ;
        if (num==52){  //大王
     cs.SetColor(255,255,0,0) ;
     cs.DrawText ("Joker",px+5,py+30);    
        cas4="🐋" ;      }
        if (num==53){   //小王
     cs.SetColor(255,0,0,0) ;
     cs.DrawText ("Joker",px+5,py+30);      
         cas4="🐬" ;   }  
        cs.SetTextSize (48);      //牌面图
        cs.DrawText (cas4,px+14,py+95);
     cs.Update ();
}//transcards ()

cardback (){   //draw cards back picture
//发牌时隐藏牌面显示牌背图案
    if (num==-1) return ;
    //**** draw cards 圆角 ****
      cs.SetColor (255,250,160,0);  //框线
      cs.DrawRect (px+10,py-10,px+68,py+115);
      cs.DrawRect (px,py-1,px+79,py+104);
      cs.DrawCircle (px+10,py,9);
      cs.DrawCircle (px+10,py+105,9);
      cs.DrawCircle (px+69,py+105,9);
      cs.DrawCircle (px+69,py,9);
      cs.SetColor (255,0,180,200);  //牌背色
      cs.DrawRect (px+13,py-8,px+65,py+113);
      cs.DrawRect (px+2,py,px+76,py+103);
      cs.DrawCircle (px+12,py+2,10);
      cs.DrawCircle (px+12,py+103,10);
      cs.DrawCircle (px+66,py+103,10);
      cs.DrawCircle (px+66,py+2,10);
      cs.SetTextSize(50);
      cs.DrawText (cas3,px+8,py+70);  //show 背花
      cs.Update ();
}//cardback ()

change_id (){   //切换玩家 id
      cs.SetColor (255,0,160,0);   //clear 
           cs.DrawCircle (360,220,25);
           cs.DrawCircle (360,760,25);
      wnum=wnum+1 ;
      if (wnum>1) wnum=0 ;
      cs.SetTextSize (46);
      if (wnum==0)  cs.DrawText ("🔺",333,228);
      if (wnum==1)  cs.DrawText ("🔻",334,782);
    cs.Update ();
}//change_id ()

showtimes (){    //计算使用时间
      getTime (tim);
      newhh=tim[0];
      newmm=tim[1];
      newss=tim[2];
      hhts=intToString (tim[0]);
      mmts=intToString (tim[1]);
      ssts=intToString (tim[2]);
      if (newhh<10)hhts="0"+hhts;    //格式00:00:00
      if (newmm<10)mmts="0"+mmts;
      if (newss<10)ssts="0"+ssts;
 mms=((newhh-oldhh)*3600)+
        ((newmm-oldmm)*60)+((newss-oldss));    
    if (mms<0) mms=mms+864000;
        thh=mms/3600;
        tmm=(mms-thh*2600)/60;
        tss=mms-thh*3600-tmm*60;
 ss1=intToString (tmm)+" 分  "+intToString (tss)+" 秒";
 ss2=hhts+" : "+mmts+" : "+ssts;
      ts1= "完成 >  "+ss2;      //输出
      ts2= "用时 >   "+ss1;     //输出
 }//showtimes ()

print_t (){   //打印标题提示等文字
//**  参数 sx,sy, ss0=$, tsize=text size   
 cs.SetFillMode (1);//0不填色,1填色
    cs.SetTextStyle (0);    //0正常,1粗体
 cs.SetTextSize (tsize);
    cs.SetColor (255,0,200,60);
 cs.DrawText (t$,sx+2,sy+3);
    cs.SetColor (255,250,120,0);
 cs.DrawText (t$,sx,sy);
 cs.SetFillMode (0);//0不填色,1填色
    cs.SetColor (255,250,250,0);
 cs.DrawText (t$,sx,sy);
 cs.SetFillMode (1);//0不填色,1填色
      cs.Update ();
}//print _t ()

print_t1 (){   //打印标题提示等文字
//**  参数 sx,sy, ss0=$, tsize=text size   
  cs.SetFillMode (1);//0不填色,1填色
    cs.SetTextStyle (1);    //0正常,1粗体
  cs.SetTextSize (tsize);
    cs.SetColor (255,0,20,100);
 cs.DrawText (t$,sx+3,sy+4);
    cs.SetColor (255,0,250,0);
 cs.DrawText (t$,sx,sy);
 cs.SetFillMode (0);//0不填色,1填色
    cs.SetColor (255,250,0,0);
 cs.DrawText (t$,sx,sy);
 cs.SetFillMode (1);//0不填色,1填色
      cs.Update ();
}//print _t1 ()

myToolBarProc(int nBtn,int nContext){
      if(nBtn==100){  // 卡牌花色
           setDisplay (1);
           set_mode () ;
              }  
      if(nBtn==101){  // 开始摸鱼
           setDisplay (1);
           shuffle_cards () ;    //洗牌
           start () ;                    //开始
               }
      if(nBtn==102){  //换牌
            setDisplay (1);
            deal () ;
                }
      if(nBtn==103){//
           setDisplay (1);
            change_id () ;
                }
      if(nBtn==104){//退出程序
           clearOutput();
           cs.ClearDraw (0,src);
           setDisplay (0);
           exit (0);
               }
     if(nBtn==105){//@About
           setDisplay (1);
           drawcover ();
                   }
}//myToolBar ()


// 纸牌游戏《小猫钓鱼》V.1.1.0   设计制作
// 2022年11月15日完成于上海

 

//**** End ****

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

從turtle海龜動畫 學習 Python - 高中彈性課程系列 6.1 內嵌正多邊形 類似禪繞圖

Goal: 藉由有趣的「海龜動畫繪圖」學會基礎的 Python 程式設計 本篇介紹基礎的 Python 海龜動畫繪圖, 確實可以只以簡單的指令畫出極為複雜有趣或美麗的圖案: 內嵌正多邊形之圖案, 禪繞圖等 “Talk is cheap. Show me the code.” ― Linus Torvalds 老子第41章 上德若谷 大白…

Redis--1.CentOS8安装redis服务器

一、登录root账号 设置root密码&#xff1a; sudo passwd root切换到root账号&#xff1a; su root二、下载解压安装包 切换到根目录: cd / 1、创建存放路径: mkdir -p /usr/local/redis cd /usr/local/redis2、下载redis安装包&#xff1a;去官网找到redis连接地址如&…

基于jsp+mysql+ssm进销存管理系统-计算机毕业设计

本java进销存系统主要完成对超市的管理&#xff0c;包括会员管理、厂家管理、商品管理、退货管理&#xff0c;销售管理、进货管理、员工管理、系统管理等几个方面。系统可以完成对各类信息的浏览、查询、添加、删除、修改等功能。 系统采用了jsp的mvc框架,SSM(springMvcspringM…

告别手机自带浏览器,分享2022年好用的手机浏览器

对于喜欢使用手机上网冲浪的人来说&#xff0c;最喜欢用的一般都是小巧、强大、干净简洁的APP。作为上网常用的软件&#xff0c;好用的浏览器能够提高工作效率。而手机自带的浏览器往往占用资源大&#xff0c;而且广告很多&#xff0c;并夹带新闻、小说等无用功能&#xff0c;不…

自制操作系统日记(7):字符串显示

代码仓库地址&#xff1a;https://github.com/freedom-xiao007/operating-system 简介 上篇中我们在屏幕上画出了界面的大致轮廓&#xff0c;系统有了点模样&#xff0c;本篇继续跟着书籍&#xff0c;让程序中的字符串显示在屏幕上 效果展示 先放最终的效果&#xff0c;可以…

Linux磁盘分区,挂载介绍

分区的方式: mbr分区: 1.最多支持四个主分区 ⒉系统只能安装在主分区 3.扩展分区要占一个主分区 4.MBR最大只支持2TB&#xff0c;但拥有最好的兼容性 gtp分区: 1.支持无限多个主分区&#xff08;但操作系统可能限制&#xff0c;比如windows下最多128个分区) ⒉.最大支持18E…

仿大众点评——秒杀系统部分02

秒杀系统优化 接口限流和安全措施 令牌桶限流单用户访问频率限流抢购接口隐藏 接口限流&#xff1a; 在面临高并发的请购请求时&#xff0c;我们如果不对接口进行限流&#xff0c;可能会对后台系统造成极大的压力。尤其是对于下单的接口&#xff0c;过多的请求打到数据库会对…

MVCC 底层实现原理

文章目录概述事务并发出现的问题脏读不可重复读幻读事务隔离级别MVCC 底层实现原理隐式字段undo 日志Read View总结概述 MVCC(Multi-Version Concurrency Control) &#xff0c;叫做基于多版本的并发控制协议。 MVCC 是乐观锁的一种实现方式&#xff0c;它在很多情况下&#…

多线程增量下载K线数据

准备一份股票列表的CSV文件&#xff0c;文件格式如下 codenameclosecmvdate_ipo300434金石亚药12.89427982959020150424300380安硕信息19.31241993416320140128688123聚辰股份132.821114087266620191223300586美联新材20.34790882138120170104300534陇神戎发12.96389465063120…

Arduino与Proteus仿真实例-密码输入、验证与更新仿真

密码输入、验证与更新仿真 本次实例将通过4X4矩阵键盘、LCD1602、EEPROM实现一个密码输入匹配、储存、更新。 1、仿真电路原理图 在仿真电路原理图中,4X4矩阵键盘通过PCF8574 IO扩展器驱动,请参考前面文章: Arduino与Proteus仿真实例-PCF8574驱动4x4矩阵键盘仿真Arduino与…

大数据:Flume安装部署和配置

文章目录Flume 简介一&#xff0c;Flume下载和安装1&#xff09;登录[Flume官网](https://flume.apache.org/)&#xff0c;下载 apache-flume-1.9.0-bin.tar.gz2&#xff09;解压文件到 /opt 目录下3&#xff09;改名为 flume二&#xff0c;Flume配置1&#xff09;修改 /conf/ …

.Net开发——EFCore

1 EFCore是一个ORM框架 EFCore(EntityFramworkCore)是对底层ADO.NET重新封装的一个数据操作框架&#xff0c;因此ADO.NET支持的多种数据库都可以被EFCore支持。 EF Core 可用作对象关系映射程序 (O/RM)&#xff0c;这可以实现以下两点&#xff1a; 使 .NET 开发人员能够使用…

Python医学数据分析入门,推荐你学习这本书

医学生学习Python的难点通常在于 没有系统的编程教育&#xff0c;很难短时间内使用编程语言描述问题及其解答过程相关教程、案例少&#xff0c;想要练习缺少素材 所以这里就给大家推荐一本比较新比较前沿的教医学生学习Python的书《Python医学数据分析入门》 这本书的切入点为…

代码随想录——分割回文串 II

题目 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是回文。 返回符合要求的 最少分割次数 。 示例 1&#xff1a; 输入&#xff1a;s “aab” 输出&#xff1a;1 解释&#xff1a;只需一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子…

Oracle技术分享 创建外键报错ORA-00906

问题描述&#xff1a;给表创建外键报错ORA-00906&#xff0c;具体过程如下&#xff1a; 数据库&#xff1a;oracle 11.2.0.464位 scottORCL2022-10-18 19:10:40> selectindex_name,table_name,tablespace_name,status,last_analyzed from user_indexes; INDEX_NAME TABLE…

事务【mysql】

1、事务的概念 事务指逻辑上的一组操作&#xff0c;组成这组操作的各个单元&#xff0c;要么全部成功&#xff0c;要么全部失败。 在不同的环境中&#xff0c;都可以有事务。对应在数据库中&#xff0c;就是数据库事务。 把多个操作打包成一个整体&#xff0c;要么全部都执行完…

【#HDC2022】HarmonyOS体验官活动正式开启,赶快投稿赢限量奖品吧!

1. 【活动简介】 HDC 2022 于11月4日线上线下正式开启。历时一年&#xff0c;在无数开发者的共同努力下&#xff0c;我们汇聚了HarmonyOS生态的新成果、新体验、新开放能力&#xff0c;邀你参与到HarmonyOS的每一步成长和构建中。 本次HarmonyOS体验官活动&#xff0c;将以文章…

MySQL自连接和内连接和外连接_左外连接+右外连接

自连接&#xff1a;将一张表看作两张表 练习&#xff1a;查询员工id&#xff0c;员工姓名及其管理者的id和姓名select emp.employee_id,emp.last_name,mgr.employee_id,mgr.last_name from employees emp,employees mgr where emp.manager_id mgr.employee_id;内连接 只是把左…

多肽Caerulein (desulfated)、pGlu-QDYTGWMDF-NH2、20994-83-6

Caerulein, desulfated 是脱硫后的Caerulein。Caerulein 是一种十肽&#xff0c;与胃泌素和胆囊收缩素 (CCK) 具有相同的五个羧基末端氨基酸。 Caerulein, desulfated is the desulfurated form of Caerulein. Caerulein is a decapeptide having the same five carboxyl-termi…

DevOps Master课程总结:知否知否,应是DevOps肥ITIL瘦

1.ITIL定义及挑战 ITIL即IT基础架构库(Information Technology Infrastructure Library, ITIL&#xff0c;信息技术基础架构库)由英国政府部门CCTA(Central Computing and Telecommunications Agency)在20世纪80年代末制订&#xff0c;现由英国商务部OGC(Office of Government…