zoukankan      html  css  js  c++  java
  • 攻击DotCom小游戏

    许久都没写博客了,些许是前段时间有些懈怠,今天来写博客,想记录下做过的事情,怕以后电脑换了,以前做的小项目也跟着丢了,总结下最近做的一个小游戏:

    游戏目的:建立一个7X7的网格,选择其中的连续的三格来作为一个目标,一共有3个目标,对每次的猜数,给一个hit,miss,kill,如果三个目标都杀完了,返回猜测次数,给个分数

    游戏核心:类之间的交流  private对属性设置后部分代码的重构   ArrayList的使用

    要求:main()作为一个启动程序  基本上所有的代码都放到各类中

    一个类里面:属性propety和方法method 

    property method main 三者居然就构建了java的世界 佩服OO

    headfirst中提及极限编程:意在对课题有基本了解后,先写只重功能的测试码,却不去想怎么实现,再去一一写各类,在我写这个游戏时,确也不只一次的先联想到测试码,而后再去想各类的编写,竟是如此自然

    注意:这其中却遇到了一个for循环,在逻辑上一定会对res变量赋值,愚蠢的电脑却只有在运行的时候才能知道,可是由于res的赋值在for循环中,因此编译器只能报错

    因此如果以后遇到这种情况姑且给变量赋值,因为既然逻辑上会被赋值,想必也会更改他的值,我们就姑且打消编译器的疑虑吧,啊哈哈哈哈

    Game类:

    package twoClass;
    import java.util.ArrayList;
    
    class Game{
        int numOfGuess = 0;
        ArrayList<DotCom> ThreeDotCom; 
        GameHelper helper;
        
        void SetUp(){
            DotCom [] Three = new DotCom[3];
            helper = new GameHelper();
            ArrayList<DotCom> tmp= new ArrayList<DotCom>();
            for(int i = 0; i < 3; i++){
                Three[i] = new DotCom();
            }
            Three[0].nameSet("pet.com");
            Three[1].nameSet("amaoza.com");
            Three[2].nameSet("tmall.com");
            for(int i = 0; i < 3; i++){
                tmp.add(Three[i]);
            }
            ThreeDotCom = tmp;
            for(DotCom Cell: ThreeDotCom){
                ArrayList<String> generator = helper.placeDotCom(3);
                Cell.setLocation(generator);
            }
        }
        void startPlaying(){
            String guess;
            String res = " ";
            while(!ThreeDotCom.isEmpty()){
            guess = helper.getUserInput("Enter a num:");
            numOfGuess++;
            for(DotCom Cell : ThreeDotCom){
                res = Cell.checkUserGuess(guess);
                if(res == "kill"){
                    ThreeDotCom.remove(Cell);
                }
                if(res != "miss")
                    break;
                }
            System.out.println(res);
            }
    }
    
        void finishGame(){
            System.out.println("you have sunk three dots by " + numOfGuess + "guess");
        }
        public static void main(String [] args){
            Game myGame = new Game();
            myGame.SetUp();
            myGame.startPlaying();
            myGame.finishGame();
        }
    }
    View Code

    DotCom类:

    package twoClass;
    
    import java.util.ArrayList;
    
    public class DotCom{
        private ArrayList<String> LocCell;
        private String name;
        
        public void nameSet(String webName){
            name = webName;
        }
        
        public void setLocation(ArrayList<String> Loc){
            LocCell = Loc;
        }
        
        public String checkUserGuess(String guess){
            String res = "miss";
            if(LocCell.contains(guess)){
                res = "hit";
                LocCell.remove(guess);
                if(LocCell.isEmpty())
                    res = "kill";
            }
            if(res == "kill"){
                System.out.println("ouch! You have sunk " + name);
            }
            return res;
        }
        
    }
    View Code

    以及搬来的砖:

    package twoClass;
    import java.util.*;
    import java.io.*;
    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;
        
        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 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;
        }
        
    }
    View Code
  • 相关阅读:
    golang删除数组某个元素
    golang用通道实现信号量,控制并发个数
    什么是ScaleIO中的forwards rebuild和backwards rebuild?
    SQL Server中的database checkpoint
    如何将thick provision lazy zeroed的VMDK文件转换为thick provision eager zeroed?
    LoadTestAgentResultsLateException in VS2010
    SQL Server Instance无法启动了, 因为TempDB所在的分区没有了, 怎么办?
    VMware vCenter中, 如何辩认虚机上Raw Device Mapping过了的一块物理磁盘?
    SQL Server AlwaysOn Setup Step-By-Step Guide
    TPC-E在populate测试Database时需要注意的一些事项
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4881031.html
Copyright © 2011-2022 走看看