theres nothing wrong with how the code works. I developed this game as learning experience, no classroom, so I would like to see how else it could have been coded.
my a.i. code is over a 1000 lines, it individually checks certain conditions. there must be a more inteligent solution than my own.
package naughtsAndCrosses;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
public class AI extends Player
{
public void move(Board board)
{
Random randomNumbers = new Random();
int legal;
List<Integer> list = new ArrayList<Integer>(); //Used to hold possible priority 3 moves
// First Priority (IMMEDIATE WIN)
// EOO
// ---
// ---
if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[0][1] == Board.O()
&& board.getBoard()[0][2] == Board.O() )
{
board.addValue(0,0, this);
return;
}
// OEO
// ---
// ---
else if( board.getBoard()[0][0] == Board.O() && board.getBoard()[0][1] == Board.EMPTY()
&& board.getBoard()[0][2] == Board.O() )
{
board.addValue(0,1, this);
return;
}
// OOE
// ---
// ---
else if( board.getBoard()[0][0] == Board.O() && board.getBoard()[0][1] == Board.O()
&& board.getBoard()[0][2] == Board.EMPTY() )
{
board.addValue(0,2, this);
return;
}
// ---
// EOO
// ---
else if( board.getBoard()[1][0] == Board.EMPTY() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[1][2] == Board.O() )
{
board.addValue(1, 0, this);
return;
}
// ---
// OEO
// ---
else if( board.getBoard()[1][0] == Board.O() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[1][2] == Board.O() )
{
board.addValue(1, 1, this);
return;
}
// ---
// OOE
// ---
else if( board.getBoard()[1][0] == Board.O() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[1][2] == Board.EMPTY() )
{
board.addValue(1, 2, this);
return;
}
// ---
// ---
// EOO
else if( board.getBoard()[2][0] == Board.EMPTY() && board.getBoard()[2][1] == Board.O()
&& board.getBoard()[2][2] == Board.O())
{
board.addValue(2, 0, this);
return;
}
// ---
// ---
// OEO
else if( board.getBoard()[2][0] == Board.O() && board.getBoard()[2][1] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.O())
{
board.addValue(2, 1, this);
return;
}
// ---
// ---
// OOE
else if( board.getBoard()[2][0] == Board.O() && board.getBoard()[2][1] == Board.O()
&& board.getBoard()[2][2] == Board.EMPTY())
{
board.addValue(2, 2, this);
return;
}
// E--
// O--
// O--
else if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[1][0] == Board.O()
&& board.getBoard()[2][0] == Board.O() )
{
board.addValue(0, 0, this);
return;
}
// O--
// E--
// O--
else if( board.getBoard()[0][0] == Board.O() && board.getBoard()[1][0] == Board.EMPTY()
&& board.getBoard()[2][0] == Board.O() )
{
board.addValue(1, 0, this);
return;
}
// O--
// O--
// E--
else if( board.getBoard()[0][0] == Board.O() && board.getBoard()[1][0] == Board.O()
&& board.getBoard()[2][0] == Board.EMPTY() )
{
board.addValue(2, 0, this);
return;
}
// -E-
// -O-
// -O-
else if( board.getBoard()[0][1] == Board.EMPTY() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[2][1] == Board.O() )
{
board.addValue(0, 1, this);
return;
}
// -O-
// -E-
// -O-
else if( board.getBoard()[0][1] == Board.O() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][1] == Board.O() )
{
board.addValue(1, 1, this);
return;
}
// -O-
// -O-
// -E-
else if( board.getBoard()[0][1] == Board.O() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[2][1] == Board.EMPTY() )
{
board.addValue(2, 1, this);
return;
}
// --E
// --O
// --O
else if( board.getBoard()[0][2] == Board.EMPTY() && board.getBoard()[1][2] == Board.O()
&& board.getBoard()[2][2] == Board.O() )
{
board.addValue(0, 2, this);
return;
}
// --O
// --E
// --O
else if( board.getBoard()[0][2] == Board.O() && board.getBoard()[1][2] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.O() )
{
board.addValue(1, 2, this);
return;
}
// --O
// --O
// --E
else if( board.getBoard()[0][2] == Board.O() && board.getBoard()[1][2] == Board.O()
&& board.getBoard()[2][2] == Board.EMPTY() )
{
board.addValue(2, 2, this);
return;
}
// E--
// -O-
// --O
else if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[2][2] == Board.O() )
{
board.addValue(0, 0, this);
return;
}
// O--
// -E-
// --O
else if( board.getBoard()[0][0] == Board.O() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.O() )
{
board.addValue(1, 1, this);
return;
}
// O--
// -O-
// --E
else if( board.getBoard()[0][0] == Board.O() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[2][2] == Board.EMPTY() )
{
board.addValue(2, 2, this);
return;
}
// --E
// -O-
// O--
else if( board.getBoard()[0][2] == Board.EMPTY() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[2][0] == Board.O() )
{
board.addValue(0, 2, this);
return;
}
// --O
// -E-
// O--
else if( board.getBoard()[0][2] == Board.O() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][0] == Board.O() )
{
board.addValue(1, 1, this);
return;
}
// --O
// -O-
// E--
else if( board.getBoard()[0][2] == Board.O() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[2][0] == Board.EMPTY() )
{
board.addValue(2, 0, this);
return;
}
// Second Priority (IMMEDIATE BLOCK)
// EXX
// ---
// ---
if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[0][1] == Board.X()
&& board.getBoard()[0][2] == Board.X() )
{
board.addValue(0,0, this);
return;
}
// XEX
// ---
// ---
else if( board.getBoard()[0][0] == Board.X() && board.getBoard()[0][1] == Board.EMPTY()
&& board.getBoard()[0][2] == Board.X() )
{
board.addValue(0,1, this);
return;
}
// XXE
// ---
// ---
else if( board.getBoard()[0][0] == Board.X() && board.getBoard()[0][1] == Board.X()
&& board.getBoard()[0][2] == Board.EMPTY() )
{
board.addValue(0,2, this);
return;
}
// ---
// EXX
// ---
else if( board.getBoard()[1][0] == Board.EMPTY() && board.getBoard()[1][1] == Board.X()
&& board.getBoard()[1][2] == Board.X() )
{
board.addValue(1, 0, this);
return;
}
// ---
// XEX
// ---
else if( board.getBoard()[1][0] == Board.X() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[1][2] == Board.X() )
{
board.addValue(1, 1, this);
return;
}
// ---
// XXE
// ---
else if( board.getBoard()[1][0] == Board.X() && board.getBoard()[1][1] == Board.X()
&& board.getBoard()[1][2] == Board.EMPTY() )
{
board.addValue(1, 2, this);
return;
}
// ---
// ---
// EXX
else if( board.getBoard()[2][0] == Board.EMPTY() && board.getBoard()[2][1] == Board.X()
&& board.getBoard()[2][2] == Board.X())
{
board.addValue(2, 0, this);
return;
}
// ---
// ---
// XEX
else if( board.getBoard()[2][0] == Board.X() && board.getBoard()[2][1] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.X())
{
board.addValue(2, 1, this);
return;
}
// ---
// ---
// XXE
else if( board.getBoard()[2][0] == Board.X() && board.getBoard()[2][1] == Board.X()
&& board.getBoard()[2][2] == Board.EMPTY())
{
board.addValue(2, 2, this);
return;
}
// E--
// X--
// X--
else if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[1][0] == Board.X()
&& board.getBoard()[2][0] == Board.X() )
{
board.addValue(0, 0, this);
return;
}
// X--
// E--
// X--
else if( board.getBoard()[0][0] == Board.X() && board.getBoard()[1][0] == Board.EMPTY()
&& board.getBoard()[2][0] == Board.X() )
{
board.addValue(1, 0, this);
return;
}
// X--
// X--
// E--
else if( board.getBoard()[0][0] == Board.X() && board.getBoard()[1][0] == Board.X()
&& board.getBoard()[2][0] == Board.EMPTY() )
{
board.addValue(2, 0, this);
return;
}
// -E-
// -X-
// -X-
else if( board.getBoard()[0][1] == Board.EMPTY() && board.getBoard()[1][1] == Board.X()
&& board.getBoard()[2][1] == Board.X() )
{
board.addValue(0, 1, this);
return;
}
// -X-
// -E-
// -X-
else if( board.getBoard()[0][1] == Board.X() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][1] == Board.X() )
{
board.addValue(1, 1, this);
return;
}
// -X-
// -X-
// -E-
else if( board.getBoard()[0][1] == Board.X() && board.getBoard()[1][1] == Board.X()
&& board.getBoard()[2][1] == Board.EMPTY() )
{
board.addValue(2, 1, this);
return;
}
// --E
// --X
// --X
else if( board.getBoard()[0][2] == Board.EMPTY() && board.getBoard()[1][2] == Board.X()
&& board.getBoard()[2][2] == Board.X() )
{
board.addValue(0, 2, this);
return;
}
// --X
// --E
// --X
else if( board.getBoard()[0][2] == Board.X() && board.getBoard()[1][2] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.X() )
{
board.addValue(1, 2, this);
return;
}
// --X
// --X
// --E
else if( board.getBoard()[0][2] == Board.X() && board.getBoard()[1][2] == Board.X()
&& board.getBoard()[2][2] == Board.EMPTY() )
{
board.addValue(2, 2, this);
return;
}
// E--
// -X-
// --X
else if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[1][1] == Board.X()
&& board.getBoard()[2][2] == Board.X() )
{
board.addValue(0, 0, this);
return;
}
// X--
// -E-
// --X
else if( board.getBoard()[0][0] == Board.X() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.X() )
{
board.addValue(1, 1, this);
return;
}
// X--
// -X-
// --E
else if( board.getBoard()[0][0] == Board.X() && board.getBoard()[1][1] == Board.X()
&& board.getBoard()[2][2] == Board.EMPTY() )
{
board.addValue(2, 2, this);
return;
}
// --E
// -X-
// X--
else if( board.getBoard()[0][2] == Board.EMPTY() && board.getBoard()[1][1] == Board.X()
&& board.getBoard()[2][0] == Board.X() )
{
board.addValue(0, 2, this);
return;
}
// --X
// -E-
// X--
else if( board.getBoard()[0][2] == Board.X() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][0] == Board.X() )
{
board.addValue(1, 1, this);
return;
}
// --X
// -X-
// E--
else if( board.getBoard()[0][2] == Board.X() && board.getBoard()[1][1] == Board.X()
&& board.getBoard()[2][0] == Board.EMPTY() )
{
board.addValue(2, 0, this);
return;
}
// Third Priority (GOOD MOVE)
// ORR
// ---
// ---
if( board.getBoard()[0][0] == Board.O() && board.getBoard()[0][1] == Board.EMPTY()
&& board.getBoard()[0][2] == Board.EMPTY() )
{
list.add(1);
}
// ROR
// ---
// ---
if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[0][1] == Board.O()
&& board.getBoard()[0][2] == Board.EMPTY() )
{
list.add(2);
}
// RRO
// ---
// ---
if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[0][1] == Board.EMPTY()
&& board.getBoard()[0][2] == Board.O() )
{
list.add(3);
}
// ---
// ORR
// ---
if( board.getBoard()[1][0] == Board.O() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[1][2] == Board.EMPTY() )
{
list.add(4);
}
// ---
// ROR
// ---
if( board.getBoard()[1][0] == Board.EMPTY() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[1][2] == Board.EMPTY() )
{
list.add(5);
}
// ---
// RRO
// ---
if( board.getBoard()[1][0] == Board.EMPTY() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[1][2] == Board.O() )
{
list.add(6);
}
// ---
// ---
// ORR
if( board.getBoard()[2][0] == Board.O() && board.getBoard()[2][1] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.EMPTY())
{
list.add(7);
}
// ---
// ---
// ROR
if( board.getBoard()[2][0] == Board.EMPTY() && board.getBoard()[2][1] == Board.O()
&& board.getBoard()[2][2] == Board.EMPTY())
{
list.add(8);
}
// ---
// ---
// RRO
if( board.getBoard()[2][0] == Board.EMPTY() && board.getBoard()[2][1] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.O())
{
list.add(9);
}
// O--
// R--
// R--
if( board.getBoard()[0][0] == Board.O() && board.getBoard()[1][0] == Board.EMPTY()
&& board.getBoard()[2][0] == Board.EMPTY() )
{
list.add(10);
}
// R--
// O--
// R--
if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[1][0] == Board.O()
&& board.getBoard()[2][0] == Board.EMPTY() )
{
list.add(11);
}
// R--
// R--
// O--
if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[1][0] == Board.EMPTY()
&& board.getBoard()[2][0] == Board.O() )
{
list.add(12);
}
// -O-
// -R-
// -R-
if( board.getBoard()[0][1] == Board.O() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][1] == Board.EMPTY() )
{
list.add(13);
}
// -R-
// -O-
// -R-
if( board.getBoard()[0][1] == Board.EMPTY() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[2][1] == Board.EMPTY() )
{
list.add(14);
}
// -R-
// -R-
// -O-
if( board.getBoard()[0][1] == Board.EMPTY() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][1] == Board.O() )
{
list.add(15);
}
// --O
// --R
// --R
if( board.getBoard()[0][2] == Board.O() && board.getBoard()[1][2] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.EMPTY() )
{
list.add(16);
}
// --R
// --O
// --R
if( board.getBoard()[0][2] == Board.EMPTY() && board.getBoard()[1][2] == Board.O()
&& board.getBoard()[2][2] == Board.EMPTY() )
{
list.add(17);
}
// --R
// --R
// --O
if( board.getBoard()[0][2] == Board.EMPTY() && board.getBoard()[1][2] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.O() )
{
list.add(18);
}
// O--
// -R-
// --R
if( board.getBoard()[0][0] == Board.O() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.EMPTY() )
{
list.add(19);
}
// R--
// -O-
// --R
if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[2][2] == Board.EMPTY() )
{
list.add(20);
}
// R--
// -R-
// --O
if( board.getBoard()[0][0] == Board.EMPTY() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][2] == Board.O() )
{
list.add(21);
}
// --O
// -R-
// R--
if( board.getBoard()[0][2] == Board.O() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][0] == Board.EMPTY() )
{
list.add(22);
}
// --R
// -O-
// R--
if( board.getBoard()[0][2] == Board.EMPTY() && board.getBoard()[1][1] == Board.O()
&& board.getBoard()[2][0] == Board.EMPTY() )
{
list.add(23);
}
// --R
// -R-
// O--
if( board.getBoard()[0][2] == Board.EMPTY() && board.getBoard()[1][1] == Board.EMPTY()
&& board.getBoard()[2][0] == Board.O() )
{
list.add(24);
}
if( list.isEmpty() == false)
{
int randomIndex = 1 + randomNumbers.nextInt(list.size() -1);
int move = list.get(randomIndex);
switch (move)
{
case 1:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 1, this);
return;
}
else // == 2
{
board.addValue(0, 2, this);
return;
}
case 2:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 0, this);
return;
}
else // == 2
{
board.addValue(0, 2, this);
return;
}
case 3:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 0, this);
return;
}
else // == 2
{
board.addValue(0, 1, this);
return;
}
case 4:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(1, 1, this);
return;
}
else // == 2
{
board.addValue(1, 2, this);
return;
}
case 5:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(1, 0, this);
return;
}
else // == 2
{
board.addValue(1, 2, this);
return;
}
case 6:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(1, 0, this);
return;
}
else // == 2
{
board.addValue(1, 1, this);
return;
}
case 7:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(2, 1, this);
return;
}
else // == 2
{
board.addValue(2, 2, this);
return;
}
case 8:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(2, 0, this);
return;
}
else // == 2
{
board.addValue(2, 2, this);
return;
}
case 9:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(2, 0, this);
return;
}
else // == 2
{
board.addValue(2, 1, this);
return;
}
case 10:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(1, 0, this);
return;
}
else // == 2
{
board.addValue(2, 0, this);
return;
}
case 11:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 0, this);
return;
}
else // == 2
{
board.addValue(2, 0, this);
return;
}
case 12:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 0, this);
return;
}
else // == 2
{
board.addValue(1, 0, this);
return;
}
case 13:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(1, 1, this);
return;
}
else // == 2
{
board.addValue(2, 1, this);
return;
}
case 14:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 1, this);
return;
}
else // == 2
{
board.addValue(2, 1, this);
return;
}
case 15:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 1, this);
return;
}
else // == 2
{
board.addValue(1, 1, this);
return;
}
case 16:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(1, 2, this);
return;
}
else // == 2
{
board.addValue(2, 2, this);
return;
}
case 17:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 2, this);
return;
}
else // == 2
{
board.addValue(2, 2, this);
return;
}
case 18:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 2, this);
return;
}
else // == 2
{
board.addValue(1, 2, this);
return;
}
case 19:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(1, 1, this);
return;
}
else // == 2
{
board.addValue(2, 2, this);
return;
}
case 20:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 0, this);
return;
}
else // == 2
{
board.addValue(2, 2, this);
return;
}
case 21:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 0, this);
return;
}
else // == 2
{
board.addValue(1, 1, this);
return;
}
case 22:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(1, 1, this);
return;
}
else // == 2
{
board.addValue(2, 0, this);
return;
}
case 23:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 2, this);
return;
}
else // == 2
{
board.addValue(2, 0, this);
return;
}
case 24:
if( 1 + randomNumbers.nextInt(2) == 1 )
{
board.addValue(0, 2, this);
return;
}
else // == 2
{
board.addValue(1, 1, this);
return;
}
}
}
// No Priority
else //list is empty
{
do
{
legal = 0;
switch(1 + randomNumbers.nextInt(9))
{
case 1: legal = board.addValue(0,0, this);
break;
case 2: legal = board.addValue(0,1, this);
break;
case 3: legal = board.addValue(0,2, this);
break;
case 4: legal = board.addValue(1,0, this);
break;
case 5: legal = board.addValue(1,1, this);
break;
case 6: legal = board.addValue(1,2, this);
break;
case 7: legal = board.addValue(2,0, this);
break;
case 8: legal = board.addValue(2,1, this);
break;
case 9: legal = board.addValue(2,2, this);
}
}
while (!(legal == 1));
}
}
}

New Topic/Question
Reply



MultiQuote




|