Head first java 第五章(二)

DotCom类

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){                    //if猜中
            locationCells.remove(index);         
            if(locationCells.isEmpty()){
                result = "kill";           //若locationCells为空,则该DotCom被kill
                System.out.println(name+" go die");
            }else{
                result = "hit";             //若不为空,则result为hit
            }
        }
        return result;     //checkYourself方法返回result
    }
}

DotComBust类

import java.util.ArrayList;

public class DotComBust {
    private GameHelper helper = new GameHelper();
    private ArrayList<DotCom> dotComList = new ArrayList<DotCom>();
    private int numOfGuesses = 0;

    private void setUpGame(){
        DotCom one = new DotCom();
        one.setName("dog.com");
        DotCom two = new DotCom();
        two.setName("ac.com");
        DotCom three = new DotCom();
        three.setName("bili.com");
        dotComList.add(one);
        dotComList.add(two);
        dotComList.add(three);   //初始化,命名及加入ArrayList

        System.out.println("kaishi");

        for(DotCom dotComToSet : dotComList){
            ArrayList<String> newLocation = helper.placeDotCom(3);
            dotComToSet.setLocationCells(newLocation);
        }
    }

    private void startPlaying(){
        while(!dotComList.isEmpty()){
            String userGuess = helper.getUserInput("enter a guess");
            checkUserGuess(userGuess);           //调用checkUserGuess方法检查输入
        }
        finishGame();
    }
    private void checkUserGuess(String userGuess){
        numOfGuesses++;
        String result = "miss";
        for(DotCom dotComToTest :dotComList){
            result = dotComToTest.checkYourself(userGuess);           //调用checkYourself方法
            if (result.equals("hit")){
                break;                      //checkYourself方法返回result为hit,则输出结果
            }
            if(result.equals("kill")){
                dotComList.remove(dotComToTest);
                break;                    //checkYourself方法返回result为kill,从DotComList移除DotComToTest
            }
        }
        System.out.println(result);
    }

    private void finishGame(){
        System.out.println("你赢了");
        if(numOfGuesses <= 18){
            System.out.println("一共"+numOfGuesses+"次完成游戏");
        }else{
            System.out.println("用时有点久");
        }
    }

    public static void main (String[] args){
        DotComBust game = new DotComBust();
        game.setUpGame();
        game.startPlaying();
    }
}

GameHelper类(该类主要用处为设置DotCom位置)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

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.print(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("IOException: " + e);
         }
         return inputLine.toLowerCase();
      }



     public ArrayList<String> placeDotCom(int comSize) {                 // line 19
        ArrayList<String> alphaCells = new ArrayList<String>();
        String [] alphacoords = new String [comSize];      // holds 'f6' type coords
        String temp = null;                                // temporary String for concat
        int [] coords = new int[comSize];                  // current candidate coords
        int attempts = 0;                                  // current attempts counter
        boolean success = false;                           // flag = found a good location ?
        int location = 0;                                  // current starting location

        comCount++;                                        // nth dot com to place
        int incr = 1;                                      // set horizontal increment
        if ((comCount % 2) == 1) {                         // if odd dot com  (place vertically)
          incr = gridLength;                               // set vertical increment
        }

        while ( !success & attempts++ < 200 ) {             // main search loop  (32)
        location = (int) (Math.random() * gridSize);      // get random starting point
            //System.out.print(" try " + location);
        int x = 0;                                        // nth position in dotcom to place
            success = true;                                 // assume success
            while (success && x < comSize) {                // look for adjacent unused spots
              if (grid[location] == 0) {                    // if not already used
                 coords[x++] = location;                    // save location
                 location += incr;                          // try 'next' adjacent
                 if (location >= gridSize){                 // out of bounds - 'bottom'
                   success = false;                         // failure
                 }
                 if (x>0 & (location % gridLength == 0)) {  // out of bounds - right edge
                   success = false;                         // failure
                 }
              } else {                                      // found already used location
                  // System.out.print(" used " + location);  
                  success = false;                          // failure
              }
            }
        }                                                   // end while

        int x = 0;                                          // turn good location into alpha coords
        int row = 0;
        int column = 0;
        // System.out.println("\n");
        while (x < comSize) {
          grid[coords[x]] = 1;                              // mark master grid pts. as 'used'
          row = (int) (coords[x] / gridLength);             // get row value
          column = coords[x] % gridLength;                  // get numeric column value
          temp = String.valueOf(alphabet.charAt(column));   // convert to alpha

          alphaCells.add(temp.concat(Integer.toString(row)));
          x++;

          // System.out.print("  coord "+x+" = " + alphaCells.get(x-1));

        }
        // System.out.println("\n");

        return alphaCells;
       }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值