week05
(一)象棋
1.先創建個棋盤吧,按照等差級數:50,100,150,200,250,300,350,400,450
for(int x=50;x<=450;x+=50)
```c
size(500,700);
for(int x=50;x<=450;x+=50){
line(x,50,x,500);
}
for(int y=50;y<=500;y+=50){
line(50,y,450,y);
}
```
size(500,700);
for(int x=50;x<=450;x+=50){
line(x,50,x,500);
}
for(int y=50;y<=500;y+=50){
line(50,y,450,y);
}
```
2.完善象棋棋盤,將中間分開且加條直線,並寫出棋子涵式board
```c
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,200);
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);
}
}
}
```
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,200);
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);
}
}
}
```
3.將board陣列裡的數字替換成中文標楷體,接著在setup裡新增設定,最後再到draw最後一個迴圈裡進行轉換
```c
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,200);
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,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,200);
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);
}
}
}
```
4.完善棋子改變棋盤顏色,在陣列新增負號的0~7作為紅色方的象棋;新增String[]name2:帥,仕,相,俥,傌,炮,兵
```c
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,200);
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);
}
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);
}
}
}
}
```
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,200);
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);
}
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);
}
}
}
}
```
5.新增mousePressed函式,使在棋盤上點擊滑鼠就能新增「將」(當前設定1)和取代原本設定好位置的棋子
```c
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,200);
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);
}
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);
}
}
}
}
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;
}
}
```
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,200);
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);
}
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);
}
}
}
}
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;
}
}
```
6.修改程式讓棋子能隨意移動,新增mouseReleased函式使棋子移動後原本位置上的棋子消失,但此移動不府和象棋規則,所以不完美
```c
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,200);
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);
}
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);
}
}
}
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;
}
}
}
}
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; //手上的棋子清空
}
```
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,200);
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);
}
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);
}
}
}
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;
}
}
}
}
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.因時間緊迫,所以只把棋子印出來而已
```c
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,400);
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<=500;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);
}
}
```
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,400);
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<=500;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);
}
}
```
沒有留言:
張貼留言