猜數字游戲GUI版(GuessNumberGUI)
案例簡介
猜數字游戲:讓玩家在給定次數內猜測指定范圍內的數字,若猜測的數字與游戲隨機生成的數字相等,玩家獲勝,詢問玩家是否再玩一次。若再玩一次,重復以上過程,若不玩,游戲結束。若未猜中,游戲提示玩家猜測數字與游戲隨機生成數字之間的大小關系,玩家繼續猜測,直到猜中或猜測機會用完為止。GUI版的游戲可在Win10系統運行,其他系統尚未經過測試。
案例使用建議
- 講解:通過講解演示此案例的實現過程教授學生綜合應用JAVA面向對象程序設計基礎知識和技能。此使用方式需要教師將實現步驟與邏輯梳理清楚,並且能在講解過程中突出涉及到的知識點與技能點,最好在講解的最后對涉及的知識點與技能點進行總結歸納。建議采用此方式的過程中盡量多提案例相關知識點相關的問題,以便學生可以參與課堂,幫助學生回想相關知識點與技能點。
- 分析:通過講解演示如何分析設計此案例的實現方案幫助學生學習如何設計程序。此使用方式需要教師提前梳理清楚開發人員分析設計程序的過程並將其設計為授課過程,在講解過程中應循循善誘、多提問,引導學生自己思考設計出程序的實現方案。如,通過演示游戲並提出“大家覺得這個游戲具有哪些功能?”,幫助學生學會軟件功能需求分析。
- 填補:通過刪除部分代碼讓學生補全的方式考察學生對GUI編程、面向對象程序設計的掌握情況,同時給予學生練習GUI編程和面向對象程序設計的掌握情況。如果刪除很少的代碼,題型可以是程序閱讀填空題。如果刪除的代碼為邏輯完整的整塊代碼,則可以考察學生對代碼整體的理解和鍛煉學生自主設計微型程序的能力。教師還可以通過添加注釋的方式幫助學生完成任務。如:刪除案例中 再玩一次 相關功能並添加注釋說明后讓學生完成。
- 擴展:通過布置擴展任務為學生提供練習GUI編程以及JAVA面向對象程序設計基礎知識與技能的機會。如:添加代碼使得游戲難度加大,使得玩家每次游戲猜測的數字范圍是隨機生成的,如:猜測50-150,或者49-149。
涉及知識點與技能點
- GUI編程基礎知識與方法;
- Swing和AWT中的常用組件及其方法,如:JFrame、JLabel、JButton、ActionListener等;
- 繼承;
- 構造方法;
- 類的實例化;
- 成員變量的作用域;
- 方法的調用;
- 面向事件編程基本方法;
- 事件以及事件監聽器;
- 匿名內部類;
- 接口實現;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class GuessNumberGUI extends JFrame{
private JTextField txtGuess;
private JLabel lblOutput;
private JButton btnGuess;
private JButton btnPlayAgain;
private int theNumber;
private int numberOfGames;
public void checkGuess() {
String guessText = txtGuess.getText();
String message = "";
try {
int guess = Integer.parseInt(guessText);
if(guess < theNumber) {
message = guess + "太小了!再猜一次!還剩" + (numberOfGames-1) + "次機會!";
}else if( guess > theNumber) {
message = guess + "太大了!再猜一次!還剩" + (numberOfGames-1) + "次機會!";
}else {
message = guess + "就是那個數字!你猜對啦!讓我們再玩兒一遍吧!";
btnPlayAgain.setVisible(true);
gameOver();
return;
}
numberOfGames--;
if (numberOfGames <= 0){
message = guess + "不對,沒有機會了,正確答案是:" + theNumber;
btnPlayAgain.setVisible(true);
gameOver();
}
} catch (Exception e) {
message = "請輸入1-100之間的整數!還剩" + numberOfGames + "次機會!";
} finally {
lblOutput.setText(message);
txtGuess.requestFocus();
txtGuess.selectAll();
}
}
public void newGame() {
theNumber = (int)(Math.random() * 100 + 1);
numberOfGames = 7; //第一次執行了一次初始化值為6
btnGuess.setEnabled(true);
txtGuess.setEnabled(true);
}
//游戲結束使猜測按鈕和輸入框不可選中
public void gameOver(){
btnGuess.setEnabled(false);
txtGuess.setEnabled(false);
}
public GuessNumberGUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("JAVA\u731C\u6570\u5B57");
getContentPane().setLayout(null);
JLabel lblNewLabel = new JLabel("JAVA\u731C\u6570\u5B57");
lblNewLabel.setFont(new Font("宋體", Font.BOLD, 15));
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel.setBounds(159, 27, 116, 18);
getContentPane().add(lblNewLabel);
JLabel lblNewLabel_1 = new JLabel("\u8BF7\u731C\u4E00\u4E2A1-100\u4E4B\u95F4\u7684\u6570\u5B57\uFF1A");
lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
lblNewLabel_1.setBounds(26, 72, 213, 15);
getContentPane().add(lblNewLabel_1);
txtGuess = new JTextField();
txtGuess.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
checkGuess();
}
});
txtGuess.setBounds(250, 69, 66, 21);
getContentPane().add(txtGuess);
txtGuess.setColumns(10);
btnGuess = new JButton("猜一下!");
btnGuess.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
checkGuess();
}
});
btnGuess.setBounds(170, 114, 93, 23);
getContentPane().add(btnGuess);
lblOutput = new JLabel("請在上面輸入框中輸入數字並點擊猜一下!現在你有7次機會");
lblOutput.setHorizontalAlignment(SwingConstants.CENTER);
lblOutput.setBounds(50, 214, 350, 15);
getContentPane().add(lblOutput);
btnPlayAgain = new JButton("再玩一次!");
btnPlayAgain.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
newGame();
txtGuess.setText("");
lblOutput.setText("請在上面輸入框中輸入數字並點擊猜一下!你有7次機會!");
btnPlayAgain.setVisible(false);
}
});
btnPlayAgain.setBounds(164, 164, 105, 23);
btnPlayAgain.setVisible(false);
getContentPane().add(btnPlayAgain);
}
public static void main(String args[]) {
GuessNumberGUI theGame = new GuessNumberGUI();
theGame.newGame();
theGame.setSize(new Dimension(450, 300));
theGame.setVisible(true);
}
}