你好,我是罡罡同学!
代码谱第一页忘掉心上人,最后一页。。。。。。

打赏一点钱,帮我买包辣条,继续创作,谢谢大家!

大家关注微信公众号 罡罡同学 回复中国象棋

就可以免费获得压缩包啦!!

压缩包里面内容: 1.源代码 2. 答辩PPT 3.课程设计报告 (大家可以参考)

 先说一下,大家需要将本项目部署到本地应该如何操作,CSDN上面有源代码,但为了让大家能够更好的使程序成功在本地运行,我将代码压缩包发到了网盘上,大家可以直接下载压缩包。

传送地址

数据结构课程设计——校园导游系统(C语言):
B站视频: https://www.bilibili.com/video/BV1ui4y137X9
CSDN源码:
https://blog.csdn.net/m0_46625346/article/details/107149473

Java课程设计——中国象棋
B站视频:https://www.bilibili.com/video/BV1MV411t71f
CSDN源码:https://blog.csdn.net/m0_46625346/article/details/112257325

准备

大家关注微信公众号 罡罡同学 回复中国象棋

就可以免费获得压缩包啦!!

导入项目

大家解开压缩包,会得到一个MyChess的文件夹,大家用Eclipse打开就可以了,但有些同学可能不会,在这说一下,如何导入一个项目。
1.打开Eclipse时,选择MyChess文件夹所在位置。
2.点击左上角的File,选择 import 选项。
3.在import 弹窗中,点击General 文件夹,
再点击 第二个 Existing Projects into Workspace ,
4.再点击 右侧的 Browse 选项,找到 MyChess文件夹所在位置,选中即可。
导入成功!

修改Eclipse代码字体

1.修改代码字体,修改为程序员必备字体(老师说的 哈哈)
点击标题栏中的 Windows -->Preferences -->
General --> Appearance --> Colors and Fonts 然后在右侧中,
找到Java文件夹,
再选中 Java Editor Text Font (set to default: Text Font)
推荐字体 Consals 常规 14号大小。
2.显示代码行数
点击标题栏中的 Windows -->Preferences -->
General --> Editors 中Text Editors 会看到很多行选项
我们选择 Show line numbers 选择项
3.设置代码提示
点击标题栏中的 Windows -->Preferences -->
Java --> Editor --> 点击Content Assist
在右侧中下面 有 Auto activation triggers for Java: .
在里面输入 从A到Z 和 a到z 即可
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

到目前基本准备操作已经完成。
下面正式开始介绍中国象棋。

中国象棋

下面是 中国象棋 MyChess 的结构框图(架构是老师帮忙写的)

所有棋子 继承一个父类 org.chess 中的 chess.java
Canvas.java 主要负责 棋盘的绘制,棋子的拜访,棋盘初始化。

ChessGame.java 主要负责 框图的初始化,按钮以及按钮事件的建立。

ChessManager.java 主要负责 注册各类棋子,并且区分 黑红棋子。

ArmsChess.java 主要负责 卒和兵的移动规则。

CannonChess.java 主要负责 炮的移动规则(不区分黑红方)

ChapChess.java 主要负责 仕、士的移动规则

Chess.java 所有棋子的父类,所有棋子继承自该类

ElephantChess.java 主要负责 象的移动规则

GeneralChess.java 主要负责 将、帅的移动规则

HorseChess.java 主要负责 马 的移动规则

ImageTool.java 主要负责 加载所有棋子的图片

musicStuff.java 主要负责 音乐的循环播放(此处需要说明一下,该功能只能循环播放音乐,不能暂停,大家可以修改此功能)

RangeChecker.java 主要负责 判断所有棋子的走法是否合法。

Test文件夹中 是所有棋子的测试类,用来测试各类棋子的移动规则是否正确

image文件夹中是 所有棋子和棋盘的图片(来自网络)

music文件夹中是 音乐(高山流水),此处要注意文件格式为wav格式的。当然,主要还是看大家如何实现这个音乐播放器,不同的方法对于格式要求不同。此模块,是我们组的一个同学在网上学的比较简单的一个方法。

下图是MyChess文件下的所有内容 :

谢谢大家的支持,您的一键三连是 罡罡同学前进的最大动力!
一键三连 一键三连 一键三连 一键三连 一键三连 一键三连

