- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 Java 为我的游戏板(国际象棋)建立初始状态。但是,当我运行该程序时,板似乎被翻转了?如果您查看初始状态方法,这就是我希望初始板启动的方式:
public void initialBoardState(){
gameBoard = new int [][]
{{22,23,24,25,26,24,23,22},
{21,21,21,21,21,21,21,21}, //Black pieces
{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,0},
{11,11,11,11,11,11,11,11}, //White pieces
{12,13,14,15,16,14,13,12}};
}
但是当我运行它时,板似乎像这样翻转:
gameBoard= new int[][]
{{22,21,0,0,0,0,11,12},
{23,21,0,0,0,11,13}
等等..有人能解释一下吗?整个类(class)发布如下:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
/**
* @author Cian
* This class will draw our game board
*/
class Board extends JComponent implements MouseListener{
private int gameBoard[][] = new int[8][8];
public int row = 8;
public int column = 8;
public int cell = 80;
public int rowSelected;
public int colSelected;
public int currentPlayer = 1;
int x; int y; int a; int b;
public Board(){
addMouseListener(this);
initialBoardState();
}
public void paintComponent(Graphics g){
super.paintComponents(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, 640, 640);
drawBoard(g2d);
}
public void drawBoard(Graphics2D g2d){
g2d.setColor(Color.black);
// draw the edge lines (0,0,0,640), (0,0,640,0), (0,640,640,640), (640,0,640,640)
g2d.drawLine(0, 0, 0, 639);
g2d.drawLine(0, 0, 639, 0);
g2d.drawLine(0, 639, 639, 639);
g2d.drawLine(639, 0, 639, 639);
// draw the horizontal lines using a loop from one to 7, coordiates of each line is (0, x*80, 640, x*80) also
// draw vertical lines with coordinates of (x*80, 0, x*80, 640)
for(int i = 1; i < 8; i++) {
g2d.drawLine(0, i*80, 640, i*80);
g2d.drawLine(i*80, 0, i*80, 640);
}
for ( int row = 0; row < 8; ++row ) // ++ means "increment by one"
// This inner loop counts over all the (white or black) squares in a row. It starts at 0 if row is even, or 1 if row is odd, and goes up to no more than 7 (so it will count 1-3-5-7 or 0-2-4-6
for ( int i = row % 2; i <= 7; i+= 2 ) { // += means "add to that variable
g2d.setColor(Color.BLACK);
g2d.fillRect ( getX() + cell*i, getY() + row*cell, cell, cell);
}
BufferedImage img_black = null;
BufferedImage castle_black = null;
BufferedImage castle_white = null;
BufferedImage img_white = null;
try {
img_black = ImageIO.read(new File("imgs/pawn-black.png"));
castle_black = ImageIO.read(new File("imgs/castle-black.png"));
castle_white = ImageIO.read(new File("imgs/castle-white.png"));
img_white = ImageIO.read(new File("imgs/pawn-white.png"));
} catch (IOException e) {
}
for(int a=0;a<8;a++){
for(int b=0;b<8;b++){
if(gameBoard[a][b] == 22){
g2d.drawImage(castle_black,a*80, b*80,null);
}
if(gameBoard[a][b] == 12){
g2d.drawImage(castle_white,a*80, b*80,null);
}
if(gameBoard[a][b] == 0){
g2d.drawImage(castle_white,a*80, b*80,null);
}
}
}
/*for(int i=0;i<8;i++){
for(int j=1;j<2;j++){
g2d.drawImage(img_black,i*80, j*80,null);
}
}
for(int i=0;i<8;i++){
for(int j=6;j<7;j++){
g2d.drawImage(img_white,i*80, j*80,null);
}
}*/
}
@Override
public void mouseClicked(MouseEvent event) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent event) {
x = event.getX(); y = event.getY();
rowSelected = x / cell;
colSelected = y / cell;
if (rowSelected >= 0 && rowSelected < row && colSelected >= 0 && colSelected < column){
System.out.println("X: "+rowSelected+" | Y: "+colSelected+" | GameBoard: "+gameBoard[rowSelected][colSelected]);
}
}
@Override
public void mouseReleased(MouseEvent event) {
a = event.getX(); //a = mouse released x coordinates
b = event.getY(); //b = mouse released y coordinates
//isValidMove(x,y,a,b);
}
/*private void isValidMove(int x, int y, int a, int b){
if(gameBoard[x][y]/10 == currentPlayer){
int piece = gameBoard[x][y]%10;
if(piece == 1){
System.out.println("1");
}
}
}*/
public void initialBoardState(){
gameBoard = new int [][]
{{22,23,24,25,26,24,23,22},
{21,21,21,21,21,21,21,21}, //Black pieces
{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,0},
{11,11,11,11,11,11,11,11}, //White pieces
{12,13,14,15,16,14,13,12}};
}
}
最佳答案
从您描述问题的方式来看,您似乎只是输入了应该输入 y 坐标的 x 坐标,反之亦然。所以这只是一个疯狂的猜测,但请尝试更改类似的行:
g2d.drawImage(castle_black,a*80, b*80,null);
对此:
g2d.drawImage(castle_black,b*80, a*80,null);
此外,根据 this ,该方法被声明为 public abstract void drawImage(BufferedImage img, BufferedImageOp op, int x, int y)
,所以对我来说,你似乎没有很好地使用它,它实际上应该是这样的这个:
g2d.drawImage(castle_black, null, b*80, a*80);
但我可能是错的,因为我没有这方面的经验。
关于java - 国际象棋、棋盘翻转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20587785/
我正在尝试开发一个简单的国际象棋引擎,但我一直在为它的性能而苦苦挣扎。我已经实现了带有alpha-beta修剪和迭代加深的Negamax(没有任何其他启发式方法),但是我无法获得超过3-4层的合理搜索
我目前正在开发国际象棋引擎,目前该引擎一直在工作,但要花很多时间才能产生移动。由于必须生成许多移动,因此检查检测花费的时间最长。 我尝试了很多事情后陷入困境,无法真正弄清楚如何提高效率。这是我的方法:
我正在尝试用 Java 为我的游戏板(国际象棋)建立初始状态。但是,当我运行该程序时,板似乎被翻转了?如果您查看初始状态方法,这就是我希望初始板启动的方式: public void initialBo
我正在尝试实现Knight-Distance中描述的绝对排名文件距离。来自Chess Programming Wiki ,但我对 ints a 和 b 应该在什么地方有点困惑 int knightDi
我一直在研究表格,以便可以使用 html 中的表格创建棋盘。这是我在网上找到的一些代码:HTML 代码: ♜ ♞ ♝ &
我有如下算法来防止玩家选择将其置于检查状态的移动: 假走(通过复制棋盘并在复制的棋盘上工作) 在走法被伪造之后,得到所有合法的对手走法。 如果合法走法之一可以攻击玩家的国王,则不能选择最初伪造的走法。
如果没有图片,这可能有点难以解释,但是,我正在检查国王是否在检查中。为此,我从国王的位置开始向上、向左、向下、向右,然后是所有对角线图案。 为了简化我的代码,我有一个路径检查器方法,它接受起始位置和结
我已经为我的国际象棋引擎实现了带有静态搜索的 alpha-beta 搜索。然而,在大多数情况下,静态搜索占用了总执行时间的 80-90%,正如我的分析器所显示的那样。我的修剪有问题吗? 我已经包含了
我正在编写一个简单的国际象棋游戏。我不会在这里全部发布,但我会为您提供必要的详细信息。 我通过点击一个上面有棋子的方 block 来移动,然后这个方 block 被选中,然后点击我想要棋子的地方移动。
嗨! 我正在尝试为我的国际象棋引擎编写一个 negamax 搜索算法,但我似乎无法让它工作。我以 wikipedias 伪代码为例,但不知何故它没有产生预期的结果。当我用 2 层运行它时,它改变了我的
我正在对国际象棋 AI 进行试验,目前正在尝试检测平局的可能性。 如果出现以下情况,玩家可以要求平局: 在每个玩家的最后 50 步棋中没有吃到或走棋。 相同的棋盘位置出现了 3 次。 因此,程序必须存
我正在用 Java 开发国际象棋程序并考虑以下问题: Rook 部分需要实现直线移动。 Bishop 部分需要实现沿对角线移动。 但是, Queen piece 需要实现上述两种运动模式。 我想不出一
我有一个问题。 我们有无限的棋盘,如何计算 n 次跳跃后你可能发现自己跳跃的一半的数量? 例如: 一次跳跃后我们有8个盒子 两次跳跃后我们有33个盒子 #include using namespace
这个问题已经有答案了: How do I generate all of a knight's moves? (10 个回答) 已关闭 9 年前。 我正在尝试根据当前位置获取骑士可以放置的所有可能位置
好吧,我先承认这个会有点长。我正在为 C# 编写国际象棋引擎,最终目标包括 UCI 实现。我已经做到了,给定一个棋盘,引擎将生成所有有效 Action 的列表;然而,我的评估代码似乎很挣扎,因为在与自
我正在实现一个国际象棋引擎,我已经编写了一个相当复杂的 alpha-beta 搜索例程,其中包含静态搜索和换位表。但是,我观察到一个奇怪的错误。 评估函数使用的是方 block 表,就像这个用于棋子的
我正在编写一个基本的 Java 国际象棋游戏并编写了以下类:Game、Player、Board、Square、Piece(每个特定棋子的父类(super class))和每个特定棋子类(例如 Pawn
我正在为类似于国际象棋的游戏编写 AI。棋盘为 10x10,每面 15 block 都有象棋相似的走法。 游戏中的一切都组织在对象中。瓷砖[][] 瓷砖; 10x10,每个 Tile 都有一个 pie
我正在制作游戏国际象棋,几乎得到了所有东西,但只有一件事:我需要制作它,这样玩家就不可能将棋子移动到检查中。我在解决这个问题时遇到了麻烦。 我现在用伪代码生成有效移动的是:getMoveLocatio
我正在尝试使用 alpha beta 剪枝实现一个国际象棋游戏。以下几乎可以正常工作,但它会返回错误的 Action 。 例如,可能会发生以下情况。 白色(用户)移动,白色王位 - a1/黑色(计算机
我是一名优秀的程序员,十分优秀!