2023年10月5日 星期四

Week04 UNO

 week04

step04-1 製作uno卡牌的模型



void setup()
{
  size(400,400);//製作uno卡片
}
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*30, i*50, 32, 50);
      
    }
  }
}

Step04-2  將uno牌上色 



void setup()
{
  size(400,400);//製作uno卡片
}
int [][] card = new int [8][11];
color [] C = {#FF5555, #FFAA00, #55AA55, #5555FF};//UNO卡牌的顏色
void draw()
{
  background(255);
  for ( int i=0;i<8;i++ )
  {
    for( int j=0;j<11;j++ )
    {
      fill(C[i%4]);
      // 牌的寬 高
      rect(j*32, i*50, 32, 50);
      
    }
  }
}


step04-3 把卡片再加上圓弧的邊框 和外圍的白色邊邊



void setup()
{
  size(400,400);//製作uno卡片
}
int [][] card = new int [8][11];
color [] C = {#FF5555, #FFAA00, #55AA55, #5555FF};//UNO卡牌的顏色
void draw()
{
  background(255);
  for ( int i=0;i<8;i++ )
  {
    for( int j=0;j<11;j++ )
    {// x 座標 y座標 顏色
      drawCard(j*32,i*50,C[i%4]);//把下面兩行合起來
      //fill(C[i%4]);
      // 牌的寬 高
      //rect(j*32, i*50, 32, 50);
      
    }
  }
}
void drawCard( int x, int y, color c)
{
  stroke(128);//灰色的邊框
  fill(255);//白色的背景
  rect(x, y, 32, 50, 7);//圓弧的弧度(7)
  noStroke();
  fill(c);
  rect(x+3, y+3 , 32-5, 50-5, 2);
}

step04-4  把uno排中間的橢圓做出來



void setup()
{
  size(400,400);//製作uno卡片
}
int [][] card = new int [8][11];
color [] C = {#FF5555, #FFAA00, #55AA55, #5555FF};//UNO卡牌的顏色
void draw()
{
  background(255);
  for ( int i=0;i<8;i++ )
  {
    for( int j=0;j<11;j++ )
    {// x 座標 y座標 顏色
      drawCard(j*32,i*50,C[i%4]);//把下面兩行合起來
      //fill(C[i%4]);
      // 牌的寬 高
      //rect(j*32, i*50, 32, 50);
      
    }
  }
}
void drawCard( int x, int y, color c)
{
  stroke(128);//灰色的邊框
  fill(255);//白色的背景
  rect(x, y, 32, 50, 7);//圓弧的弧度(7)
  noStroke();
  fill(c);
  rect(x+3, y+3 , 32-5, 50-5, 2);
  
  pushMatrix();//電腦圖學
  fill(255);//白色
  translate(x+16, y+25);
  rotate(radians(45));//橢圓旋轉45度
  ellipse(0, 0, 30, 40);//橢圓
  popMatrix();
}

step04-5 把uno中間和左上的數字印出來


void setup()
{
  size(400,400);//製作uno卡片
}
int [][] card = new int [8][11];
color [] C = {#FF5555, #FFAA00, #55AA55, #5555FF};//UNO卡牌的顏色
void draw()
{
  background(255);
  for ( int i=0;i<8;i++ )
  {
    for( int j=0;j<11;j++ )
    {// x 座標 y座標 顏色
      drawCard(j*32,i*50,C[i%4]);//把下面兩行合起來
      //fill(C[i%4]);
      // 牌的寬 高
      //rect(j*32, i*50, 32, 50);
      
    }
  }
}
void drawCard( int x, int y, color c)
{
  stroke(128);//灰色的邊框
  fill(255);//白色的背景
  rect(x, y, 32, 50, 7);//圓弧的弧度(7)
  noStroke();
  fill(c);
  rect(x+3, y+3 , 32-5, 50-5, 2);
  
  pushMatrix();//電腦圖學
  fill(255);//白色
  translate(x+16, y+25);
  rotate(radians(45));//橢圓旋轉45度
  ellipse(0, 0, 20, 30);//橢圓
  popMatrix();
  
  textSize(9);//字的大小
  textAlign(CENTER,CENTER);
  text("1", x+5, y+5);//字的y座標是以底部為基準
  
  textSize(20);//uno中間的數字
  fill(c);
  text("1", x+16, y+22);
  
  
  
}

step04-6 想做出卡片可以洗牌 先加入cardN 和 cardC 但不完全成功


int [] cardN = new int[88];//卡片的數字
int [] cardC = new int[88];//卡片的顏色

Step04-7 加入洗牌的函數 shuffle()


void setup()
{
  size(400,400);//製作uno卡片
  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];
    }
  }
}

step04-8 用大一學過的temp=a a=b b=temp 做洗牌


  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;

step04-9 加入迴圈讓全部的牌洗牌


  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;
  }

step04-10 先做將某一張牌變大 放大有邊



step04-11 當滑鼠按下去 右邊的牌會多一張(出牌) 左邊是黑色的牌 按右鍵可以看到很多小牌 放掉隱藏



  if( mousePressed && mouseButton==RIGHT )
  else drawCard(50, 50, #000000, 99, 128);
  for (int i=0;i<myCard;i++ )
  {// x座標
    drawCard(430+40*i,50, cardC[i], cardN[i], 128);
  }
}
int myCard = 0;
void mousePressed()
{
  if(mouseButton==LEFT) myCard++;
}




step04-12 做成四個人可以玩的發牌位置





void setup()
{
  size(850,850);//製作uno卡片
  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};//UNO卡牌的顏色
void draw()
{
  background(255);
  if( mousePressed && mouseButton==RIGHT )
  {
    for ( int i=0;i<8;i++ )
    {
      for( int j=0;j<11;j++ )
      {// x 座標 y座標 顏色
        //drawCard(j*32,i*50,C[i%4],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++ )
  {// x座標
    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);//圓弧的弧度(7)
  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));//橢圓旋轉45度
  ellipse(0, 0, 20*s, 30*s);//橢圓
  popMatrix();
  
  textSize(9*s);//字的大小
  textAlign(CENTER,CENTER);
  text(""+n, x+7*s, y+6*s);//字的y座標是以底部為基準
  
  textSize(20*s);//uno中間的數字
  fill(c);
  text(""+n, x+16*s, y+22*s);
  
  
  
}


















沒有留言:

張貼留言