废话不多说,直接上代码(下面是一大波代码 哈哈):
1.ChessGame.java 代码:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;import org.chess.musicStuff;
/*2020-第一组-中国象棋项目分工* 姜权罡(组长):炮、马、架构、图形化界面、视频讲解、报告(结构和代码和总结)、*            PPT代码和总结反思部分、所有工作的审核。* * 庞义俊:车、音乐、图片搜集、绘制结构图。* 董玟彤:象、PPT。* 李若彤:将、士、PPT。* 曹佳榕:卒、PPT、报告(项目介绍)* * 2020/12/22 所有工作全部完成!* */
public class ChessGame {public static void main(String[] args) {JFrame f =new JFrame("中国象棋:观棋不语真君子,棋死无悔大丈夫");ImageIcon icon = new ImageIcon("image\\红将.gif");f.setIconImage(icon.getImage());f.setSize(730,750);f.setLocationRelativeTo(null);f.setLayout(new BorderLayout());//学习一下BorderLayout()布局管理器,把按钮放进去。f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);final Canvas c=  new Canvas();f.add(c);JButton newStartGame = new JButton("新游戏"); JButton startMusic = new JButton("播放音乐");JButton ExitGame = new JButton("退出游戏");//为新游戏按钮  添加事件newStartGame.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubc.initMap();//新游戏c.repaint();//新游戏后,出棋先后顺序互换c.select_c = -1;c.select_r = -1;c.isBlack=!c.isBlack;//System.out.println("点击\n");}});//为退出按钮  添加事件ExitGame.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubint j=JOptionPane.showConfirmDialog(null, "真的要退出吗?","退出",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if(j==JOptionPane.YES_OPTION){System.exit(0);}}});//为音乐播放按钮  添加事件startMusic.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubString filepath = "music\\music.wav";musicStuff musicObject = new musicStuff();musicObject.playMusic(filepath);//音乐播放}});//f.setIconImage(new ImageIcon("红将.gif").getImage());f.add(newStartGame,BorderLayout.WEST);f.add(startMusic,BorderLayout.EAST);f.add(ExitGame,BorderLayout.SOUTH);f.setVisible(true);}
}

2.Canvas.java 代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import javax.xml.bind.Marshaller.Listener;import org.chess.Chess;
import org.chess.ImageTool;
import org.chess.RangeChecker;import sun.tools.jar.resources.jar;import com.sun.org.apache.bcel.internal.generic.NEW;
public class Canvas extends JPanel {public static final int row=10;//棋盘行数public static final int line=9;//棋盘列数int[][] map = new int[row][line];JLabel Icon;Image chessimage = null;Font  font;public static final int BLACK = 1000;public static final int WHITE = 0;boolean isBlack = false; //当前是谁下子int select_c = -1;int select_r = -1;public Canvas(){//棋盘为10行9列,默认就好,不用改//chessimage = new ImageIcon("黑车.gif").getImage();font = new Font("宋体",Font.BOLD,30);initMap();addMouseListener(new MouseAdapter(){@Overridepublic void mouseClicked(MouseEvent e){//super.mouseClicked(e);//System.out.println(e.getButton());if(e.getButton()==MouseEvent.BUTTON1){int x = e.getX();int y = e.getY();//System.out.println(e.getX()+","+e.getY()+"["+x+","+y+"]");int r = (y - 25) /58;int c = (x - 25) /58;//System.out.println("r = "+r+", c = "+c);//选子if(select_c == -1&&map[r][c]!=0){if(RangeChecker.selectInRange(map,r,c,isBlack)){//isBlack 是 红方select_c = c;select_r = r;repaint();}else{showFail("请选择己方棋子");}return ;// 选子阶段结束}boolean valid  = RangeChecker.inRange(map, select_r,select_c,r, c, isBlack);if(!valid){showFail("下子失败");}Chess chess = manager.getTheChess(map[select_r][select_c]);valid = chess.check(map, select_r, select_c, r, c, isBlack);if(!valid||(map[select_r][select_c]<1000&&map[r][c]<1000&&map[r][c]!=0)||(map[select_r][select_c]>1000&&map[r][c]>1000&&map[r][c]!=0)){showFail("下子失败,规则不允许");select_c = -1;select_r = -1;repaint();return ;}map[r][c] = map[select_r][select_c ];map[select_r][select_c ] = 0; select_c = -1;select_r = -1;isBlack = !isBlack;//对方来下repaint();}}});}protected void showFail(String msg) {System.out.println(msg);}ChessManager manager = new ChessManager();private Image mainGif;public void initMap(){int c=0;int i,k;map=new int [][]{{1000+'C',1000+'H',1000+'E',1000+'S',1000+'G',1000+'S',1000+'E',1000+'H',1000+'C'}, {0,0,0,0,0,0,0,0,0,},{0,1000+'P',0,0,0,0,0,1000+'P',0},{1000+'A',0,1000+'A',0,1000+'A',0,1000+'A',0,1000+'A'},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{'A',0,'A',0,'A',0,'A',0,'A'},{0,'P',0,0,0,0,0,'P',0},{0,0,0,0,0,0,0,0,0},{'C','H','E','S','G','S','E','H','C'}};//System.out.println(map[9][4]);mainGif = ImageTool.loadImage("main.gif");manager.loadAllImage();}//内部类public static class MyPoint{public int r;public int c;public MyPoint(int r,int c) {this.r = r;this.c = c;}}int pw = 60;@Overridepublic void paint(Graphics g){super.paint(g);//System.out.println("paint called ----------------");g.setFont(font);int w = this.getWidth();int h = this.getHeight();//System.out.println("宽"+w+"  高"+h);g.drawImage(mainGif, 0, 0,null);for(int r = 0;r<map.length;r++){for(int c = 0;c<map[r].length;c++){safelyDraw(g, manager.getImage(map[r][c]), 25+58*c, r*58+25);}}g.drawRect(25+58*select_c, 25+58*select_r, 58, 58);g.drawString(isBlack?"黑方下棋":"红方下棋", 220 , 650);}public void safelyDraw(Graphics g,Image img,int x,int y){try {if(img == null){//System.err.println("img = null ,skip drawing "+x+" , "+y);}g.drawImage(img, x, y,null);} catch (Exception e) {e.printStackTrace();}}
}

3.ChessManager.java 代码:

import java.awt.Image;
import java.util.HashMap;
import org.chess.ArmsChess;
import org.chess.CannonChess;
import org.chess.CarChess;
import org.chess.ChapChess;
import org.chess.Chess;
import org.chess.ElephantChess;
import org.chess.GeneralChess;
import org.chess.HorseChess;
import org.chess.ImageTool;public class ChessManager {HashMap<Integer,Chess> chesses = new HashMap<Integer,Chess>();public  ChessManager(){ArmsChess a = new ArmsChess();chesses.put(a.getType(), a);CannonChess b =new CannonChess();chesses.put(b.getType(),b);CarChess c = new CarChess();chesses.put(c.getType(), c);ChapChess d = new ChapChess();chesses.put(d.getType(), d);ElephantChess e = new ElephantChess();chesses.put(e.getType(), e);GeneralChess f = new GeneralChess();chesses.put(f.getType(), f);HorseChess g = new HorseChess();chesses.put(g.getType(), g);//其它其子类也在这里注册}public Chess getTheChess(int type){if(type > 1000) type -= 1000;return chesses.get(type);}HashMap<String, Image> img_map=new HashMap<String, Image>();public void loadAllImage() {for(Chess c : chesses.values()){Image img_black = c.getImage(true);Image img_red = c.getImage(false);img_map.put(c.getType()+"_黑", img_black);img_map.put(c.getType()+"_红", img_red);}}public Image getImage(int type){int color = type /1000;type = type % 1000;return img_map.get(type+(color==1?"_黑":"_红"));}
}

4.ArmsChess.java代码:

package org.chess;
import java.awt.Image;import javax.swing.JOptionPane;
/*** 兵 A* @author 曹佳榕 董玟彤(姜权罡最后修改成功)*/
public class ArmsChess extends Chess{@Overridepublic boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {// TODO Auto-generated method stubint cc = to_c - now_c;int rc = to_r - now_r;if(isBlack==true){//黑卒if(now_r<=4){//黑卒未过河boolean succ =  cc  == 0 && rc == 1;//黑卒未过河,向下前进一格if(!succ) return false;//如果不是向下前进一格,直接失败else{return true;}}else{//黑卒过河cc = Math.abs(to_c - now_c);boolean succ =  (cc  == 1&&rc==0) || (rc == 1&&cc==0);//黑卒过河,向下前进一格if(!succ) return false;//如果不是向下/向左/向右前进一格,直接失败else{if(map[to_r][to_c]=='G'){JOptionPane.showMessageDialog(null, "黑方胜利!");}return true;}//return map[to_r][to_c]==0;}}else{//红卒if(now_r>=5){//红卒未过河boolean succ =  cc  == 0 && rc == -1;//红卒未过河,向上前进一格if(!succ) return false;//如果不是向上前进一格,直接失败else{return true;}}else{//红卒过河cc = Math.abs(to_c - now_c);boolean succ =  (cc  == 1&&rc==0) || (rc == -1&&cc==0);//红卒过河,向上前进一格if(!succ) return false;//如果不是向上/向左/向右前进一格,直接失败else{if(map[to_r][to_c]==1000+'G'){JOptionPane.showMessageDialog(null, "红方胜利!");}return true;}}}}@Overridepublic String getName() {// TODO Auto-generated method stubreturn "卒";}@Overridepublic int getType() {// TODO Auto-generated method stubreturn 'A';}@Overridepublic Image getImage(boolean isBlack) {// TODO Auto-generated method stubreturn ImageTool.loadImage(isBlack?"黑卒.gif":"红卒.gif");}
}

5.CannonChess.java代码:

package org.chess;
import java.awt.Image;import javax.swing.JOptionPane;
/** * @author 姜权罡* */
public class CannonChess extends Chess {@Overridepublic boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {// TODO Auto-generated method stubint cc = Math.abs(now_c - to_c);int rc = Math.abs(now_r - to_r);//count为 0 说明炮与目标之间没有棋子//count为 1 说明炮与目标之间有 1个 棋子//count为 2 说明炮与目标之间有 2个 棋子boolean succ = (cc==0 &&rc!=0 )||(cc!=0 &&rc==0 );//如果不是单条线,直接失败if(!succ) return false;int count=0;int from,to;//目标点没有棋子,且目标点和初始点之间无棋子,成功。//目标点有棋子,且为敌方棋子,且目标点和初始点之间有一个棋子,成功。if(rc==0){//横着走if(now_c<to_c){//向右走from = now_c+1;to=to_c;}else{//向左走from = to_c+1;to = now_c;}for(int i=from;i<to;i++){if(map[now_r][i]!=0){count++;}}System.out.println("棋子个数:\n"+count);if(map[to_r][to_c]==0&&count==0){return true;}if(map[to_r][to_c]==0&&count==1){return false;}//黑方,对面为红方;  红方,对面为黑方。if(map[to_r][to_c]!=0&&((isBlack==true&&map[to_r][to_c]<1000)||(isBlack==false&&map[to_r][to_c]>1000))&&count==1){ //将军if(isBlack==true&&map[to_r][to_c]=='G'){JOptionPane.showMessageDialog(null, "黑方胜利!");return true;}if(isBlack==false&&map[to_r][to_c]==1000+'G'){JOptionPane.showMessageDialog(null, "红方胜利!");return true;}return true;}else{return false;}}else{//竖着走if(now_r<to_r){//向下走from =  now_r+1;to = to_r;}else{//向上走from = to_r+1; to = now_r;}for(int i=from;i<to;i++){if(map[i][now_c]!=0){count++;}}System.out.println("棋子个数:\n"+count);if(map[to_r][to_c]==0&&count==0){return true;}if(map[to_r][to_c]==0&&count==1){return false;}//黑方,对面为红方;  红方,对面为黑方。if(map[to_r][to_c]!=0&&((isBlack==true&&map[to_r][to_c]<1000)||(isBlack==false&&map[to_r][to_c]>1000))&&count==1){//将军if(isBlack==true&&map[to_r][to_c]=='G'){JOptionPane.showMessageDialog(null, "黑方胜利!");return true;}if(isBlack==false&&map[to_r][to_c]==1000+'G'){JOptionPane.showMessageDialog(null, "红方胜利!");return true;}//return true;}else{return false;}}return true;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn "炮";}@Overridepublic int getType() {// TODO Auto-generated method stubreturn 'P';}@Overridepublic Image getImage(boolean isBlack) {// TODO Auto-generated method stubreturn ImageTool.loadImage(isBlack?"黑炮.gif":"红炮.gif");}
}

6.CarChess代码:

package org.chess;
import java.awt.Image;import javax.swing.JOptionPane;
/** 黑车1* 红车11* @author 庞义俊(姜权罡最后修改成功)* */
public class CarChess extends Chess {@Overridepublic boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {// TODO Auto-generated method stubint cc = Math.abs(now_c - to_c);int rc = Math.abs(now_r - to_r);//车类比炮写,车比炮简单boolean succ = (cc==0 &&rc!=0 )||(cc!=0 &&rc==0 );//如果不是单条线,直接失败if(!succ) return false;int from,to;if(rc == 0){//横着走if(now_c < to_c){//向右走from = now_c+1 ;to = to_c;}else{ // d 0 0 x//from = to_c;//to = now_c-1;from = now_c-1;to = to_c;}for(int i=from;i<to;i++){if(map[now_r][i] != 0 )return false; //中间有棋子,失败!!}}else{ //竖着走//TODOif(now_r<to_r){//向上走from = to_r;to=now_r-1;}else{//向下走from = now_r+1;to=to_r;}for(int i=from;i<to;i++){if(map[i][now_c] != 0 )return false; //中间有棋子,失败!!}}if(isBlack==true&&map[to_r][to_c]=='G'){JOptionPane.showMessageDialog(null, "黑方胜利!");return true;}if(isBlack==false&&map[to_r][to_c]==1000+'G'){JOptionPane.showMessageDialog(null, "红方胜利!");return true;}return true;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn "车";}@Overridepublic int getType() {// TODO Auto-generated method stubreturn 'C';}@Overridepublic Image getImage(boolean isBlack) {// TODO Auto-generated method stubreturn ImageTool.loadImage(isBlack?"黑车.gif":"红车.gif");}}

7.ChapChess代码:

package org.chess;
import java.awt.Image;
/** 士4* 仕44* @author 曹佳榕(姜权罡最后修改成功)* */
public class ChapChess extends Chess {@Overridepublic boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {// TODO Auto-generated method stubint cc = Math.abs(now_c - to_c);int rc = Math.abs(now_r - to_r);//要分黑士 和红仕!!(to_r>=7&&to_r<=9&&to_c>=3&&to_c<=5)//黑士(to_r>=0&&to_r<=2&&to_c>=3&&to_c<=5)boolean succ;if(isBlack==true){//黑士//如果不是一条斜线,直接失败,还要保证目标位置没有棋子//succ = cc==1 && rc==1 &&(to_r>=0&&to_r<=2&&to_c>=3&&to_c<=5)&&(map[to_r][to_c]==0); succ = cc==1 && rc==1 && (to_r>=0&&to_r<=2&&to_c>=3&&to_c<=5); }else{//红仕//如果不是一条斜线,直接失败//succ = cc==1 && rc==1 &&(to_r>=7&&to_r<=9&&to_c>=3&&to_c<=5)&&(map[to_r][to_c]==0); succ = cc==1 && rc==1 &&(to_r>=7&&to_r<=9&&to_c>=3&&to_c<=5); }if(!succ) return false; else{return true;}}@Overridepublic String getName() {// TODO Auto-generated method stubreturn "士";}@Overridepublic int getType() {// TODO Auto-generated method stubreturn 'S';}@Overridepublic Image getImage(boolean isBlack) {// TODO Auto-generated method stubreturn ImageTool.loadImage(isBlack?"黑士.gif":"红士.gif");}}

8.Chess.java 代码:

package org.chess;
import java.awt.Image;
/** 棋子父类、* 所有棋子继承该类* @author 姜权罡* */
public abstract class Chess {/*** 检查落子是否合法* @param map 地图* @param now_r 当前棋子的行号* @param now_c 当前棋子的列号* @param to_r  想去地方的行号* @param to_c  想去地方的列号* @param isBlack 如果黑方 传true 否则传false* @return 如果可以去,返回true, 否则返回false*/public abstract boolean check(int[][] map,int now_r,int now_c ,int to_r, int to_c,boolean isBlack);public abstract int getType();public abstract String getName();public abstract Image getImage(boolean isBlack);
}

9.ElephantChess.java 代码:

package org.chess;
import java.awt.Image;
/*** 象3* 相33* @author 董玟彤(姜权罡最后修改成功)*/
public class ElephantChess  extends Chess{@Overridepublic boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {int cc = Math.abs(now_c - to_c);int rc = Math.abs(now_r - to_r);boolean succ =  cc  == 2 && rc == 2;if(!succ ) return false; //如果不是田,直接失败!int c = (now_c+to_c)/2;int r = (now_r+to_r)/2;if(isBlack==true){//黑象return map[r][c] == 0&&to_r<=4;//象不能过河//该点二维数组为0说明,象眼为空,可以走棋。不考虑目标点有没有棋子!}else{//红象return map[r][c] == 0&&to_r>=5;//象不能过河}}@Overridepublic String getName() {return "象";}@Overridepublic int getType() {return 'E';}@Overridepublic Image getImage(boolean isBlack) {return ImageTool.loadImage(isBlack?"黑象.gif":"红象.gif");}
}

10.GeneralChess.java 代码:

package org.chess;
import java.awt.Image;import javax.swing.JOptionPane;
/** 将5* 帅55* @author 庞义俊(姜权罡最后修改成功)* */
public class GeneralChess extends Chess {@Overridepublic boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {// TODO Auto-generated method stubint cc = Math.abs(now_c - to_c);int rc = Math.abs(now_r - to_r);boolean succ;int count=0;int min_r= now_r<to_r?now_r:to_r;int max_r=now_r>to_r?now_r:to_r;for(int i=min_r+ 1;i<max_r;i++){//如果双方 将军之间有棋子的话,不可走棋if(cc==0&&map[i][now_c]!=0){count=1;return false;}}if(isBlack==true){//黑将//如果是一条斜线,直接失败//目标为红将,且之间没有棋子,移动if(map[to_r][to_c]=='G'&&count==0){JOptionPane.showMessageDialog(null, "黑方胜利");return true;}succ = ((cc==1 && rc==0)||(cc==0 && rc==1)) &&(to_r>=0&&to_r<=2&&to_c>=3&&to_c<=5); }else{//红帅//如果是一条斜线,直接失败//目标为黑将,且之间没有棋子,移动if(map[to_r][to_c]==1000+'G'&&count==0){JOptionPane.showMessageDialog(null, "红方胜利");return true;}succ = ((cc==1 && rc==0)||(cc==0 && rc==1)) &&(to_r>=7&&to_r<=9&&to_c>=3&&to_c<=5); }if(!succ) return false; return true;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn "将";}@Overridepublic int getType() {// TODO Auto-generated method stubreturn 'G';}@Overridepublic Image getImage(boolean isBlack) {// TODO Auto-generated method stubreturn ImageTool.loadImage(isBlack?"黑将.gif":"红将.gif");}}

11.HorseChess.java 代码:

package org.chess;
import java.awt.Image;import javax.swing.JOptionPane;
/** 马 H* @author 姜权罡* */
public class HorseChess extends Chess {@Overridepublic boolean check(int[][] map, int now_r, int now_c, int to_r, int to_c,boolean isBlack) {// TODO Auto-generated method stubint cc=Math.abs(now_c - to_c);int rc=Math.abs(now_r - to_r);boolean succ = (cc ==2&&rc==1)||(cc ==1&&rc==2);if(!succ) return false;//如果不是日,直接失败!int r;//r为马脚的行坐标int c;//c为马脚的列坐标if(cc==1){//走日r=(to_r+now_r)/2;c=now_c;}else{//走横着的 日r=now_r;c=(to_c+now_c)/2;}if(isBlack==true&&map[to_r][to_c]=='G'){JOptionPane.showMessageDialog(null, "黑方胜利!");return true;}if(isBlack==false&&map[to_r][to_c]==1000+'G'){JOptionPane.showMessageDialog(null, "红方胜利!");return true;}return map[r][c]==0;}@Overridepublic String getName() {// TODO Auto-generated method stubreturn "马";}@Overridepublic int getType() {// TODO Auto-generated method stubreturn 'H';}@Overridepublic Image getImage(boolean isBlack) {// TODO Auto-generated method stubreturn ImageTool.loadImage(isBlack?"黑马.gif":"红马.gif");}}

12.ImageToool.java 代码:

package org.chess;
import java.awt.Image;
import javax.swing.ImageIcon;
public class ImageTool {public static Image loadImage(String path){try {ImageIcon im = new ImageIcon("image\\"+path);return im.getImage();} catch (Exception e) {e.printStackTrace();return null;}}public static void main(String[] args) {ImageIcon im=new ImageIcon("image\\main.gif");System.out.println(im);}
}

13.musicStuff.java 代码:

package org.chess;
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
/** 音乐播放器* 庞义俊* */
public class musicStuff {public void playMusic(String musicLocation){try{File musicPath = new File(musicLocation);if(musicPath.exists()){AudioInputStream audioInput = AudioSystem.getAudioInputStream(musicPath);Clip clip = AudioSystem.getClip();clip.open(audioInput);clip.start();clip.loop(Clip.LOOP_CONTINUOUSLY);}else{}}catch(Exception ex){ex.printStackTrace();}}
}

14.RangeChecker.java 代码:

package org.chess;
import java.awt.Canvas;
import javax.swing.JOptionPane;
public class RangeChecker  {// 1  r和c 是不是合法的// 2 目标位置是否已经有其它棋子,如果有敌方棋子可以走,有己方不可走public static boolean inRange(int[][] map,int p_r,int p_c,int r,int c,boolean isBlack){if(r<0 || r>9 || c< 0 || c>9) return false;if(map[r][c]==0){//目标位置没有棋子,走棋return false;}else{//目标位置有棋子   判断是否为友方!友方不可走,敌对方可走。if(map[r][c]<1000&&map[p_r][p_c]>1000){//红方,之前的是黑方。 结果是敌方   可以走棋return true;}else if(map[r][c]>1000&&map[p_r][p_c]<1000){//黑方,之前的是红方,结果是敌方   不可走棋return true;}else{return false;}}}public static boolean selectInRange(int[][] map, int r, int c,boolean isBlack) {//下表在范围内,且当前点由自己放的棋子可以, 否则不可以。if(r<0 || r>9 || c< 0 || c>9) return false;if(map[r][c] == 0) return true;return (isBlack==true && map[r][c]>1000) ||  (isBlack==false && map[r][c]<1000);}
}

15.test文件夹下的测试类 这里只举其中一个例子(测试炮),其他的按照这个写就可以了。
TestCannonChess.java 代码如下:

import org.chess.CannonChess;
import junit.framework.TestCase;
public class TestCannonChess extends TestCase {CannonChess chess = new CannonChess();//炮水平向右移动(过程无棋子)public void testCheck1(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 2,3,2, 6, true);//黑方还是红方, true为黑方assertEquals(b, true);}//炮水平向右移动(过程有一个棋子)public void testCheck31(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 1006, 0, 1, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 2,3,2, 6, true);//黑方还是红方, true为黑方assertEquals(b, false);}//炮水平向右移动(过程有一个棋子)public void testCheck32(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 1006, 0, 1, 6 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 2,3,2, 6, true);//黑方还是红方, true为黑方assertEquals(b, true);}//炮水平向右移动(过程有两个棋子)public void testCheck33(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 1006, 1, 1, 6 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 2,3,2, 6, true);//黑方还是红方, true为黑方assertEquals(b, false);}//炮水平向左移动(过程无棋子)public void testCheck41(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 2,3,2, 0, true);//黑方还是红方, true为黑方assertEquals(b, true);}//炮水平向左移动(过程一个棋子)public void testCheck42(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,1, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 2,3,2, 0, true);//黑方还是红方, true为黑方assertEquals(b, false);}//炮水平向左移动(过程一个棋子)public void testCheck43(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 6 ,0 ,1, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 2,3,2, 0, true);//黑方还是红方, true为黑方assertEquals(b, true);}//炮水平向左移动(过程两个棋子)public void testCheck44(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 6 ,1,1, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 2,3,2, 0, true);//黑方还是红方, true为黑方assertEquals(b, false);}//炮竖直向上移动(过程0个棋子)public void testCheck51(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0,0,  0, 0, 0, 0 },{ 0 ,0 ,0, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 3,3,0,3 , true);//黑方还是红方, true为黑方assertEquals(b, true);}//炮竖直向上移动(过程1个棋子)public void testCheck52(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0,0,  1, 0, 0, 0 },{ 0 ,0 ,0, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 3,3,0,3 , true);//黑方还是红方, true为黑方assertEquals(b, false);}//炮竖直向上移动(过程1个棋子)public void testCheck53(){int[][] map = {{ 0 ,0 ,0, 1, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0,0,  1, 0, 0, 0 },{ 0 ,0 ,0, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 3,3,0,3 , true);//黑方还是红方, true为黑方assertEquals(b, true);}//炮竖直向上移动(过程2个棋子)public void testCheck54(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 2, 0, 0, 0 },{ 0 ,0,0,  1, 0, 0, 0 },{ 0 ,0 ,0, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 3,3,0,3 , true);//黑方还是红方, true为黑方assertEquals(b, false);}//炮竖直向上移动(过程2个棋子)public void testCheck55(){int[][] map = {{ 0 ,0 ,0, 1, 0, 0, 0 },{ 0 ,0 ,0, 2, 0, 0, 0 },{ 0 ,0,0,  1, 0, 0, 0 },{ 0 ,0 ,0, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 3,3,0,3 , true);//黑方还是红方, true为黑方assertEquals(b, false);}//炮竖直向下移动(过程0个棋子)public void testCheck61(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0,0,  0, 0, 0, 0 },{ 0 ,0 ,0, 1006, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 3,3,6,3 , true);//黑方还是红方, true为黑方assertEquals(b, true);}//炮竖直向下移动(过程1个棋子)public void testCheck62(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0,0,  0, 0, 0, 0 },{ 0 ,0 ,0,1006, 0, 0, 0 },{ 0 ,0 ,0, 1, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 3,3,6,3 , true);//黑方还是红方, true为黑方assertEquals(b, false);}//炮竖直向下移动(过程1个棋子)public void testCheck63(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0,0,  0, 0, 0, 0 },{ 0 ,0 ,0,1006, 0, 0, 0 },{ 0 ,0 ,0, 1, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 2, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 3,3,6,3 , true);//黑方还是红方, true为黑方assertEquals(b, true);}//炮竖直向下移动(过程2个棋子)public void testCheck64(){int[][] map = {{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 },{ 0 ,0,0,  0, 0, 0, 0 },{ 0 ,0 ,0,1006, 0, 0, 0 },{ 0 ,0 ,0, 1, 0, 0, 0 },{ 0 ,0 ,0, 1, 0, 0, 0 },{ 0 ,0 ,0, 2, 0, 0, 0 },{ 0 ,0 ,0, 0, 0, 0, 0 }};boolean b = chess.check(map, 3,3,6,3 , true);//黑方还是红方, true为黑方assertEquals(b, false);}}

谢谢大家的支持,您的一键三连是 罡罡同学前进的最大动力!
一键三连 一键三连 一键三连 一键三连 一键三连 一键三连

Java课程设计—中国象棋(源代码及视频)相关推荐

  1. java中国象棋网络对弈,java课程设计---中国象棋对弈系统

    java课程设计---中国象棋对弈系统 1 目目 录录 摘要 1 关键字 1 正文 2 1.程序设计说明. 2 1.1 程序的设计及实现 2 1.1.1搜索引擎的实现(engine包) . 2 1.1 ...

  2. java课程设计象棋_java课程设计 中国象棋

    [实例简介] 内附eclipse项目,可运行jar包,和课程设计报告,觉得让你一下子看懂 [实例截图] [核心代码] P17-象棋java课程设计 └── P17-象棋java课程设计 ├── res ...

  3. 象棋联机java代码_中国象棋源代码Java程序

    import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.io ...

  4. 课程设计题目答案java,java课程设计题目及源代码

    目前, 很多发达国家都已经开始关注动漫对基础教育领域所产生的影响, 并且意识到它是传统教育手段所难以实现的, 现在已经有一部分国家将动漫作为基础教育的一部分,在中小学设立了动漫课程.就国外动漫基础教育 ...

  5. java黑白棋原码_JAVA课程设计黑白棋源代码

    JAVA课程设计黑白棋源代码 JAVA课程设计黑白棋源代码|java课程设计|数据库课程设计|计算机课程设计|精品课程网站设计 import java.awt.*; import javax.swin ...

  6. 象棋 Java设计(java课程设计)计算机科学与技术

    文章目录 系列文章目录 前言 一.象棋的整个程序的架框 二.功能需求分析及项目采用技术 三.象棋项目设计思路 四.项目技术亮点 五.棋盘界面的java设计 六.棋盘规则所使用代码 七.棋盘界面的测试以 ...

  7. Java课程设计——象棋(201521123042 姚佳希)

    1. 团队课程设计博客链接 Java课程设计(团队版) 2 个人负责模块或任务说明 ChessBoard类创建棋盘及界面. ChessPoint类创建棋盘格点及界面. ChessPiece类创建棋子及 ...

  8. 基于Java EE的中国象棋网上对战的设计与实现

    技术:Java.JSP等 摘要:中国象棋是一种起源于中国古代的双人对战棋类游戏,广泛的流行在全国各地,是中华文化的典型代表之一,体现着中华文化的智慧和蕴含.为了传承这一重要的传统,理解其中的精髓,以及 ...

  9. java课程设计 考试系统,java课程设计考试系统.

    java课程设计考试系统.Tag内容描述: 1.目 录 第一章第一章 引言引言 3 1 1目的 3 1 2名词解释 3 1 3参考资料 3 1 4文档结构 3 第第 2 章章远景远景 4 2 1项目概 ...

最新文章

  1. c语言不能写入文件,求大神看看为什么不能将数据写入文件
  2. hdu 1003 Max Sum 解题报告
  3. 通过反射获取DLL的类实现加载窗体
  4. Spket在Eclipse/MyEclipse下的安装和配置(图文教程)
  5. gridlayoutmanager 设置间距_不设置主灯的客厅应当如何保证较好的灯光分布?
  6. 机器学习(十)Mean Shift 聚类算法
  7. sql server 迁移 mysql_sql server 迁移到 mysql
  8. ElasticSearch-5.3.1集群环境搭建,安装ElasticSearch-head插件,安装错误解决
  9. 在ISA Server 2004上发布使用非标准的21端口进行连接的FTP服务器
  10. [现代程序设计]homework-03
  11. 亿乐社区最新版开源无后源码
  12. dataframe数据之间求补集
  13. html图片闪烁设置,HTMLCSS基础-图片按钮闪烁解决方案
  14. 读书百客:《十一月四日风雨大作》评赏
  15. 社会新现象:“蜗婚”离婚不分家
  16. Chapter Four : Python 序列之列表、元组操作详解合集
  17. 联想台式电脑一键恢复后桌面没有计算机了,联想笔记本一键恢复功能使用教程...
  18. MySQL 数据库备份和还原数据库 mysqldump、source
  19. gis处理提示唯一值过多
  20. 2022.12.9 英语背诵

热门文章

  1. 【智能手表方案推荐】基于中科蓝讯BT8958B2 的 Smart Watch 方案介绍
  2. FPGA23 PLL 锁相环使用及应用(专题: PLL 的应用场景)
  3. 全身MRI与临床检查在检测早期中轴脊柱关节病患者附着点炎方面一致性差-来自ESTHER临床试验基线水平的...
  4. 电容式触摸芯片在电容式触摸按键中的应用
  5. php脱敏手机号,转:手机号脱敏
  6. FamaMacBeth1973两步法详解-xtfmb-asreg
  7. 基于FPGA的VGA协议实现
  8. Eplan P8 Pro Panel 2.4 Win32_64-ISO 1DVD电气制图软件
  9. Gogs项目管理使用教程
  10. [docker]coreOS与atomic对比