01: /*
02: * This file is part of JGAP.
03: *
04: * JGAP offers a dual license model containing the LGPL as well as the MPL.
05: *
06: * For licencing information please see the file license.txt included with JGAP
07: * or have a look at the top of class org.jgap.Chromosome which representatively
08: * includes the JGAP license policy applicable for any file delivered with JGAP.
09: */
10: package examples.gp.tictactoe;
11:
12: import org.jgap.gp.*;
13: import org.jgap.*;
14: import org.jgap.gp.impl.*;
15:
16: public class PutStone1 extends CommandGene {
17: /** String containing the CVS revision. Read out via reflection!*/
18: private final static String CVS_REVISION = "$Revision: 1.1 $";
19:
20: private Board m_board;
21:
22: private int m_color;
23:
24: public PutStone1(final GPConfiguration a_conf, Board a_board,
25: int a_color) throws InvalidConfigurationException {
26: this (a_conf, a_board, a_color, 0, 0);
27: }
28:
29: public PutStone1(final GPConfiguration a_conf, Board a_board,
30: int a_color, int a_subReturnType, int a_subChildType)
31: throws InvalidConfigurationException {
32: super (a_conf, 1, CommandGene.VoidClass, a_subReturnType,
33: a_subChildType);
34: m_board = a_board;
35: m_color = a_color;
36: }
37:
38: public String toString() {
39: return "put_stone1(&1)";
40: }
41:
42: public void execute_void(ProgramChromosome c, int n, Object[] args) {
43: check(c);
44: int index = c.execute_int(n, 0, args);
45: int x = index / Board.WIDTH;
46: int y = index % Board.HEIGHT;
47: // Put stone on board.
48: // -------------------
49: boolean gameWon = m_board.putStone(x, y, m_color);
50: // If game won, quit GP-program.
51: // -----------------------------
52: if (gameWon) {
53: throw new GameWonException(m_color, "Game won by color "
54: + m_color);
55: }
56: }
57:
58: protected void check(ProgramChromosome a_program) {
59: if (m_board.getLastColor() == m_color) {
60: throw new IllegalStateException(
61: "Only one stone of a color per round!");
62: }
63: }
64:
65: /**
66: * Determines which type a specific child of this command has.
67: *
68: * @param a_ind ignored here
69: * @param a_chromNum index of child
70: * @return type of the a_chromNum'th child
71: *
72: * @author Klaus Meffert
73: * @since 3.2
74: */
75: public Class getChildType(IGPProgram a_ind, int a_chromNum) {
76: return CommandGene.IntegerClass;
77: }
78: }
|