2022年10月17日 星期一

Week7_栗子的程式日記_總審快到了報告還沒弄完嗚嗚

Week07

1.1修改上上禮拜的暗棋,先把上次的下載下來,再Week06喔!!

程式碼:


------------複製下來後,除了改善一些上禮拜的小問題,再做亂數洗牌,讓棋子可以每開一次洗牌一次

程式碼:

int[][]show={

 {0,0,0,0,0,0,0,0}, 

 {0,0,0,0,0,0,0,0}, 

 {0,0,0,0,0,0,0,0}, 

 {0,0,0,0,0,0,0,0}, 

}; ///翻牌前都不會秀出來

int[][]board={

 { 1, 2, 2, 3, 3, 4, 4, 5}, 

 { 5, 6, 6, 7, 7, 7, 7, 7},

 {-1,-2,-2,-3,-3,-4,-4,-5},

 {-5,-6,-6,-7,-7,-7,-7,-7},

}; //暗棋的格子,比較少 4X8=32個棋子

void setup(){

 size(500,300); 

 PFont font =createFont("標楷體",30);

 textFont(font);

 textAlign(CENTER,CENTER);

 for(int k=0;k<1000;k++){    ///很多次洗牌1000次

   int i1=int(random(4)), j1=int(random(8));

   int i2=int(random(4)), j2=int(random(8));

   int temp=board[i1][j1];

   board[i1][j1]=board[i2][j2];

   board[i2][j2]=temp; 

 }

}

