[Design] Go (Board Game)

A Screenshot of the Current Progress (Incomplete)
GoBoard - Screenshot

GoBoard - Screenshot

Rough Sketch of Each Class
  • GoBoard: JPanel
    • It represents a “Go” game board.
    • An array of Buttons to represent spaces to put stones.
    • Methods include:
      • GoBoard(int height, int width)
      • GoBoard(int height, int width, int size)
      • isEmpty(int row, int col): boolean
      • setEmpty(int row, int col): void
      • get(int row, int col) JButton
      • fill(int row, int col, Color c): void
      • reset(): void
      • inWidthRange(int x): boolean
      • inHeightRange(int y): boolean
  • GoEngine: JFrame
    • It takes care of the logic (for example, calculating the portion of dead stones)
    • Methods include:
      • GoEngine(int size)
      • promptSIZE(): int
      • actionPerformed(ActionEvent e): void
      • findDeadStones(Color deadColor, int row, int col): LinkedList<JButton>
  • GoMenu: JMenu
    • File
      • New
      • Save
      • Open
      • About
      • Exit
    • Board Size
      • 3 * 3
      • 4 * 4
      • 5 * 5
      • 19 * 19
  • GoPlayer
  • GoUI

Future Goal

  • Make a full functioning Go Board Game with menu
  • Implement some original ideas
  • Make the design look fancier

[Requirement] Go (Board Game)

Due to my Canadian friends who play “Go,” the Asian game each other, I was inspired to develop the game in Java.

Go (Board Game) from Google Image Search

Go (Board Game) from Google Image Search

As I have developed many original/existing board games like “Tic-Tac-Toe,” “Five in a Row,” “Connect Four,” and “Fill Thirty Six,” the general board will be easy to make. However, I think making my board looks like a real Go board will be a difficult part. AI and Network Connect might or might not be implemented.

Game: Go (Board Game)

Programming Language: Java

Developer: Wonjohn Choi

Robocode – Untouchable

Robocode is a programming game, where the goal is to develop a robot battle tank to battle against other tanks in Java or .NET. The robot battles are running in real-time and on-screen.

About six months ago, in school, my team (Wonjohn Choi, Raafay Muzaffar) created our robot named “Untouchable” based on Robocode software.

With numerous experiment, this robot is designed to avoid bullets with a repeated movement and shoot bullets with optimized power.

Untouchable

Untouchable

This robot wins against any built-in robocode robots and won school Robocode contest!

You can download the full zip file in Downloads page.

Here is the main source code (without comments):


/**
 *
 * Untouchable - a robot by Wonjohn Choi and Raafay Muzaffar
 * @author Wonjohn Choi, Raafay Muzaffar
 * @date Jan. 19th, 2010
 */

import robocode.*;
import java.awt.Color;

public class Untouchable extends Robot
{
  Color getRandomColor[]=new Color[4];

  public void run()
  {
    this.turnGunRight(90);
    this.turnRadarRight(90);

    while(true)
    {
      for(int i=0;i<4;i++)
      {
        getRandomColor[i]=
        Color.getHSBColor((float)Math.random(),(float)Math.random(),(float)Math.random());
      }

      setColors(getRandomColor[0],getRandomColor[1],getRandomColor[2],Color.WHITE,getRandomColor[3]);

      for(int i=0;i<2;i++)
      {
        this.turnRadarLeft(360);
        this.turnRight(20);

        this.ahead(250);
      }

      for(int i=0;i<2;i++)
      {
        this.turnRadarLeft(360);
        this.turnLeft(10);

        this.back(250);
      }

    }
  }

  /**
   * onScannedRobot: What to do when you see another robot
   */
  public void onScannedRobot(ScannedRobotEvent e)
  {
    this.turnRight(e.getBearing()-90);

    double dist=e.getDistance();

    if(this.getEnergy()<5)
    {
      this.fire(0.1);
    }

    else if(dist<200)
    {
      this.fire(3);
    }

    else if(dist<400)
    {
      this.fire(2);
    }

    else if(dist<600)
    {
      this.fire(1);
    }

    else
    {
      this.fire(0.1);
    }
  }

  public void onHitRobot(HitRobotEvent e)
  {
    if (e.getBearing() >= 0)
    {
      turnRight(e.getBearing()-90);
    }
    else
    {
      turnRight(-1*(e.getBearing()-90));
    }

    fire(3);
  }
}