2023年11月30日 星期四

week12咻消失

 week12期末作業

原本想要做踩地雷或貪食蛇遊戲,但班上已經有人選了這些主題就放棄了,但想了很久但都想不到要做什麼遊戲,最後小葉老師說直覺想到的第一個最對了,而當時我腦中只浮現了接龍遊戲,就這樣決定了我的作業主題是接龍,希望自己做的出來。

畫牌
參考week04教UNO時的程式,先畫出放52張撲克牌的格子

void setup(){
  size(1500,900);
}
int [][] card = new int[4][13];
color [] C = {#000000,#FF0000,#000000,#FF0000};
void draw(){
  background(255);
  for(int i=0;i<4;i++){
    for(int j=0;j<13;j++){
      drawCard(j*83, i*109 , C[i%4]);
    }
  }
}
void drawCard(int x,int y,color c){
  stroke(128);//gray stroke
  fill(255);
  rect(x,y,83,109,10);
}

先簡單加上數字及分辨顏色
void setup(){
  size(1500,900);
}
int [][] card = new int[4][13];
color [] C = {#000000,#FF0000,#FF0000,#000000};
void draw(){
  background(255);
  for(int i=0;i<4;i++){
    for(int j=0;j<13;j++){
      drawCard(j*83, i*109 , C[i%4],j);
    }
  }
}
void drawCard(int x,int y,color c,int n){
  stroke(128);//gray stroke
  fill(255);
  rect(x,y,83,109,10);
  textSize(20);
  fill(c);
  text(n+1,x+10,y+20);
}

1、11、12、13換成A、J、Q、K
void setup(){
  size(1500,900);
}
int [][] card = new int[4][13];
color [] C = {#000000,#FF0000,#00FF00,#0000FF};//為方便觀看換成四種顏色
void draw(){
  background(255);
  for(int i=0;i<4;i++){
    for(int j=1;j<=13;j++){
      drawCard(j*83, i*109 , C[i%4],j);
    }
  }
}
void drawCard(int x,int y,color c,int n){
  stroke(128);//gray stroke
  fill(255);
  rect(x,y,83,109,10);
  textSize(20);
  fill(c);
  String rank = getRank(n);
  text(rank,x+8,y+20);
}
String getRank(int n){ 
  if(n == 1){ return "A";}
  else if(n == 11){return "J";}
  else if(n == 12){return "Q";}
  else if(n == 13){return "K";}
  else{return Integer.toString(n);
}
}

牌的右下角畫出上下顛倒的數字/字母
void setup(){
  size(1500,900);
}
int [][] card = new int[4][13];
color [] C = {#000000,#FF0000,#00FF00,#0000FF};
void draw(){
  background(255);
  for(int i=0;i<4;i++){
    for(int j=1;j<=13;j++){
      drawCard(j*83, i*109 , C[i%4],j);
    }
  }
}
void drawCard(int x,int y,color c,int n){
  stroke(128);//gray stroke
  fill(255);
  rect(x,y,83,109,10);
  textSize(20);
  fill(c);
  String rank = getRank(n);
  text(rank,x+8,y+20);
  
  pushMatrix(); // 保存當前的變換矩陣
  translate(x+75, y+90); // 將座標系移動到撲克牌的右下角
  rotate(radians(180)); // 逆時針旋轉180度
  text(rank,0,0); // 繪製下顛倒的字母或數字
  popMatrix(); // 恢復原來的變換矩陣
}
String getRank(int n){
  if(n == 1){ return "A";}
  else if(n == 11){return "J";}
  else if(n == 12){return "Q";}
  else if(n == 13){return "K";}
  else{return Integer.toString(n);}
}

參考week04的UNO洗牌程式
void setup(){
  size(1500,900);
  myshuffle();
}
void myshuffle(){
  for(int i=0;i<4;i++){
    for(int j=1;j<=13;j++){
      cardN[i*13+j] = j;
      cardC[i*13+j] = C[i%4];
    }
  }
  for(int i=0;i<100;i++){ //洗牌100次
    int a = int(random(1,53)), b = int(random(1,53));
    int temp = cardN[a]; //交換card
    cardN[a] = cardN[b];
    cardN[b] = temp;
    temp = cardC[a];
    cardC[a] = cardC[b];
    cardC[b] = temp;
  }//int [][] card = new int[4][13];
int [] cardN = new int[53]; //card number
int [] cardC = new int[53];//card color
color [] C = {#000000,#FF0000,#00FF00,#0000FF};
void draw(){
  background(255);
  for(int i=0;i<4;i++){
    for(int j=1;j<=13;j++){//牌從1開始
      //drawCard(j*83, i*109 , cardC[i%4], j);
      drawCard(j*83,i*109,cardC[i*13+j],cardN[i*13+j]);
    }
  }
}
void drawCard(int x,int y,color c,int n){
  stroke(128);//gray stroke
  fill(255);
  rect(x,y,83,109,10);
  textSize(20);
  fill(c);
  String rank = getRank(n);
  text(rank,x+8,y+20);
  
  pushMatrix(); // 保存當前的變換矩陣
  translate(x+75, y+90); // 將座標系移動到撲克牌的右下角
  rotate(radians(180)); // 逆時針旋轉180度
  text(rank,0,0); // 繪製下顛倒的字母或數字
  popMatrix(); // 恢復原來的變換矩陣
}
String getRank(int n){
  if(n == 1){ return "A";}
  else if(n == 11){return "J";}
  else if(n == 12){return "Q";}
  else if(n == 13){return "K";}
  else{return Integer.toString(n);}
}

增加放牌的格子、修改背景顏色
void setup(){
  size(1000,800);
}
void draw(){
  background(#FCF2EA);
  drawCardContainer(250 , 100);//翻出來的牌
  for(int i=0; i<4; i++){
    drawCardContainer(520 + 90*i, 100);//放牌的地方
  }
}
void drawCardContainer(int x, int y){ //放牌的地方
  stroke(0);
  fill(255);
  rect(x, y, 83, 109, 7);
}

洗完牌後將排成由1遞增到7的牌堆
void setup(){
  size(1000,800);
  myshuffle();
}
void myshuffle(){
  for(int i=0;i<4;i++){
    for(int j=0;j<13;j++){
      cardN[i*13+j] = j+1;
      cardC[i*13+j] = C[i%4];
    }
  }
  for(int i=0;i<100;i++){ //洗牌100次
    int a = int(random(52)), b = int(random(52));
    int temp = cardN[a]; //交換card
    cardN[a] = cardN[b];
    cardN[b] = temp;
    temp = cardC[a];
    cardC[a] = cardC[b];
    cardC[b] = temp;
  }
} 
//int [][] card = new int[4][13];
int [] cardN = new int[100]; //card number
int [] cardC = new int[100];//card color
color [] C = {#000000,#FF0000,#00FF00,#0000FF};
void draw(){
  background(#FCF2EA);
  drawCardContainer(160 , 50);//翻出來的牌
  for(int i=0; i<4; i++){
    drawCardContainer(430+ 90*i, 50);//放牌的地方
  }
  /*for(int i=0;i<4;i++){
    for(int j=0;j<13;j++){
      //drawCard(j*83, i*109 , cardC[i%4], j);
      drawCard(j*83,i*109,cardC[i*13+j],cardN[i*13+j]);
    }
  }*/
  int startX = 160;//x起始位置
  int startY = 180;//y起始位置
  for (int i=0, index = 0; i<7; i++) {//index陣列索引值
    for (int j=0; j<7-i; j++, index++) {
      int x = startX + (j * 90) + (i * 90);
      int y = startY + (i * 50);
      drawCard(x, y, cardC[index], cardN[index]);
      //drawCard(x, y ,cardC[i*13+j],cardN[i*13+j]);
    }
  }  
}
void drawCard(int x,int y,color c,int n){
  stroke(128);//gray stroke
  fill(255);
  rect(x,y,83,109,10);
  textSize(20);
  fill(c);
  String rank = getRank(n);
  text(rank,x+8,y+20);
  
  pushMatrix(); // 保存當前的變換矩陣
  translate(x+75, y+90); // 將座標系移動到撲克牌的右下角
  rotate(radians(180)); // 逆時針旋轉180度
  text(rank,0,0); // 繪製下顛倒的字母或數字
  popMatrix(); // 恢復原來的變換矩陣*/
}
String getRank(int n){
  if(n == 1){ return "A";}
  else if(n == 11){return "J";}
  else if(n == 12){return "Q";}
  else if(n == 13){return "K";}
  else{return Integer.toString(n);}
}
void drawCardContainer(int x, int y){ //放牌的地方
  stroke(0);
  fill(255);
  rect(x, y, 83, 109, 7);
}



沒有留言:

張貼留言