2022年9月19日 星期一

RH week3

 week03    卡牌遊戲(二)

1.新增一個 myShuffle的涵式使其送到滑鼠事件裡能重新洗牌

(1)在setup裡呼叫        myShuffle();
(2)新增 myShuffle()涵式
```c
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);
  ///取整數 0...12,所以要+1
 }
```
(3)新增滑鼠事件
```c
 void mousePressed(){
  myShuffle();
}
```

2.利用迴圈印出52張牌出來,並設定一行10張牌

```c
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);
  }
}
```

3.增加牌面,寫一個陣列把花色寫上去,暫時先用黑桃代替所有

```c
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);
  }
}
```


4.精簡程式,將各個花色設定好,並調整文字大小和印在牌面上的位置

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

5.新增mousePressed,使其每按一次滑鼠便隨機洗牌且不會重複重複

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

6.拿week03_1的程式來修改,把week03_5的String[]、mousePressed代替原本程式,最終滑鼠按一下樸克牌便可重新洗牌且部會重複

```c
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()
{
  drawCard(100,100,face1);
  drawCard(130,150,face2);
  drawCard(160,200,face3);
  drawCard(190,250,face4);
}///牌面:黑桃 Spade、紅心 Heart、方塊 Dimond、梅花 Club
void drawCard(int x,int y,String face)
{
  int W=20;
  fill(255);
  rect(x-W/2,y-W/2,150+W,250+W,20);
  fill(#39EA13);
  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);
}
```









沒有留言:

張貼留言