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