2023年12月28日 星期四

week16咻消失

 Week16

小葉說程式要大修(´,_ゝ`)

ArrayList<Integer> deck = new ArrayList<Integer>();
void setup(){
  size(600,400);
  for(int i=0;i<13;i++){//產生13張牌
    deck.add( int(random(13)) );//加陣列、亂數挑數字
  }
}
void draw(){
 background(#FFFFF2);
   for(int i=0;i<deck.size();i++){//原for(Integer i:deck){
     fill(255);//白色
     rect(50,i*10,50,50);//直的放牌
     fill(0);//黑色
     text(""+deck.get(i),75,i*10+25,25);//字位置
   }
}
  for(int i=0;i<3;i++){//產生3張牌
可以修改成我要的大小及座標
ArrayList<Integer> deck = new ArrayList<Integer>();
void setup(){
  size(1000,800);
  for(int i=0;i<13;i++){//產生13張牌
    deck.add( int(random(13)) );//加陣列亂數挑數字
  }
}
void draw(){
 background(#FCF2EA);
   for(int i=0;i<deck.size();i++){//for(Integer i:deck){
     fill(255);//白色
     rect(50,i*50,83,109,10);//直的放牌
     fill(0);//黑色
     text(""+deck.get(i),55,25+i*50);//字位置
   }
}
一絡牌存成一個ArrayList --> deck1、2、3......
ArrayList<Integer> deck1 = new ArrayList<Integer>();
ArrayList<Integer> deck2 = new ArrayList<Integer>();
ArrayList<Integer> deck3 = new ArrayList<Integer>();
void setup(){
  size(600,400);
  for(int i=0;i<7;i++){
    deck1.add( int(random(13)) );
  }
  for(int i=0;i<6;i++){
    deck2.add( int(random(13)) );
  }
  for(int i=0;i<5;i++){
    deck3.add( int(random(13)) );
  }
}
void draw(){
 background(#FFFFF2);
 //for(Integer i:dock){
   for(int i=0;i<deck1.size();i++){
     fill(255); rect(450,i*10,50,50);//直的放牌
     fill(0); text(""+deck1.get(i),475,i*10+25,25);//字位置
   }
   for(int i=0;i<deck2.size();i++){
     fill(255); rect(350,i*10,50,50);//直的放牌
     fill(0); text(""+deck2.get(i),375,i*10+25,25);//字位置
   }
   for(int i=0;i<deck3.size();i++){
     fill(255); rect(250,i*10,50,50);//直的放牌
     fill(0); text(""+deck3.get(i),275,i*10+25,25);//字位置
   }
   
}
如果要每個牌堆都宣告分開宣告deck會很麻煩,用ArrayList<ArrayList<Integer>>??
ArrayList<ArrayList<Integer>> decks = new ArrayList<ArrayList<Integer>>();//decks:大牌堆
void setup(){
 size(600,400);
 for(int i=0;i<7;i++){
   ArrayList<Integer> deck = new ArrayList<Integer>();
   for(int k=0;k<=i;k++){
     deck.add( int(random(13)) );
   }//第i個牌堆,第k張牌
   decks.add( deck );//小牌堆加進大牌堆裡
 }
}
void draw(){
  background(#FFFFF2);
  for(int i=0;i<decks.size();i++){
      ArrayList<Integer> deck = decks.get(i); //從decks取出來
      for(int k=0;k<deck.size();k++){
        fill(255); rect(200+ i*50, 150+k*20, 40, 50);//x:100+ L*50
        fill(0); 
        text(""+ deck.get(k),200+i*50+25, 175+k*20);//y:50+ k*30
      }
   }
}
只秀最後一張牌的數字 if(k==deck.size()-1){//之後做最後一張牌移動也是這個
  fill(0);text(""+ deck.get(k),200+i*50+25, 175+k*20);
}
加入滑鼠控制
ArrayList<ArrayList<Integer>> decks = new ArrayList<ArrayList<Integer> >();
void setup(){
 size(600,400);
 for(int i=0;i<7;i++){
   ArrayList<Integer> deck = new ArrayList<Integer>();
   for(int k=0;k<=i;k++){
     decks.add( deck );
   }//第i個牌堆,第k張牌
   decks.add( deck );
 }
}
void draw(){
  background(#FFFFF2);
  for(int i=0;i<decks.size();i++){
    ArrayList<Integer> deck = decks.get(i);
    for(int k=0;k<deck.size();k++){
      if(pressedI == i && k == deck.size()-1) continue;//按到最後一張牌
      fill(255); rect(200+ i*50, 150+k*20, 40, 50);//x:100+ L*50
      if(k==deck.size()-1){
        fill(0); text(""+ deck.get(k),200+i*50+25, 175+k*20);//y:50+ k*30
      }
    }
  }
  if(pressedI!=-1){
    int i = pressedI, k = (decks.get(pressedI).size()-1);
    fill(255,255,0);//填充黃色
    rect(200+ pressedI*50+dx ,150+k *20+dy, 40, 50);
    fill(0); text(""+ decks.get(i).get(k),200+i*50+25+dx, 175+k*20+dy);//y:50+ k*30
  }
}
void mousePressed(){
  for(int i=0;i<decks.size();i++){
    int k = decks.get(i).size()-1;
    if( insideCard(200+ i*50, 150+k*20, 40, 50) ){
      pressedI = i;
      return;//return迴圈
    }
  }
  pressedI = -1;//有選到i 沒選到-1
}
void mouseReleased(){
  pressedI = -1;
  dx=0;dy=0;
}
ArrayList<ArrayList<Integer>> decks = new ArrayList<ArrayList<Integer>>();
void setup() {
  size(600, 400);
  for (int i=0; i<7; i++) {
    ArrayList<Integer> deck = new ArrayList<Integer>();
    for (int k=0; k<=i; k++) {
      deck.add( int(random(13)) );
    } //第i個牌堆,第k張牌
    decks.add( deck );
  }
}
void draw() {
  background(#FFFFF2);
  for (int i=0; i<decks.size(); i++) {
    ArrayList<Integer> deck = decks.get(i);
    for (int k=0; k<deck.size(); k++) {
      if(pressedI == i && k==deck.size()-1) continue; 
      fill(255); rect(200 + i*50, 150+k*20, 40, 50); //x:100 + L * 50;
      if(k==deck.size()-1){
        fill(0); text( ""+deck.get(k), 200+i*50+25, 175+k*20); //y: 50 + k * 30;
      }
    }
  }
  if(pressedI!=-1){
    int i = pressedI, k = (decks.get(i).size()-1);
    fill(255,255,0);
    rect(200 + i*50 + dx, 150+k*20 + dy, 40, 50);
    fill(0); text( ""+decks.get(i).get(k), 200+i*50+25+dx, 175+k*20+dy);
  }
}
void mouseDragged(){
  dx += mouseX-pmouseX;
  dy += mouseY-pmouseY;
}
int pressedI = -1, dx=0, dy=0;
boolean insideCard(int x, int y, int w, int h){
  if(x<mouseX && mouseX<x+w && y<mouseY && mouseY<y+h){
    return true;
  }
  return false;
}
void mousePressed(){
  for (int i=0; i<decks.size(); i++) {
    int k = decks.get(i).size()-1;
    if(insideCard(200 + i*50, 150+k*20, 40, 50)){
      pressedI = i;
      return;
    }
  }
  pressedI = -1;
}
void mouseReleased(){
  for(int i=0; i<7; i++){
    int x = 200+i*50;
    if(x<mouseX && mouseX<x+40) {
      int kk = decks.get(pressedI).size()-1;
      decks.get(i).add( decks.get(pressedI).get(kk) );
      decks.get(pressedI).remove(kk);
    }
  }
  pressedI = -1;
  dx=0; dy=0;
}






沒有留言:

張貼留言