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) {

        ArrayListpoints=new ArrayList();

        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) {

        // 存储当前子可以前进的所有位置
        ArrayListpoints=new ArrayList();
        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=0&&pt.x=0&&pt.y=0&&pt.ypoints=new ArrayList();
        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=0&&pt.y=0&&pt.x=0&&pt.y=0&&pt.x=0&&pt.y=0&&pt.x=0&&pt.y=0&&pt.x=0&&pt.y=0&&pt.x=0&&pt.y=0&&pt.x=0&&pt.y=0&&pt.x=0&&pt.ypoints=new ArrayList();
        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=0&&pt.y<=4){
                            points.add(new Point(pt));
                        }
                    }else{
                        if(pt.x>=0&&pt.x=5&&pt.y=0&&pt.x=0&&pt.y<=4){
                        points.add(new Point(pt));
                    }
                }else{
                    if(pt.x>=0&&pt.x=5&&pt.y=0&&pt.x=0&&pt.y<=4){
                        points.add(new Point(pt));
                    }
                }else{
                    if(pt.x>=0&&pt.x=5&&pt.y=0&&pt.x=0&&pt.y<=4){
                        points.add(new Point(pt));
                    }
                }else{
                    if(pt.x>=0&&pt.x=5&&pt.ypoints=new ArrayList();
        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) {
        // 存储当前子可以前进的所有位置
        ArrayListpoints=new ArrayList();
        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) {
        // 存储当前子可以前进的所有位置
        ArrayListpoints=new ArrayList();
        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);

    }

    @Override
    public 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||realyheight*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;
                        ArrayListlist = new ArrayList();

                        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();
    }

}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:Java版本实现中国象棋-创新互联
文章起源:http://pwwzsj.com/article/jcdes.html