Created
November 7, 2017 18:06
-
-
Save trevren11/e23ef5435c248a31088dde649bcb50f6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.*; | |
import java.util.*; | |
import java.awt.event.*; | |
import java.lang.*; | |
import java.io.*; | |
import java.net.*; | |
import javax.swing.*; | |
import java.math.*; | |
import java.text.*; | |
class Ai { | |
public Socket s; | |
public BufferedReader sin; | |
public PrintWriter sout; | |
Random generator = new Random(); | |
double time1, time2; | |
int myNumber; | |
int boardState; | |
int turn = -1; | |
int round; | |
public Ai(int myNumber, String host) { | |
this.myNumber = myNumber; | |
initClient(host); | |
while (true) { | |
System.out.println("Read"); | |
int[][] state = readMessage(); | |
if (turn == myNumber) { | |
System.out.println("Move"); | |
Vector<Point> m = getPossibleMoves(round, state, myNumber); | |
int myMove = move(); | |
Point moveAt = m.firstElement(); | |
String selection = moveAt.x + "\n" + moveAt.y; | |
System.out.println("Selection: " + moveAt.x + "," + moveAt.y); | |
sout.println(selection); | |
} | |
} | |
} | |
private int move() { | |
return 0; | |
} | |
private Vector<Point> getPossibleMoves(int round, int s[][], int player) { | |
Vector<Point> validMoveVector = new Vector<Point>(); | |
if (round < 4) { | |
if (s[3][3] == 0) { | |
validMoveVector.add(pointFromNumber(3 * 8 + 3)); | |
} | |
if (s[3][4] == 0) { | |
validMoveVector.add(pointFromNumber(3 * 8 + 4)); | |
} | |
if (s[4][3] == 0) { | |
validMoveVector.add(pointFromNumber(4 * 8 + 3)); | |
} | |
if (s[4][4] == 0) { | |
validMoveVector.add(pointFromNumber(4 * 8 + 4)); | |
} | |
} else { | |
for (int i = 0; i < 8; i++) { | |
for (int j = 0; j < 8; j++) { | |
if (couldBe(s, i, j, player)) { | |
validMoveVector.add(pointFromNumber(i * 8 + j)); | |
} | |
} | |
} | |
} | |
return validMoveVector; | |
} | |
private boolean checkDirection(int state[][], int row, int col, int incx, int incy, int player) { | |
int sequence[] = new int[7]; | |
int seqLen = 0; | |
for (int i = 1; i < 8; i++) { | |
int r = row + incy * i; | |
int c = col + incx * i; | |
if ((r < 0) || (r > 7) || (c < 0) || (c > 7)) | |
break; | |
sequence[seqLen] = state[r][c]; | |
seqLen++; | |
} | |
int count = 0; | |
int a = 1; | |
int b = 2; | |
if (player == 2) { | |
a = 2; | |
b = 1; | |
} | |
for (int i = 0; i < seqLen; i++) { | |
if (sequence[i] == b) | |
count++; | |
else { | |
if ((sequence[i] == a) && (count > 0)) | |
return true; | |
break; | |
} | |
} | |
return false; | |
} | |
private boolean couldBe(int state[][], int row, int col, int player) { | |
if (state[row][col] != 0) | |
return false; | |
for (int incx = -1; incx < 2; incx++) { | |
for (int incy = -1; incy < 2; incy++) { | |
if ((incx == 0) && (incy == 0)) | |
continue; | |
if (checkDirection(state, row, col, incx, incy, player)) | |
return true; | |
} | |
} | |
return false; | |
} | |
public int[][] readMessage() { | |
int[][] state = new int[8][8]; | |
try { | |
turn = Integer.parseInt(sin.readLine()); | |
if (turn == -999) { | |
try { | |
Thread.sleep(200); | |
} catch (InterruptedException e) { | |
System.out.println(e); | |
} | |
System.exit(1); | |
} | |
round = Integer.parseInt(sin.readLine()); | |
time1 = Double.parseDouble(sin.readLine()); | |
System.out.println(time1); | |
time2 = Double.parseDouble(sin.readLine()); | |
System.out.println(time2); | |
for (int i = 0; i < 8; i++) { | |
for (int j = 0; j < 8; j++) { | |
state[i][j] = Integer.parseInt(sin.readLine()); | |
} | |
} | |
sin.readLine(); | |
} catch (IOException e) { | |
System.err.println("Caught IOException: " + e.getMessage()); | |
} | |
printBoard(state); | |
return state; | |
} | |
public void initClient(String host) { | |
int portNumber = 3333 + myNumber; | |
try { | |
s = new Socket(host, portNumber); | |
sout = new PrintWriter(s.getOutputStream(), true); | |
sin = new BufferedReader(new InputStreamReader(s.getInputStream())); | |
String info = sin.readLine(); | |
System.out.println(info); | |
} catch (IOException e) { | |
System.err.println("Caught IOException: " + e.getMessage()); | |
} | |
} | |
public static void main(String args[]) { | |
new Ai(Integer.parseInt(args[1]), args[0]); | |
} | |
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
// Helper Methods | |
public void p(String str) { | |
System.out.println(str); | |
} | |
public void p(int str) { | |
System.out.println(str); | |
} | |
public void printBoard(int[][] state) { | |
System.out.println("Turn: " + turn); | |
System.out.println("Round: " + round); | |
for (int i = 7; i >= 0; i--) { | |
for (int j = 0; j < 8; j++) { | |
System.out.print(state[i][j]); | |
} | |
System.out.println(); | |
} | |
System.out.println(); | |
} | |
int[][] clone(int[][] orig) { | |
int[][] clone = new int[8][8]; | |
for (int i = 0; i < 8; i++) { | |
for (int j = 0; j < 8; j++) { | |
int temp = orig[i][j]; | |
clone[i][j] = temp; | |
} | |
} | |
return clone; | |
} | |
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
// My additions | |
public Point pointFromNumber(int num) { | |
return new Point(num / 8, num % 8); | |
} | |
public void printValidMoves(Vector<Point> v) { | |
p("Valid Moves"); | |
for (Point item : v) { | |
p(item.x + ", " + item.y); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment