@Geoff
Пишу (пока) индусский код

Как организовать приведенный кусок кода в метод?

Доброго вечерa всем! Ребята, очень прошу прощения за мой индусский код. К сожалению не имею образования разработчика и спросить банально не у кого.

Разрабатываю крайне простой вариант сапера. Цель - найти 2 бомбы на 8-ми клетках.

Каждый раз после успешного шага возникает потребность перерисовать поле.
Делаю это кодом приведенным ниже:
int[] pole = {0,1,2,3,4};
        String[] poleOne = {"A","X","X","X","X"};
        int [] poleOneInt = {0, 0, 0, 0, 0};
        String[] poleTwo = {"B","X","X","X","X"};
        int [] poleTwoInt = {0, 0, 0, 0, 0};
        System.out.println(pole[0] + "  " + pole[1] + "  " + pole[2] + "  " + pole [3] + "  " + pole[4]);
        System.out.println(poleOne[0] + "  " + poleOne[1] + "  " + poleOne[2] + "  " + poleOne[3] + "  " + poleOne[4]);
        System.out.println(poleTwo[0] + "  " + poleTwo[1] + "  " + poleTwo[2] + "  " + poleTwo[3] + "  " + poleTwo[4]);


Из условия логично, что этот код мне нужно будет вывести 7 раз (5 раз с изменениями. Если на выбранной клетке бомбы нет, я изменяю символ "Х" на " " ).
Проблема в том, что я не могу организовать его в метод. Делал все по видеоурокам и статьям, но как бы не изменял получаю ошибку. Буду ну очень признателен если подскажете, как это сделать. (Буду также рад советам как упростить программу).

