* Игра на Камък-ножица-хартия с 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);
}
С това програмата е завършена. Ако желаете, свалете я като готов проект.

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