Week5
1.1畫出一個棋盤
程式碼:
///畫棋盤
///等差級數 : 50,100,150,200,250,300,350
size(500,700);
for(int x=50;x<=450;x+=50){
line(x,50,x,250);
line(x,300,x,500);
}
//10條
for(int y=50;y<=500;y+=50){
line(50,y,450,y);
}
///畫棋子要下棋,要互動
int[][]board={
{4,5,3,2,1,2,3,5,4},
{0,0,0,0,0,0,0,0,0},
{0,6,0,0,0,0,0,0,0},
{1,0,1,0,1,0,1,0,1},
};
//1: 將 2:士 3:象 4:車 5:馬 6:包 7: 卒
void setup(){
size(500,550);
}
void draw(){
for(int x=50;x<=450;x+=50){
line(x,50,x,250);
line(x,300,x,500);
}
for(int y=50;y<=500;y+=50){
line(50,y,450,y);
}
for(int i=0;i<4;i++){
for(int j=0;j<9;j++){
text(board[i][j],50+j*50,50+i*50);
}
}
}
1.3 因為棋子不可能只代表數字,把相對應的文字放上去
程式碼:
///畫棋子要下棋,要互動
int[][]board={
{4,5,3,2,1,2,3,5,4},
{0,0,0,0,0,0,0,0,0},
{0,6,0,0,0,0,0,0,0},
{7,0,7,0,7,0,7,0,7},
};//1: 將 2:士 3:象 4:車 5:馬 6:包 7: 卒
String []name ={"將","士" ,"象","車","馬","包","卒"};
void setup(){
size(500,550);
PFont font =createFont("標楷體",30);
textFont(font);
textAlign(CENTER,CENTER);
}
void draw(){
for(int x=50;x<=450;x+=50){
line(x,50,x,250);
line(x,300,x,500);
}
for(int y=50;y<=500;y+=50){
line(50,y,450,y);
}
for(int i=0;i<4;i++){
for(int j=0;j<9;j++){
int id=board[i][j]; ///1開始
if(id==0) continue;//陣列請回去(繼續)
text(name[id-1],50+j*50,50+i*50);
}
}
}
程式碼:
///畫棋子要下棋,要互動
int[][]board={
{4,5,3,2,1,2,3,5,4},
{0,0,0,0,0,0,0,0,0},
{0,6,0,0,0,0,0,6,0},
{7,0,7,0,7,0,7,0,7},
{0,0,0,0,0,0,0,0,0},//上面是黑色,下面是紅色
{0,0,0,0,0,0,0,0,0},//上面是黑色,下面是紅色
{-7,0,-7,0,-7,0,-7,0,-7},
{0,-6,0,0,0,0,0,-6,0},
{0,0,0,0,0,0,0,0,0},
{-4,-5,-3,-2,-1,-2,-3,-5,-4},
}; //1: 將 2:士 3:象 4:車 5:馬 6:包 7: 卒
String []name ={"將","士" ,"象","車","馬","包","卒"};
String []name2 ={"帥","仕","相","俥","傌","炮","兵"};
void setup(){
size(500,550);
PFont font =createFont("標楷體",30);
textFont(font);
textAlign(CENTER,CENTER);
}
void draw(){
background(#F0B82C);
for(int x=50;x<=450;x+=50){
line(x,50,x,250);
line(x,300,x,500);
}
for(int y=50;y<=500;y+=50){
line(50,y,450,y);
}
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
int id=board[i][j]; ///1開始
if(id==0) continue; //陣列請回去(繼續)
if(id>0){
fill(255);
ellipse(50+j*50,50+i*50,40,40);///棋子畫圓
fill(0);
text(name[id-1],50+j*50,50+i*50-3);
}else if(id<0){
fill(255);
ellipse(50+j*50,50+i*50,40,40);
fill(255,0,0);
text(name2[-id -1],50+j*50,50+i*50-3);
}
}
}
}
程式碼:
///畫棋子要下棋,要互動
int[][]board={
{4,5,3,2,1,2,3,5,4},
{0,0,0,0,0,0,0,0,0},
{0,6,0,0,0,0,0,6,0},
{7,0,7,0,7,0,7,0,7},
{0,0,0,0,0,0,0,0,0},//上面是黑色,下面是紅色
{0,0,0,0,0,0,0,0,0},//上面是黑色,下面是紅色
{-7,0,-7,0,-7,0,-7,0,-7},
{0,-6,0,0,0,0,0,-6,0},
{0,0,0,0,0,0,0,0,0},
{-4,-5,-3,-2,-1,-2,-3,-5,-4},
};//1: 將 2:士 3:象 4:車 5:馬 6:包 7: 卒
String []name ={"將","士" ,"象","車","馬","包","卒"};
String []name2 ={"帥","仕","相","俥","傌","炮","兵"};
void setup(){
size(500,550);
PFont font =createFont("標楷體",30);
textFont(font);
textAlign(CENTER,CENTER);
}
void draw(){
background(#F0B82C);
for(int x=50;x<=450;x+=50){
line(x,50,x,250);
line(x,300,x,500);
}
for(int y=50;y<=500;y+=50){
line(50,y,450,y);
}
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
int id=board[i][j]; ///1開始
if(id==0) continue;//陣列請回去(繼續)
if(id>0){
fill(255);
ellipse(50+j*50,50+i*50,40,40);
fill(0);
text(name[id-1],50+j*50,50+i*50-3);
}else if(id<0){
fill(255);
ellipse(50+j*50,50+i*50,40,40);
fill(255,0,0);
text(name2[-id -1],50+j*50,50+i*50-3);
}
}
}
}
void mousePressed(){
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(dist(mouseX,mouseY,50+j*50,50+i*50)< 20){
board[i][j]=1;
}
}
}
}
看到成果好笑吧,只有"將"可以一直移動,然後全部都會變成將,所以再修改!!
1.6 修改後,可以讓棋子隨者鼠標好好移動到指定位置
程式碼:
///畫棋子要下棋,要互動
int[][]board={
{4,5,3,2,1,2,3,5,4},
{0,0,0,0,0,0,0,0,0},
{0,6,0,0,0,0,0,6,0},
{7,0,7,0,7,0,7,0,7},
{0,0,0,0,0,0,0,0,0},//上面是黑色,下面是紅色
{0,0,0,0,0,0,0,0,0},//上面是黑色,下面是紅色
{-7,0,-7,0,-7,0,-7,0,-7},
{0,-6,0,0,0,0,0,-6,0},
{0,0,0,0,0,0,0,0,0},
{-4,-5,-3,-2,-1,-2,-3,-5,-4},
};//1: 將 2:士 3:象 4:車 5:馬 6:包 7: 卒
String []name ={"將","士" ,"象","車","馬","包","卒"};
String []name2 ={"帥","仕","相","俥","傌","炮","兵"};
void setup(){
size(500,550);
PFont font =createFont("標楷體",30);
textFont(font);
textAlign(CENTER,CENTER);
}
void draw(){
background(#F0B82C);
for(int x=50;x<=450;x+=50){
line(x,50,x,250);
line(x,300,x,500);
}
for(int y=50;y<=500;y+=50){
line(50,y,450,y);
}
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
int id=board[i][j]; ///1開始
if(id==0) continue;//陣列請回去(繼續)
if(id>0){
fill(255);
ellipse(50+j*50,50+i*50,40,40);
fill(0);
text(name[id-1],50+j*50,50+i*50-3);
}else if(id<0){
fill(255);
ellipse(50+j*50,50+i*50,40,40);
fill(255,0,0);
text(name2[-id -1],50+j*50,50+i*50-3);
}
}
}
if(handChess!=0)ellipse(mouseX,mouseY,40,40);
}
int handChess=0;
void mousePressed(){
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(dist(mouseX,mouseY,50+j*50,50+i*50)< 20){
handChess = board[i][j];
board[i][j]= 0; //棋盤上的棋子不見了
} //把棋子拿在手上
}
}
} ///怎麼換算 j=>x,i=>y
void mouseReleased(){
int i=(mouseY+25-50)/50; ///y是50+i*50
int j=(mouseX+25-50)/50; ///X是50+j*50
board[i][j] = handChess; ///手上的棋子放到棋盤上
handChess=0; //手上的棋子 清空
}
1.7為了讓程式更加的好懂,運用到了函式,讓象棋更加的簡單,並且處理了剛才底部顏色的問題
程式碼:
int[][]board={
{4,5,3,2,1,2,3,5,4},
{0,0,0,0,0,0,0,0,0},
{0,6,0,0,0,0,0,6,0},
{7,0,7,0,7,0,7,0,7},
{0,0,0,0,0,0,0,0,0},//上面是黑色,下面是紅色
{0,0,0,0,0,0,0,0,0},//上面是黑色,下面是紅色
{-7,0,-7,0,-7,0,-7,0,-7},
{0,-6,0,0,0,0,0,-6,0},
{0,0,0,0,0,0,0,0,0},
{-4,-5,-3,-2,-1,-2,-3,-5,-4},
}; //1: 將 2:士 3:象 4:車 5:馬 6:包 7: 卒
String []name ={"將","士" ,"象","車","馬","包","卒"};
String []name2 ={"帥","仕","相","俥","傌","炮","兵"};
void setup(){
size(500,550);
PFont font =createFont("標楷體",30);
textFont(font);
textAlign(CENTER,CENTER);
}
void draw(){
background(#F0B82C);
for(int x=50;x<=450;x+=50){
line(x,50,x,250);
line(x,300,x,500);
}
for(int y=50;y<=500;y+=50){
line(50,y,450,y);
}
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
int id=board[i][j]; ///1開始
if(id==0) continue;//陣列請回去(繼續)
drawChess(50+j*50,50+i*50,id);
}
}
if(handChess!=0)drawChess(mouseX,mouseY,handChess);
}
void drawChess(int x,int y,int id){
fill(255);
ellipse(x,y,40,40);
if(id>0){ //黑
fill(0);
text(name2[id -1],x,y-3);
}else{ //紅
fill(255,0,0);
text(name2[-id-1],x,y-3);
}
}
int handChess=0;
void mousePressed(){
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(dist(mouseX,mouseY,50+j*50,50+i*50)< 20){
handChess = board[i][j];
board[i][j]= 0;//棋盤上的棋子不見了
}//把棋子拿在手上
}
}
} ///怎麼換算 j=>x,i=>y
void mouseReleased(){
int i=(mouseY+25-50)/50; ///y是50+i*50
int j=(mouseX+25-50)/50; ///X是50+j*50
board[i][j] = handChess; ///手上的棋子放到棋盤上
handChess=0;//手上的棋子 清空
}
2.1 製作暗棋,很多都是從上方複製過來的,先是把象棋擺到他的位置上
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);
}
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++){
int id = board[i][j];
drawChess(50+25+j*50,50+25+i*50,id);
}
}
}
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(name2[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);
}
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<10;i++){
for(int j=0;j<9;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(name2[id -1],x,y-3);
}else{ //紅
fill(255,0,0);
text(name2[-id-1],x,y-3);
}
}
程式還沒結束,下下禮拜繼續:))
下禮拜放假喔!!
開心心





沒有留言:
張貼留言