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

您所在的位置:网站首页 中国象棋的下棋规则是什么 象棋 Java设计(java课程设计)计算机科学与技术

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

2024-06-04 08:32| 来源: 网络整理| 查看: 265

文章目录 系列文章目录前言一、象棋的整个程序的架框二、功能需求分析及项目采用技术三、象棋项目设计思路四、项目技术亮点五、棋盘界面的java设计六、棋盘规则所使用代码七、棋盘界面的测试以及主要功能演示截图八、团队成员负责模块总结

前言

      结合JAVA和中国象棋方面的实践经验,在分析了中国象棋游戏需求基础上,设计并实现了中国象棋系统。该系统为人人对战。人人对战规则明确,包含了中国象棋所有的招法。方便了不同水平人群的不同选择。设计和开发好中国象棋游戏,对与提高Java开发水平和系统的设计能力有极大的帮助。

     主要研究基于JAVA技术的中国象棋游戏的分析与设计,对中国象棋游戏特殊的行棋规则给予了细致的分析与理解,设计出了一种实时可行的行棋规则,从移动范围、移动方向和穿越障碍几个方面重新描述行棋规则,基于Java 技术通过计算机模拟实现了中国象棋特殊的行棋规则算法,设计出了一种可行的方法,使每个棋子的行棋路线都严格遵循本身的行棋规则,游戏的实战对弈得以实现。

     本软件设计的主要功能如下:(1)实现象棋的规则;(2)能够实现下棋期间保存棋盘,以及读取已有的棋盘;(3)能够在开始游戏时播放背景音乐,以及行棋时播放走棋的音效;(4)任一方获胜后,游戏结束,提示某一方获得胜利。

一、象棋的整个程序的架框

二、功能需求分析及项目采用技术

功能分析 1.使用鼠标对棋子进行控制,让棋子按规则运动。 2.棋子移动可以周期性闪烁来突出棋子移动。 3.初始场景棋子按照规则摆放,每次落子没有时间限制。 4.可以进行人人对战,按照规则判断胜负。  项目采用技术 1. 实现Runnable接口,启用多线程实现棋子的周期性闪烁。 2.使用List列表进行棋子的移动储存,方便进行悔棋。 3.界面采用了绝对布局,防止界面变化影响棋局。 4.棋子使用鼠标监视器获取坐标在进行算法处理以达到吃子、行子的目的。5.界面”新游戏”按钮通过函数重置进行新的一局游戏。 三、象棋项目设计思路      这个程序的关键是棋子的行走规则和判断胜负的条件,每个棋子都有自己的移动规则, 游戏利用接口监视器通过鼠标点击控制。 四、项目技术亮点 1.棋子的悔棋处理 2.棋子移动的闪烁处理 3.棋子的行走规则及吃子判断 4判断游戏的胜利规则 5绘制制作棋盘界面和棋子 五、棋盘界面的java设计

       构建Java程序Main.class来实现棋盘的界面展示与ChessFrame.class来利用棋盘设计框架,利用java.swing中主要的方法如按钮的设计,需要设计多个按钮,如悔棋,新游戏等。利用前面我们设计的棋盘中棋子的大小,从而可以完成棋盘的总体设计。主要依靠java.awt中 Container(容器),GridLayout棋盘的设计框架。设计棋子大小后,棋盘的长于宽分别使用558与676的大小。然后利用我们前面设计的棋子走向来镶嵌入我们所创建出的棋盘。主要需要两个监视器如ActionListener与MouseListener接口来分别观察按钮和观察鼠标。

