2022年9月19日 星期一

xyt week03

 week03 洗牌

  1. 複習,叫出上週程式(執行後顯示隨機牌組)

```java
void setup(){
  size(500, 500);
  PFont font = createFont("標楷體", 40);
  textFont(font);
  String [] flower = {"黑桃", "紅心", "方塊", "梅花"};
  face1 = flower[int(random(4))] + int(random(13)+1);
  face2 = flower[int(random(4))] + int(random(13)+1);
  face3 = flower[int(random(4))] + int(random(13)+1);
  face4 = flower[int(random(4))] + int(random(13)+1);
  //取整數 0...12 所以再加1
}//洗牌的英文Shuffle
String face1, face2, face3, face4;
void draw(){
  drawPokerCard(100, 100, face1);
  drawPokerCard(130, 150, face2);
  drawPokerCard(160, 200, face3);
  drawPokerCard(190, 250, face4);
}///牌面:Spade, Heart, Dimand, Club
void drawPokerCard(int x, int y, String face){
  int W=25;
  fill(255);
  rect(x-W/2, y-W/2, 150+W, 250+W, 20);
  fill(#6FF9FF);
  rect(x, y, 150, 250, 20);
  //fill(0);
  if( face.indexOf("黑桃") == -1 && face.indexOf("梅花") == -1 ) fill(#FF0000);
  else fill(0);
  textSize(40);
  text( face, x, y+40);
}
```

2. 加入滑鼠事件,按一下滑鼠左鍵洗牌一次

```java
void setup(){
  size(500, 500);
  PFont font = createFont("標楷體", 40);
  textFont(font);
  myShuffle();
  //取整數 0...12 所以再加1
}//洗牌的英文Shuffle
void myShuffle(){
  String [] flower = {"黑桃", "紅心", "方塊", "梅花"};
  face1 = flower[int(random(4))] + int(random(13)+1);
  face2 = flower[int(random(4))] + int(random(13)+1);
  face3 = flower[int(random(4))] + int(random(13)+1);
  face4 = flower[int(random(4))] + int(random(13)+1);
}
void mousePressed(){
  myShuffle(); 
}
String face1, face2, face3, face4;
void draw(){
  drawPokerCard(100, 100, face1);
  drawPokerCard(130, 150, face2);
  drawPokerCard(160, 200, face3);
  drawPokerCard(190, 250, face4);
}///牌面:Spade, Heart, Dimand, Club
void drawPokerCard(int x, int y, String face){
  int W=25;
  fill(255);
  rect(x-W/2, y-W/2, 150+W, 250+W, 20);
  fill(#6FF9FF);
  rect(x, y, 150, 250, 20);
  //fill(0);
  if( face.indexOf("黑桃") == -1 && face.indexOf("梅花") == -1 ) fill(#FF0000);
  else fill(0);
  textSize(40);
  text( face, x, y+40);
}

``` 



3. 在畫面上畫52張牌
 ```java
void setup(){
  size(700, 700); 
}
void draw(){
  background(#FFFFF2);
  for(int i=0; i<52; i++){
    int x = (i%10)*60; //除法10餘數, 個位數
    int y = int(i/10)*120;//十位數
    rect(x, y, 60, 120);
  }
}

```


 4. 畫牌面

```java
void setup(){
  size(700, 700); 
  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; //除法10餘數, 個位數
    int y = int(i/10)*120;//十位數
    fill(255);
    rect(x, y, 60, 120);
    fill(0);
    text(faces[i], x+25, y+80);
  }

}

``` 


 5. 將牌面修改得更好(字體放大,紅心方塊改成紅色,每13張牌換行,調整視窗大小)

```java
void setup(){
  size(800, 600); 
  PFont font = createFont("標楷體", 16);
  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; //除法10餘數, 個位數
    int y = int(i/13)*120;//十位數
    fill(255);
    rect(x, y, 60, 120);
    if( faces[i].indexOf("紅心")==-1 && faces[i].indexOf("方塊")==-1) fill(0);
    else fill(255, 0, 0);
    text(faces[i], x+10, y+60);
  }
}

```


 6. 洗牌(滑鼠點一下交換)

```java
void setup(){
  size(800, 600); 
  PFont font = createFont("標楷體", 16);
  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; //除法10餘數, 個位數
    int y = int(i/13)*120;//十位數
    fill(255);
    rect(x, y, 60, 120);
    if( faces[i].indexOf("紅心")==-1 && faces[i].indexOf("方塊")==-1) fill(0);
    else fill(255, 0, 0);
    text(faces[i], x+10, y+60);
  }
}
void mousePressed(){
 int a = int(random(52));
 int b = int(random(52));
 //目標: faces[a] vs. faces[b] 交換
 String temp = faces[a];
 faces[a] = faces[b];
 faces[b] = temp;
}

```


 7. 將上週程式結合這週,並使牌面不會重複

```java
void setup(){
size(500,500);
PFont font = createFont("標楷體",40);
textFont(font);
myShuffle();
}//洗牌的英文 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 myShuffle(){
  for(int k=0; k<10000; k++){
    int a = int(random(52));
    int b = int(random(52));
    //目標:faces[a] vs. faces[b] 交換
    String temp = faces[a];
    faces[a] = faces[b];
    faces[b] = temp;
    }
  face1 = faces[0];
  face2 = faces[1];
  face3 = faces[2];
  face4 = faces[3];
}
void mousePressed(){
  myShuffle();
}
String face1,face2,face3,face4;
void draw(){
  drawPokerCard(100,100,face1);//使用函數
  drawPokerCard(130,150,face2);//使用函數
  drawPokerCard(160,200,face3);//使用函數
  drawPokerCard(190,250,face4);//使用函數
}//牌面:黑桃Spade 紅心Heart 方塊Diamond 梅花Club
void drawPokerCard(int x,int y,String face){
  int w=20;
  fill(255);
  rect(x-w/2,y-w/2,150+w,250+w,20);//弧度
  fill(#6FF9FF);
  rect(x,y,150,250,20);//弧度
  if(face.indexOf("黑桃") == -1 && face.indexOf("梅花") == -1)fill(#FF0000);
  else fill(0);
  textSize(30);
  text(face,x,y+30);
}
```

 


沒有留言:

張貼留言