STEP 01
1.開啟processing
2.開個視窗
3.用陣列和左手i右手j做牌
STEP 02
1.用小畫家的滴管效果配合維基百科上的UNO圖,取得色號
2.開陣列放上剛才取得的色號,並且利用fill填滿顏色
3.有4種花色,取4的餘數,%4
STEP 03
1.要做更好的牌,另外弄個函數來畫卡片
2.加上白邊,並且讓它有點圓弧的感覺,兩組fill跟rect分內外
STEP 04
1.要做牌裡面白色橢圓形的那個東西
2.利用之前電腦圖學課學到的pushMatrix(備份矩陣)和popMatrix(還原矩陣),做橢圓形
STEP 05
1.卡片上還缺少數字,需要補上
2.先以1,做測試
3.補上其他數字
STEP 06
1.現在只有展示牌,一個卡牌遊戲是要洗牌的
2.設一個函數myShuffle用來洗牌
3.用random和temp來配合
效率不好,只洗一張
STEP 07
1.上個程式碼一次洗一張,洗得不是很乾淨,決定使用迴圈讓它多洗幾次,這樣就會乾淨了
洗10000次
STEP8
1.牌太小了,要把牌放大
2.我們設一個s作為卡牌放大倍率,並宣告w配合使用
3.在畫圖的部分都承上s,得等比例放大的牌STEP 09
1.規則上有抽牌的機制,玩家一開始也會有手牌,所以必須設計抽牌
2.用黑色寫99的牌作為牌組,從當中抽牌,並且設計了一個作弊按鈕,按著滑鼠右鍵會顯示洗牌後,牌組的結果和內容,目的是確認抽出的牌順序是否符合,程式碼為:
3.為了避免抽了複數的卡片重疊,平面無法得知張數,每抽一張要讓下一張稍微往旁邊一點,程式碼為:
STEP 10
1.要讓四個人都抽牌,用取餘數跟變換位置(Y軸),讓四位玩家以順時針方向抽牌
今日最終結果:
void setup(){
size(1000,1000);
myShuffle();
}
void myShuffle(){
for(int i=0;i<8;i++){
for(int j=0;j<11; j++){
cardN[i*11+j] = j;
cardC[i*11+j] = C[i%4];
}
}
for(int i=0; i<10000; i++){
int a = int(random(88)), b = int(random(88));
int temp = cardN[a];
cardN[a] = cardN[b];
cardN[b] = temp;
temp = cardC[a];
cardC[a] = cardC[b];
cardC[b] = temp;
}
}
//int [][] card = new int[8][11];
int [] cardN = new int[88];
int [] cardC = new int[88];
color [] C = {#FF5555, #FFAA00, #55AA55, #5555FF};
void draw(){
background(255);
if(mousePressed && mouseButton==RIGHT){//view deck偷看牌組
for(int i=0;i<8;i++){
for(int j=0;j<11;j++){
drawCard(j*32, i*50, cardC[i*11+j], cardN[i*11+j], 32);
}
}
}else drawCard(50, 50, #000000, 99,128);//deck牌組
for(int i=0;i<myCard;i++){
if(i%4==0) drawCard(430 +40*i/4,50, cardC[i], cardN[i], 128);//玩家1拿牌
if(i%4==1) drawCard(630 +40*i/4,350, cardC[i], cardN[i], 128);//玩家2拿牌
if(i%4==2) drawCard(430 +40*i/4,650, cardC[i], cardN[i], 128);//玩家3拿牌
if(i%4==3) drawCard(230 +40*i/4,350, cardC[i], cardN[i], 128);//玩家4拿牌
}
}
int myCard = 0;
void mousePressed(){
if(mouseButton==LEFT) myCard++;
}
void drawCard(int x, int y, color C, int n, int w){
float s = w/32.0;//放大倍率
stroke(128);//灰色
fill(255);//白
rect(x, y, 32*s, 50*s, 7*s);
noStroke();
fill(C);
rect(x+2.5*s, y+2.5*s, 32*s-5*s, 50*s-5*s, 4*s);
pushMatrix();
fill(255);//填白色
translate(x+16*s, y+25*s);//移到中心點
rotate(radians(45));//如無旋轉,橢圓會是直立的
ellipse(0, 0, 20*s, 30*s);//橢圓形
popMatrix();
textAlign(CENTER,CENTER);
textSize(10*s);//大小
text(""+n, x+7*s, y+6*s);//左上的字
textSize(18*s);//字大小
fill(C);//上色
text(""+n, x+16*s, y+22*s);//中間的字
}
沒有留言:
張貼留言