Skip to content

Instantly share code, notes, and snippets.

@trevren11
Created November 7, 2017 18:06
Show Gist options
  • Save trevren11/e23ef5435c248a31088dde649bcb50f6 to your computer and use it in GitHub Desktop.
Save trevren11/e23ef5435c248a31088dde649bcb50f6 to your computer and use it in GitHub Desktop.
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