import javax.swing.*; import java.awt.*; import java.util.*; /* Generaliserad variant av uppgift 9.4 - med variabelt antal rutor. * Obs: ingen speldynamik i denna klassen. Extrauppgift för den intresserade * att implementera! */ public class Chess extends JPanel { private static final int MIN_SQUARES = 3; private static final int STANDARD_SQUARES = 3; private static final int STANDARD_SQUARE_SIZE = 100; private static final String FONT_FAMILY = Font.SANS_SERIF; private static final int FONT_STYLE = Font.PLAIN; private static final Color BLACK = Color.BLACK; private static final Color WHITE = Color.WHITE; private static final Color FOREGROUND = Color.RED; private char[][] spelplan; private int squares; public Chess() { this(STANDARD_SQUARES, STANDARD_SQUARE_SIZE, STANDARD_SQUARE_SIZE); } public Chess(int squares) { this(squares, STANDARD_SQUARE_SIZE, STANDARD_SQUARE_SIZE); } public Chess(int squares, int squaresizeX, int squaresizeY) { if (squares < MIN_SQUARES) { throw new IllegalArgumentException("You must have at least 3x3 squares."); } this.squares = squares; spelplan = new char[squares][squares]; setPreferredSize(new Dimension(squares*squaresizeX, squares*squaresizeY)); } public char avläs(int x, int y) { int realX = x-1; int realY = y-1; if (realX < 0 || realY < 0 || realX > squares-1 || realY > squares-1) throw new IllegalArgumentException("Allowable: 0 < x <= " + squares + ", 0 < y <= " + squares); return spelplan[realX][realY]; } // eventuellt lägga till kontroll av tillåten char public void placera(char p, int x, int y) { int realX = x-1; int realY = y-1; if (realX < 0 || realY < 0 || realX > squares-1 || realY > squares-1) throw new IllegalArgumentException("Allowable: 0 < x <= " + squares + ", 0 < y <= " + squares); spelplan[realX][realY] = p; repaint(); } public void flytta(int x, int y, int nyX, int nyY) { int realX = x-1; int realY = y-1; int realNyX = nyX-1; int realNyY = nyY-1; if (realX < 0 || realY < 0 || realX > squares-1 || realY > squares-1 || realNyX < 0 || realNyY < 0 || realNyX > squares-1 || realNyY > squares-1) throw new IllegalArgumentException("Allowable: 0 < x <= " + squares + ", 0 < y <= " + squares); spelplan[realNyX][realNyY] = spelplan[realX][realY]; spelplan[realX][realY] = '\0'; repaint(); } // antagande: för bräda med nxn rutor krävs n pjäser i rad för vinst public char vinst() { // kolla lodrätta rader for (int x=0;x