Полный код программы:
package com.company;
import java.lang.invoke.SwitchPoint;
import java.util.Scanner;
import java.util.Random;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {

        int[] pole = {0,1,2,3,4};
        String[] poleOne = {"A","X","X","X","X"};
        int [] poleOneInt = {0, 0, 0, 0, 0};
        String[] poleTwo = {"B","X","X","X","X"};
        int [] poleTwoInt = {0, 0, 0, 0, 0};
        System.out.println(pole[0] + "  " + pole[1] + "  " + pole[2] + "  " + pole [3] + "  " + pole[4]);
        System.out.println(poleOne[0] + "  " + poleOne[1] + "  " + poleOne[2] + "  " + poleOne[3] + "  " + poleOne[4]);
        System.out.println(poleTwo[0] + "  " + poleTwo[1] + "  " + poleTwo[2] + "  " + poleTwo[3] + "  " + poleTwo[4]);

        Random rbombOne = new Random();
        int bombOne = rbombOne.nextInt(4)+1;
        poleOneInt [bombOne] = bombOne;
        //проверка где бомба, для отладки
        System.out.println("бомба в " + bombOne);

        Random rbombTwo = new Random();
        int bombTwo = rbombTwo.nextInt(4)+1;
        poleTwoInt [bombTwo] = bombTwo;
        //проверка где бомба, для отладки
        System.out.println("бомба в " + bombTwo);

        System.out.println("Введите строку в формате А или B: ");

        Scanner sPole = new Scanner(System.in);
        String scanLetter = sPole.next();

        switch (scanLetter) {
            case "A":
                System.out.println("Введите номер столбца от 1 до 5: ");
                Scanner sNum = new Scanner(System.in);
                int scanNum = sNum.nextInt();
                if (poleOneInt[scanNum] > 0 ){
                   System.out.println("Booooooom! You Lose");}
                   poleOne[scanNum] = " ";
                    break;
            case "B":
                System.out.println("Введите номер столбца от 1 до 5: ");
                Scanner s2Num = new Scanner(System.in);
                int scan2Num = s2Num.nextInt();
                if (poleTwoInt[scan2Num] > 0 ){
                    System.out.println("Booooooom! You Lose");}
                    poleTwo[scan2Num] = " ";
                    break;
                }

        System.out.println(pole[0] + "  " + pole[1] + "  " + pole[2] + "  " + pole [3] + "  " + pole[4]);
        System.out.println(poleOne[0] + "  " + poleOne[1] + "  " + poleOne[2] + "  " + poleOne[3] + "  " + poleOne[4]);
        System.out.println(poleTwo[0] + "  " + poleTwo[1] + "  " + poleTwo[2] + "  " + poleTwo[3] + "  " + poleTwo[4]);

        }

    }
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
zolt85
@zolt85
Программист
Глядя на исходники понятно, что игра длится ровно один цикл и если игрок не наткнулся на бомбу, нет возможности продолжить игру. Если я все правильно понял, то текущий код можно модифицировать так:
int[] pole = {0,1,2,3,4};
        String[] poleOne = {"A","X","X","X","X"};
        int [] poleOneInt = {0, 0, 0, 0, 0};
        String[] poleTwo = {"B","X","X","X","X"};
        int [] poleTwoInt = {0, 0, 0, 0, 0};
        System.out.println(pole[0] + "  " + pole[1] + "  " + pole[2] + "  " + pole [3] + "  " + pole[4]);
        System.out.println(poleOne[0] + "  " + poleOne[1] + "  " + poleOne[2] + "  " + poleOne[3] + "  " + poleOne[4]);
        System.out.println(poleTwo[0] + "  " + poleTwo[1] + "  " + poleTwo[2] + "  " + poleTwo[3] + "  " + poleTwo[4]);

        Random rbombOne = new Random();
        int bombOne = rbombOne.nextInt(4)+1;
        poleOneInt [bombOne] = bombOne;
        //проверка где бомба, для отладки
        System.out.println("бомба в " + bombOne);

        Random rbombTwo = new Random();
        int bombTwo = rbombTwo.nextInt(4)+1;
        poleTwoInt [bombTwo] = bombTwo;
        //проверка где бомба, для отладки
        System.out.println("бомба в " + bombTwo);

        boolean runs = true;
        while(running) {
            System.out.println("Введите строку в формате А или B: ");

            Scanner sPole = new Scanner(System.in);
            String scanLetter = sPole.next();

            switch (scanLetter) {
                case "A":
                    System.out.println("Введите номер столбца от 1 до 5: ");
                    Scanner sNum = new Scanner(System.in);
                    int scanNum = sNum.nextInt();
                    if (poleOneInt[scanNum] > 0 ){
                        System.out.println("Booooooom! You Lose");
                        runs = false;
                    }
                    poleOne[scanNum] = " ";
                    break;
                case "B":
                    System.out.println("Введите номер столбца от 1 до 5: ");
                    Scanner s2Num = new Scanner(System.in);
                    int scan2Num = s2Num.nextInt();
                    if (poleTwoInt[scan2Num] > 0 ){
                        System.out.println("Booooooom! You Lose");
                        runs = false;
                    }
                    poleTwo[scan2Num] = " ";
                    break;
                default: break;
            }

            System.out.println(pole[0] + "  " + pole[1] + "  " + pole[2] + "  " + pole [3] + "  " + pole[4]);
            System.out.println(poleOne[0] + "  " + poleOne[1] + "  " + poleOne[2] + "  " + poleOne[3] + "  " + poleOne[4]);
            System.out.println(poleTwo[0] + "  " + poleTwo[1] + "  " + poleTwo[2] + "  " + poleTwo[3] + "  " + poleTwo[4]);

        }

Если присмотреться, то мы весь игровой процесс заворачиваем в цикл while, который прекратится после того, как переменная runs примет значение false. В данном конкретном случае runs примет значение false, если игрок введет координаты поля с бомбой. Этот код не оптимален, и не претендует на единственно возможный вариант решения. И в нем не предусмотрен вариант, когда игрок раскроет все поля без бомб, т.е. выиграет. Это уже оставлю на Ваше усмотрение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы