首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于控制台的扫雷游戏

用于控制台的扫雷游戏
EN

Code Review用户
提问于 2019-11-01 12:07:28
回答 2查看 906关注 0票数 1

你可以设置任何大小的战场和任何数量的炸弹。我想我又得到了一个非常灵活的程序(Tic脚趾游戏,用于控制台)。你对密码有什么看法?我想知道我在程序设计中是否犯了错误。

骨架:

代码语言:javascript
复制
public class Minesweeper {
    public static void play(){
        final int HOWMANYBOMBS;
        boolean isItWin;
        Area[][] area;
        final Scanner SCANNER = new Scanner(System.in);
        final String greeting = "Hi, lets play minesweeper!";

        System.out.println(greeting);
        area = pickLengthsOfArea(SCANNER);
        HOWMANYBOMBS = getHowManyBombs(area,SCANNER);
        System.out.println("hi");
        fillArea(area,HOWMANYBOMBS);

        while(true) {
            printPole(area);
            if(playerTurnsAndIsPlayersTurnInBomb(area,SCANNER)) {
                isItWin=false;
                break;
            }
            if(weHaveNotGotAnyEmptyAreaThatNotCheckedAndWeMarkedOnlyBombs(area)) {
                isItWin=true;
                break;
            }
        }
        if(isItWin) {
            System.out.println("U won!");
        }
        else {
            System.out.println("Defieat!");
        }
    }

    private static boolean weHaveNotGotAnyEmptyAreaThatNotCheckedAndWeMarkedOnlyBombs(Area[][] area) {}

    private static boolean playerTurnsAndIsPlayersTurnInBomb(Area[][] area,Scanner scanner) {}

    private static void openAllAround(int x, int y, Area[][] area,ArrayList weOpenedThese) { // do you know another implementation?
        AreaWithXandY[] areasAround = getAllAreasAroundWithTheirXandY(area,x,y);
        for(AreaWithXandY a:areasAround) {
            if(!weOpenedThese.contains(a)) {
                a.getArea().setStatusOfArea(StatusOfArea.OPENED);
                weOpenedThese.add(a);
                if(a.getArea().getValueOfArea()==ValueOfArea.NOONEBOMBAROUND) {
                    openAllAround(a.getX(),a.getY(),area,weOpenedThese);
                }
            }
        }
    }

    private static void printPole(Area[][] area) {}

    private static void fillArea(Area[][] area, int howManyBombs) {
        fillAreaWithBombs(area,howManyBombs);
        fillAreaWithEmptyArea(area);
    }
    private static void fillAreaWithEmptyArea(Area[][] area) {}
    private static Area[] getAllAreasAround(Area[][] area,int x,int y) {}
    private static AreaWithXandY[] getAllAreasAroundWithTheirXandY(Area[][] area,int x,int y) {}
    private static void fillAreaWithBombs(Area[][] area, int howManyBombs) {}
    private static int getHowManyBombs(Area[][] area, Scanner scanner) {}

    private static Area[][] pickLengthsOfArea(Scanner scanner) {}

    private static boolean isXandYIn(int turnX,int turnY, Area[][] area) {}

    public static boolean isNumeric(String strNum) {}
}
class Area{
    private final ValueOfArea valueOfArea;

    private StatusOfArea statusOfArea;

    {
        statusOfArea = StatusOfArea.CLOSED;
    }
    Area(ValueOfArea valueOfArea){
        this.valueOfArea = valueOfArea;
    }
    ValueOfArea getValueOfArea() {
        return valueOfArea;
    }
    StatusOfArea getStatusOfArea() {
        return statusOfArea;
    }
    void setStatusOfArea(StatusOfArea statusOfArea) {
        this.statusOfArea = statusOfArea;
    }
}
class AreaWithXandY{
    private int x,y;
    Area area;

