java国际象棋,java – 国际象棋中casteld的实现
我想用Java实现国际象棋作为练习我正在尝试实现一些基本的部分,比如片段移动,但是我不能用这种方式编写这个方法,如果你想改变你的片段位置,你必须知道那是另一个一路走到新的位置(我们知道只是骑士不能跳过其他部分).
另一个问题是城堡移动的实施.
相关代码:
片:
enum Color {BLACK , WHITE}
enum TYPE {ROOK , BISHOP , KNIGHT , QUEEN , KING , PAWN}
public abstract class Piece {
private boolean available;
private char x;
private int y;
Color color;
TYPE type;
public Piece(boolean available, char x, int y, Color color, TYPE type) {
this.available = available;
this.x = x;
this.y = y;
this.color = color;
this.type = type;
}
public boolean validateMove(ChessBoard board,char fromX, int fromY, char toX, int toY) {
if(toX == fromX && toY == fromY)
return false;
if(getX() != fromX || toY != fromY)
return false;
if(toX - 'a' < 0 || toX - 'a' > 7 || toY < 0 || toY > 7 || fromX - 'a' < 0 || fromX - 'a' > 7 || fromY < 0 || fromY > 7)
return false;
protectingTheWay(board);
return true;
}
(and all it’s getter and setter).
主教:
public class Bishop extends Piece {
public Bishop(boolean available, char x, int y, Color color, TYPE type) {
super(available, x, y, color, type);
}
@Override
public boolean validateMove(ChessBoard board,char fromX, int fromY, char toX, int toY) {
if(super.validateMove(board,fromX, fromY, toX, toY) == false)
return false;
if( abs(toX - 'a' - (fromX - 'a')) == abs(toY - fromY) )
return true;
return false;
}
}
骑士:
public class Knight extends Piece {
public Knight(boolean available, char x, int y, Color color, TYPE type) {
super(available, x, y, color, type);
}
@Override
public boolean validateMove(ChessBoard board,char fromX, int fromY, char toX, int toY) {
if( super.validateMove(board,fromX, fromY, toX, toY) == false)
return false;
if(toX - 'a' != fromX - 'a' - 1 || toX - 'a' != fromX - 'a' + 1 || toX - 'a' != fromX - 'a' + 2 || toX - 'a' != fromX - 'a' - 2)
if(toY != fromY - 2 || toY != fromY + 2 || toY != fromY - 1 || toY != fromY + 1)
return false;
return true;
}
}
和其他作品.
解决方法:
这听起来像是一个很酷的练习,对我来说,听起来你实际上是一个设计问题,而不是编码问题.即使你不是熟悉设计模式和SOLID的OOP专家,甚至是Long中的多少位,你通常可以通过编写一些描述你正在构建的系统的文本来改善面向对象的应用程序,然后记下该文中的各种名词和动词.
因此,让我们从一个简单(显然不全面)的问题域描述示例开始:
Chess is a game, played on a board called a chessboard, with the goal
of capturing a specific piece on the opposing player’s side – their
king. There are two players, one playing white and the other playing
black. Each player starts with a fixed number of pieces of various
types (king is among those). Each piece can only move in predefined
ways. The game starts when the white player makes a legal move, and
each player takes turns moving one piece at a time until the game
ends. The game can end when one in put in check-mate (meaning their
own king will be captured on the next move by their opponent and the
king cannot escape, block, or eliminate the threat of capture), when
there is a draw (where neither player can possibly capture the
opponent’s king), or when one player surrenders to the other (because
… reasons).
如果您查看该描述,请记下各种名词和动词.名词是程序中的候选对象,动词是候选操作(方法).
在上面的代码中,我看到了代表一些棋子和棋盘的对象.将您的内容与上面的简单描述进行比较,并问自己缺少哪些其他可能的对象.一个有趣的含义可能是您是否将国际象棋移动视为潜在对象或其他对象可以执行的操作.
具体到您的问题 – 您将如何根据拟议系统中的其他对象和方法定义城堡?铸造肯定是一种特定类型的移动,并且对于哪些碎片可以参与其中,开始和结束的位置以及可以执行它的方向存在限制(向左铸造!=右侧铸造).
标签:java,oop,chess
来源: https://codeday.me/bug/20190622/1265536.html
java国际象棋,java – 国际象棋中casteld的实现相关推荐
- java大作业国际比赛奖牌榜,java大作业之词频统计
[实例简介] 开发工具idea,统计方式为java8的stream方式,不是传统的字节流统计方式,内含答辩PPT以及统计单词的文本,配置好后可直接使用 [实例截图] [核心代码] java大作业之词频 ...
- Java基础-Java概述(第一、二章)
Java基础 文章目录 Java基础 1. Java概述(第一.二章) 1.1 Java基本介绍 1.2 Java的运行机制及运行过程 1.3 Java环境配置 1.4 Java快速入门 1.5 Ja ...
- Java:Java实现简单闹钟设计
Java:Java实现简单闹钟设计 目录 设计时钟界面 设计时钟界面 //设计时钟界面 import java.applet.Applet; import java.awt.Color; import ...
- 当年我们一起追过的Java,Java SE 个人笔记
目录 JDK的安装和配置运行Java程序 java基本语法 面向对象 异常 多线程l API(Application Programming Interface)各种功能的类说明 集合类 IO输入输出 ...
- java unlimited_具有无限参数的Java方法(Java method with unlimited arguments)
具有无限参数的Java方法(Java method with unlimited arguments) Spring框架使用方法,您可以根据需要传递尽可能多的参数. 我想写一个函数,也可以采取无限量的 ...
- 介绍java -cp java -jar的区别
java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号";" java -cp &am ...
- 【Java】Java连接Mysql数据库的demo示例
[Java]Java连接Mysql数据库的demo示例 1.安装mysql数据库 2.下载java-mysql-connector.jar包 3.完成java配置 4.写java代码运行测试 1.安装 ...
- java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文
[Java教程]java 网页页面抓取标题和正文 0 2014-07-10 09:01:30 import java.io.BufferedReader;import java.io.IOExcept ...
- Java基础-Java中的堆内存和离堆内存机制
Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnblogs.com/yinzhengjie/p/9 ...
最新文章
- Google Play 关联了
- PIG 中COGROUP中的空值验证
- 《爬虫与网络编程基础》学习
- LeetCode上求两个排序数组中位数问题—— Median of Two Sorted Arrays
- 怎么写CORTEX在windows用arm-none-eabi-gcc编译时的makefile
- windows获取cmd回显以及获取路径
- 基于springboot+vue的公益慈善捐助网站(前后端分离)
- sin x 的值python_sin(x)/x的数值积分
- 用python画雪花飘落_故宫下雪了!我花了45秒,用Python给它画了一组手绘图
- 【渝粤题库】 陕西师范大学 202961 教育社会学 作业(高起本、专升本)
- 《Java解惑》系列——02字符谜题——谜题11:最后的笑声(字符、字符串连接操作)
- java技术经理面试题
- 【华人学者风采】Ting Xu 加州大学伯克利分校
- 谈谈我在PyTorch踩过的12坑
- Java基础:方法和类详解
- Service START_NOT_STICKY、START_STICKY
- 单片机led灯闪烁实验总结_51单片机实现LED流水灯
- DockerHub入门
- win10系统打不开计算机管理,win10任务管理器打不开如何处理_win10任务管理器打不开的解决办法...
- Android Studio 无法安装apk到小米手机问题解决