1. 程式人生 > >[Java]-第四天-攻擊戰艦遊戲

[Java]-第四天-攻擊戰艦遊戲

攻擊戰艦遊戲示例:

--DotCom.java

package com.test.java;

import java.util.ArrayList;

public class DotCom {

	private ArrayList<String> locationCells;
	private String name;
	
	public void setLocationCells(ArrayList<String> loc) {
		locationCells = loc;
	}
	
	public void setName(String n) {
		name = n;
	}
	
	public String checkYourself(String userInput) {
		String result = "miss";
		int index = locationCells.indexOf(userInput);
		
		if (index >= 0) {
			locationCells.remove(index);
			
			if (locationCells.isEmpty()) {
				result = "kill";
			} else {
				result = "hit";
			}
		}
		return result;
	}
}
--GameHelper.java
package com.test.java;

import java.io.*;
import java.util.*;

public class GameHelper {

	private static final String alphabet = "abcdefg";
	private int gridLength = 7;
	private int gridSize = 49;
	private int[] grid = new int[gridSize];
	private int comCount = 0;
	
	public String getUserInput(String prompt) {
		String inputLine = null;
		System.out.println(prompt + "  ");
		
		try {
			BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
			inputLine = is.readLine();
			if (inputLine.length() == 0) return null;
		} catch (IOException e) {
			System.out.println("IOEception: " + e);
		}
		
		return inputLine.toLowerCase();
	}
	
	public ArrayList<String> placeDotCom(int comSize) {
		ArrayList<String> alphaCells = new ArrayList<String>();
		String[] alphacoords = new String[comSize];
		String temp = null;
		int[] coords = new int[comSize];
		int attempts = 0;
		boolean success = false;
		int location = 0;
		
		comCount++;
		int incr = 1;
		if ((comCount % 2) == 1) {
			incr = gridLength;
		}
		
		while(!success && attempts++ < 200) {
			location = (int) (Math.random() * gridSize);
			int x = 0;
			success = true;
			while(success && x < comSize) {
				if (grid[location] == 0) {
					coords[x++] = location;
					location += incr;
					if (location >= gridSize) {
						success = false;
					}
					if (x>0 && (location % gridLength == 0)) {
						success = false;
					}
				} else {
					success = false;
				}
			}
		}
		
		int x = 0;
		int row = 0;
		int column = 0;
		
		while(x < comSize) {
			grid[coords[x]] = 1;
			row = (int) (coords[x] / gridLength);
			column = coords[x] % gridLength;
			temp = String.valueOf(alphabet.charAt(column));
			
			alphaCells.add(temp.concat(Integer.toString(row)));
			x++;
		}
		return alphaCells;
	}
}

-- DotComBust.java

package com.test.java;

import java.util.*;

public class DotComBust {

		private GameHelper helper = new GameHelper();
		private ArrayList<DotCom> dotComsList = new ArrayList<DotCom>();
		private int numOfGuesses = 0;
		
		private void setUpGame() {
			DotCom one = new DotCom();
			one.setName("Pets.com");
			DotCom two = new DotCom();
			two.setName("eToys.com");
			DotCom three = new DotCom();
			three.setName("Go2.com");
			dotComsList.add(one);
			dotComsList.add(two);
			dotComsList.add(three);
			
			System.out.println("Your goal is to sink three dot coms.");
			System.out.println("Pet.com, eToys.com, Go2.com");
			System.out.println("Try to sink them all in the fewest number of guesses");
			
			for (DotCom dotComToSet : dotComsList) {
				ArrayList<String> newLocation = helper.placeDotCom(3);
				dotComToSet.setLocationCells(newLocation);
			}
		}
		
		private void startPlaying() {
			while(!dotComsList.isEmpty()) {
				String userGuess = helper.getUserInput("Enter a guess");
				checkUserGuess(userGuess);
			}
			finishGame();
		}
		
		private void checkUserGuess(String userGuess) {
			numOfGuesses++;
			String result = "miss";
			
			for (DotCom dotComToTest : dotComsList) {
				result = dotComToTest.checkYourself(userGuess);
				
				if (result.equals("hit")) {
					break;
				}
				
				if (result.equals("kill")) {
					dotComsList.remove(dotComToTest);
					break;
				}
			}
			
			System.out.println(result);
		}
		
		private void finishGame() {
			System.out.println("All Dot Coms are dead! Your stock is now worthless.");
			
			if (numOfGuesses <= 18) {
				System.out.println("It only took you " + numOfGuesses + " guesses.");
				System.out.println("You got out before your options sank.");
			} else {
				System.out.println("Took you long enough. " + numOfGuesses + " guesses.");
				System.out.println("Fish are dancing with your options.");
			}
		}
		
		public static void main(String[] args) {
			DotComBust game = new DotComBust();
			game.setUpGame();
			game.startPlaying();
		}

}