    AreaWithXandY(int x,int y,Area area){
        this.area = area;
        this.x = x;
        this.y = y;
    }
    int getX() {
        return x;
    }
    int getY() {
        return y;
    }
    Area getArea() {
        return area;
    }
    @Override
    public boolean equals(Object obj) {
        if(obj==null) {
            return false;
        }
        if(false==(obj instanceof AreaWithXandY)) {
            return false;
        }
        AreaWithXandY object = (AreaWithXandY) obj;
        if(object.getX()==x && object.getY()==y) { //its enouth
            return true;
        }
        else {
            return false;
        }
    }
}
enum StatusOfArea{
    MARKEDASBOMB,OPENED,CLOSED
}
enum ValueOfArea{
    BOMB("@"),
    NOONEBOMBAROUND("0"),ONEBOMBAROUND("1"),TWOBOMBAROUND("2"),TREEBOMBAROUND("3"),FOURBOMBAROUND("4"),FIVEBOMBAROUND("5"),SIXBOMBAROUND("6"),SEVENBOMBAROUND("7"),EIGHTBOMBAROUND("8");
    private String icon;
    ValueOfArea(String icon){
        this.icon = icon;
    }
    String getIcon() {
        return icon;
    }
    static ValueOfArea getValueOfAreaByString(String value) {
        ValueOfArea[] values = ValueOfArea.values();
        for(int i=0;i

完整代码:

代码语言:javascript
复制
public class Minesweeper {
    public static void play(){
        final int HOWMANYBOMBS;
        boolean isItWin;
        Area[][] area;
        final Scanner SCANNER = new Scanner(System.in);
        final String greeting = "Hi, lets play minesweeper!";

        System.out.println(greeting);
        area = pickLengthsOfArea(SCANNER);
        HOWMANYBOMBS = getHowManyBombs(area,SCANNER);
        System.out.println("hi");
        fillArea(area,HOWMANYBOMBS);

        while(true) {
            printPole(area);
            if(playerTurnsAndIsPlayersTurnInBomb(area,SCANNER)) {
                isItWin=false;
                break;
            }
            if(weHaveNotGotAnyEmptyAreaThatNotCheckedAndWeMarkedOnlyBombs(area)) {
                isItWin=true;
                break;
            }
        }
        if(isItWin) {
            System.out.println("U won!");
        }
        else {
            System.out.println("Defieat!");
        }
    }

    private static boolean weHaveNotGotAnyEmptyAreaThatNotCheckedAndWeMarkedOnlyBombs(Area[][] area) {
        for(int y = 0;y());
                        }
                        return false;
                    }
                }
                else { // mark
                    area[y][x].setStatusOfArea(StatusOfArea.MARKEDASBOMB);
                    return false;
                }

            }

        }
    }

    private static void openAllAround(int x, int y, Area[][] area,ArrayList weOpenedThese) {
        AreaWithXandY[] areasAround = getAllAreasAroundWithTheirXandY(area,x,y);
        for(AreaWithXandY a:areasAround) {
            if(!weOpenedThese.contains(a)) {
                a.getArea().setStatusOfArea(StatusOfArea.OPENED);
                weOpenedThese.add(a);
                if(a.getArea().getValueOfArea()==ValueOfArea.NOONEBOMBAROUND) {
                    openAllAround(a.getX(),a.getY(),area,weOpenedThese);
                }
            }
        }
    }

    private static void printPole(Area[][] area) {
        System.out.println();
        for(int y = 0;y listOfAllNumbers = new ArrayList<>(area.length*area[0].length);
        for(int i=0;i0!");
            }
            else {
                return new Area[Integer.parseInt(turnXandY[0])][Integer.parseInt(turnXandY[1])];
            }
        }
    }

    private static boolean isXandYIn(int turnX,int turnY, Area[][] area) {
        if(turnX<0 || area[0].length<=turnX) {
            return false;
        }
        if(turnY<0 || area.length<=turnY) {
            return false;
        }
        return true;
    }

    public static boolean isNumeric(String strNum) {
        try {
            Integer.parseInt(strNum);
        } catch (NumberFormatException | NullPointerException nfe) {
            return false;
        }
        return true;
    }
}
class Area{
    private final ValueOfArea valueOfArea;

    private StatusOfArea statusOfArea;

    {
        statusOfArea = StatusOfArea.CLOSED;
    }
    Area(ValueOfArea valueOfArea){
        this.valueOfArea = valueOfArea;
    }
    ValueOfArea getValueOfArea() {
        return valueOfArea;
    }
    StatusOfArea getStatusOfArea() {
        return statusOfArea;
    }
    void setStatusOfArea(StatusOfArea statusOfArea) {
        this.statusOfArea = statusOfArea;
    }
}
class AreaWithXandY{
    private int x,y;
    Area area;

    AreaWithXandY(int x,int y,Area area){
        this.area = area;
        this.x = x;
        this.y = y;
    }
    int getX() {
        return x;
    }
    int getY() {
        return y;
    }
    Area getArea() {
        return area;
    }
    @Override
    public boolean equals(Object obj) {
        if(obj==null) {
            return false;
        }
        if(false==(obj instanceof AreaWithXandY)) {
            return false;
        }
        AreaWithXandY object = (AreaWithXandY) obj;
        if(object.getX()==x && object.getY()==y) { //its enouth
            return true;
        }
        else {
            return false;
        }
    }
}
enum StatusOfArea{
    MARKEDASBOMB,OPENED,CLOSED
}
enum ValueOfArea{
    BOMB("@"),
    NOONEBOMBAROUND("0"),ONEBOMBAROUND("1"),TWOBOMBAROUND("2"),TREEBOMBAROUND("3"),FOURBOMBAROUND("4"),FIVEBOMBAROUND("5"),SIXBOMBAROUND("6"),SEVENBOMBAROUND("7"),EIGHTBOMBAROUND("8");
    private String icon;
    ValueOfArea(String icon){
        this.icon = icon;
    }
    String getIcon() {
        return icon;
    }
    static ValueOfArea getValueOfAreaByString(String value) {
        ValueOfArea[] values = ValueOfArea.values();
        for(int i=0;i
EN

回答 2

Code Review用户

回答已采纳

发布于 2019-11-02 21:39:05

票数 2
EN

Code Review用户

发布于 2019-11-03 21:43:03

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/231668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档