void draw(){

 background(#F0B82C);

 for(int x=50;x<=450;x+=50){

    line(x,50,x,250);

 }

 for(int y=50;y<=250;y+=50){

    line(50,y,450,y); 

 }

 for(int i=0;i<4;i++){

   for(int j=0;j<8;j++){

     if(show[i][j]==0){

      fill(255);

      ellipse(50+25+j*50,50+25+i*50,40,40);

     }else{

       int id = board[i][j]; 

       drawChess(50+25+j*50,50+25+i*50,id);

     }

    } 

 }     

}

void mousePressed(){

  for(int i=0;i<4;i++){ //修改

   for(int j=0;j<8;j++){ //修改

    if(dist(mouseX,mouseY,50+25+j*50,50+25+i*50)< 20){

      if(show[i][j]==0) show[i][j]=1;

    }

   }

  }

}      

String []name ={"將","士" ,"象","車","馬","包","卒"};

String []name2 ={"帥","仕","相","俥","傌","炮","兵"};

void drawChess(int x,int y,int id){

  fill(255);

  ellipse(x,y,40,40);

  if(id>0){ //黑

    fill(0);

    text(name[id -1],x,y-3); ///修改

  }else{  //紅

    fill(255,0,0);

    text(name2[-id-1],x,y-3);

  }

}


1.2再來改成shuffle()就完成每點擊一次洗一次牌

程式碼:



2.1  新的一版就是我們要移動棋子,首先指定要移動的變成綠色的

程式碼:

int[][]show={

 {0,0,0,0,0,0,0,0}, 

 {0,0,0,0,0,0,0,0}, 

 {0,0,0,0,0,0,0,0}, 

 {0,0,0,0,0,0,0,0}, 

}; ///翻牌前都不會秀出來

int[][]board={

 { 1, 2, 2, 3, 3, 4, 4, 5}, 

 { 5, 6, 6, 7, 7, 7, 7, 7},

 {-1,-2,-2,-3,-3,-4,-4,-5},

 {-5,-6,-6,-7,-7,-7,-7,-7},

}; //暗棋的格子,比較少 4X8=32個棋子

void setup(){

 size(500,300); 

 PFont font =createFont("標楷體",30);

 textFont(font);

 textAlign(CENTER,CENTER);

 for(int k=0;k<1000;k++){ ///很多次洗牌1000次

   shuffle_one();

 }

}

void shuffle_one(){

  int i1=int(random(4)),j1=int(random(8));

   int i2=int(random(4)),j2=int(random(8));

   int temp=board[i1][j1];

   board[i1][j1]=board[i2][j2];

   board[i2][j2]=temp;

}

void draw(){

 background(#F0B82C);

 for(int x=50;x<=450;x+=50){

    line(x,50,x,250);

 }

 for(int y=50;y<=250;y+=50){

    line(50,y,450,y); 

 }

 for(int i=0;i<4;i++){

   for(int j=0;j<8;j++){

     if(show[i][j]==0){

      fill(255);

      ellipse(50+25+j*50,50+25+i*50,40,40);

     }else{

       int id = board[i][j]; 

       drawChess(50+25+j*50,50+25+i*50,id);

     }

    } 

 }   

 if(moving){

  drawChess(50+25+moveJ*50,50+24+moveI*50,9);  //9很怪

 }

}

int moveI =-1,moveJ = -1;

boolean moving=false; ///不是移動中

void mousePressed(){

  for(int i=0;i<4;i++){

   for(int j=0;j<8;j++){ 

    if(dist(mouseX,mouseY,50+25+j*50,50+25+i*50)< 20){

      if(show[i][j]==0) show[i][j]=1; 

      else{

        moveI = i; //想移動的i座標

        moveJ = j; //想移動的j座標

        moving = true;  //現在移動中

      }   //加上棋子的移動

    }

   }

  }

}      

String []name ={"將","士" ,"象","車","馬","包","卒"};

String []name2 ={"帥","仕","相","俥","傌","炮","兵"};

void drawChess(int x,int y,int id){

  fill(255);

  ellipse(x,y,40,40);

  if(id==9){ //帶移動中的棋子

   fill(0,255,0);  //綠色

   ellipse(x,y,40,40);

  }else if(id>0){ //黑

    fill(0);

    text(name[id -1],x,y-3);

  }else{  //紅

    fill(255,0,0);

    text(name2[-id-1],x,y-3);

  }

}



2.2  但是移動的棋子只指定為綠色是不對的,分成兩部份去做,先加上讓棋子能夠拿起來。

程式碼;

int[][]show={
 {0,0,0,0,0,0,0,0}, 
 {0,0,0,0,0,0,0,0}, 
 {0,0,0,0,0,0,0,0}, 
 {0,0,0,0,0,0,0,0}, 
}; ///翻牌前都不會秀出來
int[][]board={
 { 1, 2, 2, 3, 3, 4, 4, 5}, 
 { 5, 6, 6, 7, 7, 7, 7, 7},
 {-1,-2,-2,-3,-3,-4,-4,-5},
 {-5,-6,-6,-7,-7,-7,-7,-7},
}; //暗棋的格子,比較少 4X8=32個棋子
void setup(){
 size(500,300); 
 PFont font =createFont("標楷體",30);
 textFont(font);
 textAlign(CENTER,CENTER);
 for(int k=0;k<1000;k++){///很多次洗牌1000次
   shuffle_one();
 }
}
void shuffle_one(){
  int i1=int(random(4)),j1=int(random(8));
   int i2=int(random(4)),j2=int(random(8));
   int temp=board[i1][j1];
   board[i1][j1]=board[i2][j2];
   board[i2][j2]=temp;
}
void draw(){
 background(#F0B82C);
 for(int x=50;x<=450;x+=50){
    line(x,50,x,250);
 }
 for(int y=50;y<=250;y+=50){
    line(50,y,450,y); 
 }
 for(int i=0;i<4;i++){
   for(int j=0;j<8;j++){
     if(show[i][j]==0){
      fill(255);
      ellipse(50+25+j*50,50+25+i*50,40,40);
     }else{
       int id = board[i][j]; 
       drawChess(50+25+j*50,50+25+i*50,id);
     }
    } 
 }   
 if(moving){
   fill(0,255,0,128);
   ellipse(50+25+moveJ*50,50+24+moveI*50,40,40); //原來的位置
   drawChess(mouseX,mouseY,moveID); //正在飛行、移動的棋子
 }
}
int moveI =-1,moveJ = -1,moveID=-1;
boolean moving=false; ///不是移動中
void mousePressed(){
  for(int i=0;i<4;i++){ //修改
   for(int j=0;j<8;j++){ //修改
    if(dist(mouseX,mouseY,50+25+j*50,50+25+i*50)< 20){
      if(show[i][j]==0) show[i][j]=1; 
      else{
        moveI = i; //想移動的i座標
        moveJ = j; //想移動的j座標
        moveID=board[i][j];
        moving = true;//現在移動中
      }//加上棋子的移動
    }
   }
  }
}      
String []name ={"將","士" ,"象","車","馬","包","卒"};
String []name2 ={"帥","仕","相","俥","傌","炮","兵"};
void drawChess(int x,int y,int id){
  fill(255);
  ellipse(x,y,40,40);
  //if(id==9){ //帶移動中的棋子
   //fill(0,255,0);//綠色
   //ellipse(x,y,40,40);    //不用了
 // }else
   if(id>0){ //黑
    fill(0);
    text(name[id -1],x,y-3);
  }else{  //紅
    fill(255,0,0);
    text(name2[-id-1],x,y-3);
  }
}

2.3

沒有留言:

張貼留言