Added Eclipse project and basic class structure

+ Piece icons
+ TextureLoader
+ BoardPanel as a UI for the chess board
+ Chess as a main class
This commit is contained in:
Kai S. K. Engelbart 2019-07-01 18:26:43 +02:00
parent d3f66856bd
commit 8cc171ceb0
16 changed files with 172 additions and 0 deletions

11
.classpath Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="res"/>
<classpathentry kind="output" path="bin"/>
</classpath>

BIN
res/bishop_black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
res/bishop_white.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
res/king_black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
res/king_white.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
res/knight_black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
res/knight_white.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
res/pawn_black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

BIN
res/pawn_white.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
res/queen_black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
res/queen_white.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
res/rook_black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

BIN
res/rook_white.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 933 B

View File

@ -0,0 +1,67 @@
package dev.kske.chess;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JPanel;
/**
* Project: <strong>Chess</strong><br>
* File: <strong>BoardPanel.java</strong><br>
* Created: <strong>01.07.2019</strong><br>
* Author: <strong>Kai S. K. Engelbart</strong><br>
* <br>
* A square panel for rendering the chess board. To work correctly,
* this must be added to a parent component that allows the child to decide the
* size.
*/
public class BoardPanel extends JPanel {
private static final long serialVersionUID = 6771148331334310216L;
private int tileSize;
public BoardPanel() {
// Add a component listener for adjusting the tile size on resizing
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
tileSize = getWidth() / 8;
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.white);
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++) {
if (j > 0) g.setColor(g.getColor().equals(Color.white) ? Color.black : Color.white);
g.fillRect(tileSize * i, tileSize * j, tileSize, tileSize);
}
}
@Override
public Dimension getMinimumSize() { return getPreferredSize(); }
@Override
public Dimension getMaximumSize() { return getPreferredSize(); }
@Override
public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
Container c = getParent();
if (c != null) d = c.getSize();
else return new Dimension(480, 480);
int w = (int) d.getWidth();
int h = (int) d.getHeight();
int s = Math.max(w, h);
return new Dimension(s, s);
}
}

View File

@ -0,0 +1,56 @@
package dev.kske.chess;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
/**
* Project: <strong>Chess</strong><br>
* File: <strong>Chess.java</strong><br>
* Created: <strong>01.07.2019</strong><br>
* Author: <strong>Kai S. K. Engelbart</strong>
*/
public class Chess {
private JFrame mframe;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Chess window = new Chess();
window.mframe.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Chess() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
mframe = new JFrame();
mframe.setBounds(100, 100, 740, 740);
mframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BoardPanel boardPanel = new BoardPanel();
boardPanel.setLayout(null);
mframe.getContentPane().add(boardPanel, BorderLayout.CENTER);
}
}

View File

@ -0,0 +1,38 @@
package dev.kske.chess;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
* Project: <strong>Chess</strong><br>
* File: <strong>TextureLoader.java</strong><br>
* Created: <strong>01.07.2019</strong><br>
* Author: <strong>Kai S. K. Engelbart</strong>
*/
public class TextureLoader {
private TextureLoader() {}
/**
* Loads an image from the resource folder and scales it to a square.
*
* @param name The name of the file without the PNG extension in the resource
* folder
* @param scale The side length of the square to which the image will be scaled
* @return The scaled image
*/
public static Image loadScaledImage(String name, int scale) {
BufferedImage in = null;
try {
in = ImageIO.read(new File("res" + File.separator + name + ".png"));
} catch (IOException e) {
e.printStackTrace();
}
Image scaled = in.getScaledInstance(scale, scale, Image.SCALE_SMOOTH);
return scaled;
}
}