1.14 Headfirstjava第五章 简单游戏代码

书上的设计过程:

流程图 --> 找出需要的类 --> 设计类的实例变量和方法 --> 编写方法伪代码 --> 编写测试码 --> 实现类 --> 测试和改错

编写一个类之前可以先写其测试类TestDriver ,然后依据测试类写出具体类

这个游戏有 SimpleDotCom ,SimpleDotComGame ,GameHelper 三个类,将三个类编译出来的.class文件放在同一目录下就能通过SimpleDotCom 的main( )方法来调用其他class来进行游戏

 

SimpleDotComTestDriver.java:

class SimpleDotCom{
    
    int[] locationCells;
    int numOfHits = 0;
    
    public void setLocationCells( int[] locs){
        locationCells = locs;
    }
    
    public String checkYourself( String stringGuess ){
        int guess = Integer.parseInt(stringGuess);
        String result = "miss";
        
        for(int cell : locationCells){
            if( guess == cell ){
                result = "hit";
                numOfHits++;
                break;
            }
        }
        
        if( numOfHits == locationCells.length ){
            result = "kill";
        }
        System.out.println(result);
        return result;
    }
    
}
// SimpleDotCom 的测试码
public class SimpleDotComTestDriver{
    public static void main( String[] args ){
        SimpleDotCom dot = new SimpleDotCom();
        
        int [] locations = {2,3,4};
        dot.setLocationCells(locations);
        
        String userGuess = "2";
        String result = dot.checkYourself(userGuess);
        String testResult = "failed";
        if( result.equals("hit") ){
            testResult = "passed";
        }
        System.out.println( testResult );
    }    
}

 

SimpleDotCom.java:

public class SimpleDotCom{
    
    //实例变量 
    int[] locationCells;
    int numOfHits = 0;
    
    //setter方法
    public void setLocationCells( int[] locs){
        locationCells = locs;
    }
    
    //击中结果判定方法
    public String checkYourself( String stringGuess ){
        int guess = Integer.parseInt(stringGuess);
        String result = "miss";
        
        for(int cell : locationCells){
            if( guess == cell ){
                result = "hit";
                numOfHits++;
                break;
            }
        }
        
        if( numOfHits == locationCells.length ){
            result = "kill";
        }
        System.out.println(result);
        return result;
    }
    
    //main
    public static void main( String[] args ){}
}

 

GameHelper.java:

import java.io.*;
public class GameHelper{
    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;
    }
    
     public static void main(String[] args){}
}

 

SimpleDotComGame.java:

public class SimpleDotComGame{
    
    public static void main( String[] args){
        int numOfGuess = 0;
        //进行游戏交互提示
        GameHelper helper = new GameHelper();
        
        //创建DotCom对象
        SimpleDotCom theDotCom = new SimpleDotCom();
        int randomNum = (int)(Math.random()*5);
        //初始化DotCom对象
        int[] locations = {randomNum ,randomNum+1 ,randomNum+2};
        theDotCom.setLocationCells(locations);
        boolean isAlive = true;
        //游戏判断过程
        while( isAlive==true ){
            String guess = helper.getUserInput("enter a number");
            String result = theDotCom.checkYourself(guess);
            numOfGuess++;
            if( result.equals("kill")){
                isAlive = false;
                System.out.println("You took "+numOfGuess+" guesses");
            }
        }
    }
}
posted @ 2020-01-15 16:42  易如鱼  阅读(486)  评论(0编辑  收藏  举报