package com.chess; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; public class ChessMainframe extends JFrame implements ActionListener, MouseListener,Runnable { ChessManBehavior play[] = new ChessManBehavior[32]; JLabel image; Container con; JToolBar jmain; JButton anew, repent, exit; JLabel text; public ChessMainframe(String title) { con = this.getContentPane(); con.setLayout(null); this.setTitle(title); jmain = new JToolBar(); text = new JLabel("欢迎来到象棋荣耀"); text.setToolTipText("信息提示"); anew = new JButton("新游戏"); anew.setToolTipText("重新开始新的一局"); exit = new JButton("退出"); exit.setToolTipText("退出象棋对弈系统"); repent = new JButton("悔棋"); repent.setToolTipText("返回上次走棋的位置"); jmain.setLayout(new GridLayout(0, 4)); jmain.add(anew); jmain.add(repent); jmain.add(exit); jmain.add(text); jmain.setBounds(0, 0, 558, 30); con.add(jmain); draeChessMain(); for(int i=0;i= 0 && cx - play.getX() < 57) { for(i = 56; i = 0 && cy - i < 57) { for(j = 0; j < 32; ++j) { if (playQ[j].getX() == play.getX() && play.getName() != playQ[j].getName() && playQ[j].isVisible()) { for(k = i; k < play.getY(); k += 57) { if (playQ[j].getY() == k) { ++count; } } for(k = play.getY(); k < i; k += 57) { if (playQ[j].getY() == k) { ++count; } } } } if (count == 0) { chessRegret = new ChessRegret(); chessRegret.man = man; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegretList.add(chessRegret); play.setBounds(play.getX(), i, 55, 55); return; } } } } if (me.getY() - play.getY() + 30 >= 0 && me.getY() - play.getY() + 30 enemy.getX()) { for(j = enemy.getX() + 57; j < play.getX(); j += 57) { if (playQ[i].getY() == play.getY() && playQ[i].getX() == j && playQ[i].isVisible()) { ++count; } } } else { for(j = play.getX(); j < enemy.getX(); j += 57) { if (playQ[i].getY() == play.getY() && playQ[i].getX() == j && playQ[i].isVisible()) { ++count; } } } } if (count == 1) { chessRegret = new ChessRegret(); chessRegret.eatMan = beEat; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegret.man = man; chessRegretList.add(chessRegret); enemy.setVisible(false); play.setBounds(enemy.getX(), enemy.getY(), 55, 55); return; } } } public void carRule(ChessManBehavior play, JLabel[] playQ, MouseEvent me, List chessRegretList, int man) { this.cannonRule(play, playQ, me, chessRegretList, man); } public void carEat(JLabel play, JLabel[] playQ, JLabel enemy, List chessRegretList, int man, int beEat) { int count = 0; int i; int j; ChessRegret chessRegret; if (play.getX() == enemy.getX()) { for(i = 0; i < 32; ++i) { if (play.getY() < enemy.getY()) { for(j = play.getY() + 57; j < enemy.getY(); j += 57) { if (playQ[i].getX() == play.getX() && playQ[i].getY() == j && playQ[i].isVisible()) { ++count; } } } else { for(j = enemy.getY() + 57; j < play.getY(); j += 57) { if (playQ[i].getX() == play.getX() && playQ[i].getY() == j && playQ[i].isVisible()) { ++count; } } } } if (count == 0) { chessRegret = new ChessRegret(); chessRegret.eatMan = beEat; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegret.man = man; chessRegretList.add(chessRegret); enemy.setVisible(false); play.setBounds(enemy.getX(), enemy.getY(), 55, 55); return; } } if (play.getY() == enemy.getY()) { for(i = 0; i < 32; ++i) { if (play.getX() > enemy.getX()) { for(j = enemy.getX() + 57; j < play.getX() - 57; j += 57) { if (playQ[i].getY() == play.getY() && playQ[i].getX() == j && playQ[i].isVisible()) { ++count; } } } else { for(j = play.getX(); j < enemy.getX(); j += 57) { if (playQ[i].getY() == play.getY() && playQ[i].getX() == j && playQ[i].isVisible()) { ++count; } } } } if (count == 0) { chessRegret = new ChessRegret(); chessRegret.eatMan = beEat; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegret.man = man; chessRegretList.add(chessRegret); enemy.setVisible(false); play.setBounds(enemy.getX(), enemy.getY(), 55, 55); return; } } } public void horseRule(JLabel play, JLabel[] playQ, MouseEvent me, List chessRegretList, int man) { int ex = 0; int ey = 0; boolean move = false; ex = me.getX(); ey = me.getY() + 30; int i; ChessRegret chessRegret; if (play.getX() - ex > 0 && play.getX() - ex = 59 && play.getY() - ey 0 && play.getX() - ex = 59 && play.getY() - ey 0 && play.getX() - ex = 114 && ey - play.getY() 0 && play.getX() - ex = 114 && ey - play.getY() 0 && play.getX() - ex 0 && play.getY() - ey 0 && play.getX() - ex = 57 && ey - play.getY() < 114) { for(i = 0; i < 32; ++i) { if (playQ[i].isVisible() && playQ[i].getY() == play.getY() && playQ[i].getX() - play.getX() == -57) { move = true; break; } } if (!move) { chessRegret = new ChessRegret(); chessRegret.man = man; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegretList.add(chessRegret); play.setBounds(play.getX() - 114, play.getY() + 57, 55, 55); return; } } if (ex - play.getX() >= 114 && ex - play.getX() 0 && play.getY() - ey = 114 && ex - play.getX() = 57 && ey - play.getY() < 114) { for(i = 0; i < 32; ++i) { if (playQ[i].isVisible() && playQ[i].getY() == play.getY() && playQ[i].getX() - play.getX() == 57) { move = true; break; } } if (!move) { chessRegret = new ChessRegret(); chessRegret.man = man; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegretList.add(chessRegret); play.setBounds(play.getX() + 114, play.getY() + 57, 55, 55); return; } } } } public void horseEat(JLabel play, JLabel[] playQ, JLabel enemy, List chessRegretList, int man, int beEat) { boolean canGo = true; int i; ChessRegret chessRegret; if ((play.getX() - 57 == enemy.getX() || play.getX() + 57 == enemy.getX()) && play.getY() - 114 == enemy.getY()) { for(i = 0; i < 32; ++i) { if (playQ[i].getX() == play.getX() && playQ[i].getY() == play.getY() - 57 && playQ[i].isVisible()) { canGo = false; } } if (canGo) { chessRegret = new ChessRegret(); chessRegret.eatMan = beEat; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegret.man = man; chessRegretList.add(chessRegret); enemy.setVisible(false); play.setBounds(enemy.getX(), enemy.getY(), 55, 55); return; } } if ((play.getX() - 57 == enemy.getX() || play.getX() + 57 == enemy.getX()) && play.getY() + 114 == enemy.getY()) { for(i = 0; i < 32; ++i) { if (playQ[i].getX() == play.getX() && playQ[i].getY() == play.getY() + 57 && playQ[i].isVisible()) { canGo = false; } } if (canGo) { chessRegret = new ChessRegret(); chessRegret.eatMan = beEat; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegret.man = man; chessRegretList.add(chessRegret); enemy.setVisible(false); play.setBounds(enemy.getX(), enemy.getY(), 55, 55); return; } } if (play.getX() - 114 == enemy.getX() && (play.getY() - 57 == enemy.getY() || play.getY() + 57 == enemy.getY())) { for(i = 0; i < 32; ++i) { if (playQ[i].getX() - 57 == play.getX() && playQ[i].getY() == play.getY() && playQ[i].isVisible()) { canGo = false; } } if (canGo) { chessRegret = new ChessRegret(); chessRegret.eatMan = beEat; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegret.man = man; chessRegretList.add(chessRegret); enemy.setVisible(false); play.setBounds(enemy.getX(), enemy.getY(), 55, 55); return; } } if (play.getX() + 114 == enemy.getX() && (play.getY() - 57 == enemy.getY() || play.getY() + 57 == enemy.getY())) { for(i = 0; i < 32; ++i) { if (playQ[i].getX() + 57 == play.getX() && playQ[i].getY() == play.getY() && playQ[i].isVisible()) { canGo = false; } } if (canGo) { chessRegret = new ChessRegret(); chessRegret.eatMan = beEat; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegret.man = man; chessRegretList.add(chessRegret); enemy.setVisible(false); play.setBounds(enemy.getX(), enemy.getY(), 55, 55); return; } } } public void elephantMove(JLabel play, JLabel[] playQ, MouseEvent me, List chessRegretList, int man) { int ex = me.getX(); int ey = me.getY() + 30; boolean move = false; if (play.getY() > 284 || ey < 341) { if (play.getY() < 341 || ey >= 341) { int i; ChessRegret chessRegret; if (play.getX() - ex = 58 && play.getY() - ey = 58) { for(i = 0; i < 32; ++i) { if (playQ[i].isVisible() && playQ[i].getX() == play.getX() - 57 && playQ[i].getY() - play.getY() == -57) { move = true; break; } } if (!move) { chessRegret = new ChessRegret(); chessRegret.man = man; chessRegret.cx = play.getX(); chessRegret.cy = play.getY(); chessRegretList.add(chessRegret); play.setBounds(play.getX() - 114, play.getY() - 114, 55, 55); return; } } if (play.getX() - ex = 58 && ey - play.getY() >= 114 && ey - play.getY() = 114 && ex - play.getX() = 114 && ex - play.getX() = 114 && ey - play.getY() = 57 && ex - play.getX() 0 && play.getY() - ey = 252 && play.getX() + 57 = 252 && play.getX() + 57 = 57 && ex - play.getX() 0 && ey - play.getY() = 252 && play.getX() + 57 0 && play.getX() - ex 0 && play.getY() - ey = 195 && play.getX() - 57 0 && play.getX() - ex 0 && ey - play.getY() = 195 && play.getX() - 57 = 0 && me.getX() - play.getX() < 57 && play.getY() - ey > 0 && play.getY() - ey = 0 && me.getX() - play.getX() < 57 && ey - play.getY() >= 57 && ey - play.getY() = 0 && ey - play.getY() 0 && play.getX() - ex = 0 && ey - play.getY() = 57 && ex - play.getX() = 0 && me.getX() - play.getX() < 57 && ey - play.getY() >= 57 && ey - play.getY() = 341 && ey - play.getY() >= 0 && ey - play.getY() = 57 && ex - play.getX() = 341 && ey - play.getY() >= 0 && ey - play.getY() 0 && play.getX() - ex = 0 && me.getX() - play.getX() < 57 && play.getY() - ey > 0 && play.getY() - ey 0) { return 0; } else { return 1; } } } } 七、棋盘界面功能介绍

    完成以上两部分代码操作了以后,我们可以进行我们最期待的项目演示。

八、团队成员负责模块       主要负责人                           团队成员负责模块       陶潜        主要负责象棋的棋子走向与运行规则的设计      流泪的飞        象棋的界面设计以及部分棋子的规则执行

团队项git地址 https://gitee.com/chinese-chess/chinese-chess

团队成员git提交记录

总结

     其中也遇到不少困难,比如象棋的棋子的类型的设计,不知道应该用什么方法去解决这个问题,所以我只能去搜索网上的设计。通过这次课程设计使我明白了自己知识还比较欠缺,只是学习书本知识还是远远不够的,自己不会的东西还有太多,学习需要自己长期的积累,在以后的学习、工作中都应该不断的学习,将课本的理论知识与生活中的实践知识相结合,不断提高自己文化知识和实践能力。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3