# HG changeset patch # User Markus Bröker # Date 1485548715 -3600 # Node ID 55b0d5006e7bbdd6dfc2d53e325be821892320e4 # Parent d4b2b9a87d809c878e075ab90982bc7bc16e1420 Sourcecode neu formatiert und ins Jahr 2017 migriert Eine 9 Jahre alte Software konnte mit einigen Korrekturen wieder belebt werden. diff --git a/.hgignore b/.hgignore new file mode 100644 --- /dev/null +++ b/.hgignore @@ -0,0 +1,3 @@ +syntax: regexp +\.class$ +^bin$ diff --git a/build.xml b/build.xml --- a/build.xml +++ b/build.xml @@ -9,6 +9,7 @@ + @@ -57,7 +58,7 @@ - @@ -71,8 +72,8 @@ - - + + diff --git a/jnlp/checkers.jnlp b/jnlp/checkers.jnlp --- a/jnlp/checkers.jnlp +++ b/jnlp/checkers.jnlp @@ -1,10 +1,10 @@ - + Checkers - Largo Enterprises - + 4customers.de + Checkers @@ -16,6 +16,6 @@ - none + none diff --git a/jnlp/schach.jnlp b/jnlp/schach.jnlp --- a/jnlp/schach.jnlp +++ b/jnlp/schach.jnlp @@ -1,10 +1,10 @@ - + Chess - Largo Enterprises - + 4Customers + Chess @@ -16,6 +16,6 @@ - none + none diff --git a/org/homelinux/largo/checkers/Checkers.java b/org/homelinux/largo/checkers/Checkers.java --- a/org/homelinux/largo/checkers/Checkers.java +++ b/org/homelinux/largo/checkers/Checkers.java @@ -22,214 +22,215 @@ import org.homelinux.largo.utils.BrowserLaunch; public class Checkers extends JFrame implements Runnable { - static final long serialVersionUID = 1L; - static final String helpURL = "http://largo.homelinux.org/cgi-bin/gitweb.cgi?p=games/Schach.git;a=summary"; + static final long serialVersionUID = 1L; + static final String helpURL = "https://www.4customers.de/hg/Schach"; - MouseListener listener; - KIBoard board; - Point p; - JLabel human = new JLabel("Human"); - JLabel computer = new JLabel("Computer"); - JButton neu = new JButton("Play"); - JButton pconly = new JButton("PC-PC"); - JButton back = new JButton("Back"); - JButton forward = new JButton("For"); - JButton help = new JButton("Source"); + MouseListener listener; + KIBoard board; + Point p; + JLabel human = new JLabel("Human"); + JLabel computer = new JLabel("Computer"); + JButton neu = new JButton("Play"); + JButton pconly = new JButton("PC-PC"); + JButton back = new JButton("Back"); + JButton forward = new JButton("For"); + JButton help = new JButton("Source"); - SpinnerNumberModel model = new SpinnerNumberModel(4, 1, 8, 1); - JSpinner combo = new JSpinner(model); + SpinnerNumberModel model = new SpinnerNumberModel(4, 1, 8, 1); + JSpinner combo = new JSpinner(model); - JPanel panel; - JPanel fpanel; + JPanel panel; + JPanel fpanel; - int search_depth; + int search_depth; - boolean pc_only; + boolean pc_only; - public Checkers(int w, int h) { - super("Checkers by Largo Enterprises"); - setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); - board = new KIBoard(w, h); + public Checkers(int w, int h) { + super("Checkers by 4customers.de"); + setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); + board = new KIBoard(w, h); - fpanel = new JPanel(); - fpanel.add(back); - fpanel.add(neu); - fpanel.add(combo); - fpanel.add(pconly); - fpanel.add(help); - fpanel.add(forward); + fpanel = new JPanel(); + fpanel.add(back); + fpanel.add(neu); + fpanel.add(combo); + fpanel.add(pconly); + fpanel.add(help); + fpanel.add(forward); - panel = new JPanel(); - panel.setLayout(new BorderLayout()); - panel.add(human, "West"); - panel.add(fpanel, "Center"); - panel.add(computer, "East"); + panel = new JPanel(); + panel.setLayout(new BorderLayout()); + panel.add(human, "West"); + panel.add(fpanel, "Center"); + panel.add(computer, "East"); - fpanel.setBackground(new Color(50, 100, 200)); - panel.setBackground(new Color(50, 100, 200)); + fpanel.setBackground(new Color(50, 100, 200)); + panel.setBackground(new Color(50, 100, 200)); - getContentPane().setLayout(new BorderLayout()); - getContentPane().add(panel, "North"); - getContentPane().add(board, "Center"); + getContentPane().setLayout(new BorderLayout()); + getContentPane().add(panel, "North"); + getContentPane().add(board, "Center"); - neu.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent actionevent) { - human.setText("Human"); - computer.setText("Computer"); - pc_only = false; - board.init(); - board.negateEstimation(false); - } - }); + neu.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + human.setText("Human"); + computer.setText("Computer"); + pc_only = false; + board.init(); + board.negateEstimation(false); + } + }); - pconly.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent actionevent) { - human.setText("Computer"); - computer.setText("Computer"); - pc_only = true; - } - }); + pconly.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + human.setText("Computer"); + computer.setText("Computer"); + pc_only = true; + } + }); - back.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent actionevent) { - board.backwards(); - } - }); + back.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + board.backwards(); + } + }); - forward.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent actionevent) { - board.forward(); - } - }); + forward.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + board.forward(); + } + }); - help.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent actionevent) { - BrowserLaunch browser = new BrowserLaunch(); - browser.openURL(helpURL); - } - }); + help.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + BrowserLaunch browser = new BrowserLaunch(); + browser.openURL(helpURL); + } + }); - listener = board.getMouseListener(); + listener = board.getMouseListener(); - pc_only = false; - search_depth = 3; - pack(); - } + pc_only = false; + search_depth = 3; + pack(); + } - public void computer_play() { - while (pc_only) { - search_depth = model.getNumber().intValue() - 1; + public void computer_play() { + while (pc_only) { + search_depth = model.getNumber().intValue() - 1; - if (!board.isBlacksTurn()) { - human.setText("Computer"); - board.negateEstimation(true); - if (!board.doBestMove(search_depth)) { - pc_only = false; - return; - } - board.negateEstimation(false); - human.setText("Computer"); - board.setBlacksTurn(true); - } else { - computer.setText("Computer"); - if (!board.doBestMove(search_depth)) { - pc_only = false; - return; - } - computer.setText("Computer"); - board.setBlacksTurn(false); + if (!board.isBlacksTurn()) { + human.setText("Computer"); + board.negateEstimation(true); + if (!board.doBestMove(search_depth)) { + pc_only = false; + return; + } + board.negateEstimation(false); + human.setText("Computer"); + board.setBlacksTurn(true); + } else { + computer.setText("Computer"); + if (!board.doBestMove(search_depth)) { + pc_only = false; + return; + } + computer.setText("Computer"); + board.setBlacksTurn(false); - if (board.simu_debug()) { - for (int i = 0; i < 64; i++) { - if ((i + 1) % 8 == 0) - System.err.printf("%2d=%d%n", i, board.getValue(i)); - else - System.err.printf("%2d=%d ", i, board.getValue(i)); - } - } + if (board.simu_debug()) { + for (int i = 0; i < 64; i++) { + if ((i + 1) % 8 == 0) + System.err.printf("%2d=%d%n", i, board.getValue(i)); + else + System.err.printf("%2d=%d ", i, board.getValue(i)); + } + } - try { - Thread.sleep(10); - } catch (InterruptedException e) { - System.err.println("computer_play: " + e.getLocalizedMessage()); - System.err.println("========================================================================"); - e.printStackTrace(); - System.err.println("========================================================================"); - return; - } - } - } - } + try { + Thread.sleep(10); + } catch (InterruptedException e) { + System.err.println("computer_play: " + e.getLocalizedMessage()); + System.err.println("========================================================================"); + e.printStackTrace(); + System.err.println("========================================================================"); + return; + } + } + } + } - public void run() { - for (;;) { + public void run() { + for (;;) { - /* is this thread safe */ - search_depth = model.getNumber().intValue() - 1; + /* is this thread safe */ + search_depth = model.getNumber().intValue() - 1; - if (pc_only) { - computer_play(); - } + if (pc_only) { + computer_play(); + } - if (!board.isBlacksTurn()) { - if (listener.isSelected()) { - p = listener.getSelection(); - if (board.move(p)) - board.setBlacksTurn(true); - } - try { - Thread.sleep(50); - } catch (InterruptedException e) { - System.err.println("Schach::run: " + e.getLocalizedMessage()); - System.err.println("========================================================================"); - e.printStackTrace(); - System.err.println("========================================================================"); - return; - } - } else { - human.setText("Human"); - computer.setText("Computer"); - board.doBestMove(search_depth); - human.setText("Human"); - computer.setText("Computer"); - board.setBlacksTurn(false); + if (!board.isBlacksTurn()) { + if (listener.isSelected()) { + p = listener.getSelection(); + if (board.move(p)) + board.setBlacksTurn(true); + } + try { + Thread.sleep(50); + } catch (InterruptedException e) { + System.err.println("Schach::run: " + e.getLocalizedMessage()); + System.err.println("========================================================================"); + e.printStackTrace(); + System.err.println("========================================================================"); + return; + } + } else { + human.setText("Human"); + computer.setText("Computer"); + board.doBestMove(search_depth); + human.setText("Human"); + computer.setText("Computer"); + board.setBlacksTurn(false); - if (board.simu_debug()) { - for (int i = 0; i < 64; i++) { - if ((i + 1) % 8 == 0) - System.out.printf("%2d=%d%n", i, board.getValue(i)); - else - System.out.printf("%2d=%d ", i, board.getValue(i)); - } - } - } - } - } + if (board.simu_debug()) { + for (int i = 0; i < 64; i++) { + if ((i + 1) % 8 == 0) + System.out.printf("%2d=%d%n", i, board.getValue(i)); + else + System.out.printf("%2d=%d ", i, board.getValue(i)); + } + } + } + } + } - public static void main(String args[]) { - Checkers c = new Checkers(74, 74); + public static void main(String args[]) { + Checkers c = new Checkers(74, 74); - c.setResizable(false); - c.setVisible(true); + c.setResizable(false); + c.setVisible(true); + c.pack(); - if (args.length == 1) { - if (args[0].equals("full")) - c.board.setDebug(true, true); - else if (args[0].equals("simu")) - c.board.setDebug(true, false); - else if (args[0].equals("undo")) - c.board.setDebug(false, true); - else if (args[0].equals("none")) - c.board.setDebug(false, false); - else { - System.out.println(" Chess: java -jar games.jar [full|simu|undo|none]"); - System.out - .println("Checkers: java -cp games.jar org.homelinux.largo.checkers.Checkers [full|simu|undo|none]"); - } - } + if (args.length == 1) { + if (args[0].equals("full")) + c.board.setDebug(true, true); + else if (args[0].equals("simu")) + c.board.setDebug(true, false); + else if (args[0].equals("undo")) + c.board.setDebug(false, true); + else if (args[0].equals("none")) + c.board.setDebug(false, false); + else { + System.out.println(" Chess: java -jar games.jar [full|simu|undo|none]"); + System.out.println( + "Checkers: java -cp games.jar org.homelinux.largo.checkers.Checkers [full|simu|undo|none]"); + } + } - Thread t = new Thread(c); - t.setPriority(Thread.NORM_PRIORITY - 1); - t.start(); - } + Thread t = new Thread(c); + t.setPriority(Thread.NORM_PRIORITY - 1); + t.start(); + } } diff --git a/org/homelinux/largo/checkers/KIBoard.java b/org/homelinux/largo/checkers/KIBoard.java --- a/org/homelinux/largo/checkers/KIBoard.java +++ b/org/homelinux/largo/checkers/KIBoard.java @@ -9,196 +9,196 @@ import org.homelinux.largo.games.board.checkersboard.CheckersBoard; public class KIBoard extends CheckersBoard { - static final long serialVersionUID = 1L; - static final int game_const = 500; + static final long serialVersionUID = 1L; + static final int game_const = 500; - protected boolean SIMU_DEBUG = false; - private boolean negate_estimation = false; + protected boolean SIMU_DEBUG = false; + private boolean negate_estimation = false; - private Move bestMove; - private int desired_depth; + private Move bestMove; + private int desired_depth; - public KIBoard(int w, int h) { - super(w, h); - desired_depth = -1; - } + public KIBoard(int w, int h) { + super(w, h); + desired_depth = -1; + } - /** - * Set the current DEBUG-Level: simu: print all valid, simulated moves undo: - * print all undos - */ - public void setDebug(boolean simu, boolean undo) { - SIMU_DEBUG = simu; - UNDO_DEBUG = undo; - } + /** + * Set the current DEBUG-Level: simu: print all valid, simulated moves undo: + * print all undos + */ + public void setDebug(boolean simu, boolean undo) { + SIMU_DEBUG = simu; + UNDO_DEBUG = undo; + } - public boolean simu_debug() { - return SIMU_DEBUG; - } + public boolean simu_debug() { + return SIMU_DEBUG; + } - public boolean undo_debug() { - return UNDO_DEBUG; - } + public boolean undo_debug() { + return UNDO_DEBUG; + } - /** - * This function flips the sides: Player A maximizes and Player B minimizes - */ - public void negateEstimation(boolean b) { - negate_estimation = b; - } + /** + * This function flips the sides: Player A maximizes and Player B minimizes + */ + public void negateEstimation(boolean b) { + negate_estimation = b; + } - /** - * The Minimax-Algorithm works for TWO-PLAYER Games Player A minimizes, - * Player B maximizes - */ - public int estimateFunction() { - int i; - int white = 0; - int black = 0; + /** + * The Minimax-Algorithm works for TWO-PLAYER Games Player A minimizes, + * Player B maximizes + */ + public int estimateFunction() { + int i; + int white = 0; + int black = 0; - for (i = 0; i < 64; i++) { - if (isWhite(i)) - white += getValue(i); - if (isBlack(i)) - black += getValue(i); - } + for (i = 0; i < 64; i++) { + if (isWhite(i)) + white += getValue(i); + if (isBlack(i)) + black += getValue(i); + } - /** - * solves ticket #3 - */ - if (negate_estimation) - return white - black; + /** + * solves ticket #3 + */ + if (negate_estimation) + return white - black; - return black - white; - } + return black - white; + } - /** - * simulates and returns the next possible move for a Player or null, when - * no more moves are possible. The Turn will flip automatically if - * "simulate(...)" finds a valid move. - */ - Move simulate(int t, int o) { - Move move = null; - int value; + /** + * simulates and returns the next possible move for a Player or null, when + * no more moves are possible. The Turn will flip automatically if + * "simulate(...)" finds a valid move. + */ + Move simulate(int t, int o) { + Move move = null; + int value; - if (validTurn(o)) { - while (t < 64) { - if (!simulateMove(t, o)) { - t++; - continue; - } + if (validTurn(o)) { + while (t < 64) { + if (!simulateMove(t, o)) { + t++; + continue; + } - value = estimateFunction(); - move = new Move(value, t, o); + value = estimateFunction(); + move = new Move(value, t, o); - /* Flip Sides */ - setBlacksTurn(!isBlacksTurn()); - return move; - } - } - return null; - } + /* Flip Sides */ + setBlacksTurn(!isBlacksTurn()); + return move; + } + } + return null; + } - /** - * AlphaBeta-Algorithm: the Maximizer - */ - int max_alpha_beta(int depth, int alpha, int beta) { - int moveValue; - int o, t; - Move move = null; + /** + * AlphaBeta-Algorithm: the Maximizer + */ + int max_alpha_beta(int depth, int alpha, int beta) { + int moveValue; + int o, t; + Move move = null; - if (desired_depth == -1) - desired_depth = depth; + if (desired_depth == -1) + desired_depth = depth; - for (o = 0; o < 64; o++) { - t = 0; - while ((move = simulate(t, o)) != null) { - /* particular move from black */ - t = move.target; + for (o = 0; o < 64; o++) { + t = 0; + while ((move = simulate(t, o)) != null) { + /* particular move from black */ + t = move.target; - if (depth == 0 || Math.abs(move.value) > game_const) - moveValue = move.value; - else - /* best next move */ - moveValue = min_alpha_beta(depth - 1, alpha, beta); + if (depth == 0 || Math.abs(move.value) > game_const) + moveValue = move.value; + else + /* best next move */ + moveValue = min_alpha_beta(depth - 1, alpha, beta); - undo(); - t++; + undo(); + t++; - if (moveValue >= beta) - return beta; + if (moveValue >= beta) + return beta; - if (moveValue > alpha) { - alpha = moveValue; - if (depth == desired_depth) - bestMove = move; - } - } - } + if (moveValue > alpha) { + alpha = moveValue; + if (depth == desired_depth) + bestMove = move; + } + } + } - return alpha; - } + return alpha; + } - /** - * AlphaBeta-Algorithm: the Minimizer - */ - int min_alpha_beta(int depth, int alpha, int beta) { - int moveValue; - int o, t; - Move move = null; + /** + * AlphaBeta-Algorithm: the Minimizer + */ + int min_alpha_beta(int depth, int alpha, int beta) { + int moveValue; + int o, t; + Move move = null; - for (o = 0; o < 64; o++) { - t = 0; - while ((move = simulate(t, o)) != null) { - /* particular move from white */ - t = move.target; + for (o = 0; o < 64; o++) { + t = 0; + while ((move = simulate(t, o)) != null) { + /* particular move from white */ + t = move.target; - if (depth == 0 || Math.abs(move.value) > game_const) - moveValue = move.value; - else - /* best next move */ - moveValue = max_alpha_beta(depth - 1, alpha, beta); + if (depth == 0 || Math.abs(move.value) > game_const) + moveValue = move.value; + else + /* best next move */ + moveValue = max_alpha_beta(depth - 1, alpha, beta); - undo(); - t++; + undo(); + t++; - if (moveValue <= alpha) - return alpha; + if (moveValue <= alpha) + return alpha; - if (moveValue < beta) - beta = moveValue; - } - } + if (moveValue < beta) + beta = moveValue; + } + } - return beta; - } + return beta; + } - /** - * Evaluates the next, best Move after search_depth half-moves. When the - * Machine has Black, set negateEstimation(false); When the Machine has - * White, set negateEstimation(true); - */ - public boolean doBestMove(int search_depth) { - int value; + /** + * Evaluates the next, best Move after search_depth half-moves. When the + * Machine has Black, set negateEstimation(false); When the Machine has + * White, set negateEstimation(true); + */ + public boolean doBestMove(int search_depth) { + int value; - desired_depth = -1; - bestMove = null; - value = max_alpha_beta(search_depth, Integer.MIN_VALUE, Integer.MAX_VALUE); + desired_depth = -1; + bestMove = null; + value = max_alpha_beta(search_depth, Integer.MIN_VALUE, Integer.MAX_VALUE); - if (bestMove == null) { - System.err.println("Computing once more..."); - value = max_alpha_beta(1, Integer.MIN_VALUE, Integer.MAX_VALUE); - if (bestMove == null) { - System.out.println("Finito " + value); - return false; - } - } + if (bestMove == null) { + System.err.println("Computing once more..."); + value = max_alpha_beta(1, Integer.MIN_VALUE, Integer.MAX_VALUE); + if (bestMove == null) { + System.out.println("Finito " + value); + return false; + } + } - if (doMove(bestMove.target, bestMove.origin)) { - System.out.println("Next Move"); - return true; - } + if (doMove(bestMove.target, bestMove.origin)) { + System.out.println("Next Move"); + return true; + } - return false; - } + return false; + } } diff --git a/org/homelinux/largo/games/board/Board.java b/org/homelinux/largo/games/board/Board.java --- a/org/homelinux/largo/games/board/Board.java +++ b/org/homelinux/largo/games/board/Board.java @@ -14,379 +14,379 @@ import javax.swing.JPanel; public class Board extends JPanel { - static final long serialVersionUID = 1L; + static final long serialVersionUID = 1L; - protected boolean UNDO_DEBUG = false; + protected boolean UNDO_DEBUG = false; - protected Piece board_pieces[]; - private Piece pieces[]; + protected Piece board_pieces[]; + private Piece pieces[]; - protected ArrayList stack; - protected int moveNr; + protected ArrayList stack; + protected int moveNr; - protected static final int EMPTY = 0; + protected static final int EMPTY = 0; - Color color_black; - Color color_white; + Color color_black; + Color color_white; - int iHeight; - int iWidth; - int xPos; - int yPos; + int iHeight; + int iWidth; + int xPos; + int yPos; - boolean black; - boolean blacksTurn; + boolean black; + boolean blacksTurn; - MouseListener listener; + MouseListener listener; - /** - * The init method initializes an empty board with a history. - */ - public void init() { - int i; - pieces = new Piece[64]; + /** + * The init method initializes an empty board with a history. + */ + public void init() { + int i; + pieces = new Piece[64]; - for (i = 0; i < 64; i++) { - pieces[i] = new Piece(null, null, EMPTY, 0); - } + for (i = 0; i < 64; i++) { + pieces[i] = new Piece(null, null, EMPTY, 0); + } - xPos = 0; - yPos = 0; + xPos = 0; + yPos = 0; - black = false; - blacksTurn = false; - board_pieces = getPieces(pieces); - stack = new ArrayList(); - moveNr = 0; - } + black = false; + blacksTurn = false; + board_pieces = getPieces(pieces); + stack = new ArrayList(); + moveNr = 0; + } - public Board(int w, int h) { - iWidth = w; - iHeight = h; - color_white = new Color(255, 255, 255); - color_black = new Color(50, 100, 200); - setPreferredSize(new Dimension(8 * iWidth, 8 * iHeight)); + public Board(int w, int h) { + iWidth = w; + iHeight = h; + color_white = new Color(255, 255, 255); + color_black = new Color(50, 100, 200); + setPreferredSize(new Dimension(8 * iWidth, 8 * iHeight)); - init(); - listener = new MouseListener(iWidth, iHeight); - addMouseListener(listener); - } + init(); + listener = new MouseListener(iWidth, iHeight); + addMouseListener(listener); + } - /** - * getPiece returns a Piece-Object from the Board Cache. It might not be - * visible on the current board. - */ - public Piece getPiece(int t) { - return pieces[t]; - } + /** + * getPiece returns a Piece-Object from the Board Cache. It might not be + * visible on the current board. + */ + public Piece getPiece(int t) { + return pieces[t]; + } - /** - * setPiece sets a Piece-Object into the Board Cache and will not be - * visible. - */ - protected void setPiece(int t, Piece p) { - pieces[t] = p; - } + /** + * setPiece sets a Piece-Object into the Board Cache and will not be + * visible. + */ + protected void setPiece(int t, Piece p) { + pieces[t] = p; + } - protected Piece[] getPieces() { - return getPieces(pieces); - } + protected Piece[] getPieces() { + return getPieces(pieces); + } - private Piece[] getPieces(Piece[] which_pieces) { - Piece[] p = new Piece[64]; - int i; + private Piece[] getPieces(Piece[] which_pieces) { + Piece[] p = new Piece[64]; + int i; - for (i = 0; i < 64; i++) - p[i] = new Piece(which_pieces[i]); + for (i = 0; i < 64; i++) + p[i] = new Piece(which_pieces[i]); - return p; - } + return p; + } - protected void setPieces(Piece[] p) { - pieces = p; - } + protected void setPieces(Piece[] p) { + pieces = p; + } - /** - * needed in paint(Graphics g) - */ - private Image getBoardImage(int i) { - return board_pieces[i].image; - } + /** + * needed in paint(Graphics g) + */ + private Image getBoardImage(int i) { + return board_pieces[i].image; + } - /** - * getMouseListener returns a valid MouseListener for this Board. - */ - public MouseListener getMouseListener() { - return listener; - } + /** + * getMouseListener returns a valid MouseListener for this Board. + */ + public MouseListener getMouseListener() { + return listener; + } - /** - * currentMove returns the current stack.size(). - */ - public int currentMove() { - return stack.size(); - } + /** + * currentMove returns the current stack.size(). + */ + public int currentMove() { + return stack.size(); + } - /** - * returns the color of piece[i]. - */ - public String getColor(int i) { - return pieces[i].color; - } + /** + * returns the color of piece[i]. + */ + public String getColor(int i) { + return pieces[i].color; + } - /** - * returns the current Value of a particular piece. - */ - public int getValue(int i) { - return pieces[i].value; - } + /** + * returns the current Value of a particular piece. + */ + public int getValue(int i) { + return pieces[i].value; + } - /** - * Defined Integer Constants: EMTPY = 0 - */ - public int getType(int i) { - return pieces[i].type; - } + /** + * Defined Integer Constants: EMTPY = 0 + */ + public int getType(int i) { + return pieces[i].type; + } - public boolean isEmpty(int i) { - if (pieces[i].type == EMPTY) - return true; - return false; - } + public boolean isEmpty(int i) { + if (pieces[i].type == EMPTY) + return true; + return false; + } - boolean BoardisEmpty(int i) { - if (board_pieces[i].type == EMPTY) - return true; - return false; - } + boolean BoardisEmpty(int i) { + if (board_pieces[i].type == EMPTY) + return true; + return false; + } - /** - * blacksTurn = true -> Black moves blacksTurn = false -> White moves - */ - public boolean isBlacksTurn() { - return blacksTurn; - } + /** + * blacksTurn = true -> Black moves blacksTurn = false -> White moves + */ + public boolean isBlacksTurn() { + return blacksTurn; + } - public void setBlacksTurn(boolean b) { - blacksTurn = b; - } + public void setBlacksTurn(boolean b) { + blacksTurn = b; + } - /** - * returns true, when piece[i] is white - */ - public boolean isWhite(int i) { - if (isEmpty(i)) - return false; + /** + * returns true, when piece[i] is white + */ + public boolean isWhite(int i) { + if (isEmpty(i)) + return false; - if (pieces[i].color.equals("white")) - return true; - return false; - } + if (pieces[i].color.equals("white")) + return true; + return false; + } - /** - * returns true, when piece[i] is black - */ - public boolean isBlack(int i) { - if (isEmpty(i)) - return false; + /** + * returns true, when piece[i] is black + */ + public boolean isBlack(int i) { + if (isEmpty(i)) + return false; - if (pieces[i].color.equals("black")) - return true; - return false; - } + if (pieces[i].color.equals("black")) + return true; + return false; + } - /** - * returns true, when both pieces have opposite colors - */ - public boolean isEnemy(int t, int o) { - if (isEmpty(t)) - return false; + /** + * returns true, when both pieces have opposite colors + */ + public boolean isEnemy(int t, int o) { + if (isEmpty(t)) + return false; - if (!pieces[t].color.equals(pieces[o].color)) - return true; - return false; - } + if (!pieces[t].color.equals(pieces[o].color)) + return true; + return false; + } - /** - * returns true, when both pieces have the same color - */ - public boolean isSamePiece(int t, int o) { - if (isEmpty(t)) - return false; + /** + * returns true, when both pieces have the same color + */ + public boolean isSamePiece(int t, int o) { + if (isEmpty(t)) + return false; - if (pieces[t].color.equals(pieces[o].color)) - return true; - return false; - } + if (pieces[t].color.equals(pieces[o].color)) + return true; + return false; + } - /** - * This function checks for the color of the piece at piece[i] and returns - * true, if the color matches the current Turn. - */ - public boolean validTurn(int i) { - if (isEmpty(i)) - return false; + /** + * This function checks for the color of the piece at piece[i] and returns + * true, if the color matches the current Turn. + */ + public boolean validTurn(int i) { + if (isEmpty(i)) + return false; - if (getColor(i).equals("white") && isBlacksTurn()) - return false; - if (getColor(i).equals("black") && !isBlacksTurn()) - return false; - return true; - } + if (getColor(i).equals("white") && isBlacksTurn()) + return false; + if (getColor(i).equals("black") && !isBlacksTurn()) + return false; + return true; + } - /** - * simulates a "valid" move or returns false. all changes are relative to - * pieces and will not be painted. This method sets internal variables for - * the rochade() method, which will be overidden. - */ - public boolean simulateMove(int t, int o) { - if (!validMove(t, o)) { - return false; - } + /** + * simulates a "valid" move or returns false. all changes are relative to + * pieces and will not be painted. This method sets internal variables for + * the rochade() method, which will be overidden. + */ + public boolean simulateMove(int t, int o) { + if (!validMove(t, o)) { + return false; + } - push(pieces[t], t, pieces[o], o); + push(pieces[t], t, pieces[o], o); - pieces[t] = new Piece(pieces[o]); - pieces[o] = new Piece(null, null, EMPTY, 0); + pieces[t] = new Piece(pieces[o]); + pieces[o] = new Piece(null, null, EMPTY, 0); - return true; - } + return true; + } - /** - * Moves a Piece on the Board at Point p - */ - public boolean move(Point p) { - int t; - int o; + /** + * Moves a Piece on the Board at Point p + */ + public boolean move(Point p) { + int t; + int o; - t = (p.endy * 8) + p.endx; - o = (p.starty * 8) + p.startx; + t = (p.endy * 8) + p.endx; + o = (p.starty * 8) + p.startx; - if (t < 0 || t > 63) - return false; - if (o < 0 || o > 63) - return false; + if (t < 0 || t > 63) + return false; + if (o < 0 || o > 63) + return false; - if (validTurn(o)) - return doMove(t, o); + if (validTurn(o)) + return doMove(t, o); - System.out.println("It's not your turn!"); - return false; - } + System.out.println("It's not your turn!"); + return false; + } - /** - * Moves one half-move backward. - */ - public void backwards() { - History h1; - History h2; + /** + * Moves one half-move backward. + */ + public void backwards() { + History h1; + History h2; - if (moveNr < 2) - return; + if (moveNr < 2) + return; - moveNr -= 2; + moveNr -= 2; - h1 = stack.get(moveNr); - h2 = stack.get(moveNr + 1); + h1 = stack.get(moveNr); + h2 = stack.get(moveNr + 1); - board_pieces[h1.pos] = h1.piece; - board_pieces[h2.pos] = h2.piece; + board_pieces[h1.pos] = h1.piece; + board_pieces[h2.pos] = h2.piece; - repaint(); - } + repaint(); + } - /** - * Moves one half-move forward. - */ - public void forward() { - History h1; - History h2; + /** + * Moves one half-move forward. + */ + public void forward() { + History h1; + History h2; - if (moveNr > stack.size() - 2) - return; + if (moveNr > stack.size() - 2) + return; - h1 = stack.get(moveNr); - h2 = stack.get(moveNr + 1); + h1 = stack.get(moveNr); + h2 = stack.get(moveNr + 1); - board_pieces[h1.pos] = h2.piece; - board_pieces[h2.pos] = new Piece(null, null, EMPTY, 0); + board_pieces[h1.pos] = h2.piece; + board_pieces[h2.pos] = new Piece(null, null, EMPTY, 0); - moveNr += 2; - repaint(); - } + moveNr += 2; + repaint(); + } - /** - * pushes 2 pieces onto the stack. - */ - public void push(Piece p1, int t, Piece p2, int o) { - stack.add(new History(p1, t, isBlacksTurn())); - stack.add(new History(p2, o, isBlacksTurn())); - } + /** + * pushes 2 pieces onto the stack. + */ + public void push(Piece p1, int t, Piece p2, int o) { + stack.add(new History(p1, t, isBlacksTurn())); + stack.add(new History(p2, o, isBlacksTurn())); + } - /** - * pop: undo the push operation. - */ - public void undo() { - History h1; - History h2; - int size = stack.size(); + /** + * pop: undo the push operation. + */ + public void undo() { + History h1; + History h2; + int size = stack.size(); - if (size < 2) - return; + if (size < 2) + return; - h1 = stack.remove(size - 1); - h2 = stack.remove(size - 2); + h1 = stack.remove(size - 1); + h2 = stack.remove(size - 2); - pieces[h1.pos] = h1.piece; - pieces[h2.pos] = h2.piece; + pieces[h1.pos] = h1.piece; + pieces[h2.pos] = h2.piece; - /* Reset the current player */ - setBlacksTurn(h2.turn); - } + /* Reset the current player */ + setBlacksTurn(h2.turn); + } - /** - * This method must be implemented in your "GameBoard" Return value: TRUE: - * the move IS possible Return value: FALSE: the move IS NOT possible - */ - public boolean validMove(int t, int o) { - System.out.println("public boolean validMove(int t, int o): Implement me"); - return false; - } + /** + * This method must be implemented in your "GameBoard" Return value: TRUE: + * the move IS possible Return value: FALSE: the move IS NOT possible + */ + public boolean validMove(int t, int o) { + System.out.println("public boolean validMove(int t, int o): Implement me"); + return false; + } - /** - * This method must be implemented in your "GameBoard" Return value: TRUE: - * the move was performed Return value: FALSE: the move was not performed - */ - public boolean doMove(int t, int o) { - System.out.println("public boolean doMove(int t, int o): Implement me"); - return false; - } + /** + * This method must be implemented in your "GameBoard" Return value: TRUE: + * the move was performed Return value: FALSE: the move was not performed + */ + public boolean doMove(int t, int o) { + System.out.println("public boolean doMove(int t, int o): Implement me"); + return false; + } - public void update(Graphics g) { - paint(g); - } + public void update(Graphics g) { + paint(g); + } - public void paint(Graphics g) { - for (int i = 0; i < 8; i++) { - for (int j = 0; j < 8; j++) { - if (black == true) { - g.setColor(color_black); - g.fillRect(xPos, yPos, iWidth, iHeight); - black = false; - } else { - g.setColor(color_white); - g.fillRect(xPos, yPos, iWidth, iHeight); - black = true; - } - if (!BoardisEmpty((i * 8) + j)) - g.drawImage(getBoardImage((i * 8) + j), xPos + 5, yPos, this); - xPos += iWidth; - } - xPos = 0; - yPos += iHeight; - black = !black; - } - xPos = 0; - yPos = 0; - } + public void paint(Graphics g) { + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 8; j++) { + if (black == true) { + g.setColor(color_black); + g.fillRect(xPos, yPos, iWidth, iHeight); + black = false; + } else { + g.setColor(color_white); + g.fillRect(xPos, yPos, iWidth, iHeight); + black = true; + } + if (!BoardisEmpty((i * 8) + j)) + g.drawImage(getBoardImage((i * 8) + j), xPos + 5, yPos, this); + xPos += iWidth; + } + xPos = 0; + yPos += iHeight; + black = !black; + } + xPos = 0; + yPos = 0; + } } diff --git a/org/homelinux/largo/games/board/History.java b/org/homelinux/largo/games/board/History.java --- a/org/homelinux/largo/games/board/History.java +++ b/org/homelinux/largo/games/board/History.java @@ -6,25 +6,25 @@ package org.homelinux.largo.games.board; public class History { - Piece piece; - int pos; - boolean turn; + Piece piece; + int pos; + boolean turn; - public History(Piece p, int n, boolean t) { - piece = new Piece(p); - pos = n; - turn = t; - } + public History(Piece p, int n, boolean t) { + piece = new Piece(p); + pos = n; + turn = t; + } - public Piece piece() { - return piece; - } + public Piece piece() { + return piece; + } - public int pos() { - return pos; - } + public int pos() { + return pos; + } - public boolean turn() { - return turn; - } + public boolean turn() { + return turn; + } } diff --git a/org/homelinux/largo/games/board/MouseListener.java b/org/homelinux/largo/games/board/MouseListener.java --- a/org/homelinux/largo/games/board/MouseListener.java +++ b/org/homelinux/largo/games/board/MouseListener.java @@ -9,44 +9,44 @@ import java.awt.event.MouseEvent; public class MouseListener extends MouseAdapter { - int width; - int height; - int delta; + int width; + int height; + int delta; - Point p; - boolean selected; + Point p; + boolean selected; - public MouseListener(int w, int h) { - width = w; - height = h; - p = new Point(); - selected = false; - } + public MouseListener(int w, int h) { + width = w; + height = h; + p = new Point(); + selected = false; + } - public void mousePressed(MouseEvent e) { - p.startx = (e.getX() / width); - p.starty = (e.getY() / height); - selected = false; - } + public void mousePressed(MouseEvent e) { + p.startx = (e.getX() / width); + p.starty = (e.getY() / height); + selected = false; + } - public void mouseReleased(MouseEvent e) { - p.endx = (e.getX() / width); - p.endy = (e.getY() / height); + public void mouseReleased(MouseEvent e) { + p.endx = (e.getX() / width); + p.endy = (e.getY() / height); - print(); - selected = true; - } + print(); + selected = true; + } - public boolean isSelected() { - return selected; - } + public boolean isSelected() { + return selected; + } - public Point getSelection() { - selected = false; - return p; - } + public Point getSelection() { + selected = false; + return p; + } - public void print() { - System.out.printf("%c%d-%c%d \t", (char) ('A' + p.startx), 8 - p.starty, (char) ('A' + p.endx), 8 - p.endy); - } + public void print() { + System.out.printf("%c%d-%c%d \t", (char) ('A' + p.startx), 8 - p.starty, (char) ('A' + p.endx), 8 - p.endy); + } } diff --git a/org/homelinux/largo/games/board/Move.java b/org/homelinux/largo/games/board/Move.java --- a/org/homelinux/largo/games/board/Move.java +++ b/org/homelinux/largo/games/board/Move.java @@ -6,13 +6,13 @@ package org.homelinux.largo.games.board; public class Move extends Object { - public int value; - public int target; - public int origin; + public int value; + public int target; + public int origin; - public Move(int v, int t, int o) { - value = v; - target = t; - origin = o; - } + public Move(int v, int t, int o) { + value = v; + target = t; + origin = o; + } } diff --git a/org/homelinux/largo/games/board/Piece.java b/org/homelinux/largo/games/board/Piece.java --- a/org/homelinux/largo/games/board/Piece.java +++ b/org/homelinux/largo/games/board/Piece.java @@ -8,22 +8,22 @@ import java.awt.Image; public class Piece extends Object { - Image image; - String color; - int type; - int value; + Image image; + String color; + int type; + int value; - public Piece(Piece s) { - image = s.image; - color = s.color; - type = s.type; - value = s.value; - } + public Piece(Piece s) { + image = s.image; + color = s.color; + type = s.type; + value = s.value; + } - public Piece(Image img, String c, int t, int v) { - image = img; - color = c; - type = t; - value = v; - } + public Piece(Image img, String c, int t, int v) { + image = img; + color = c; + type = t; + value = v; + } } diff --git a/org/homelinux/largo/games/board/Point.java b/org/homelinux/largo/games/board/Point.java --- a/org/homelinux/largo/games/board/Point.java +++ b/org/homelinux/largo/games/board/Point.java @@ -6,8 +6,8 @@ package org.homelinux.largo.games.board; public class Point { - int startx; - int starty; - int endx; - int endy; + int startx; + int starty; + int endx; + int endy; }; diff --git a/org/homelinux/largo/games/board/checkersboard/CheckersBoard.java b/org/homelinux/largo/games/board/checkersboard/CheckersBoard.java --- a/org/homelinux/largo/games/board/checkersboard/CheckersBoard.java +++ b/org/homelinux/largo/games/board/checkersboard/CheckersBoard.java @@ -13,284 +13,279 @@ import org.homelinux.largo.utils.ImgComponent; public class CheckersBoard extends Board { - static final long serialVersionUID = 1L; + static final long serialVersionUID = 1L; - static final int PIECE = 1; - static final int QUEEN = 2; + static final int PIECE = 1; + static final int QUEEN = 2; - final Piece white_super_sun = new Piece(new ImgComponent("images/white_super_sun.png").getImage(), "white", QUEEN, - 50); + final Piece white_super_sun = new Piece(new ImgComponent("images/white_super_sun.png").getImage(), "white", QUEEN, + 50); - final Piece black_super_sun = new Piece(new ImgComponent("images/black_super_sun.png").getImage(), "black", QUEEN, - 50); + final Piece black_super_sun = new Piece(new ImgComponent("images/black_super_sun.png").getImage(), "black", QUEEN, + 50); - void initBoard() { - for (int i = 1; i < 8; i += 2) - add(new ImgComponent("images/black_sun.png").getImage(), i, "black", PIECE); - for (int i = 8; i < 15; i += 2) - add(new ImgComponent("images/black_sun.png").getImage(), i, "black", PIECE); - for (int i = 17; i <= 23; i += 2) - add(new ImgComponent("images/black_sun.png").getImage(), i, "black", PIECE); + void initBoard() { + for (int i = 1; i < 8; i += 2) + add(new ImgComponent("images/black_sun.png").getImage(), i, "black", PIECE); + for (int i = 8; i < 15; i += 2) + add(new ImgComponent("images/black_sun.png").getImage(), i, "black", PIECE); + for (int i = 17; i <= 23; i += 2) + add(new ImgComponent("images/black_sun.png").getImage(), i, "black", PIECE); - for (int i = 40; i < 47; i += 2) - add(new ImgComponent("images/white_sun.png").getImage(), i, "white", PIECE); - for (int i = 49; i <= 55; i += 2) - add(new ImgComponent("images/white_sun.png").getImage(), i, "white", PIECE); - for (int i = 56; i < 63; i += 2) - add(new ImgComponent("images/white_sun.png").getImage(), i, "white", PIECE); - } + for (int i = 40; i < 47; i += 2) + add(new ImgComponent("images/white_sun.png").getImage(), i, "white", PIECE); + for (int i = 49; i <= 55; i += 2) + add(new ImgComponent("images/white_sun.png").getImage(), i, "white", PIECE); + for (int i = 56; i < 63; i += 2) + add(new ImgComponent("images/white_sun.png").getImage(), i, "white", PIECE); + } - /** - * The init method initializes a complete checkers board with figures and a - * history. - */ - public void init() { - super.init(); - initBoard(); - board_pieces = getPieces(); - repaint(); - } + /** + * The init method initializes a complete checkers board with figures and a + * history. + */ + public void init() { + super.init(); + initBoard(); + board_pieces = getPieces(); + repaint(); + } - public CheckersBoard(int w, int h) { - super(w, h); - } + public CheckersBoard(int w, int h) { + super(w, h); + } - void add(Image img, int i, String c, int t) { - int v = 0; + void add(Image img, int i, String c, int t) { + int v = 0; - switch (t) { - case PIECE: - v = 10; - } + switch (t) { + case PIECE: + v = 10; + } - setPiece(i, new Piece(img, c, t, v)); - } + setPiece(i, new Piece(img, c, t, v)); + } - /** - * Checks, wether this move is possible or not. - */ - public boolean validMove(int t, int o) { - int steps; - int rows; + /** + * Checks, wether this move is possible or not. + */ + public boolean validMove(int t, int o) { + int steps; + int rows; - if (t == o) - return false; - - if (isSamePiece(t, o)) - return false; + if (t == o) + return false; - if (getType(o) == EMPTY) - return false; + if (isSamePiece(t, o)) + return false; + + if (getType(o) == EMPTY) + return false; + + /* + * 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 + * 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 + * 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 + */ + + steps = Math.abs(t - o); + rows = Math.abs(t / 8 - o / 8); - /* - * 00 01 02 03 04 05 06 07 - * 08 09 10 11 12 13 14 15 - * 16 17 18 19 20 21 22 23 - * 24 25 26 27 28 29 30 31 - * 32 33 34 35 36 37 38 39 - * 40 41 42 43 44 45 46 47 - * 48 49 50 51 52 53 54 55 - * 56 57 58 59 60 61 62 63 - */ + switch (getType(o)) { + case PIECE: + if (steps % 7 == 0) { + if (steps == 7 && rows == 1 && isEmpty(t)) { + if (isBlack(o) && (t > o)) + return true; + if (isWhite(o) && (t < o)) + return true; + } - steps = Math.abs(t - o); - rows = Math.abs(t / 8 - o / 8); - - switch (getType(o)) { - case PIECE: - if (steps % 7 == 0) { - if (steps == 7 && rows == 1 && isEmpty(t)) { - if (isBlack(o) && (t > o)) - return true; - if (isWhite(o) && (t < o)) - return true; - } + if (steps == 14 && rows == 2 && isEmpty(t)) { + if (isBlack(o) && (t > o) && isEnemy(o + 7, o)) + return true; + if (isWhite(o) && (t < o) && isEnemy(o - 7, o)) + return true; + } + } - if (steps == 14 && rows == 2 && isEmpty(t)) { - if (isBlack(o) && (t > o) && isEnemy(o + 7, o)) - return true; - if (isWhite(o) && (t < o) && isEnemy(o - 7, o)) - return true; - } - } - - if (steps % 9 == 0) { - if (steps == 9 && rows == 1 && isEmpty(t)) { - if (isBlack(o) && (t > o)) - return true; - if (isWhite(o) && (t < o)) - return true; - } + if (steps % 9 == 0) { + if (steps == 9 && rows == 1 && isEmpty(t)) { + if (isBlack(o) && (t > o)) + return true; + if (isWhite(o) && (t < o)) + return true; + } - if (steps == 18 && rows == 2 && isEmpty(t)) { - if (isBlack(o) && (t > o) && isEnemy(o + 9, o)) - return true; - if (isWhite(o) && (t < o) && isEnemy(o - 9, o)) - return true; - } - } - break; - case QUEEN: - if (steps % 7 == 0 && isEmpty(t)) { - if (steps == 7 && rows == 1) - return true; - if (steps == 14 && rows == 2) - return true; - if (steps == 21 && rows == 3) - return true; - if (steps == 28 && rows == 4) - return true; - if (steps == 35 && rows == 5) - return true; - if (steps == 42 && rows == 6) - return true; - if (steps == 49 && rows == 7) - return true; - } + if (steps == 18 && rows == 2 && isEmpty(t)) { + if (isBlack(o) && (t > o) && isEnemy(o + 9, o)) + return true; + if (isWhite(o) && (t < o) && isEnemy(o - 9, o)) + return true; + } + } + break; + case QUEEN: + if (steps % 7 == 0 && isEmpty(t)) { + if (steps == 7 && rows == 1) + return true; + if (steps == 14 && rows == 2) + return true; + if (steps == 21 && rows == 3) + return true; + if (steps == 28 && rows == 4) + return true; + if (steps == 35 && rows == 5) + return true; + if (steps == 42 && rows == 6) + return true; + if (steps == 49 && rows == 7) + return true; + } - if (steps % 9 == 0 && isEmpty(t)) { - if (steps == 9 && rows == 1) - return true; - if (steps == 18 && rows == 2) - return true; - if (steps == 27 && rows == 3) - return true; - if (steps == 36 && rows == 4) - return true; - if (steps == 45 && rows == 5) - return true; - if (steps == 54 && rows == 6) - return true; - if (steps == 63 && rows == 7) - return true; - } - break; - } - return false; - } + if (steps % 9 == 0 && isEmpty(t)) { + if (steps == 9 && rows == 1) + return true; + if (steps == 18 && rows == 2) + return true; + if (steps == 27 && rows == 3) + return true; + if (steps == 36 && rows == 4) + return true; + if (steps == 45 && rows == 5) + return true; + if (steps == 54 && rows == 6) + return true; + if (steps == 63 && rows == 7) + return true; + } + break; + } + return false; + } - /** - * pop: undo the push operation. - */ - public void undo() { - History h1 = null; - History h2 = null; - int size = stack.size(); - int pos; + /** + * pop: undo the push operation. + */ + public void undo() { + History h1 = null; + History h2 = null; + int size = stack.size(); + int pos; - if (size < 2) - return; + if (size < 2) + return; - h1 = stack.remove(size - 1); - h2 = stack.remove(size - 2); + h1 = stack.remove(size - 1); + h2 = stack.remove(size - 2); - setPiece(h1.pos(), h1.piece()); - setPiece(h2.pos(), h2.piece()); + setPiece(h1.pos(), h1.piece()); + setPiece(h2.pos(), h2.piece()); - if (getType(h2.pos()) != EMPTY) { - pos = 2 * h2.pos() - h1.pos(); - if (pos >= 0 && pos < 64) - setPiece(pos, new Piece(null, null, EMPTY, 0)); - } + if (getType(h2.pos()) != EMPTY) { + pos = 2 * h2.pos() - h1.pos(); + if (pos >= 0 && pos < 64) + setPiece(pos, new Piece(null, null, EMPTY, 0)); + } - /* Reset the current player */ - setBlacksTurn(h2.turn()); - } + /* Reset the current player */ + setBlacksTurn(h2.turn()); + } - /** - * simulates a "valid" move or returns false. all changes are relative to - * pieces and will not be painted. - */ - public boolean simulateMove(int t, int o) { - int rows = Math.abs(t / 8 - o / 8); - int pos; + /** + * simulates a "valid" move or returns false. all changes are relative to + * pieces and will not be painted. + */ + public boolean simulateMove(int t, int o) { + int rows = Math.abs(t / 8 - o / 8); + int pos; - if (!validMove(t, o)) { - return false; - } + if (!validMove(t, o)) { + return false; + } - if (rows == 2 && getType(o) == PIECE) { - pos = (t - o) / 2 + o; - push(getPiece(pos), pos, getPiece(o), o); - setPiece(pos, new Piece(null, null, EMPTY, 0)); - } else - push(getPiece(t), t, getPiece(o), o); + if (rows == 2 && getType(o) == PIECE) { + pos = (t - o) / 2 + o; + push(getPiece(pos), pos, getPiece(o), o); + setPiece(pos, new Piece(null, null, EMPTY, 0)); + } else + push(getPiece(t), t, getPiece(o), o); - setPiece(t, new Piece(getPiece(o))); - setPiece(o, new Piece(null, null, EMPTY, 0)); + setPiece(t, new Piece(getPiece(o))); + setPiece(o, new Piece(null, null, EMPTY, 0)); - return true; - } + return true; + } - /** - * performs a "valid" move or returns false. all changes are relative to - * board_pieces and will be painted. - */ - public boolean doMove(int t, int o) { - int steps = Math.abs(t - o); - int rows = Math.abs(t / 8 - o / 8); - int pos; + /** + * performs a "valid" move or returns false. all changes are relative to + * board_pieces and will be painted. + */ + public boolean doMove(int t, int o) { + int steps = Math.abs(t - o); + int rows = Math.abs(t / 8 - o / 8); + int pos; - if (!validMove(t, o)) { - return false; - } + if (!validMove(t, o)) { + return false; + } - if (rows == 2 && getType(o) == PIECE) { - pos = (t - o) / 2 + o; - push(getPiece(pos), pos, getPiece(o), o); - setPiece(pos, new Piece(null, null, EMPTY, 0)); - } else if (rows >= 2 && getType(o) == QUEEN) { - if (steps % 7 == 0) { - if (t > o) - for (pos = o + 7; pos <= t - 7; pos += 7) { - if (isEnemy(pos, o)) { - push(getPiece(pos), pos, getPiece(o), o); - setPiece(pos, new Piece(null, null, EMPTY, 0)); - } - } - else { - for (pos = o - 7; pos >= t + 7; pos -= 7) { - if (isEnemy(pos, o)) { - push(getPiece(pos), pos, getPiece(o), o); - setPiece(pos, new Piece(null, null, EMPTY, 0)); - } - } - } - } + if (rows == 2 && getType(o) == PIECE) { + pos = (t - o) / 2 + o; + push(getPiece(pos), pos, getPiece(o), o); + setPiece(pos, new Piece(null, null, EMPTY, 0)); + } else if (rows >= 2 && getType(o) == QUEEN) { + if (steps % 7 == 0) { + if (t > o) + for (pos = o + 7; pos <= t - 7; pos += 7) { + if (isEnemy(pos, o)) { + push(getPiece(pos), pos, getPiece(o), o); + setPiece(pos, new Piece(null, null, EMPTY, 0)); + } + } + else { + for (pos = o - 7; pos >= t + 7; pos -= 7) { + if (isEnemy(pos, o)) { + push(getPiece(pos), pos, getPiece(o), o); + setPiece(pos, new Piece(null, null, EMPTY, 0)); + } + } + } + } - if (steps % 9 == 0) { - if (t > o) - for (pos = o + 9; pos <= t - 9; pos += 9) { - if (isEnemy(pos, o)) { - push(getPiece(pos), pos, getPiece(o), o); - setPiece(pos, new Piece(null, null, EMPTY, 0)); - } - } - else { - for (pos = o - 9; pos >= t + 9; pos -= 9) { - if (isEnemy(pos, o)) { - push(getPiece(pos), pos, getPiece(o), o); - setPiece(pos, new Piece(null, null, EMPTY, 0)); - } - } - } - } - } + if (steps % 9 == 0) { + if (t > o) + for (pos = o + 9; pos <= t - 9; pos += 9) { + if (isEnemy(pos, o)) { + push(getPiece(pos), pos, getPiece(o), o); + setPiece(pos, new Piece(null, null, EMPTY, 0)); + } + } + else { + for (pos = o - 9; pos >= t + 9; pos -= 9) { + if (isEnemy(pos, o)) { + push(getPiece(pos), pos, getPiece(o), o); + setPiece(pos, new Piece(null, null, EMPTY, 0)); + } + } + } + } + } - if (t <= 7 && getType(o) == PIECE) - setPiece(t, new Piece(white_super_sun)); - else if (t >= 56 && getType(o) == PIECE) - setPiece(t, new Piece(black_super_sun)); - else - setPiece(t, new Piece(getPiece(o))); + if (t <= 7 && getType(o) == PIECE) + setPiece(t, new Piece(white_super_sun)); + else if (t >= 56 && getType(o) == PIECE) + setPiece(t, new Piece(black_super_sun)); + else + setPiece(t, new Piece(getPiece(o))); - setPiece(o, new Piece(null, null, EMPTY, 0)); + setPiece(o, new Piece(null, null, EMPTY, 0)); - board_pieces = getPieces(); - repaint(); + board_pieces = getPieces(); + repaint(); - moveNr = stack.size(); + moveNr = stack.size(); - return true; - } + return true; + } } diff --git a/org/homelinux/largo/games/board/chessboard/ChessBoard.java b/org/homelinux/largo/games/board/chessboard/ChessBoard.java --- a/org/homelinux/largo/games/board/chessboard/ChessBoard.java +++ b/org/homelinux/largo/games/board/chessboard/ChessBoard.java @@ -12,646 +12,641 @@ import org.homelinux.largo.utils.ImgComponent; public class ChessBoard extends Board { - static final long serialVersionUID = 1L; + static final long serialVersionUID = 1L; - static final int ROOK = 1; - static final int KNIGHT = 2; - static final int BISHOP = 3; - static final int QUEEN = 4; - static final int KING = 5; - static final int PAWN = 6; + static final int ROOK = 1; + static final int KNIGHT = 2; + static final int BISHOP = 3; + static final int QUEEN = 4; + static final int KING = 5; + static final int PAWN = 6; - final Piece white_queen = new Piece(new ImgComponent("images/white_queen.png").getImage(), "white", QUEEN, 90); - final Piece black_queen = new Piece(new ImgComponent("images/black_queen.png").getImage(), "black", QUEEN, 90); + final Piece white_queen = new Piece(new ImgComponent("images/white_queen.png").getImage(), "white", QUEEN, 90); + final Piece black_queen = new Piece(new ImgComponent("images/black_queen.png").getImage(), "black", QUEEN, 90); - boolean white_rochades_small; - boolean white_rochades_big; - boolean black_rochades_small; - boolean black_rochades_big; + boolean white_rochades_small; + boolean white_rochades_big; + boolean black_rochades_small; + boolean black_rochades_big; - void initBoard() { - add(new ImgComponent("images/black_rook.png").getImage(), 0, "black", ROOK); - add(new ImgComponent("images/black_knight.png").getImage(), 1, "black", KNIGHT); - add(new ImgComponent("images/black_bishop.png").getImage(), 2, "black", BISHOP); - add(new ImgComponent("images/black_queen.png").getImage(), 3, "black", QUEEN); - add(new ImgComponent("images/black_king.png").getImage(), 4, "black", KING); - add(new ImgComponent("images/black_bishop.png").getImage(), 5, "black", BISHOP); - add(new ImgComponent("images/black_knight.png").getImage(), 6, "black", KNIGHT); - add(new ImgComponent("images/black_rook.png").getImage(), 7, "black", ROOK); + void initBoard() { + add(new ImgComponent("images/black_rook.png").getImage(), 0, "black", ROOK); + add(new ImgComponent("images/black_knight.png").getImage(), 1, "black", KNIGHT); + add(new ImgComponent("images/black_bishop.png").getImage(), 2, "black", BISHOP); + add(new ImgComponent("images/black_queen.png").getImage(), 3, "black", QUEEN); + add(new ImgComponent("images/black_king.png").getImage(), 4, "black", KING); + add(new ImgComponent("images/black_bishop.png").getImage(), 5, "black", BISHOP); + add(new ImgComponent("images/black_knight.png").getImage(), 6, "black", KNIGHT); + add(new ImgComponent("images/black_rook.png").getImage(), 7, "black", ROOK); - for (int i = 0; i < 8; i++) - add(new ImgComponent("images/black_pawn.png").getImage(), 8 + i, "black", PAWN); + for (int i = 0; i < 8; i++) + add(new ImgComponent("images/black_pawn.png").getImage(), 8 + i, "black", PAWN); - add(new ImgComponent("images/white_rook.png").getImage(), 56, "white", ROOK); - add(new ImgComponent("images/white_knight.png").getImage(), 57, "white", KNIGHT); - add(new ImgComponent("images/white_bishop.png").getImage(), 58, "white", BISHOP); - add(new ImgComponent("images/white_queen.png").getImage(), 59, "white", QUEEN); - add(new ImgComponent("images/white_king.png").getImage(), 60, "white", KING); - add(new ImgComponent("images/white_bishop.png").getImage(), 61, "white", BISHOP); - add(new ImgComponent("images/white_knight.png").getImage(), 62, "white", KNIGHT); - add(new ImgComponent("images/white_rook.png").getImage(), 63, "white", ROOK); + add(new ImgComponent("images/white_rook.png").getImage(), 56, "white", ROOK); + add(new ImgComponent("images/white_knight.png").getImage(), 57, "white", KNIGHT); + add(new ImgComponent("images/white_bishop.png").getImage(), 58, "white", BISHOP); + add(new ImgComponent("images/white_queen.png").getImage(), 59, "white", QUEEN); + add(new ImgComponent("images/white_king.png").getImage(), 60, "white", KING); + add(new ImgComponent("images/white_bishop.png").getImage(), 61, "white", BISHOP); + add(new ImgComponent("images/white_knight.png").getImage(), 62, "white", KNIGHT); + add(new ImgComponent("images/white_rook.png").getImage(), 63, "white", ROOK); - for (int i = 0; i < 8; i++) - add(new ImgComponent("images/white_pawn.png").getImage(), 55 - i, "white", PAWN); - } + for (int i = 0; i < 8; i++) + add(new ImgComponent("images/white_pawn.png").getImage(), 55 - i, "white", PAWN); + } - /** - * The init method initializes a complete chess board with figures and a - * history. - */ - public void init() { - super.init(); - initBoard(); - board_pieces = getPieces(); - repaint(); - } + /** + * The init method initializes a complete chess board with figures and a + * history. + */ + public void init() { + super.init(); + initBoard(); + board_pieces = getPieces(); + repaint(); + } - public ChessBoard(int w, int h) { - super(w, h); - } + public ChessBoard(int w, int h) { + super(w, h); + } - void add(Image img, int i, String c, int t) { - int v = 0; + void add(Image img, int i, String c, int t) { + int v = 0; - switch (t) { - case ROOK: - v = 80; - break; - case KNIGHT: - v = 30; - break; - case BISHOP: - v = 30; - break; - case QUEEN: - v = 90; - break; - case KING: - v = 120; - break; - case PAWN: - v = 10; - break; - } + switch (t) { + case ROOK: + v = 80; + break; + case KNIGHT: + v = 30; + break; + case BISHOP: + v = 30; + break; + case QUEEN: + v = 90; + break; + case KING: + v = 120; + break; + case PAWN: + v = 10; + break; + } - setPiece(i, new Piece(img, c, t, v)); - } + setPiece(i, new Piece(img, c, t, v)); + } - /** - * returns true, when the white king is at pieces[i] - */ - public boolean isWhiteKing(int i) { - if (isWhite(i) && getType(i) == KING) - return true; - return false; - } + /** + * returns true, when the white king is at pieces[i] + */ + public boolean isWhiteKing(int i) { + if (isWhite(i) && getType(i) == KING) + return true; + return false; + } - /** - * returns true, when the black king is at pieces[i] - */ - public boolean isBlackKing(int i) { - if (isBlack(i) && getType(i) == KING) - return true; - return false; - } + /** + * returns true, when the black king is at pieces[i] + */ + public boolean isBlackKing(int i) { + if (isBlack(i) && getType(i) == KING) + return true; + return false; + } - /** - * Returns the score of the current position Every field controlled by - * [color] gives one point A King, controlled by [color], gives 10 extra - * points - */ - public int controls(String color) { - int t, o; - int value = 0; + /** + * Returns the score of the current position Every field controlled by + * [color] gives one point A King, controlled by [color], gives 10 extra + * points + */ + public int controls(String color) { + int t, o; + int value = 0; - for (o = 0; o < 64; o++) { - if (color.equals(getColor(o))) { - for (t = 0; t < 64; t++) { - if (validMove(t, o)) { - if (getType(t) == KING) - value += 10; - value++; - } - } - } - } - return value; - } + for (o = 0; o < 64; o++) { + if (color.equals(getColor(o))) { + for (t = 0; t < 64; t++) { + if (validMove(t, o)) { + if (getType(t) == KING) + value += 10; + value++; + } + } + } + } + return value; + } - /** - * Checks, wether this move is possible or not. - */ - public boolean validMove(int t, int o) { - int steps; - int rows; - int dx; + /** + * Checks, wether this move is possible or not. + */ + public boolean validMove(int t, int o) { + int steps; + int rows; + int dx; - /* Must be here */ - white_rochades_small = false; - white_rochades_big = false; - black_rochades_small = false; - black_rochades_big = false; + /* Must be here */ + white_rochades_small = false; + white_rochades_big = false; + black_rochades_small = false; + black_rochades_big = false; - if (t == o) - return false; + if (t == o) + return false; - if (isSamePiece(t, o)) - return false; + if (isSamePiece(t, o)) + return false; - if (getType(o) == EMPTY) - return false; + if (getType(o) == EMPTY) + return false; - /* - * 00 01 02 03 04 05 06 07 - * 08 09 10 11 12 13 14 15 - * 16 17 18 19 20 21 22 23 - * 24 25 26 27 28 29 30 31 - * 32 33 34 35 36 37 38 39 - * 40 41 42 43 44 45 46 47 - * 48 49 50 51 52 53 54 55 - * 56 57 58 59 60 61 62 63 - */ + /* + * 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 + * 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 + * 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 + */ - steps = Math.abs(t - o); - rows = Math.abs(t / 8 - o / 8); + steps = Math.abs(t - o); + rows = Math.abs(t / 8 - o / 8); - switch (getType(o)) { - case ROOK: - if (steps < 8 && rows == 0) { - if (t > o) - for (dx = o + 1; dx < t; dx++) { - if (getColor(dx) != null) { - return false; - } - } - else - for (dx = o - 1; dx > t; dx--) { - if (getColor(dx) != null) { - return false; - } - } - return true; - } - if (steps % 8 == 0) { - if (t > o) { - for (dx = o + 8; dx < t; dx += 8) { - if (getColor(dx) != null) - return false; - } - } else { - for (dx = o - 8; dx > t; dx -= 8) { - if (getColor(dx) != null) - return false; - } - } - if (steps == 8 && rows == 1) - return true; - if (steps == 16 && rows == 2) - return true; - if (steps == 24 && rows == 3) - return true; - if (steps == 32 && rows == 4) - return true; - if (steps == 40 && rows == 5) - return true; - if (steps == 48 && rows == 6) - return true; - if (steps == 56 && rows == 7) - return true; - } - break; - case KNIGHT: - /* works fine */ - if (steps == 6 && rows == 1) - return true; - if (steps == 10 && rows == 1) - return true; - if (steps == 15 && rows == 2) - return true; - if (steps == 17 && rows == 2) - return true; - break; - case BISHOP: - if (steps % 7 == 0) { - if (t > o) { - for (dx = o + 7; dx < t; dx += 7) { - if (getColor(dx) != null) - return false; - } - } else { - for (dx = o - 7; dx > t; dx -= 7) { - if (getColor(dx) != null) - return false; - } - } - if (steps == 7 && rows == 1) - return true; - if (steps == 14 && rows == 2) - return true; - if (steps == 21 && rows == 3) - return true; - if (steps == 28 && rows == 4) - return true; - if (steps == 35 && rows == 5) - return true; - if (steps == 42 && rows == 6) - return true; - if (steps == 49 && rows == 7) - return true; - } - if (steps % 9 == 0) { - if (t > o) { - for (dx = o + 9; dx < t; dx += 9) { - if (getColor(dx) != null) - return false; - } - } else { - for (dx = o - 9; dx > t; dx -= 9) { - if (getColor(dx) != null) - return false; - } - } - if (steps == 9 && rows == 1) - return true; - if (steps == 18 && rows == 2) - return true; - if (steps == 27 && rows == 3) - return true; - if (steps == 36 && rows == 4) - return true; - if (steps == 45 && rows == 5) - return true; - if (steps == 54 && rows == 6) - return true; - if (steps == 63 && rows == 7) - return true; - } - break; + switch (getType(o)) { + case ROOK: + if (steps < 8 && rows == 0) { + if (t > o) + for (dx = o + 1; dx < t; dx++) { + if (getColor(dx) != null) { + return false; + } + } + else + for (dx = o - 1; dx > t; dx--) { + if (getColor(dx) != null) { + return false; + } + } + return true; + } + if (steps % 8 == 0) { + if (t > o) { + for (dx = o + 8; dx < t; dx += 8) { + if (getColor(dx) != null) + return false; + } + } else { + for (dx = o - 8; dx > t; dx -= 8) { + if (getColor(dx) != null) + return false; + } + } + if (steps == 8 && rows == 1) + return true; + if (steps == 16 && rows == 2) + return true; + if (steps == 24 && rows == 3) + return true; + if (steps == 32 && rows == 4) + return true; + if (steps == 40 && rows == 5) + return true; + if (steps == 48 && rows == 6) + return true; + if (steps == 56 && rows == 7) + return true; + } + break; + case KNIGHT: + /* works fine */ + if (steps == 6 && rows == 1) + return true; + if (steps == 10 && rows == 1) + return true; + if (steps == 15 && rows == 2) + return true; + if (steps == 17 && rows == 2) + return true; + break; + case BISHOP: + if (steps % 7 == 0) { + if (t > o) { + for (dx = o + 7; dx < t; dx += 7) { + if (getColor(dx) != null) + return false; + } + } else { + for (dx = o - 7; dx > t; dx -= 7) { + if (getColor(dx) != null) + return false; + } + } + if (steps == 7 && rows == 1) + return true; + if (steps == 14 && rows == 2) + return true; + if (steps == 21 && rows == 3) + return true; + if (steps == 28 && rows == 4) + return true; + if (steps == 35 && rows == 5) + return true; + if (steps == 42 && rows == 6) + return true; + if (steps == 49 && rows == 7) + return true; + } + if (steps % 9 == 0) { + if (t > o) { + for (dx = o + 9; dx < t; dx += 9) { + if (getColor(dx) != null) + return false; + } + } else { + for (dx = o - 9; dx > t; dx -= 9) { + if (getColor(dx) != null) + return false; + } + } + if (steps == 9 && rows == 1) + return true; + if (steps == 18 && rows == 2) + return true; + if (steps == 27 && rows == 3) + return true; + if (steps == 36 && rows == 4) + return true; + if (steps == 45 && rows == 5) + return true; + if (steps == 54 && rows == 6) + return true; + if (steps == 63 && rows == 7) + return true; + } + break; - case QUEEN: - if (steps < 8 && rows == 0) { - if (t > o) - for (dx = o + 1; dx < t; dx++) { - if (getColor(dx) != null) - return false; - } - else - for (dx = o - 1; dx > t; dx--) { - if (getColor(dx) != null) - return false; - } - return true; - } + case QUEEN: + if (steps < 8 && rows == 0) { + if (t > o) + for (dx = o + 1; dx < t; dx++) { + if (getColor(dx) != null) + return false; + } + else + for (dx = o - 1; dx > t; dx--) { + if (getColor(dx) != null) + return false; + } + return true; + } - if (steps % 8 == 0) { - if (t > o) { - for (dx = o + 8; dx < t; dx += 8) { - if (getColor(dx) != null) - return false; - } - } else { - for (dx = o - 8; dx > t; dx -= 8) { - if (getColor(dx) != null) - return false; - } - } + if (steps % 8 == 0) { + if (t > o) { + for (dx = o + 8; dx < t; dx += 8) { + if (getColor(dx) != null) + return false; + } + } else { + for (dx = o - 8; dx > t; dx -= 8) { + if (getColor(dx) != null) + return false; + } + } - if (steps == 8 && rows == 1) - return true; - if (steps == 16 && rows == 2) - return true; - if (steps == 24 && rows == 3) - return true; - if (steps == 32 && rows == 4) - return true; - if (steps == 40 && rows == 5) - return true; - if (steps == 48 && rows == 6) - return true; - if (steps == 56 && rows == 7) - return true; - } - if (steps % 7 == 0) { - if (t > o) { - for (dx = o + 7; dx < t; dx += 7) { - if (getColor(dx) != null) - return false; - } - } else { - for (dx = o - 7; dx > t; dx -= 7) { - if (getColor(dx) != null) - return false; - } - } - if (steps == 7 && rows == 1) - return true; - if (steps == 14 && rows == 2) - return true; - if (steps == 21 && rows == 3) - return true; - if (steps == 28 && rows == 4) - return true; - if (steps == 35 && rows == 5) - return true; - if (steps == 42 && rows == 6) - return true; - if (steps == 49 && rows == 7) - return true; - } + if (steps == 8 && rows == 1) + return true; + if (steps == 16 && rows == 2) + return true; + if (steps == 24 && rows == 3) + return true; + if (steps == 32 && rows == 4) + return true; + if (steps == 40 && rows == 5) + return true; + if (steps == 48 && rows == 6) + return true; + if (steps == 56 && rows == 7) + return true; + } + if (steps % 7 == 0) { + if (t > o) { + for (dx = o + 7; dx < t; dx += 7) { + if (getColor(dx) != null) + return false; + } + } else { + for (dx = o - 7; dx > t; dx -= 7) { + if (getColor(dx) != null) + return false; + } + } + if (steps == 7 && rows == 1) + return true; + if (steps == 14 && rows == 2) + return true; + if (steps == 21 && rows == 3) + return true; + if (steps == 28 && rows == 4) + return true; + if (steps == 35 && rows == 5) + return true; + if (steps == 42 && rows == 6) + return true; + if (steps == 49 && rows == 7) + return true; + } - if (steps % 9 == 0) { - if (t > o) { - for (dx = o + 9; dx < t; dx += 9) { - if (getColor(dx) != null) - return false; - } - } else { - for (dx = o - 9; dx > t; dx -= 9) { - if (getColor(dx) != null) - return false; - } - } - if (steps == 9 && rows == 1) - return true; - if (steps == 18 && rows == 2) - return true; - if (steps == 27 && rows == 3) - return true; - if (steps == 36 && rows == 4) - return true; - if (steps == 45 && rows == 5) - return true; - if (steps == 54 && rows == 6) - return true; - if (steps == 63 && rows == 7) - return true; - } - break; + if (steps % 9 == 0) { + if (t > o) { + for (dx = o + 9; dx < t; dx += 9) { + if (getColor(dx) != null) + return false; + } + } else { + for (dx = o - 9; dx > t; dx -= 9) { + if (getColor(dx) != null) + return false; + } + } + if (steps == 9 && rows == 1) + return true; + if (steps == 18 && rows == 2) + return true; + if (steps == 27 && rows == 3) + return true; + if (steps == 36 && rows == 4) + return true; + if (steps == 45 && rows == 5) + return true; + if (steps == 54 && rows == 6) + return true; + if (steps == 63 && rows == 7) + return true; + } + break; - case KING: - if ((steps == 1) && (rows == 0)) - return true; + case KING: + if ((steps == 1) && (rows == 0)) + return true; - if ((steps == 8) && (rows == 1)) - return true; + if ((steps == 8) && (rows == 1)) + return true; - if ((steps == 7) && (rows == 1)) - return true; + if ((steps == 7) && (rows == 1)) + return true; - if ((steps == 9) && (rows == 1)) - return true; + if ((steps == 9) && (rows == 1)) + return true; - if ((steps == 2) && (rows == 0)) { - if (isWhiteKing(o)) { /* White: Rochade */ - if (isWhiteKing(60) && isEmpty(61) && isEmpty(62) && (t == 62)) { - if ((getType(63) == ROOK) && isWhite(63)) { - white_rochades_small = true; - return true; - } - } + if ((steps == 2) && (rows == 0)) { + if (isWhiteKing(o)) { /* White: Rochade */ + if (isWhiteKing(60) && isEmpty(61) && isEmpty(62) && (t == 62)) { + if ((getType(63) == ROOK) && isWhite(63)) { + white_rochades_small = true; + return true; + } + } - if (isWhiteKing(60) && isEmpty(59) && isEmpty(58) && isEmpty(57) && (t == 58)) { - if ((getType(56) == ROOK) && isWhite(56)) { - white_rochades_big = true; - return true; - } - } - } + if (isWhiteKing(60) && isEmpty(59) && isEmpty(58) && isEmpty(57) && (t == 58)) { + if ((getType(56) == ROOK) && isWhite(56)) { + white_rochades_big = true; + return true; + } + } + } - if (isBlackKing(o)) { /* Black: Rochade */ - if (isBlackKing(4) && isEmpty(5) && isEmpty(6) && (t == 6)) { - if ((getType(7) == ROOK) && isBlack(7)) { - black_rochades_small = true; - return true; - } - } + if (isBlackKing(o)) { /* Black: Rochade */ + if (isBlackKing(4) && isEmpty(5) && isEmpty(6) && (t == 6)) { + if ((getType(7) == ROOK) && isBlack(7)) { + black_rochades_small = true; + return true; + } + } - if (isBlackKing(4) && isEmpty(3) && isEmpty(2) && isEmpty(1) && (t == 2)) { - if ((getType(0) == ROOK) && isBlack(0)) { - black_rochades_big = true; - return true; - } - } - } - } - break; + if (isBlackKing(4) && isEmpty(3) && isEmpty(2) && isEmpty(1) && (t == 2)) { + if ((getType(0) == ROOK) && isBlack(0)) { + black_rochades_big = true; + return true; + } + } + } + } + break; - case PAWN: - if (getColor(o).equals("white")) { - if (steps == 7 && rows == 1 && isEnemy(t, o) && t < o) - return true; + case PAWN: + if (getColor(o).equals("white")) { + if (steps == 7 && rows == 1 && isEnemy(t, o) && t < o) + return true; - if (steps == 9 && rows == 1 && isEnemy(t, o) && t < o) - return true; - } else { - if (steps == 7 && rows == 1 && isEnemy(t, o) && t > o) - return true; + if (steps == 9 && rows == 1 && isEnemy(t, o) && t < o) + return true; + } else { + if (steps == 7 && rows == 1 && isEnemy(t, o) && t > o) + return true; - if (steps == 9 && rows == 1 && isEnemy(t, o) && t > o) - return true; - } + if (steps == 9 && rows == 1 && isEnemy(t, o) && t > o) + return true; + } - if (steps % 8 == 0) { - if (t > o) { - for (dx = o + 8; dx <= t; dx += 8) { - if (getColor(dx) != null) - return false; - } - } else { - for (dx = o - 8; dx >= t; dx -= 8) { - if (getColor(dx) != null) - return false; - } - } + if (steps % 8 == 0) { + if (t > o) { + for (dx = o + 8; dx <= t; dx += 8) { + if (getColor(dx) != null) + return false; + } + } else { + for (dx = o - 8; dx >= t; dx -= 8) { + if (getColor(dx) != null) + return false; + } + } - if (steps == 8 && rows == 1) { - if (getColor(o).equals("white") && t < o) - return true; - if (getColor(o).equals("black") && t > o) - return true; - } + if (steps == 8 && rows == 1) { + if (getColor(o).equals("white") && t < o) + return true; + if (getColor(o).equals("black") && t > o) + return true; + } - if (steps == 16 && rows == 2 && (o >= 8 && o <= 15)) { - if (getColor(o).equals("white") && t < o) - return true; - if (getColor(o).equals("black") && t > o) - return true; - } + if (steps == 16 && rows == 2 && (o >= 8 && o <= 15)) { + if (getColor(o).equals("white") && t < o) + return true; + if (getColor(o).equals("black") && t > o) + return true; + } - if (steps == 16 && rows == 2 && (o >= 48 && o <= 55)) { - if (getColor(o).equals("white") && t < o) - return true; - if (getColor(o).equals("black") && t > o) - return true; - } - } - break; - } - return false; - } + if (steps == 16 && rows == 2 && (o >= 48 && o <= 55)) { + if (getColor(o).equals("white") && t < o) + return true; + if (getColor(o).equals("black") && t > o) + return true; + } + } + break; + } + return false; + } - /** - * This method must be called immediately after isValidMove(t, o) - */ - boolean rochade() { - if (white_rochades_small) { - setPiece(61, getPiece(63)); - setPiece(63, new Piece(null, null, EMPTY, 0)); - return true; - } + /** + * This method must be called immediately after isValidMove(t, o) + */ + boolean rochade() { + if (white_rochades_small) { + setPiece(61, getPiece(63)); + setPiece(63, new Piece(null, null, EMPTY, 0)); + return true; + } - if (white_rochades_big) { - setPiece(59, getPiece(56)); - setPiece(56, new Piece(null, null, EMPTY, 0)); - return true; - } + if (white_rochades_big) { + setPiece(59, getPiece(56)); + setPiece(56, new Piece(null, null, EMPTY, 0)); + return true; + } - if (black_rochades_small) { - setPiece(5, getPiece(7)); - setPiece(7, new Piece(null, null, EMPTY, 0)); - return true; - } + if (black_rochades_small) { + setPiece(5, getPiece(7)); + setPiece(7, new Piece(null, null, EMPTY, 0)); + return true; + } - if (black_rochades_big) { - setPiece(3, getPiece(0)); - setPiece(0, new Piece(null, null, EMPTY, 0)); - return true; - } + if (black_rochades_big) { + setPiece(3, getPiece(0)); + setPiece(0, new Piece(null, null, EMPTY, 0)); + return true; + } - return false; - } + return false; + } - /** - * checks, whether color is in check or not. - */ - public boolean isCheck(String color) { - int i; - int wking; - int bking; + /** + * checks, whether color is in check or not. + */ + public boolean isCheck(String color) { + int i; + int wking; + int bking; - wking = bking = -1; + wking = bking = -1; - for (i = 0; i < 64; i++) { - if (isWhiteKing(i)) { - wking = i; - } - if (isBlackKing(i)) { - bking = i; - } - } + for (i = 0; i < 64; i++) { + if (isWhiteKing(i)) { + wking = i; + } + if (isBlackKing(i)) { + bking = i; + } + } - // returns 64 false positives - if (wking == -1 || bking == -1) - return true; + // returns 64 false positives + if (wking == -1 || bking == -1) + return true; - if (color.equals("white")) { - for (i = 0; i < 64; i++) - if (validMove(wking, i)) { - return true; - } + if (color.equals("white")) { + for (i = 0; i < 64; i++) + if (validMove(wking, i)) { + return true; + } - return false; - } + return false; + } - if (color.equals("black")) { - for (i = 0; i < 64; i++) - if (validMove(bking, i)) { - return true; - } + if (color.equals("black")) { + for (i = 0; i < 64; i++) + if (validMove(bking, i)) { + return true; + } - return false; - } - return false; - } + return false; + } + return false; + } - /** - * simulates a "valid" move or returns false. all changes are relative to - * pieces and will not be painted. This method sets internal variables for - * the rochade() method, which will be overwritten. - */ - public boolean simulateMove(int t, int o) { - if (!validMove(t, o)) { - return false; - } + /** + * simulates a "valid" move or returns false. all changes are relative to + * pieces and will not be painted. This method sets internal variables for + * the rochade() method, which will be overwritten. + */ + public boolean simulateMove(int t, int o) { + if (!validMove(t, o)) { + return false; + } - push(getPiece(t), t, getPiece(o), o); + push(getPiece(t), t, getPiece(o), o); - if (getType(o) == PAWN) { - if (isBlack(o) && t >= 56) - setPiece(o, new Piece(black_queen)); + if (getType(o) == PAWN) { + if (isBlack(o) && t >= 56) + setPiece(o, new Piece(black_queen)); - if (isWhite(o) && t <= 7) - setPiece(o, new Piece(white_queen)); - } + if (isWhite(o) && t <= 7) + setPiece(o, new Piece(white_queen)); + } - setPiece(t, new Piece(getPiece(o))); - setPiece(o, new Piece(null, null, EMPTY, 0)); + setPiece(t, new Piece(getPiece(o))); + setPiece(o, new Piece(null, null, EMPTY, 0)); - if (isCheck(getColor(t))) { - /* restore current position */ - if (UNDO_DEBUG) - print("UNDO", t, o, 0); - undo(); - return false; - } + if (isCheck(getColor(t))) { + /* restore current position */ + if (UNDO_DEBUG) + print("UNDO", t, o, 0); + undo(); + return false; + } - return true; - } + return true; + } - /** - * performs a "valid" move or returns false. all changes are relative to - * board_pieces and will be painted. - */ - public boolean doMove(int t, int o) { - if (!validMove(t, o)) { - return false; - } + /** + * performs a "valid" move or returns false. all changes are relative to + * board_pieces and will be painted. + */ + public boolean doMove(int t, int o) { + if (!validMove(t, o)) { + return false; + } - push(getPiece(t), t, getPiece(o), o); + push(getPiece(t), t, getPiece(o), o); - if (getType(o) == PAWN) { - if (isBlack(o) && t >= 56) - setPiece(o, new Piece(black_queen)); + if (getType(o) == PAWN) { + if (isBlack(o) && t >= 56) + setPiece(o, new Piece(black_queen)); - if (isWhite(o) && t <= 7) - setPiece(o, new Piece(white_queen)); - } + if (isWhite(o) && t <= 7) + setPiece(o, new Piece(white_queen)); + } - setPiece(t, new Piece(getPiece(o))); - setPiece(o, new Piece(null, null, EMPTY, 0)); + setPiece(t, new Piece(getPiece(o))); + setPiece(o, new Piece(null, null, EMPTY, 0)); - if (rochade()) - System.out.println("Rochade"); + if (rochade()) + System.out.println("Rochade"); - if (isCheck(getColor(t))) { - // restore current positions - if (UNDO_DEBUG) - print("UNDO", t, o, 0); - undo(); - return false; - } + if (isCheck(getColor(t))) { + // restore current positions + if (UNDO_DEBUG) + print("UNDO", t, o, 0); + undo(); + return false; + } - board_pieces = getPieces(); - repaint(); + board_pieces = getPieces(); + repaint(); - moveNr = stack.size(); + moveNr = stack.size(); - return true; - } + return true; + } - /** - * converts the internal representation into normal chess notation and - * writes it to stdout - */ - public void print(String s, int t, int o, int value) { - int row1, col1, row2, col2; + /** + * converts the internal representation into normal chess notation and + * writes it to stdout + */ + public void print(String s, int t, int o, int value) { + int row1, col1, row2, col2; - row1 = o / 8; - col1 = o - (8 * row1); + row1 = o / 8; + col1 = o - (8 * row1); - row2 = t / 8; - col2 = t - (8 * row2); + row2 = t / 8; + col2 = t - (8 * row2); - System.out.printf("%s: %C%d-%c%d = %3d%n", s, ('A') + col1, 8 - row1, ('A') + col2, 8 - row2, value); - } + System.out.printf("%s: %C%d-%c%d = %3d%n", s, ('A') + col1, 8 - row1, ('A') + col2, 8 - row2, value); + } } diff --git a/org/homelinux/largo/schach/KIBoard.java b/org/homelinux/largo/schach/KIBoard.java --- a/org/homelinux/largo/schach/KIBoard.java +++ b/org/homelinux/largo/schach/KIBoard.java @@ -9,205 +9,205 @@ import org.homelinux.largo.games.board.chessboard.ChessBoard; public class KIBoard extends ChessBoard { - static final long serialVersionUID = 1L; - static final int game_const = 500; + static final long serialVersionUID = 1L; + static final int game_const = 500; - protected boolean SIMU_DEBUG = false; - private boolean negate_estimation = false; + protected boolean SIMU_DEBUG = false; + private boolean negate_estimation = false; - private Move bestMove; - private int desired_depth; + private Move bestMove; + private int desired_depth; - public KIBoard(int w, int h) { - super(w, h); - desired_depth = -1; - } + public KIBoard(int w, int h) { + super(w, h); + desired_depth = -1; + } - /** - * Set the current DEBUG-Level: simu: print all valid, simulated moves undo: - * print all undos - */ - public void setDebug(boolean simu, boolean undo) { - SIMU_DEBUG = simu; - UNDO_DEBUG = undo; - } + /** + * Set the current DEBUG-Level: simu: print all valid, simulated moves undo: + * print all undos + */ + public void setDebug(boolean simu, boolean undo) { + SIMU_DEBUG = simu; + UNDO_DEBUG = undo; + } - public boolean simu_debug() { - return SIMU_DEBUG; - } + public boolean simu_debug() { + return SIMU_DEBUG; + } - public boolean undo_debug() { - return UNDO_DEBUG; - } + public boolean undo_debug() { + return UNDO_DEBUG; + } - /** - * This function flips the sides: Player A maximizes and Player B minimizes - */ - public void negateEstimation(boolean b) { - negate_estimation = b; - } + /** + * This function flips the sides: Player A maximizes and Player B minimizes + */ + public void negateEstimation(boolean b) { + negate_estimation = b; + } - /** - * The Minimax-Algorithm works for TWO-PLAYER Games Player A minimizes, - * Player B maximizes - */ - public int estimateFunction() { - int i; - int white = 0; - int black = 0; + /** + * The Minimax-Algorithm works for TWO-PLAYER Games Player A minimizes, + * Player B maximizes + */ + public int estimateFunction() { + int i; + int white = 0; + int black = 0; - for (i = 0; i < 64; i++) { - if (isWhite(i)) - white += getValue(i); - else if (isBlack(i)) - black += getValue(i); - } + for (i = 0; i < 64; i++) { + if (isWhite(i)) + white += getValue(i); + else if (isBlack(i)) + black += getValue(i); + } - // Bewerte Entwicklung, Anzahl der Steine - // Das hier ist alles zu lahm... - white += controls("white"); - black += controls("black"); + // Bewerte Entwicklung, Anzahl der Steine + // Das hier ist alles zu lahm... + white += controls("white"); + black += controls("black"); - /** - * solves ticket #3 - */ - if (negate_estimation) - return white - black; + /** + * solves ticket #3 + */ + if (negate_estimation) + return white - black; - return black - white; - } + return black - white; + } - /** - * simulates and returns the next possible move for a Player or null, when - * no more moves are possible. The Turn will flip automatically if - * "simulate(...)" finds a valid move. - */ - Move simulate(int t, int o) { - Move move; - int value; + /** + * simulates and returns the next possible move for a Player or null, when + * no more moves are possible. The Turn will flip automatically if + * "simulate(...)" finds a valid move. + */ + Move simulate(int t, int o) { + Move move; + int value; - if (validTurn(o)) { - while (t < 64) { - if (!simulateMove(t, o)) { - t++; - continue; - } + if (validTurn(o)) { + while (t < 64) { + if (!simulateMove(t, o)) { + t++; + continue; + } - value = estimateFunction(); - if (SIMU_DEBUG) - print("SIMU", t, o, value); + value = estimateFunction(); + if (SIMU_DEBUG) + print("SIMU", t, o, value); - move = new Move(value, t, o); + move = new Move(value, t, o); - /* Flip Sides */ - setBlacksTurn(!isBlacksTurn()); - return move; - } - } - return null; - } + /* Flip Sides */ + setBlacksTurn(!isBlacksTurn()); + return move; + } + } + return null; + } - /** - * AlphaBeta-Algorithm: the Maximizer - */ - int max_alpha_beta(int depth, int alpha, int beta) { - int moveValue; - int o, t; - Move move; + /** + * AlphaBeta-Algorithm: the Maximizer + */ + int max_alpha_beta(int depth, int alpha, int beta) { + int moveValue; + int o, t; + Move move; - if (desired_depth == -1) - desired_depth = depth; + if (desired_depth == -1) + desired_depth = depth; - for (o = 0; o < 64; o++) { - t = 0; - while ((move = simulate(t, o)) != null) { - /* particular move from black */ - t = move.target; + for (o = 0; o < 64; o++) { + t = 0; + while ((move = simulate(t, o)) != null) { + /* particular move from black */ + t = move.target; - if (depth == 0 || Math.abs(move.value) > game_const) - moveValue = move.value; - else - /* best next move */ - moveValue = min_alpha_beta(depth - 1, alpha, beta); + if (depth == 0 || Math.abs(move.value) > game_const) + moveValue = move.value; + else + /* best next move */ + moveValue = min_alpha_beta(depth - 1, alpha, beta); - undo(); - t++; + undo(); + t++; - if (moveValue >= beta) - return beta; + if (moveValue >= beta) + return beta; - if (moveValue > alpha) { - alpha = moveValue; - if (depth == desired_depth) - bestMove = move; - } - } - } + if (moveValue > alpha) { + alpha = moveValue; + if (depth == desired_depth) + bestMove = move; + } + } + } - return alpha; - } + return alpha; + } - /** - * AlphaBeta-Algorithm: the Minimizer - */ - int min_alpha_beta(int depth, int alpha, int beta) { - int moveValue; - int o, t; - Move move; + /** + * AlphaBeta-Algorithm: the Minimizer + */ + int min_alpha_beta(int depth, int alpha, int beta) { + int moveValue; + int o, t; + Move move; - for (o = 0; o < 64; o++) { - t = 0; - while ((move = simulate(t, o)) != null) { - /* particular move from white */ - t = move.target; + for (o = 0; o < 64; o++) { + t = 0; + while ((move = simulate(t, o)) != null) { + /* particular move from white */ + t = move.target; - if (depth == 0 || Math.abs(move.value) > game_const) - moveValue = move.value; - else - /* best next move */ - moveValue = max_alpha_beta(depth - 1, alpha, beta); + if (depth == 0 || Math.abs(move.value) > game_const) + moveValue = move.value; + else + /* best next move */ + moveValue = max_alpha_beta(depth - 1, alpha, beta); - undo(); - t++; + undo(); + t++; - if (moveValue <= alpha) - return alpha; + if (moveValue <= alpha) + return alpha; - if (moveValue < beta) - beta = moveValue; - } - } + if (moveValue < beta) + beta = moveValue; + } + } - return beta; - } + return beta; + } - /** - * Evaluates the next, best Move after search_depth half-moves. When the - * Machine has Black, set negateEstimation(false); When the Machine has - * White, set negateEstimation(true); - */ - public boolean doBestMove(int search_depth) { - int value; - desired_depth = -1; - bestMove = null; + /** + * Evaluates the next, best Move after search_depth half-moves. When the + * Machine has Black, set negateEstimation(false); When the Machine has + * White, set negateEstimation(true); + */ + public boolean doBestMove(int search_depth) { + int value; + desired_depth = -1; + bestMove = null; - value = max_alpha_beta(search_depth, Integer.MIN_VALUE, Integer.MAX_VALUE); + value = max_alpha_beta(search_depth, Integer.MIN_VALUE, Integer.MAX_VALUE); - if (bestMove == null) { - System.err.println("Computing once more..."); - value = max_alpha_beta(--search_depth, Integer.MIN_VALUE, Integer.MAX_VALUE); - if (bestMove == null) { - System.out.println("Check Mate " + value); - return false; - } - } + if (bestMove == null) { + System.err.println("Computing once more..."); + value = max_alpha_beta(--search_depth, Integer.MIN_VALUE, Integer.MAX_VALUE); + if (bestMove == null) { + System.out.println("Check Mate " + value); + return false; + } + } - if (doMove(bestMove.target, bestMove.origin)) { - print(getColor(bestMove.target), bestMove.target, bestMove.origin, bestMove.value); - return true; - } + if (doMove(bestMove.target, bestMove.origin)) { + print(getColor(bestMove.target), bestMove.target, bestMove.origin, bestMove.value); + return true; + } - print("Check Mate", bestMove.target, bestMove.origin, bestMove.value); - return false; - } + print("Check Mate", bestMove.target, bestMove.origin, bestMove.value); + return false; + } } diff --git a/org/homelinux/largo/schach/Schach.java b/org/homelinux/largo/schach/Schach.java --- a/org/homelinux/largo/schach/Schach.java +++ b/org/homelinux/largo/schach/Schach.java @@ -22,214 +22,215 @@ import org.homelinux.largo.utils.BrowserLaunch; public class Schach extends JFrame implements Runnable { - static final long serialVersionUID = 1L; - static final String helpURL = "http://largo.homelinux.org/cgi-bin/gitweb.cgi?p=games/Schach.git;a=summary"; + static final long serialVersionUID = 1L; + static final String helpURL = "https://www.4customers.de/hg/Schach"; - MouseListener listener; - KIBoard board; - Point p; - JLabel human = new JLabel("Human"); - JLabel computer = new JLabel("Computer"); - JButton neu = new JButton("Play"); - JButton pconly = new JButton("PC-PC"); - JButton back = new JButton("Back"); - JButton forward = new JButton("For"); - JButton help = new JButton("Source"); + MouseListener listener; + KIBoard board; + Point p; + JLabel human = new JLabel("Human"); + JLabel computer = new JLabel("Computer"); + JButton neu = new JButton("Play"); + JButton pconly = new JButton("PC-PC"); + JButton back = new JButton("Back"); + JButton forward = new JButton("For"); + JButton help = new JButton("Source"); - SpinnerNumberModel model = new SpinnerNumberModel(4, 1, 8, 1); - JSpinner combo = new JSpinner(model); + SpinnerNumberModel model = new SpinnerNumberModel(4, 1, 8, 1); + JSpinner combo = new JSpinner(model); - JPanel panel; - JPanel fpanel; + JPanel panel; + JPanel fpanel; - int search_depth; + int search_depth; - boolean pc_only; + boolean pc_only; - public Schach(int w, int h) { - super("Chess by Largo Enterprises"); - setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); - board = new KIBoard(w, h); + public Schach(int w, int h) { + super("Chess by 4customers.de"); + setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); + board = new KIBoard(w, h); - fpanel = new JPanel(); - fpanel.add(back); - fpanel.add(neu); - fpanel.add(combo); - fpanel.add(pconly); - fpanel.add(help); - fpanel.add(forward); + fpanel = new JPanel(); + fpanel.add(back); + fpanel.add(neu); + fpanel.add(combo); + fpanel.add(pconly); + fpanel.add(help); + fpanel.add(forward); - panel = new JPanel(); - panel.setLayout(new BorderLayout()); - panel.add(human, "West"); - panel.add(fpanel, "Center"); - panel.add(computer, "East"); + panel = new JPanel(); + panel.setLayout(new BorderLayout()); + panel.add(human, "West"); + panel.add(fpanel, "Center"); + panel.add(computer, "East"); - fpanel.setBackground(new Color(50, 100, 200)); - panel.setBackground(new Color(50, 100, 200)); + fpanel.setBackground(new Color(50, 100, 200)); + panel.setBackground(new Color(50, 100, 200)); - getContentPane().setLayout(new BorderLayout()); - getContentPane().add(panel, "North"); - getContentPane().add(board, "Center"); + getContentPane().setLayout(new BorderLayout()); + getContentPane().add(panel, "North"); + getContentPane().add(board, "Center"); - neu.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent actionevent) { - human.setText("Human"); - computer.setText("Computer"); - pc_only = false; - board.init(); - board.negateEstimation(false); - } - }); + neu.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + human.setText("Human"); + computer.setText("Computer"); + pc_only = false; + board.init(); + board.negateEstimation(false); + } + }); - pconly.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent actionevent) { - human.setText("Computer"); - computer.setText("Computer"); - pc_only = true; - } - }); + pconly.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + human.setText("Computer"); + computer.setText("Computer"); + pc_only = true; + } + }); - back.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent actionevent) { - board.backwards(); - } - }); + back.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + board.backwards(); + } + }); - forward.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent actionevent) { - board.forward(); - } - }); + forward.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + board.forward(); + } + }); - help.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent actionevent) { - BrowserLaunch browser = new BrowserLaunch(); - browser.openURL(helpURL); - } - }); + help.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + BrowserLaunch browser = new BrowserLaunch(); + browser.openURL(helpURL); + } + }); - listener = board.getMouseListener(); + listener = board.getMouseListener(); - pc_only = false; - search_depth = 3; - pack(); - } + pc_only = false; + search_depth = 3; + pack(); + } - public void computer_play() { - while (pc_only) { - search_depth = model.getNumber().intValue() - 1; + public void computer_play() { + while (pc_only) { + search_depth = model.getNumber().intValue() - 1; - if (!board.isBlacksTurn()) { - human.setText("Computer"); - board.negateEstimation(true); - if (!board.doBestMove(search_depth)) { - pc_only = false; - return; - } - board.negateEstimation(false); - human.setText("Computer"); - board.setBlacksTurn(true); - } else { - computer.setText("Computer"); - if (!board.doBestMove(search_depth)) { - pc_only = false; - return; - } - computer.setText("Computer"); - board.setBlacksTurn(false); + if (!board.isBlacksTurn()) { + human.setText("Computer"); + board.negateEstimation(true); + if (!board.doBestMove(search_depth)) { + pc_only = false; + return; + } + board.negateEstimation(false); + human.setText("Computer"); + board.setBlacksTurn(true); + } else { + computer.setText("Computer"); + if (!board.doBestMove(search_depth)) { + pc_only = false; + return; + } + computer.setText("Computer"); + board.setBlacksTurn(false); - if (board.simu_debug()) { - for (int i = 0; i < 64; i++) { - if ((i + 1) % 8 == 0) - System.err.printf("%2d=%d%n", i, board.getValue(i)); - else - System.err.printf("%2d=%d ", i, board.getValue(i)); - } - } + if (board.simu_debug()) { + for (int i = 0; i < 64; i++) { + if ((i + 1) % 8 == 0) + System.err.printf("%2d=%d%n", i, board.getValue(i)); + else + System.err.printf("%2d=%d ", i, board.getValue(i)); + } + } - try { - Thread.sleep(10); - } catch (InterruptedException e) { - System.err.println("computer_play: " + e.getLocalizedMessage()); - System.err.println("========================================================================"); - e.printStackTrace(); - System.err.println("========================================================================"); - return; - } - } - } - } + try { + Thread.sleep(10); + } catch (InterruptedException e) { + System.err.println("computer_play: " + e.getLocalizedMessage()); + System.err.println("========================================================================"); + e.printStackTrace(); + System.err.println("========================================================================"); + return; + } + } + } + } - public void run() { - for (;;) { + public void run() { + for (;;) { - /* is this thread safe */ - search_depth = model.getNumber().intValue() - 1; + /* is this thread safe */ + search_depth = model.getNumber().intValue() - 1; - if (pc_only) { - computer_play(); - } + if (pc_only) { + computer_play(); + } - if (!board.isBlacksTurn()) { - if (listener.isSelected()) { - p = listener.getSelection(); - if (board.move(p)) - board.setBlacksTurn(true); - } - try { - Thread.sleep(50); - } catch (InterruptedException e) { - System.err.println("Schach::run: " + e.getLocalizedMessage()); - System.err.println("========================================================================"); - e.printStackTrace(); - System.err.println("========================================================================"); - return; - } - } else { - human.setText("Human"); - computer.setText("Computer"); - board.doBestMove(search_depth); - human.setText("Human"); - computer.setText("Computer"); - board.setBlacksTurn(false); + if (!board.isBlacksTurn()) { + if (listener.isSelected()) { + p = listener.getSelection(); + if (board.move(p)) + board.setBlacksTurn(true); + } + try { + Thread.sleep(50); + } catch (InterruptedException e) { + System.err.println("Schach::run: " + e.getLocalizedMessage()); + System.err.println("========================================================================"); + e.printStackTrace(); + System.err.println("========================================================================"); + return; + } + } else { + human.setText("Human"); + computer.setText("Computer"); + board.doBestMove(search_depth); + human.setText("Human"); + computer.setText("Computer"); + board.setBlacksTurn(false); - if (board.simu_debug()) { - for (int i = 0; i < 64; i++) { - if ((i + 1) % 8 == 0) - System.out.printf("%2d=%d%n", i, board.getValue(i)); - else - System.out.printf("%2d=%d ", i, board.getValue(i)); - } - } - } - } - } + if (board.simu_debug()) { + for (int i = 0; i < 64; i++) { + if ((i + 1) % 8 == 0) + System.out.printf("%2d=%d%n", i, board.getValue(i)); + else + System.out.printf("%2d=%d ", i, board.getValue(i)); + } + } + } + } + } - public static void main(String args[]) { - Schach s = new Schach(74, 74); + public static void main(String args[]) { + Schach s = new Schach(74, 74); - s.setResizable(false); - s.setVisible(true); + s.setResizable(false); + s.setVisible(true); + s.pack(); - if (args.length == 1) { - if (args[0].equals("full")) - s.board.setDebug(true, true); - else if (args[0].equals("simu")) - s.board.setDebug(true, false); - else if (args[0].equals("undo")) - s.board.setDebug(false, true); - else if (args[0].equals("none")) - s.board.setDebug(false, false); - else { - System.out.println(" Chess: java -jar games.jar [full|simu|undo|none]"); - System.out - .println("Checkers: java -cp games.jar org.homelinux.largo.checkers.Checkers [full|simu|undo|none]"); - } - } + if (args.length == 1) { + if (args[0].equals("full")) + s.board.setDebug(true, true); + else if (args[0].equals("simu")) + s.board.setDebug(true, false); + else if (args[0].equals("undo")) + s.board.setDebug(false, true); + else if (args[0].equals("none")) + s.board.setDebug(false, false); + else { + System.out.println(" Chess: java -jar games.jar [full|simu|undo|none]"); + System.out.println( + "Checkers: java -cp games.jar org.homelinux.largo.checkers.Checkers [full|simu|undo|none]"); + } + } - Thread t = new Thread(s); - t.setPriority(Thread.NORM_PRIORITY - 1); - t.start(); - } + Thread t = new Thread(s); + t.setPriority(Thread.NORM_PRIORITY - 1); + t.start(); + } } diff --git a/org/homelinux/largo/utils/BrowserLaunch.java b/org/homelinux/largo/utils/BrowserLaunch.java --- a/org/homelinux/largo/utils/BrowserLaunch.java +++ b/org/homelinux/largo/utils/BrowserLaunch.java @@ -13,43 +13,33 @@ * Cross-Platform Browserlaunch */ public class BrowserLaunch { - private static final String errMsg = "Error attempting to launch web browser"; + private static final String errMsg = "Error attempting to launch web browser"; - /** - * This method opens the URL in a native platform browser - */ - public void openURL(String url) { - String osName = System.getProperty("os.name"); - try { - if (osName.startsWith("Mac OS")) { - Class fileMgr = Class.forName("com.apple.eio.FileManager"); - Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] { - String.class - }); - openURL.invoke(null, new Object[] { - url - }); - } else if (osName.startsWith("Windows")) - Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url); - else { - String[] browsers = { - "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" - }; - String browser = null; - for (int count = 0; count < browsers.length && browser == null; count++) - if (Runtime.getRuntime().exec(new String[] { - "which", browsers[count] - }).waitFor() == 0) - browser = browsers[count]; - if (browser == null) - throw new Exception("Could not find web browser"); - else - Runtime.getRuntime().exec(new String[] { - browser, url - }); - } - } catch (Exception e) { - JOptionPane.showMessageDialog(null, errMsg + ":\n" + e.getLocalizedMessage()); - } - } + /** + * This method opens the URL in a native platform browser + */ + public void openURL(String url) { + String osName = System.getProperty("os.name"); + try { + if (osName.startsWith("Mac OS")) { + Class fileMgr = Class.forName("com.apple.eio.FileManager"); + Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] { String.class }); + openURL.invoke(null, new Object[] { url }); + } else if (osName.startsWith("Windows")) + Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url); + else { + String[] browsers = { "chome", "chromium", "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" }; + String browser = null; + for (int count = 0; count < browsers.length && browser == null; count++) + if (Runtime.getRuntime().exec(new String[] { "which", browsers[count] }).waitFor() == 0) + browser = browsers[count]; + if (browser == null) + throw new Exception("Could not find web browser"); + else + Runtime.getRuntime().exec(new String[] { browser, url }); + } + } catch (Exception e) { + JOptionPane.showMessageDialog(null, errMsg + ":\n" + e.getLocalizedMessage()); + } + } }; diff --git a/org/homelinux/largo/utils/ImgComponent.java b/org/homelinux/largo/utils/ImgComponent.java --- a/org/homelinux/largo/utils/ImgComponent.java +++ b/org/homelinux/largo/utils/ImgComponent.java @@ -8,24 +8,24 @@ import javax.swing.ImageIcon; public class ImgComponent extends Canvas { - static final long serialVersionUID = 1L; - private Image img; + static final long serialVersionUID = 1L; + private Image img; - public ImgComponent(String sFile) { - ClassLoader cl = getClass().getClassLoader(); - URL url = cl.getResource(sFile); - img = new ImageIcon(url).getImage(); - } + public ImgComponent(String sFile) { + ClassLoader cl = getClass().getClassLoader(); + URL url = cl.getResource(sFile); + img = new ImageIcon(url).getImage(); + } - public Image getImage() { - return img; - } + public Image getImage() { + return img; + } - public Dimension getPreferredSize() { - return new Dimension(img.getWidth(this), img.getHeight(this)); - } + public Dimension getPreferredSize() { + return new Dimension(img.getWidth(this), img.getHeight(this)); + } - public Dimension getMinimumSize() { - return getPreferredSize(); - } + public Dimension getMinimumSize() { + return getPreferredSize(); + } }