C, PHP, VB, .NET

Дневникът на Филип Петров


* Игра на Камък-ножица-хартия с Netbeans

Публикувано на 23 април 2018 в раздел УКИ.

Ще направим популярната игра Камък-ножица-хартия. В началото представения дизайн прави комбинация между множество BorderLayout и FlowLayout панели. Не е задължително да е толкова сложен - може да се опрости.

Сега ще реализираме действията на бутоните "Камък", "Ножица" и "Хартия". Това, което трябва да направят, е да поставят картинка като съответен знак на мястото на "uM" и да го направят видимо. След това трябва да скрият текста "Натисни бутон, за да играеш", да направи бутоните "Камък", "Ножица" и "Хартия" неактивни и да покаже бутона "Виж какво избра компрютъра". Ще използваме следните картинки:

Първо добавете картинките като ресурси в пакета:

След това ще направим глобален масив (член-променлива) с тези иконки. Освен това в началото двата текста "uM" и "cM", както и бутона "Виж какво избра компютъра" трябва да са невидими, т.е. в центъра на екрана трябва да е видим единствено стуса "Натисни бутон, за да играеш". Ето крайния код:

ImageIcon[] icons = new ImageIcon[3];
public RPS() {
 initComponents();
 userMove.setVisible(false);
 computerMove.setVisible(false);
 btnViewComputerMove.setVisible(false);
 icons[0] = new ImageIcon(RPS.class.getResource("rock.png"), "rock");
 icons[1] = new ImageIcon(RPS.class.getResource("paper.png"), "paper");
 icons[2] = new ImageIcon(RPS.class.getResource("scissors.png"), "scissors");
}

Вторият аргумент на конструктора на ImageIcon e описание на иконката, което се показва с нейния метод toString(). Именно него ще запомним, за да може впоследствие да го използваме, за да проверим какъв ход е направил играча.

След това реализирайте действията на бутоните:

private void rockBtnActionPerformed(java.awt.event.ActionEvent evt) { 
 doUserMove(0);
}

private void paperBtnActionPerformed(java.awt.event.ActionEvent evt) { 
 doUserMove(1);
}

private void scissorsBtnActionPerformed(java.awt.event.ActionEvent evt) { 
 doUserMove(2);
}

void doUserMove(int move) {
 rockBtn.setEnabled(false);
 scissorsBtn.setEnabled(false);
 paperBtn.setEnabled(false);
 computerMove.setVisible(false);
 userMove.setText("");
 userMove.setIcon(icons[move]);
 userMove.setVisible(true);
 statusLabel.setVisible(false);
 btnViewComputerMove.setVisible(true);
}

Сега ще реализираме действието на бутона "Виж какво избра компютъра". При него може просто да показваме картинката, но вместо това ще изберем да направим кратка анимация, с която да заблудим човека, че компютъра избира нещо.

private void btnViewComputerMoveActionPerformed(java.awt.event.ActionEvent evt) { 
 computerMove.setText("");
 computerMove.setVisible(true);
 btnViewComputerMove.setVisible(false);
 
 Random r = new Random();
 int choice = r.nextInt(3);
 Timer t = new Timer(100, new ActionListener() {
    int counter = 0;

    @Override
    public void actionPerformed(ActionEvent ae) {
       computerMove.setIcon(icons[counter % 3]);
       counter++;
       if (counter == 10 + choice) {
          updateResultsAndShowStatus(choice);
          statusLabel.setVisible(true);
          ((Timer) ae.getSource()).stop();
       }
    }
 });
 t.start();
}
void updateResultsAndShowStatus(int computerChoice) {
 // Кой-откого губи
 String[][] beats = {{"rock", "paper"},
                     {"paper", "scissors"},
                     {"scissors", "rock"}
                    };
 String uM = userMove.getIcon().toString();

 if (uM.equals(beats[computerChoice][0])) {
    statusLabel.setText("Равен резултат!");
 } else if (uM.matches(beats[computerChoice][1])) {
    statusLabel.setText("Ти спечели!");
    int currentUserScore = Integer.parseInt(userScore.getText());
    currentUserScore++;
    userScore.setText(""+currentUserScore);
 } else {
    statusLabel.setText("Съжалявам, загуби!");
    int currentComputerScore = Integer.parseInt(computerScore.getText());
    currentComputerScore++;
    computerScore.setText(""+currentComputerScore);
 }
 
 rockBtn.setEnabled(true);
 scissorsBtn.setEnabled(true);
 paperBtn.setEnabled(true);
}

С това програмата е завършена. Ако желаете, свалете я като готов проект.

 



Добави коментар

Адресът на електронната поща няма да се публикува


*