猜拳游戲—Java
一.為什么選擇java? Java是一種跨平臺的面向對象的語言,這就允許開發人員生成獨立于平臺的應用程序,用Java編寫的程字可以在許多硬件平臺上運行而不需要重新編譯。Java 具有很多優點:簡單、面向對象、可移植、與硬件無關、強健安全、具有很高的性能,此外還對多線程、動態性提供了支持。
Java采用面向對象技術,所有的Java程序都是對象,通過封裝性實現了模塊化和信息隱藏,通過繼承性實現了代碼的復用,使得用戶可以根據自己的需要創建自己的類庫。
Java最強大的是網絡方面的應用,本設計不涉及網絡方面的應用。
通過Java程序設計的-些重要理論基礎來實現“人機猜拳小游戲”的功能。通過利用所學到的計算科學的理論知識,提高解決實際問題的能力,增強運算、編程和使用技術資料的技能,通過實際問題的分析設計、編程和調試,掌握應用軟件的分析方法和工程設計方法,能正確闡述設計和實驗結果,逐步建立正確的全局觀念。通過本次程序設計,我們掌握了Java語言的基本運用,提高了理論結合實際能力。 二. 設計思路。 1. 首先,因為要做一個猜拳游戲,所以要以公平為起點,而這就要用到java中的 Math.random( ) 函數,其返回值為0-1之間的任意實數。 (1)第一問要求輸贏概率一樣,還要考慮平局的情況。則輸贏平的概率各為1/3。 可以通過i = (int) (Math.random()*3); 返回0、1、2三個值的概率各為1/3,表示輸贏平。本設計調用的是Win函數。 (2)第二問要求贏的概率為20%,即為1/5,不用考慮平局,則輸贏概率1:4,可以通過三個函數實現:Win0、Win1、Win2函數各是人出拳為石頭、剪刀、布時對應按鈕button內部調用的函數。i = (int) (Math.random()*5);返回0、1-4五個數兩種情況1:4的概率表示電腦對應人出拳的概率。比如:人出石頭,當i=0時,電腦輸出剪刀;當i=1、2/3/4時,電腦輸出布。即可實現本小題要求。 (3)第三問 要求人全輸,比較簡單。不需要調用random函數,只需讓電腦出拳贏過人即可。本設計調用的是NotWin函數 2. 其次,由于java 功能十分強大,本設計考慮導入swing包里的ImageIcon、JButton、JFrame類和awt包里的ActionEvent、ActionListener類,實現GUI功能,用戶操作 比較簡單,有更好的直觀體驗。 3. 對于(1)、(2)、(3)三種要求,需要在代碼中實現用戶自主選擇模式,進行 猜拳。因此要首先選擇模式1、2、3,通過變量flag的取值來決定各個按鈕內部調用(1)、(2)、(3)中的哪個函數。 三.自我評價 1、人機交互性 首先為了提升使用感受,我們的操作頁面采用了圖形用戶界面(GUI)GUI主要功能是實現人與計算機等電子設備的人機交互。 2、美觀性 對日新月異的電子產品來說,圖形用戶界面越來越發揮著重要的作用。美觀、友好的界面設計往往更能吸引使用者。 3、設計 本程序設計了美觀的界面:將結果、得分等數據更直觀的呈現出來,有123三種模式可供選擇,用戶出拳簡單。同時還有勝率實時呈現。
三、代碼風格 1. 一個類Javagame、一個構造方法Javagame、一個成員方法finalresult、一個main函數作為入口。 2. finalresult 方法作為結果返回函數,在Win、Win0-2、NotWin 函數里調用,將結果返回到對應就JLabel里。 3. ActionListener方法里的ActionEvent 事件、getactioncommand是控件內部的一個字符串,用于標識控件的狀態。此函數可以取得控件的狀態,從而決定到底該做什么。 4. 在模式選擇監聽器的三個按鈕中,通過改變flag的值,從而決定人出拳監聽器調用Win、Win0-2、NotWin 三個函數中的哪一個。 5. 由于監聽器中需要用到圖片文件,要調用本地文件,所以請把文件夾里的六個圖片放在F盤根目錄之后在打開代碼,以免影響評分。
- package test;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- public class Test extends JFrame {
- JLabel win,draw,lose,score,count;//設置標簽,分別為贏、平、輸、得分、總局
- JLabel jl,jl1; //設置標簽,分別為“電腦輸出是”、“你輸出的是”
- final JLabel jl2,jl3;//設置標簽,分別是電腦輸出是與你輸出的是的內容
- JLabel jl4,jl5; //猜拳的結果顯示“你贏了”,“你輸了”,“平手”
- public String person;
- public String m;
- int j;
- int i;
- int k;
- int swin,sdraw,slose,sscore;
- int flag1, count1;
- final String[] car = new String[3];
- public void Win0(String person) {
- car[0] = "石頭";
- car[1] = "剪刀";
- car[2] = "布";
- person = car[j];
- i = (int) (Math.random()*3);
- if(i==0)
- k=0;
- else if(i==1)
- k=1;
- else if(i==2)
- k=2;
- String com=car[k] ;
- //判斷輸贏
- if (com.equals(person)) {
- jl5.setText("平手");
- flag1 = 0;
- } else if (com.equals("剪刀") && person.equals("石頭") ||
- com.equals("石頭")&& person.equals("布") ||
- com.equals("布") && person.equals("剪刀")) {
- jl5.setText("你贏了");
- flag1 = 2;
- } else {
- jl5.setText("你輸了");
- flag1 = 1;
- }
- this.finalresult();
- }
- public Test() {
- JFrame jf = new JFrame();
- setSize(700, 700);
- this.setTitle("猜拳游戲");
- this.setLayout(null);
- win = new JLabel("贏:"+swin);
- draw = new JLabel("平:"+sdraw);
- lose = new JLabel("輸:"+slose);
- score = new JLabel("得分:"+sscore);
- count = new JLabel("總局:"+count1);
- win.setBounds(50, 0, 80, 50);
- draw.setBounds(130, 0, 80, 50);
- lose.setBounds(210, 0, 80, 50);
- score.setBounds(290, 0, 100, 50);
- count.setBounds(450, 0,100, 50);
- Font f1 = new Font("華文行楷",1,23);
- win.setFont(f1);
- draw.setFont(f1);
- lose.setFont(f1);
- score.setFont(f1);
- count.setFont(f1);
- win.setForeground(Color.blue);
- draw.setForeground(Color.green);
- lose.setForeground(Color.cyan);
- score.setForeground(Color.red);
- count.setForeground(Color.pink);
- this.setBackground(Color.yellow);
- this.add(win);
- this.add(draw);
- this.add(lose);
- this.add(score);
- this.add(count);
- jl = new JLabel("電腦出的是:");
- jl.setBounds(50, 100, 150, 70);
- this.add(jl);
- jl1 = new JLabel("你出的是:");
- jl1.setBounds(50, 210, 150, 70);
- this.add(jl1);
- // 電腦的出的拳標簽
- jl2 = new JLabel();
- jl2.setBounds(200, 100, 150, 70);
- this.add(jl2);
- //我出的拳的標簽
- jl3 = new JLabel();
- jl3.setBounds(200, 210, 150, 70);
- this.add(jl3);
- jl4 = new JLabel("輸出結果:");
- jl4.setBounds(50, 500, 150, 70);
- this.add(jl4);
- jl5 = new JLabel("");
- jl5.setBounds(200, 500, 150, 70);
- this.add(jl5);
- Font f2 = new Font("華文行楷",1,20);
- jl.setFont(f2);
- jl1.setFont(f2);
- jl2.setFont(f2);
- jl3.setFont(f2);
- jl4.setFont(f2);
- jl5.setFont(f2);
- // 按鈕
- final JButton btn = new JButton("");
- btn.setBounds(200, 210, 50, 70);
- this.add(btn);
- final JButton btn1 = new JButton("");
- btn1.setBounds(280, 210, 50, 70);
- this.add(btn1);
- final JButton btn2 = new JButton("");
- btn2.setBounds(360, 210, 50, 70);
- this.add(btn2);
- final JButton clear = new JButton("清除數據");
- Font f3 = new Font("華文行楷",1,20);
- clear.setFont(f3);
- clear.setBounds(50, 380, 160, 50);
- this.add(clear);
- btn.setBorderPainted(false);
- btn1.setBorderPainted(false);
- btn2.setBorderPainted(false);
- btn.setIcon(new ImageIcon("F:\\shitou.jpg"));
- btn1.setIcon(new ImageIcon("F:\\jiandao.jpg"));
- btn2.setIcon(new ImageIcon("F:\\bu.jpg"));
-
- btn.addActionListener
- (new ActionListener() {
-
- public void actionPerformed(ActionEvent arg0) {
- //如果你鼠標點擊的是石頭按鈕
- j = 0;
- String b = btn.getActionCommand();
- jl3.setText(b);
- //jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".png")));
- Win(person);
- //Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource(i+".png")));
- Test.this.jl2.setText(car);
- System.out.println(car);
- }
- }
- );
- btn1.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- j = 1;
- String b1 = btn1.getActionCommand();
- jl3.setText(b1);
- //jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".png")));
- Win(person);
- //Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource(i+".png")));
- Test.this.jl2.setText(car);
- System.out.println(car);
- System.out.println(b1);
- }
- });
- btn2.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- j = 2;
- String b2 = btn2.getActionCommand();
- jl3.setText(b2);
- //jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".png")));
- Win(person);
- Test.this.jl2.setText(car);
- System.out.println(car);
- //Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource (i+".png")));
- System.out.println(b2);
- }
- });
- clear.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- if(e.getSource() == clear){
- swin = 0;
- sdraw = 0;
- slose = 0;
- sscore = 0;
- count1 = 0;
- win.setText("贏:" + swin);
- draw.setText("平:" + sdraw);
- lose.setText("輸:" + slose);
- score.setText("得分:" + sscore);
- count.setText("總局:" + count1);
- }
- }
- });
- this.setVisible(true);
- this.setDefaultCloseOperation(EXIT_ON_CLOSE);
- this.setLocationRelativeTo(null);
- this.setResizable(false);
- }
- private void finalresult() {
- if(flag1==0){
- sdraw ++;
- draw.setText("平:"+sdraw);
- score.setText("得分:"+sscore);
- }
- if(flag1==1){
- slose ++;
- sscore=sscore-1;
- lose.setText("輸:"+slose);
- score.setText("得分:"+sscore);
- }
- if(flag1==2) {
- swin ++;
- sscore=sscore+1;
- win.setText("贏:"+swin);
- score.setText("得分:"+sscore);
- }
- count1=swin+slose+sdraw;
- count.setText("總局:"+count1);
- }
- public static void main(String[] args) {
- Test u= new Test();
- }
- }
復制代碼
|