你可以设置任何大小的战场和任何数量的炸弹。我想我又得到了一个非常灵活的程序(Tic脚趾游戏,用于控制台)。你对密码有什么看法?我想知道我在程序设计中是否犯了错误。
骨架:
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完整代码:
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发布于 2019-11-02 21:39:05
发布于 2019-11-03 21:43:03
https://codereview.stackexchange.com/questions/231668
复制相似问题