week03 洗牌
- 複習,叫出上週程式(執行後顯示隨機牌組)
```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);
}
```







沒有留言:
張貼留言