2023年10月5日 星期四

week04

 


WEEK04


1.利用processing寫出UNO牌組,先寫出牌組表格

void setup()

{

   size(400,400); 

}

int [][] card=new int[8][11];

void draw()

{

   background(255);

   for(int i=0;i<8;i++)

   {

      for(int j=0;j<11;j++)

      {

         rect(j*32,i*50,32,50); 

      }

   }

}



2.幫牌組表格上色,以紅黃綠藍為順序
color[]C={#FF5555,#FFAA00,#55AA55,#5555FF};


3.調整牌組表格外框,使其看上更圓潤
void drawCard(int x,int y,color c)
{
   stroke(128);
   fill(255);
   rect(x,y,32,50,7);
   noStroke();
   fill(c);
   rect(x+3,y+3,32-5,50-5,4);
}


4.幫牌組中心外加一個白框
   pushMatrix();
   fill(255);
   translate(x+16,y+25);
   rotate(radians(45));
   ellipse(0,0,20,30);
   popMatrix();



5.在牌組的左上及中間外加數字上去,並可以顯示0~9
   textAlign(CENTER,CENTER);
   textSize(9);
   text(""+n,x+7,y+6);
   textSize(20);
   fill(c);
   text(""+n,x+16,y+22);



6.為牌組增加一個會隨機換牌的機制
void setup()
{
   size(400,400); 
   myShuffle();
}
void myShuffle()
{
   for(int i=0;i<8;i++)
   {
      for(int j=0;j<11;j++)
      {
         cardN[i*11+j]=j;
         cardC[i*11+j]=C[i%4];
      }
   }
   int a = int(random(88)),b=int(random(88));
   int temp = cardN[a];
   cardN[a]=cardN[b];
   cardN[b]=temp;
   temp=cardC[a];
   cardC[a]=cardC[b];
   cardC[b]=temp;
}




7.利用for迴圈來設定牌組的洗牌次數為10000次,讓牌組排列分散更隨機




8.洗完牌後從中抽出一張隨機的牌到右邊並放大顯示



9.呈現一個可抽牌的牌組,滑鼠左鍵點擊會抽牌並放在右方堆疊,按右鍵則會呈現洗牌後的牌庫




完整程式碼:
void setup()
{
   size(850,850); 
   myShuffle();
}
void myShuffle()
{
   for(int i=0;i<8;i++)
   {
      for(int j=0;j<11;j++)
      {
         cardN[i*11+j]=j;
         cardC[i*11+j]=C[i%4];
      }
   }
   for(int i=0;i<10000;i++)
   {
     int a = int(random(88)),b=int(random(88));
     int temp = cardN[a];
     cardN[a]=cardN[b];
     cardN[b]=temp;
     temp=cardC[a];
     cardC[a]=cardC[b];
     cardC[b]=temp;
   }
}
//int [][] card=new int[8][11];
int [] cardN = new int[88];
int [] cardC = new int[88];
color[]C={#FF5555,#FFAA00,#55AA55,#5555FF};
void draw()
{
   background(255);
   if(mousePressed && mouseButton==RIGHT)
   {
     for(int i=0;i<8;i++)
     {
        for(int j=0;j<11;j++)
        {
           drawCard(j*32,i*50,cardC[i*11+j],cardN[i*11+j],32);
        }
     }
   }
   else drawCard(50,50,#000000,99,128);
   for(int i=0;i<myCard;i++)
   {
      if(i%4==0)drawCard(430+40*i/4,50,cardC[i],cardN[i],128) ;
      if(i%4==1)drawCard(630+40*i/4,350,cardC[i],cardN[i],128) ;
      if(i%4==2)drawCard(430+40*i/4,650,cardC[i],cardN[i],128) ;
      if(i%4==3)drawCard(230+40*i/4,350,cardC[i],cardN[i],128) ;
   }
}
int myCard=0;
void mousePressed()
{
  if(mouseButton==LEFT)myCard++; 
}
void drawCard(int x,int y,color c,int n,int w)
{
   float s=w/32.0;
   stroke(128);
   fill(255);
   rect(x,y,32*s,50*s,7*s);
   noStroke();
   fill(c);
   rect(x+2.5*s,y+2.5*s,32*s-5*s,50*s-5*s,4*s);
   
   pushMatrix();
   fill(255);
   translate(x+16*s,y+25*s);
   rotate(radians(45));
   ellipse(0,0,20*s,30*s);
   popMatrix();
   
   textAlign(CENTER,CENTER);
   textSize(9*s);
   text(""+n,x+7*s,y+6*s);
   textSize(20*s);
   fill(c);
   text(""+n,x+16*s,y+22*s);
}



















































































沒有留言:

張貼留言