gpt4 book ai didi

java - 在 Java 中创建跳棋盘

转载 作者:行者123 更新时间:2023-11-29 08:08:23 25 4
gpt4 key购买 nike

我正在开始一个小项目来创建一个简单的西洋跳棋游戏。然而,自从我使用 Java GUI 工具以来已经有很长时间了。此时代码的目标是绘制初始棋盘(红色棋子在顶部,黑色在底部)。然而,当我运行代码时,我得到的只是一个空白框。我也有点不确定我的圆形绘图代码是否会做我想做的事情(即在某些方 block 内创建实心红色或黑色圆圈) 这是代码。在此先感谢您的任何帮助/建议

编辑:我可能应该交替绘制蓝色和灰色方 block ,否则它可能只是一个巨大的蓝色 Blob ,但此时我会选择一个巨大的蓝色 Blob :p

import javax.swing.*;
import java.awt.*;

public class CheckersServer
{
public static class Board
{
private JFrame frame = new JFrame();
private JPanel backBoard = new JPanel();

Board()
{

frame.setSize(905,905);
backBoard.setSize(900,900);
frame.setTitle("Checkers");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
backBoard.setVisible(true);


boardSquare bs;
String type = null;
//Filling in Red Side
for (int i = 0; i <=1; i++)
{
for(int j = 0; j < 9; j++)
{
if(j % 2 == 0)
{
type = "Red";
}
else
{
type = "Blank";
}

bs = new boardSquare(100*j,100*i,type);
backBoard.add(bs);

}

}
//Filling in empty middle
type = "Blank";
for (int i = 2; i < 7; i++)
{
for(int j = 0; j < 9; j++)
{

bs = new boardSquare(100*j,100*i,type);
backBoard.add(bs);

}

}

//Filling in Black side
for (int i = 7; i < 9; i++)
{
for(int j = 0; j < 9; j++)
{
if(j % 2 != 0)
{
type = "Black";
}
else
{
type = "Blank";
}

bs = new boardSquare(100*j,100*i,type);
backBoard.add(bs);

}

}

backBoard.repaint();
frame.add(backBoard);
frame.repaint();


}

private class boardSquare extends JComponent
{
private int x; //x position of the rectangle measured from top left corner
private int y; //y position of the rectangle measured from top left corner

private boolean isBlack = false;
private boolean isRed = false;

public boardSquare(int p, int q, String type)
{
x = p;
y = q;
if (type.equals("Black"))
{
isBlack = true;
isRed = false;
}
else if (type.equals("Red"))
{
isRed = true;
isBlack = false;
}
else if (type.equals("Blank"))
{
isBlack = false;
isRed = false;
}

}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
Rectangle box = new Rectangle(x,y,100,100);
g2.draw(box);
g2.setPaint(Color.BLUE);
g2.fill(box);

if(isBlack)
{
g2.fillOval(x, y,100 ,100 );
g2.setColor(Color.black);
g2.drawOval(x, y, 100, 100);
}

else if(isRed)
{
g2.fillOval(x, y,100 ,100 );
g2.setColor(Color.red);
g2.drawOval(x, y, 100, 100);
}

}
}


}


public static void main(String[] args)
{
Board game = new Board();

}
}

最佳答案

你有几个问题。

Java UI 是基于布局的,这意味着当您将组件添加到父组件时,父组件的布局决定了子组件的放置位置。您没有任何代码来设置布局,因此您的应用程序使用默认设置(FlowLayout 是默认设置,这可能适用于您的情况,只要您的 JFrame 和子项大小合适)。

更大的问题在您的 boardSquare 类中。默认情况下,JPanel 的尺寸为 10x10。你没有指定大小,所以你所有的方 block 都是 10x10。您需要告诉方 block 它们有多大。您可以在 boardSquare 构造函数中执行此操作:

setPreferredSize(new Dimension(100, 100));

最后,在您的绘图代码中,您在绘制正方形和圆形时对 x,y 进行了偏移。这是距组件左上角的偏移量。您的组件(设置大小后)将为 100x100 像素。但是,如果您的 x,y 大于这些值,您将绘制在组件边界之外。相反,这些值应设置为 0,0,因为这是您正在绘制的组件的左上角。

通过设置方 block 的首选大小并将 x,y 设置为 0,我能够在框架中绘制方 block ,尽管它并不漂亮。在正确布局之前,您需要先设置正确的布局。

关于java - 在 Java 中创建跳棋盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9576157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com