Java版本实现中国象棋
生活随笔
收集整理的這篇文章主要介紹了
Java版本实现中国象棋
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
預覽效果
中國象棋
游戲介紹:中國象棋是起源于中國的一種棋,屬于二人對抗性游戲的一種,在中國有著悠久的歷史,由于用具簡單,趣味性強,成為流行極為廣泛的棋藝活動。阿巴阿巴阿巴
代碼結構:Button類和Rect類是直接使用前面畫板中的類,Qizi類是所有棋子的父類
?每個棋子都要繼承Qizi父類并重寫getNext方法,該方法是返回棋子可以前進的位置
Qizi類代碼:
package demo01;import java.util.ArrayList;public abstract class Qizi { // // 行數(高) // public static int height=9; // // 列數(寬) // int width=8; // 棋子的位置public Point point; // 棋子的身份public String Id; // 棋子的屬于紅方還是黑方public String color;// 棋子圖片public String image;public Qizi() {}public Qizi(Point point, String id, String color, String image) {this.point = point;Id = id;this.color = color;this.image = image;}// 返回棋子可以前進的位置abstract Point[] getNext(Qizi[] qipan); }//棋子車 class Ju extends Qizi{public Ju() {}public Ju(Point point, String id, String color, String image) {super(point, id, color, image);}public Point[] getNext(Qizi[] qipan) {ArrayList<Point> points=new ArrayList<Point>();Point pt=new Point(point); // 向左搜索可以前進的格子while (true){ // 向左移動一格pt.x--; // 判斷這一格是否在棋盤內if (pt.x<0){break;} // 判斷這一格內是否有棋子Qizi tmp=null;for (int i = 0; i < qipan.length; i++) {if(pt.equals(qipan[i].point)==true){tmp=qipan[i];break;}}// 第一種情況,格子是空的 // 第二種情況,格子里面是對方棋子 // 第三種情況,格子里面是己方棋子if (tmp==null){points.add(new Point(pt));}else if(color.equals(tmp.color)==false){points.add(new Point(pt));break;}else{break;}}// 向右搜索可以前進的格子pt.set(point);while (true){ // 向右移動一格pt.x++; // 判斷這一格是否在棋盤內if (pt.x>=Chess001.width){break;} // 判斷這一格內是否有棋子Qizi tmp=null;for (int i = 0; i < qipan.length; i++) {if(pt.equals(qipan[i].point)==true){tmp=qipan[i];break;}} // 第一種情況,格子是空的 // 第二種情況,格子里面是對方棋子 // 第三種情況,格子里面是己方棋子if (tmp==null){points.add(new Point(pt));}else if(color.equals(tmp.color)==false){points.add(new Point(pt));break;}else{break;}}// 向上搜索可以前進的格子pt.set(point);while (true){ // 向上移動一格pt.y--; // 判斷這一格是否在棋盤內if (pt.y<0){break;} // 判斷這一格內是否有棋子Qizi tmp=null;for (int i = 0; i < qipan.length; i++) {if(pt.equals(qipan[i].point)==true){tmp=qipan[i];break;}} // 第一種情況,格子是空的 // 第二種情況,格子里面是對方棋子 // 第三種情況,格子里面是己方棋子if (tmp==null){points.add(new Point(pt));}else if(color.equals(tmp.color)==false){points.add(new Point(pt));break;}else{break;}}// 向下搜索可以前進的格子pt.set(point);while (true){ // 向下移動一格pt.y++; // 判斷這一格是否在棋盤內if (pt.y>=Chess001.height){break;} // 判斷這一格內是否有棋子Qizi tmp=null;for (int i = 0; i < qipan.length; i++) {if(pt.equals(qipan[i].point)==true){tmp=qipan[i];break;}} // 第一種情況,格子是空的 // 第二種情況,格子里面是對方棋子 // 第三種情況,格子里面是己方棋子if (tmp==null){points.add(new Point(pt));}else if(color.equals(tmp.color)==false){points.add(new Point(pt));break;}else{break;}}Point[] points1 = new Point[points.size()];for (int i = 0; i < points.size(); i++) {points1[i]=new Point(points.get(i));}return points1;}}//棋子兵 class Bin extends Qizi{public Bin() {}public Bin(Point point, String id, String color, String image) {super(point, id, color, image);}Point[] getNext(Qizi[] qipan) {// 存儲當前子可以前進的所有位置ArrayList<Point> points=new ArrayList<Point>();Point pt=new Point(point);if (color.equals("紅色")==true && point.y<=4|| color.equals("黑色")==true &&point.y>4){ // 判斷兵是否可以左移一格pt.x--; // 1.該點在棋盤內if (pt.x>=0&&pt.x<Chess001.width){ // 判斷該位置上是否是我方棋子boolean bTeam=false;for (int i = 0; i < qipan.length; i++) {if (qipan[i].point.equals(pt)==true){if (qipan[i].color.equals(color)==true){bTeam=true;}break;}}if (bTeam==false){// 2.該點上沒有本方棋子points.add(new Point(pt));}}// 判斷兵是否可以右移一格pt.set(point);pt.x++; // 1.該點在棋盤內if (pt.x>=0&&pt.x<Chess001.width){ // 判斷該位置上是否是我方棋子boolean bTeam=false;for (int i = 0; i < qipan.length; i++) {if (qipan[i].point.equals(pt)==true){if (qipan[i].color.equals(color)==true){bTeam=true;}break;}}if (bTeam==false){// 2.該點上沒有本方棋子points.add(new Point(pt));}}}if (color.equals("紅色")==true){// 判斷兵是否可以上移一格pt.set(point);pt.y--; // 1.該點在棋盤內if (pt.y>=0&&pt.y<Chess001.height){ // 判斷該位置上是否是我方棋子boolean bTeam=false;for (int i = 0; i < qipan.length; i++) {if (qipan[i].point.equals(pt)==true){if (qipan[i].color.equals(color)==true){bTeam=true;}break;}}if (bTeam==false){// 2.該點上沒有本方棋子points.add(new Point(pt));}}}// 判斷兵是否可以下移一格if(color.equals("黑色")==true){pt.set(point);pt.y++; // 1.該點在棋盤內if (pt.y>=0&&pt.y<Chess001.height){ // 判斷該位置上是否是我方棋子boolean bTeam=false;for (int i = 0; i < qipan.length; i++) {if (qipan[i].point.equals(pt)==true){if (qipan[i].color.equals(color)==true){bTeam=true;}break;}}if (bTeam==false){// 2.該點上沒有本方棋子points.add(new Point(pt));}}}Point[] points1 = new Point[points.size()];for (int i = 0; i < points.size(); i++) {points1[i]=new Point(points.get(i));}return points1;} }//棋子馬 class Ma extends Qizi{public Ma() {}public Ma(Point point, String id, String color, String image) {super(point, id, color, image);}Point[] getNext(Qizi[] qipan) {// 存儲當前子可以前進的所有位置ArrayList<Point> points=new ArrayList<Point>();Point pt=new Point(point); // 處理馬向左跳的情況pt.x--;//判斷馬是否撇腳boolean bHefa=true;for (int i = 0; i < qipan.length; i++) { // 撇腳if(pt.equals(qipan[i].point)==true){bHefa=false;break;}} // 沒撇腳if (bHefa==true){pt.set(point);pt.x-=2;pt.y-=1; // 判斷目標點是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (qipan[i].color.equals(color)==true){bHefa=false;}break;}}// 判斷目標點是否在棋盤里面if (bHefa==true){if (pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<Chess001.height){points.add(new Point(pt));}}pt.set(point);pt.x-=2;pt.y+=1;bHefa=true;// 判斷目標點是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (qipan[i].color.equals(color)==true){bHefa=false;}break;}}// 判斷目標點是否在棋盤里面if (bHefa==true){if (pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<Chess001.height){points.add(new Point(pt));}}}// // 處理馬向右跳的情況pt.set(point);pt.x++;//判斷馬是否撇腳bHefa=true;for (int i = 0; i < qipan.length; i++) { // 撇腳if(pt.equals(qipan[i].point)==true){bHefa=false;break;}} // 沒撇腳if (bHefa==true){pt.set(point);pt.x+=2;pt.y-=1; // 判斷目標點是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (qipan[i].color.equals(color)==true){bHefa=false;}break;}}// 判斷目標點是否在棋盤里面if (bHefa==true){if (pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<Chess001.height){points.add(new Point(pt));}}pt.set(point);pt.x+=2;pt.y+=1;bHefa=true;// 判斷目標點是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (qipan[i].color.equals(color)==true){bHefa=false;}break;}}// 判斷目標點是否在棋盤里面if (bHefa==true){if (pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<Chess001.height){points.add(new Point(pt));}}}// 處理馬向上跳的情況pt.set(point);pt.y--;//判斷馬是否撇腳bHefa=true;for (int i = 0; i < qipan.length; i++) { // 撇腳if(pt.equals(qipan[i].point)==true){bHefa=false;break;}} // 沒撇腳if (bHefa==true){pt.set(point);pt.x-=1;pt.y-=2; // 判斷目標點是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (qipan[i].color.equals(color)==true){bHefa=false;}break;}}// 判斷目標點是否在棋盤里面if (bHefa==true){if (pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<Chess001.height){points.add(new Point(pt));}}pt.set(point);pt.x+=1;pt.y-=2;bHefa=true;// 判斷目標點是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (qipan[i].color.equals(color)==true){bHefa=false;}break;}}// 判斷目標點是否在棋盤里面if (bHefa==true){if (pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<Chess001.height){points.add(new Point(pt));}}}// 處理馬向下跳的情況pt.set(point);pt.y++;//判斷馬是否撇腳bHefa=true;for (int i = 0; i < qipan.length; i++) { // 撇腳if(pt.equals(qipan[i].point)==true){bHefa=false;break;}} // 沒撇腳if (bHefa==true){pt.set(point);pt.x-=1;pt.y+=2; // 判斷目標點是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (qipan[i].color.equals(color)==true){bHefa=false;}break;}}// 判斷目標點是否在棋盤里面if (bHefa==true){if (pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<Chess001.height){points.add(new Point(pt));}}pt.set(point);pt.x+=1;pt.y+=2;bHefa=true;// 判斷目標點是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (qipan[i].color.equals(color)==true){bHefa=false;}break;}}// 判斷目標點是否在棋盤里面if (bHefa==true){if (pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<Chess001.height){points.add(new Point(pt));}}}//Point[] points1 = new Point[points.size()];for (int i = 0; i < points.size(); i++) {points1[i]=new Point(points.get(i));}return points1;} }//棋子象 class Xiang extends Qizi{public Xiang() {}public Xiang(Point point, String id, String color, String image) {super(point, id, color, image);}Point[] getNext(Qizi[] qipan) {// 存儲當前子可以前進的所有位置ArrayList<Point> points=new ArrayList<Point>();Point pt=new Point(point);boolean bHefa=true;// 處理象向左上走 // 判斷是否壓象眼pt.x--;pt.y--;for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){bHefa=false;break;}}if (bHefa==true){//判斷目標位置是否有本方棋子pt.set(point);pt.x-=2;pt.y-=2; // 判斷目標位置是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (color.equals(qipan[i].color)==true){bHefa=false;}break;}}//判斷目標點是否在棋盤內if (bHefa==true){if (color.equals("黑色")==true){if(pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<=4){points.add(new Point(pt));}}else{if(pt.x>=0&&pt.x<Chess001.width&&pt.y>=5&&pt.y<Chess001.height){points.add(new Point(pt));}}}}// 處理象向右上走pt.set(point);bHefa=true; // 判斷是否壓象眼pt.x++;pt.y--;for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){bHefa=false;break;}}if (bHefa==true){//判斷目標位置是否有本方棋子pt.set(point);pt.x+=2;pt.y-=2; // 判斷目標位置是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (color.equals(qipan[i].color)==true){bHefa=false;}break;}}//判斷目標點是否在棋盤內if (bHefa==true){if (color.equals("黑色")==true){if(pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<=4){points.add(new Point(pt));}}else{if(pt.x>=0&&pt.x<Chess001.width&&pt.y>=5&&pt.y<Chess001.height){points.add(new Point(pt));}}}}// 處理象向左下走pt.set(point);bHefa=true; // 判斷是否壓象眼pt.x--;pt.y++;for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){bHefa=false;break;}}if (bHefa==true){//判斷目標位置是否有本方棋子pt.set(point);pt.x-=2;pt.y+=2; // 判斷目標位置是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (color.equals(qipan[i].color)==true){bHefa=false;}break;}}//判斷目標點是否在棋盤內if (bHefa==true){if (color.equals("黑色")==true){if(pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<=4){points.add(new Point(pt));}}else{if(pt.x>=0&&pt.x<Chess001.width&&pt.y>=5&&pt.y<Chess001.height){points.add(new Point(pt));}}}}// 處理象向右下走pt.set(point);bHefa=true; // 判斷是否壓象眼pt.x++;pt.y++;for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){bHefa=false;break;}}if (bHefa==true){//判斷目標位置是否有本方棋子pt.set(point);pt.x+=2;pt.y+=2; // 判斷目標位置是否有本方棋子for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){if (color.equals(qipan[i].color)==true){bHefa=false;}break;}}//判斷目標點是否在棋盤內if (bHefa==true){if (color.equals("黑色")==true){if(pt.x>=0&&pt.x<Chess001.width&&pt.y>=0&&pt.y<=4){points.add(new Point(pt));}}else{if(pt.x>=0&&pt.x<Chess001.width&&pt.y>=5&&pt.y<Chess001.height){points.add(new Point(pt));}}}}//Point[] points1 = new Point[points.size()];for (int i = 0; i < points.size(); i++) {points1[i]=new Point(points.get(i));}return points1;} }//棋子士 class Shi extends Qizi{public Shi() {}public Shi(Point point, String id, String color, String image) {super(point, id, color, image);}Point[] getNext(Qizi[] qipan) {// 存儲當前子可以前進的所有位置ArrayList<Point> points=new ArrayList<Point>();Point pt=new Point(point);boolean bHefa=true;Point []ptMubiao={new Point(point.x-1,point.y-1),new Point(point.x+1,point.y+1),new Point(point.x+1,point.y-1),new Point(point.x-1,point.y+1)};for (int i = 0; i < ptMubiao.length; i++) {bHefa=true; // 判斷目標點是否有本方棋子for (int i1 = 0; i1 < qipan.length; i1++) {if (ptMubiao[i].equals(qipan[i1].point)==true){if (color.equals(qipan[i1].color)==true){bHefa=false;}break;}}if(bHefa == true){// 判斷目標點是否在范圍內if (color.equals("黑色")==true){if (ptMubiao[i].x>=3&&ptMubiao[i].x<=5&&ptMubiao[i].y>=0&&ptMubiao[i].y<=2){points.add(new Point(ptMubiao[i]));}}else {if (ptMubiao[i].x>=3&&ptMubiao[i].x<=5&&ptMubiao[i].y>=7&&ptMubiao[i].y<=9){points.add(new Point(ptMubiao[i]));}}}}//Point[] points1 = new Point[points.size()];for (int i = 0; i < points.size(); i++) {points1[i]=new Point(points.get(i));}return points1;} }//棋子將class Jiang extends Qizi{public Jiang() {}public Jiang(Point point, String id, String color, String image) {super(point, id, color, image);}Point[] getNext(Qizi[] qipan) {// 存儲當前子可以前進的所有位置ArrayList<Point> points=new ArrayList<Point>();Point pt=new Point(point);boolean bHefa=true;Point []ptMubiao={new Point(point.x,point.y-1),new Point(point.x,point.y+1),new Point(point.x+1,point.y),new Point(point.x-1,point.y)};for (int i = 0; i < ptMubiao.length; i++) {bHefa=true; // 判斷目標點是否有本方棋子for (int i1 = 0; i1 < qipan.length; i1++) {if (ptMubiao[i].equals(qipan[i1].point)==true){if (color.equals(qipan[i1].color)==true){bHefa=false;}break;}}if(bHefa == true){// 判斷目標點是否在范圍內if (color.equals("黑色")==true){if (ptMubiao[i].x>=3&&ptMubiao[i].x<=5&&ptMubiao[i].y>=0&&ptMubiao[i].y<=2){points.add(new Point(ptMubiao[i]));}}else {if (ptMubiao[i].x>=3&&ptMubiao[i].x<=5&&ptMubiao[i].y>=7&&ptMubiao[i].y<=9){points.add(new Point(ptMubiao[i]));}}}}//Point[] points1 = new Point[points.size()];for (int i = 0; i < points.size(); i++) {points1[i]=new Point(points.get(i));}return points1;} }//棋子炮 class Pao extends Qizi{public Pao() {}public Pao(Point point, String id, String color, String image) {super(point, id, color, image);}Point[] getNext(Qizi[] qipan) {// 存儲當前子可以前進的所有位置ArrayList<Point> points=new ArrayList<Point>();Point pt=new Point(point);// 處理炮向左boolean bEat=false;while (true){pt.x--;//如果超出范圍直接退出if (pt.x<0||pt.x>=Chess001.width||pt.y<0||pt.y>=Chess001.width){break;}boolean bYouzi=false;//目標格子是否有棋子存在boolean bFriend=false;//目標格子是否有本方棋子存在for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){bYouzi=true;if (color.equals(qipan[i].color)==true){bFriend=true;}break;}}if (bEat==false){ // 第一階段:移動棋子//如果目標是空格的話把該該格子加到數組中if (bYouzi==false){points.add(new Point(pt));}else {// 如果目標格子有棋子,那么進入到第二該段bEat=true;}// 第二該段:吃掉棋子}else{if(bYouzi==false){}else{//如果遇到對方棋子就吃掉if (bFriend==true ){break;}else{//如果遇到本方棋子就退出points.add(new Point(pt));break;}}}}// 處理炮向右pt.set(point); // bEat false表示第一階段:移動階段 // true表示第二階段:吃子階段bEat=false;while (true){pt.x++;//如果超出范圍直接退出if (pt.x<0||pt.x>=Chess001.width||pt.y<0||pt.y>=Chess001.width){break;}boolean bYouzi=false;//目標格子是否有棋子存在boolean bFriend=false;//目標格子是否有本方棋子存在for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){bYouzi=true;if (color.equals(qipan[i].color)==true){bFriend=true;}break;}}if (bEat==false){ // 第一階段:移動棋子//如果目標是空格的話把該該格子加到數組中if (bYouzi==false){points.add(new Point(pt));}else {// 如果目標格子有棋子,那么進入到第二該段bEat=true;}// 第二該段:吃掉棋子}else{if(bYouzi==false){}else{//如果遇到對方棋子就吃掉if (bFriend==true ){break;}else{//如果遇到本方棋子就退出points.add(new Point(pt));break;}}}}// 處理炮向上pt.set(point); // bEat false表示第一階段:移動階段 // true表示第二階段:吃子階段bEat=false;while (true){pt.y--;//如果超出范圍直接退出if (pt.x<0||pt.x>=Chess001.width||pt.y<0||pt.y>=Chess001.width){break;}boolean bYouzi=false;//目標格子是否有棋子存在boolean bFriend=false;//目標格子是否有本方棋子存在for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){bYouzi=true;if (color.equals(qipan[i].color)==true){bFriend=true;}break;}}if (bEat==false){ // 第一階段:移動棋子//如果目標是空格的話把該該格子加到數組中if (bYouzi==false){points.add(new Point(pt));}else {// 如果目標格子有棋子,那么進入到第二該段bEat=true;}// 第二該段:吃掉棋子}else{if(bYouzi==false){}else{//如果遇到對方棋子就吃掉if (bFriend==true ){break;}else{//如果遇到本方棋子就退出points.add(new Point(pt));break;}}}}// 處理炮向下pt.set(point); // bEat false表示第一階段:移動階段 // true表示第二階段:吃子階段bEat=false;while (true){pt.y++;//如果超出范圍直接退出if (pt.x<0||pt.x>=Chess001.width||pt.y<0||pt.y>=Chess001.width){break;}boolean bYouzi=false;//目標格子是否有棋子存在boolean bFriend=false;//目標格子是否有本方棋子存在for (int i = 0; i < qipan.length; i++) {if (pt.equals(qipan[i].point)==true){bYouzi=true;if (color.equals(qipan[i].color)==true){bFriend=true;}break;}}if (bEat==false){ // 第一階段:移動棋子//如果目標是空格的話把該該格子加到數組中if (bYouzi==false){points.add(new Point(pt));}else {// 如果目標格子有棋子,那么進入到第二該段bEat=true;}// 第二該段:吃掉棋子}else{if(bYouzi==false){}else{//如果遇到對方棋子就吃掉if (bFriend==true ){break;}else{//如果遇到本方棋子就退出points.add(new Point(pt));break;}}}}//Point[] points1 = new Point[points.size()];for (int i = 0; i < points.size(); i++) {points1[i]=new Point(points.get(i));}return points1;} }Chess類代碼
package demo01;import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.ArrayList;public class Chess002 extends JFrame implements KeyListener, ActionListener, MouseListener {// 行數(高)public static int height=10;// 列數(寬)public static int width=9;// 格子的大小public static int size=86;// 標題欄的高度public static int title=113-43-5;public static int left =75-43;public static int right=35+300;public static int bottom=35;Button[] button=new Button[2];// 棋盤中所有的棋子Qizi []qipan=new Qizi[32];// 設置圖片private Image image=null;Graphics gf=null;// 設置棋盤Image image1=Toolkit.getDefaultToolkit().getImage("C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\main.gif");// 當前選中的棋子,默認為空Qizi select=null;// 游戲狀態 0表示等待紅方走 1表示黑方走 2表示紅方勝 3表示黑方勝int zhuangtai=0;public void Tian(){button[0]=new Button(new Rect(110*8,title+1*size,200,100),"重新開始");button[1]=new Button(new Rect(110*8,title+3*size,200,100),"紅方請落子");button[1].Text=Color.red;button[1].Back=Color.WHITE;button[0].Back=Color.WHITE;qipan[0]=new Ju(new Point(0,0),"車","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑車.gif");qipan[1]=new Ju(new Point(8,0),"車","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑車.gif");qipan[2]=new Ju(new Point(0,9),"車","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅車.gif");qipan[3]=new Ju(new Point(8,9),"車","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅車.gif");qipan[4]=new Bin(new Point(0,3),"兵","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑卒.gif");qipan[5]=new Bin(new Point(2,3),"兵","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑卒.gif");qipan[6]=new Bin(new Point(4,3),"兵","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑卒.gif");qipan[7]=new Bin(new Point(6,3),"兵","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑卒.gif");qipan[8]=new Bin(new Point(8,3),"兵","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑卒.gif");qipan[9]=new Bin(new Point(0,6),"兵","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅卒.gif");qipan[10]=new Bin(new Point(2,6),"兵","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅卒.gif");qipan[11]=new Bin(new Point(4,6),"兵","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅卒.gif");qipan[12]=new Bin(new Point(6,6),"兵","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅卒.gif");qipan[13]=new Bin(new Point(8,6),"兵","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅卒.gif");qipan[14]=new Ma(new Point(1,0),"馬","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑馬.gif");qipan[15]=new Ma(new Point(7,0),"馬","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑馬.gif");qipan[16]=new Ma(new Point(1,9),"馬","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅馬.gif");qipan[17]=new Ma(new Point(7,9),"馬","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅馬.gif");qipan[18]=new Xiang(new Point(2,0),"象","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑象.gif");qipan[19]=new Xiang(new Point(6,0),"象","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑象.gif");qipan[20]=new Xiang(new Point(2,9),"象","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅象.gif");qipan[21]=new Xiang(new Point(6,9),"象","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅象.gif");qipan[22]=new Shi(new Point(3,0),"士","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑士.gif");qipan[23]=new Shi(new Point(5,0),"士","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑士.gif");qipan[24]=new Shi(new Point(3,9),"士","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅士.gif");qipan[25]=new Shi(new Point(5,9),"士","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅士.gif");qipan[26]=new Jiang(new Point(4,0),"將","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑將.gif");qipan[27]=new Jiang(new Point(4,9),"將","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅將.gif");qipan[28]=new Pao(new Point(1,2),"炮","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑炮.gif");qipan[29]=new Pao(new Point(7,2),"炮","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑炮.gif");qipan[30]=new Pao(new Point(1,7),"炮","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅炮.gif");qipan[31]=new Pao(new Point(7,7),"炮","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅炮.gif");//設置窗口的寬高this.setSize(width*size+left+right ,height*size+title+bottom); // 設置標題this.setTitle("中國象棋");//設置窗口能看見this.setVisible(true); // 設置窗口頂點坐標的位置this.setLocation(100,10);//設置鼠標監聽事件(也就是當鼠標有什么反應都會調用此函數)this.addMouseListener(this);}@Overridepublic void paint(Graphics g) {//初始化臨時圖片//解決閃爍問題if(image==null){image=this.createImage(width*size+left+right,height*size+title+bottom);}if(this.gf ==null){this.gf =image.getGraphics();}// 擦除背景gf.setColor(Color.gray);gf.fill3DRect(0,0,width*size,title+height*size,true);// 繪制背景gf.setColor(Color.orange);gf.fill3DRect(0,title+0,width*size,title+height*size,true);// 畫棋盤int w = (int)(558.0*1.5);int h = (int)(620*1.5);gf.drawImage(image1,0,30,w,h,null);// 畫棋子for (int i = 0; i < qipan.length; i++) {Image image=Toolkit.getDefaultToolkit().getImage(qipan[i].image);gf.drawImage(image,qipan[i].point.x*size+left,qipan[i].point.y*size+title,size,size,null);}if(select!=null){// 標注選中的棋子gf.setColor(Color.cyan);gf.drawRect(select.point.x*size+left,select.point.y*size+title,size,size);// 繪制出該棋子可以移動的位置Point [] points=select.getNext(qipan);for (int i1 = 0; i1 < points.length; i1++) {gf.setColor(new Color(2, 145, 219, 250)); // gf.fillOval(points[i1].x*size+left,points[i1].y*size+title,size,size);gf.fillOval(points[i1].x*size+left+(size-20)/2,points[i1].y*size+title+(size-20)/2,20,20);}}// 繪制按鈕for (int i = 0; i < button.length; i++) { // 繪制按鈕選中顏色if (button[i].bXuanzhong==true){gf.setColor(Color.pink);gf.fillRect(button[i].rect.x,button[i].rect.y,button[i].rect.width,button[i].rect.height);// 繪制按鈕為選中時的顏色}else {gf.setColor(button[i].Back);gf.fillRect(button[i].rect.x,button[i].rect.y,button[i].rect.width,button[i].rect.height);} // 當按鈕是懸停狀態時,字體顏色設置為白色if(button[i].bXuanTing==true){gf.setColor(Color.white);// 當按鈕是非懸停狀態時,字體顏色設置為黑色}else{gf.setColor(button[i].Text);}gf.setFont(new Font("華文新魏", 10, 35)); //設置字體gf.drawString(button[i].name,button[i].rect.x+(button[i].rect.width-button[i].name.length()*35)/2,button[i].rect.y+(button[i].rect.height+35/2)/2);}g.drawImage(image,0,0,null);}public void actionPerformed(ActionEvent e) {}public void keyTyped(KeyEvent e) {}public void keyPressed(KeyEvent e) {}public void keyReleased(KeyEvent e) {}public void mouseClicked(MouseEvent e) {}// 鼠標按壓事件public void mousePressed(MouseEvent e) {// 處理鼠標左鍵if(e.getButton()==e.BUTTON1) { // 鼠標點擊的真實坐標int realx = e.getX();int realy = e.getY();// 被點擊的按鈕, 空表示沒有按鈕被點擊, 如果點擊了某個按鈕, 那么name就記錄按鈕的名字String name="";// 判斷鼠標左鍵按壓的地方在不在按鈕內部for (int i = 0; i < button.length; i++) {if(button[i].isInButton(realx,realy)==true){ // 記錄鼠標左鍵按壓按鈕的名字name=button[i].name;break;}}// 處理各種按鈕的按壓事件if ("重新開始".equals(name) == true) {System.out.println(name);qipan = new Qizi[32];qipan[0]=new Ju(new Point(0,0),"車","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑車.gif");qipan[1]=new Ju(new Point(8,0),"車","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑車.gif");qipan[2]=new Ju(new Point(0,9),"車","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅車.gif");qipan[3]=new Ju(new Point(8,9),"車","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅車.gif");qipan[4]=new Bin(new Point(0,3),"兵","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑卒.gif");qipan[5]=new Bin(new Point(2,3),"兵","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑卒.gif");qipan[6]=new Bin(new Point(4,3),"兵","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑卒.gif");qipan[7]=new Bin(new Point(6,3),"兵","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑卒.gif");qipan[8]=new Bin(new Point(8,3),"兵","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑卒.gif");qipan[9]=new Bin(new Point(0,6),"兵","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅卒.gif");qipan[10]=new Bin(new Point(2,6),"兵","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅卒.gif");qipan[11]=new Bin(new Point(4,6),"兵","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅卒.gif");qipan[12]=new Bin(new Point(6,6),"兵","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅卒.gif");qipan[13]=new Bin(new Point(8,6),"兵","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅卒.gif");qipan[14]=new Ma(new Point(1,0),"馬","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑馬.gif");qipan[15]=new Ma(new Point(7,0),"馬","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑馬.gif");qipan[16]=new Ma(new Point(1,9),"馬","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅馬.gif");qipan[17]=new Ma(new Point(7,9),"馬","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅馬.gif");qipan[18]=new Xiang(new Point(2,0),"象","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑象.gif");qipan[19]=new Xiang(new Point(6,0),"象","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑象.gif");qipan[20]=new Xiang(new Point(2,9),"象","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅象.gif");qipan[21]=new Xiang(new Point(6,9),"象","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅象.gif");qipan[22]=new Shi(new Point(3,0),"士","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑士.gif");qipan[23]=new Shi(new Point(5,0),"士","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑士.gif");qipan[24]=new Shi(new Point(3,9),"士","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅士.gif");qipan[25]=new Shi(new Point(5,9),"士","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅士.gif");qipan[26]=new Jiang(new Point(4,0),"將","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑將.gif");qipan[27]=new Jiang(new Point(4,9),"將","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅將.gif");qipan[28]=new Pao(new Point(1,2),"炮","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑炮.gif");qipan[29]=new Pao(new Point(7,2),"炮","黑色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\黑炮.gif");qipan[30]=new Pao(new Point(1,7),"炮","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅炮.gif");qipan[31]=new Pao(new Point(7,7),"炮","紅色","C:\\Users\\meisir666\\Desktop\\象棋\\src\\main\\java\\demo01\\image\\紅炮.gif");// button[1]=new Button(new Rect(110*8,title+3*size,200,100),"紅方請落子");button[1].Text=Color.red;button[1].name = "紅方請落子";select = null;zhuangtai = 0;repaint();return;}Point ptGezi=new Point(-1,-1); // int gezix=-1; // int geziy=-1;// 將真是坐標轉換為格子坐標if(realx<0+left ||realx>width*size+left||realy<title||realy>height*size+title){select=null;}else {//說明這個點在棋盤里ptGezi.x=(realx-left)/size;ptGezi.y=(realy-title)/size;if(select==null){// 如果點中了落子方的棋子那么將該子設置為選中狀態Qizi click=null;// 遍歷棋子,測試是否點中棋子for (int i = 0; i < qipan.length; i++) {if (ptGezi.equals(qipan[i].point)==true){click=qipan[i];break;}}// 選中棋子if (click!=null){if (zhuangtai==0&&click.color.equals("紅色")||zhuangtai==1&&click.color.equals("黑色")){select=click;}}}else { // 獲取選中棋子,可以前進的位置Point[] points=select.getNext(qipan);// 第一種情況,目標點是可以前進的位置// 如果該位置上有對方的棋子,那么就吃掉對方棋子boolean bGo = false;for (int i = 0; i < points.length; i++) {if (points[i].equals(ptGezi)==true){bGo=true;break;}}// 第二個點,是可以前進的位置if(bGo==true){Qizi qzEat = null;ArrayList<Qizi> list = new ArrayList<Qizi>();for (int i = 0; i < qipan.length; i++) {if( qipan[i].point.equals(ptGezi)==true) {// 吃掉對方的棋子qzEat = qipan[i];}else {list.add(qipan[i]);}}if(qzEat == null){select.point.set(ptGezi);select=null;}else {// 刪除被吃掉的棋子qipan = new Qizi[list.size()];for (int i = 0; i < qipan.length; i++) {qipan[i] = list.get(i);}// 移動選中的棋子select.point.set(qzEat.point);select=null;// 判斷被吃掉的棋子是否是將,如果是的話,就輸了if(qzEat.Id.equals("將") == true){if(qzEat.color.equals("黑色")==true) {zhuangtai =2;button[1].name="紅方勝";button[1].Text=Color.red;} else{zhuangtai =3;button[1].name="黑方勝";button[1].Text=Color.black;}}}if(zhuangtai ==0){zhuangtai = 1;button[1].name="黑方請落子";button[1].Text=Color.black;}else if(zhuangtai ==1){zhuangtai = 0;button[1].name="紅方請落子";button[1].Text=Color.red;}// 第二個,不是可以前進的位置}else {select = null;// 如果點擊的位置為本方棋子,那么繼續選中這個棋子for (int i = 0; i < qipan.length; i++) {if (ptGezi.equals(qipan[i].point)==true){if (zhuangtai==0&&qipan[i].color.equals("紅色")|| zhuangtai==1&&qipan[i].color.equals("黑色")){select=qipan[i];break;}}}}// 第二種情況,目標點不在可前進的位置// 如果選中了,自己方的棋子,則把該棋子設置為選中樁體}}}repaint();}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public static void main(String[] args) {Chess002 chess=new Chess002();chess.Tian();}}總結
以上是生活随笔為你收集整理的Java版本实现中国象棋的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA毕设项目酒店订房系统(java+
- 下一篇: 海图的用途