- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果不使用该 block 周围的坐标,我有一个 block 需要被其他灰色 block 包围。
我尝试执行以下操作:
public List<Piece> boardPiece(){
List<Piece> boardPieces = new ArrayList<>();
for (Piece pieces : listToPiece) {
if (pieces.getCoordinate() != null){
boardPieces.add(pieces);
}
}
return boardPieces;
}
public List<Coordinate> getSurroundings() {
List<Coordinate> surroundings = new ArrayList<>();
for (Piece boardpieces : boardPiece()) {
for (Coordinate coordinate : makeDirections()) {
surroundings.add(new Coordinate(boardpieces.getCoordinate().getRow() + coordinate.getRow(), boardpieces.getCoordinate().getColumn() + coordinate.getColumn()));
}
}
return surroundings;
}
public List<Coordinate> makeDirections(){
directions.add(new Coordinate(1,-1));
directions.add(new Coordinate(-1,1));
directions.add(new Coordinate(-1,0));
directions.add(new Coordinate(1,0));
directions.add(new Coordinate(0,-1));
directions.add(new Coordinate(0,1));
return directions;
}
棋盘是棋盘上具有坐标的棋子。没有坐标的棋盘不应被其他灰色棋子包围。在我的抽屉里,我编写了以下代码:
public void drawEmptyPieces() {
for (Coordinate emptyPiece : emptyPieces) {
EmptyPiece emptyPiece1 = new EmptyPiece(new Coordinate(emptyPiece.getRow(), emptyPiece.getColumn()));
emptyPiece1.setFill(Color.LIGHTGRAY);
emptyPiece1.setStroke(Color.BLACK);
gameField.getChildren().add(emptyPiece1);
}
}
我试图避免在棋盘上绘制灰色碎片:
public void drawEmptyPieces() {
for (Coordinate emptyPiece : emptyPieces) {
for (Piece pieceObjects : pieces){
if (pieceObjects.getCoordinate().getRow() != emptyPiece.getRow() && pieceObjects.getCoordinate().getColumn() != emptyPiece.getRow()){
EmptyPiece emptyPiece1 = new EmptyPiece(emptyPiece);
emptyPiece1.setFill(Color.LIGHTGRAY);
emptyPiece1.setStroke(Color.BLACK);
gameField.getChildren().add(emptyPiece1);
}
}
}
}
但是这段代码不起作用。
最佳答案
我不知道您是否提供了足够的信息来回答您的问题。但这里有一些想法。
<小时/>makeDirections()
要么损坏(缺少 directions
局部变量的声明),要么损坏,因为它不断添加 6 个新的 Cooperative
对象每次调用时都会有一个 directions
字段。无论哪种情况,它所做的工作都超出了需要。考虑一下:
private final static List<Coordinate> directions;
static {
List<Coordinate> dirs = new ArrayList<>();
dirs.add(new Coordinate(1,-1));
dirs.add(new Coordinate(-1,1));
dirs.add(new Coordinate(-1,0));
dirs.add(new Coordinate(1,0));
dirs.add(new Coordinate(0,-1));
dirs.add(new Coordinate(0,1));
directions = Collections.immutableList(dirs);
}
public static List<Coordinate> makeDirections() { // or getDirections()
return directions;
}
<小时/>
getSurroundings()
看起来它可以(会吗?)多次向周围环境添加相同的 坐标
。如果一 block 位于[5,5]
,另一 block 位于[7,5]
,您将添加[5,5]+[1 ,0]
和 [7,5]+[-1,0]
到周围环境。甚至可能在 [6,5]
处有一 block 也会将 [5,5]
和 [7,5]
添加到周围环境中也是如此。
相反...
确保 Cooperative
实现 equals
和 hashCode
,因此具有相同行和列的两个 Cooperative
对象相等,并且两者都哈希为相同的值。然后,在 getSurroundings()
中使用:
Set<Coordinate> surroundings = new HashSet<>();
因此surroundings
仅包含每个坐标一次。返回之前,您可以删除周围所有“占用”的坐标。
for (Piece piece : pieces) {
surroundings.remove(piece.getCoordinate());
}
您可以返回集合而不是列表,或者如果您想将其保留为列表:
return new ArrayList<>(surroundings);
如果没有包含现有棋子所在位置的重复项和坐标的“环境”,您可能会发现绘制棋盘变得非常非常容易。
<小时/>除非您的游戏板的范围是无限的,否则您将创建超出板边缘的坐标
对象。考虑将方法 getNeighbours()
添加到 Cooperative
类中:
class Coordinate {
public Collection<Coordinate> getNeighbours() {
List<Coordinate> neighbours = new ArrayList<>(6);
for (Coordinate dir: getDirections()) {
Coordinate n = new Coordinate(getRow() + dir.getRow(), getColumn() + dir.getColumn());
if (n.isValid()) {
neighbours.add(n);
}
}
return neighbours;
}
}
然后 getSurroundings
变得更简单一点:
for (Piece boardpieces : boardPiece()) {
surroundings.addAll(boardpieces.getCoordinate().getNeighbours());
}
没有任何“环境”离开棋盘。
<小时/>“方向”不是坐标
。它们用于不同的事情。 坐标
是棋盘上的一个位置,其中“方向”是相对偏移。该板可能有行和列值必须介于(例如)0 和 20 之间的约束;您的“方向”对象具有负行和列值;这将违反这些限制。这意味着如果给定的值错误,您无法在 Cooperative
的构造函数中添加适当的检查并抛出 new IllegalArgumentException("Invalid cocolumn")
。
我会为 Direction
对象创建一个新类。实际上,我会使用enum Direction { ... }
。然后 Direction.values()
将返回所有方向的集合 - 您不需要自己创建该集合。这是一个比其他更改大得多的更改,并且可能会产生超出您提供的一小部分代码的影响。这是一个很好的改变,但可能需要做很多工作。
希望有帮助。
关于Java免费现货件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36361859/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!