public class Battleship extends ConsoleProgram { public void run() { System.out.println("======================"); System.out.println("Welcome to battleship."); System.out.println("======================"); } }
public class Grid { private Location[][] grid;
// Constants for number of rows and columns.
public static final int NUM_ROWS = 10;
public static final int NUM_COLS = 10;
// Create a new Grid. Initialize each Location in the grid
// to be a new Location object.
public Grid()
{
grid = new Location[10][10];
for(int row = 0; row < NUM_ROWS; row++)
{
for(int col = 0; col < NUM_COLS; col++)
{
grid[row][col] = new Location();
}
}
}
// Mark a hit in this location by calling the markHit method
// on the Location object.
public void markHit(int row, int col)
{
grid[row][col].markHit();
} // Mark a miss on this location.
public void markMiss(int row, int col)
{
grid[row][col].markMiss();
}
// Set the status of this location object.
public void setStatus(int row, int col, int status)
{
grid[row][col].setStatus(status);
}
// Get the status of this location in the grid
public int getStatus(int row, int col)
{
return grid[row][col].getStatus();
}
// Return whether or not this Location has already been guessed.
public boolean alreadyGuessed(int row, int col)
{
return grid[row][col].isUnguessed() == false;
}
// Set whether or not there is a ship at this location to the val
public void setShip(int row, int col, boolean exist)
{
grid[row][col].setShip(exist);
}
// Return whether or not there is a ship here
public boolean hasShip(int row, int col)
{
return grid[row][col].hasShip();
}
// Get the Location object at this row and column position
public Location get(int row, int col)
{
return grid[row][col];
}
// Return the number of rows in the Grid
public int numRows()
{
return NUM_ROWS;
}
// Return the number of columns in the grid
public int numCols()
{
return NUM_COLS;
}
public void printStatus()
{
System.out.println("1 2 3 4 5 6 7 8 9 10");
for(int row = 0; row < NUM_ROWS; row++)
{
System.out.print((char)(row + 65));
for(int col = 0; col < NUM_COLS; col++)
{
if(grid[row][col].checkHit())
{
System.out.print(" X");
}
else if(grid[row][col].getStatus() == 2)
{
System.out.print(" O");
}
else
{
System.out.print(" -");
}
}
System.out.print(" ");
System.out.println();
}
}
public void printShips()
{
System.out.println("1 2 3 4 5 6 7 8 9 10");
for(int row = 0; row < NUM_ROWS; row++)
{
System.out.print((char)(row + 65));
for(int col = 0; col < NUM_COLS; col++)
{
if(grid[row][col].hasShip() == true)
{
System.out.print(" X");
}
else
{
System.out.print(" -");
}
}
System.out.print(" ");
System.out.println();
}
}
}
public class Player { private static final int[] SHIP_LENGTHS = {2, 3, 3, 4, 5}; public Grid enemyGrid; public Grid myGrid; private static int c = 0; public Player() { myGrid = new Grid(); enemyGrid = new Grid(); } public void chooseShipLocation(Ship s, int row, int col, int direction) { if(c < 5) { s.setLocation(row, col); s.setDirection(direction); myGrid.addShip(s); c ++; } }
public void printMyShips()
{
myGrid.printShips();
}
public void printOpponentGuesses()
{
myGrid.printStatus();
}
public void printMyGuesses()
{
myGrid.printStatus();
}
public void recordOpponentGuess(int row,int col)
{
if(myGrid.hasShip(row, col))
{
myGrid.markHit(row, col);
}
else
{
myGrid.markMiss(row, col);
}
}
}
import java.util.*;
public class Randomizer{
public static Random theInstance = null;
public Randomizer(){
}
public static Random getInstance(){
if(theInstance == null){
theInstance = new Random();
}
return theInstance;
}
/**
* Return a random boolean value.
* @return True or false value simulating a coin flip.
*/
public static boolean nextBoolean(){
return Randomizer.getInstance().nextBoolean();
}
/**
* This method simulates a weighted coin flip which will return
* true with the probability passed as a parameter.
*
* @param probability The probability that the method returns true, a value between 0 to 1 inclusive.
* @return True or false value simulating a weighted coin flip.
*/
public static boolean nextBoolean(double probability){
return Randomizer.nextDouble() < probability;
}
/**
* This method returns a random integer.
* @return A random integer.
*/
public static int nextInt(){
return Randomizer.getInstance().nextInt();
}
/**
* This method returns a random integer between 0 and n, exclusive.
* @param n The maximum value for the range.
* @return A random integer between 0 and n, exclusive.
*/
public static int nextInt(int n){
return Randomizer.getInstance().nextInt(n);
}
/**
* Return a number between min and max, inclusive.
* @param min The minimum integer value of the range, inclusive.
* @param max The maximum integer value in the range, inclusive.
* @return A random integer between min and max.
*/
public static int nextInt(int min, int max){
return min + Randomizer.nextInt(max - min + 1);
}
/**
* Return a random double between 0 and 1.
* @return A random double between 0 and 1.
*/
public static double nextDouble(){
return Randomizer.getInstance().nextDouble();
}
/**
* Return a random double between min and max.
* @param min The minimum double value in the range.
* @param max The maximum double value in the rang.
* @return A random double between min and max.
*/
public static double nextDouble(double min, double max){
return min + (max - min) * Randomizer.nextDouble();
}
}
public class Ship { public int length; public int direction; public int row; public int col; public static final int UNSET = -1; public static final int HORIZONTAL = 0; public static final int VERTICAL = 1; // Constructor. Create a ship and set the length. public Ship(int length) { this.row = UNSET; this.col = UNSET; this.length = length; this.direction = UNSET; }
// Has the location been initialized
public boolean isLocationSet()
{
return !(this.row == UNSET)&&(this.col == UNSET);
}
// Has the direction been initialized
public boolean isDirectionSet()
{
return direction != UNSET;
}
// Set the location of the ship
public void setLocation(int row, int col)
{
this.row = row;
this.col = col;
}
// Set the direction of the ship
public void setDirection(int direction)
{
this.direction = direction;
}
// Getter for the row value
public int getRow()
{
return row;
}
// Getter for the column value
public int getCol()
{
return col;
}
// Getter for the length of the ship
public int getLength()
{
return length;
}
// Getter for the direction
public int getDirection()
{
return direction;
}
// Helper method to get a string value from the direction
private String directionToString()
{
String exa = "";
if(direction == VERTICAL)
{
exa = "vertical";
}
else if(direction == HORIZONTAL)
{
exa = "horizontal";
}
else
{
exa = "unset direction";
}
return exa;
}
// Helper method to get a (row, col) string value from the location
private String locationToString()
{
String ini = "";
if(row != UNSET)
{
ini = "(" + row + ", " + col + ")";
}
else
{
ini = "(unset location)";
}
return ini;
}
// toString value for this Ship
public String toString()
{
return directionToString() + " ship of length " + length + " at "locationToString();
}
}
public class Location { public boolean exist; public int status; public static final int UNGUESSED = 0; public static final int HIT = 1; public static final int MISSED = 2; // Location constructor. public Location() { this.exist = exist; this.status = status; } // Was this Location a hit? public boolean checkHit() { return status == HIT; } // Was this location a miss? public boolean checkMiss() { return status == MISSED; } // Was this location unguessed? public boolean isUnguessed() { return status == UNGUESSED; } // Mark this location a hit. public void markHit() { this.status = HIT; } // Mark this location a miss. public void markMiss() { this.status = MISSED; } // Return whether or not this location has a ship. public boolean hasShip() { return exist; } // Set the value of whether this location has a ship. public void setShip(boolean exist) { this.exist = exist; } // Set the status of this Location. public void setStatus(int status) { this.status = status; } // Get the status of this Location. public int getStatus() { return status; } }
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.