2022年9月19日 星期一

晚安

 撲克牌、圍棋、象棋

52 Cards
利用for迴圈
以x軸每隔60單位、y軸每隔120單位畫一個60*120的長方形

```
void setup(){
  size(600,720);
}
void draw(){
  background(#FFFFF2);
  for(int i=0; i<52; i++){
    int x= (i%10)*60;
    int y= int(i/10)*120;
    fill(#FFFFFF);
    rect(x, y, 60, 120);
  }
}
```











在每個矩形的左上角標上花色
**利用text()時要先創建字型**

```
void setup(){
  size(600,720);
  PFont font = createFont("微軟正黑體", 10);
  textFont(font);///創建字型
}
String[] faces={
  "黑桃A","黑桃2","黑桃3","黑桃4","黑桃5","黑桃6","黑桃7","黑桃8","黑桃9","黑桃10","黑桃J","黑桃Q","黑桃K",
  "紅心A","紅心2","紅心3","紅心4","紅心5","紅心6","紅心7","紅心8","紅心9","紅心10","紅心J","紅心Q","紅心K",
  "方塊A","方塊2","方塊3","方塊4","方塊5","方塊6","方塊7","方塊8","方塊9","方塊10","方塊J","方塊Q","方塊K",
  "梅花A","梅花2","梅花3","梅花4","梅花5","梅花6","梅花7","梅花8","梅花9","梅花10","梅花J","梅花Q","梅花K"
  };
void draw(){
  background(#FFFFF2);
  for(int i=0; i<52; i++){
    int x= (i%10)*60;
    int y= int(i/10)*120;
    
    fill(#FFFFFF);
    rect(x, y, 60, 120);//白色卡片
    
    fill(#000000);
    text(faces[i], x+2, y+10);//黑色文字
    
  }
}
```










for回圈內可以改寫為13*4
```
  for(int i=0; i<52; i++){
    int x= (i%13)*60;
    int y= int(i/13)*120;
 }
```

利用indexOf()改寫"紅心"與"方塊"的字體顏色
```
void setup(){
  size(780,500);
  PFont font = createFont("微軟正黑體", 10);
  textFont(font);///創建字型
}
String[] faces={
  "黑桃A","黑桃2","黑桃3","黑桃4","黑桃5","黑桃6","黑桃7","黑桃8","黑桃9","黑桃10","黑桃J","黑桃Q","黑桃K",
  "紅心A","紅心2","紅心3","紅心4","紅心5","紅心6","紅心7","紅心8","紅心9","紅心10","紅心J","紅心Q","紅心K",
  "方塊A","方塊2","方塊3","方塊4","方塊5","方塊6","方塊7","方塊8","方塊9","方塊10","方塊J","方塊Q","方塊K",
  "梅花A","梅花2","梅花3","梅花4","梅花5","梅花6","梅花7","梅花8","梅花9","梅花10","梅花J","梅花Q","梅花K"
  };
void draw(){
  background(#FFFFF2);
  for(int i=0; i<52; i++){
    int x= (i%13)*60;
    int y= int(i/13)*120;
    
    fill(#FFFFFF);
    rect(x, y, 60, 120);//白色卡片
    
    if(faces[i].indexOf("黑桃")==-1 && faces[i].indexOf("梅花")==-1) fill(#FF0000);
    else fill(#000000);
    text(faces[i], x+2, y+10);//黑色文字
    
  }
}
```









Shuffle 2.0
利用random()亂數選取兩張牌並交換
```
void setup(){
  size(780,500);
  PFont font = createFont("微軟正黑體", 10);
  textFont(font);///創建字型
}
String[] faces={
  "黑桃A","黑桃2","黑桃3","黑桃4","黑桃5","黑桃6","黑桃7","黑桃8","黑桃9","黑桃10","黑桃J","黑桃Q","黑桃K",
  "紅心A","紅心2","紅心3","紅心4","紅心5","紅心6","紅心7","紅心8","紅心9","紅心10","紅心J","紅心Q","紅心K",
  "方塊A","方塊2","方塊3","方塊4","方塊5","方塊6","方塊7","方塊8","方塊9","方塊10","方塊J","方塊Q","方塊K",
  "梅花A","梅花2","梅花3","梅花4","梅花5","梅花6","梅花7","梅花8","梅花9","梅花10","梅花J","梅花Q","梅花K"
  };
void draw(){
  background(#FFFFF2);
  for(int i=0; i<52; i++){
    int x= (i%13)*60;
    int y= int(i/13)*120;
    
    fill(#FFFFFF);
    rect(x, y, 60, 120);//白色卡片
    
    if(faces[i].indexOf("黑桃")==-1 && faces[i].indexOf("梅花")==-1) fill(#FF0000);
    else fill(#000000);
    text(faces[i], x+2, y+10);//黑色文字
    
  }
}
void mousePressed(){              ///滑鼠點擊事件
  int a = int(random(52));
  int b = int(random(52));
  ///faces[a] 和 fases[b]交換
  String temp = faces[a];
  faces[a]=faces[b];
  faces[b]=temp;
}
```








滑鼠拖曳事件mouseDragged()

將void mousePressed()改為mousDragged()
執行後拖曳滑鼠即可快速洗牌

void mouseDragged(){              ///滑鼠拖曳事件
  int a = int(random(52));
  int b = int(random(52));
  ///faces[a] 和 fases[b]交換
  String temp = faces[a];
  faces[a]=faces[b];
  faces[b]=temp;
}

將新的洗牌程式改寫至上周的程式碼

```
void setup(){
  size(500, 500);
  PFont font = createFont("微軟正黑體", 20);
  textFont(font);
  Shuffle();
 }
 String[] faces={
  "黑桃A","黑桃2","黑桃3","黑桃4","黑桃5","黑桃6","黑桃7","黑桃8","黑桃9","黑桃10","黑桃J","黑桃Q","黑桃K",
  "紅心A","紅心2","紅心3","紅心4","紅心5","紅心6","紅心7","紅心8","紅心9","紅心10","紅心J","紅心Q","紅心K",
  "方塊A","方塊2","方塊3","方塊4","方塊5","方塊6","方塊7","方塊8","方塊9","方塊10","方塊J","方塊Q","方塊K",
  "梅花A","梅花2","梅花3","梅花4","梅花5","梅花6","梅花7","梅花8","梅花9","梅花10","梅花J","梅花Q","梅花K"
  };
void Shuffle(){
    for(int k=0; k<10000; k++){        //洗牌10000次
    int a = int(random(52));
    int b = int(random(52));
    ///faces[a] 和 fases[b]交換
    String temp = faces[a];
    faces[a]=faces[b];
    faces[b]=temp;
  }
  num1 = faces[0];
  num2 = faces[1];
  num3 = faces[2];
  num4 = faces[3];
}
void mousePressed(){
 Shuffle();
}
int w=25;
String num1, num2, num3, num4;
void draw(){
  drawCard(100, 120, num1);
  drawCard(130, 150, num2);
  drawCard(160, 180, num3);
  drawCard(190, 210, num4);
}
void drawCard(int x, int y, String num){
  fill(#FFFFFF);
  rect(x-w/2, y-w/2,  150+w, 250+w, 10);
  fill(#659F7A);
  rect(x,y,150,250,10);
  if(num.indexOf("黑桃")==-1 && num.indexOf("梅花")==-1) fill(#FF0000);
  else fill(#000000);
  textSize(20);
  text(num, x+5, y+20);  
}
```






**需要宣告新的函式
直接將程式碼寫進滑鼠事件中
會因為宣告num(花色)時出現參數錯誤**

沒有留言:

張貼留言