Java版本实现中国象棋-创新互联
预览效果
文章标题:Java版本实现中国象棋-创新互联
文章出自:http://hbruida.cn/article/jcdes.html
中国象棋
在武川等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、成都网站建设 网站设计制作定制网站设计,公司网站建设,企业网站建设,成都品牌网站建设,成都营销网站建设,成都外贸网站制作,武川网站建设费用合理。游戏介绍:中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史,由于用具简单,趣味性强,成为流行极为广泛的棋艺活动。阿巴阿巴阿巴
代码结构: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://hbruida.cn/article/jcdes.html