久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3518|回復: 1
收起左側

Java猜拳游戲程序設計思路與代碼

[復制鏈接]
ID:764061 發表于 2020-7-13 11:29 | 顯示全部樓層 |閱讀模式
猜拳游戲—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 方法作為結果返回函數,在WinWin0-2NotWin 函數里調用,將結果返回到對應就JLabel里。
3. ActionListener方法里的ActionEvent 事件、getactioncommand是控件內部的一個字符串,用于標識控件的狀態。此函數可以取得控件的狀態,從而決定到底該做什么。
4. 模式選擇監聽器的三個按鈕中,通過改變flag的值,從而決定人出拳監聽器調用WinWin0-2NotWin 三個函數中的哪一個。
5. 由于監聽器中需要用到圖片文件,要調用本地文件,所以請把文件夾里的六個圖片放在F盤根目錄之后在打開代碼,以免影響評分。

51hei1.png
  1. package test;

  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;

  6. import javax.swing.ImageIcon;
  7. import javax.swing.JButton;
  8. import javax.swing.JFrame;
  9. import javax.swing.JLabel;

  10. public class Test extends JFrame {
  11. JLabel win,draw,lose,score,count;//設置標簽,分別為贏、平、輸、得分、總局
  12. JLabel jl,jl1; //設置標簽,分別為“電腦輸出是”、“你輸出的是”
  13. final JLabel jl2,jl3;//設置標簽,分別是電腦輸出是與你輸出的是的內容
  14. JLabel jl4,jl5; //猜拳的結果顯示“你贏了”,“你輸了”,“平手”
  15. public String person;
  16. public String m;
  17. int j;
  18. int i;
  19. int k;
  20. int swin,sdraw,slose,sscore;
  21. int flag1, count1;
  22. final String[] car = new String[3];
  23. public void Win0(String person) {
  24. car[0] = "石頭";
  25. car[1] = "剪刀";
  26. car[2] = "布";
  27. person = car[j];
  28. i = (int) (Math.random()*3);
  29. if(i==0)
  30.     k=0;
  31. else if(i==1)
  32.     k=1;
  33. else if(i==2)
  34.     k=2;
  35. String com=car[k] ;


  36. //判斷輸贏                                 
  37. if (com.equals(person)) {
  38. jl5.setText("平手");
  39. flag1 = 0;
  40. } else if (com.equals("剪刀") && person.equals("石頭") ||
  41.         com.equals("石頭")&& person.equals("布") ||
  42.         com.equals("布") && person.equals("剪刀")) {
  43. jl5.setText("你贏了");
  44. flag1 = 2;
  45. } else {
  46. jl5.setText("你輸了");
  47. flag1 = 1;
  48. }
  49. this.finalresult();
  50. }

  51. public Test() {
  52. JFrame jf = new JFrame();
  53. setSize(700, 700);
  54. this.setTitle("猜拳游戲");
  55. this.setLayout(null);
  56. win = new JLabel("贏:"+swin);
  57. draw = new JLabel("平:"+sdraw);
  58. lose = new JLabel("輸:"+slose);
  59. score = new JLabel("得分:"+sscore);
  60. count = new JLabel("總局:"+count1);

  61.     win.setBounds(50, 0, 80, 50);
  62.     draw.setBounds(130, 0, 80, 50);
  63.     lose.setBounds(210, 0, 80, 50);
  64.     score.setBounds(290, 0, 100, 50);
  65.     count.setBounds(450, 0,100, 50);

  66.     Font f1 = new Font("華文行楷",1,23);
  67.     win.setFont(f1);
  68.     draw.setFont(f1);
  69.     lose.setFont(f1);
  70.     score.setFont(f1);
  71.     count.setFont(f1);

  72.     win.setForeground(Color.blue);
  73.     draw.setForeground(Color.green);
  74.     lose.setForeground(Color.cyan);
  75.     score.setForeground(Color.red);
  76.     count.setForeground(Color.pink);
  77.     this.setBackground(Color.yellow);

  78.     this.add(win);
  79.     this.add(draw);
  80.     this.add(lose);
  81.     this.add(score);
  82.     this.add(count);

  83.     jl = new JLabel("電腦出的是:");
  84.     jl.setBounds(50, 100, 150, 70);
  85.     this.add(jl);
  86.     jl1 = new JLabel("你出的是:");
  87.     jl1.setBounds(50, 210, 150, 70);
  88.     this.add(jl1);
  89.     // 電腦的出的拳標簽
  90.     jl2 = new JLabel();
  91.     jl2.setBounds(200, 100, 150, 70);
  92.     this.add(jl2);
  93.     //我出的拳的標簽
  94.     jl3 = new JLabel();
  95.     jl3.setBounds(200, 210, 150, 70);
  96.     this.add(jl3);
  97.     jl4 = new JLabel("輸出結果:");
  98.     jl4.setBounds(50, 500, 150, 70);
  99.     this.add(jl4);
  100.     jl5 = new JLabel("");
  101.     jl5.setBounds(200, 500, 150, 70);
  102.     this.add(jl5);

  103.     Font f2 = new Font("華文行楷",1,20);
  104.     jl.setFont(f2);
  105.     jl1.setFont(f2);
  106.     jl2.setFont(f2);
  107.     jl3.setFont(f2);
  108.     jl4.setFont(f2);
  109.     jl5.setFont(f2);

  110.     // 按鈕
  111.     final JButton btn = new JButton("");
  112.     btn.setBounds(200, 210, 50, 70);
  113.     this.add(btn);
  114.     final JButton btn1 = new JButton("");
  115.     btn1.setBounds(280, 210, 50, 70);
  116.     this.add(btn1);
  117.     final JButton btn2 = new JButton("");
  118.     btn2.setBounds(360, 210, 50, 70);
  119.     this.add(btn2);

  120.     final JButton clear = new JButton("清除數據");
  121.     Font f3 = new Font("華文行楷",1,20);
  122.     clear.setFont(f3);
  123.     clear.setBounds(50, 380, 160, 50);
  124.     this.add(clear);
  125.     btn.setBorderPainted(false);
  126.     btn1.setBorderPainted(false);
  127.     btn2.setBorderPainted(false);
  128.     btn.setIcon(new ImageIcon("F:\\shitou.jpg"));
  129.     btn1.setIcon(new ImageIcon("F:\\jiandao.jpg"));
  130.     btn2.setIcon(new ImageIcon("F:\\bu.jpg"));
  131.    
  132. btn.addActionListener
  133.       (new ActionListener() {
  134.    
  135. public void actionPerformed(ActionEvent arg0) {
  136. //如果你鼠標點擊的是石頭按鈕
  137. j = 0;
  138. String b = btn.getActionCommand();
  139. jl3.setText(b);
  140. //jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".png")));
  141. Win(person);
  142. //Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource(i+".png")));
  143. Test.this.jl2.setText(car);
  144. System.out.println(car);
  145. }
  146. }
  147.      );

  148. btn1.addActionListener(new ActionListener() {
  149. public void actionPerformed(ActionEvent arg0) {
  150. j = 1;
  151. String b1 = btn1.getActionCommand();
  152. jl3.setText(b1);
  153. //jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".png")));
  154. Win(person);
  155. //Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource(i+".png")));
  156. Test.this.jl2.setText(car);
  157. System.out.println(car);
  158. System.out.println(b1);
  159. }
  160. });

  161. btn2.addActionListener(new ActionListener() {
  162. public void actionPerformed(ActionEvent arg0) {
  163. j = 2;
  164. String b2 = btn2.getActionCommand();
  165. jl3.setText(b2);
  166. //jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".png")));
  167. Win(person);
  168. Test.this.jl2.setText(car);
  169. System.out.println(car);
  170. //Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource (i+".png")));
  171. System.out.println(b2);
  172. }
  173. });
  174. clear.addActionListener(new ActionListener() {

  175. @Override
  176. public void actionPerformed(ActionEvent e) {

  177.     if(e.getSource() == clear){
  178.            swin = 0;
  179.            sdraw = 0;
  180.            slose = 0;
  181.            sscore = 0;
  182.            count1 = 0;

  183.            win.setText("贏:" + swin);
  184.            draw.setText("平:" + sdraw);
  185.            lose.setText("輸:" + slose);
  186.            score.setText("得分:" + sscore);
  187.            count.setText("總局:" + count1);
  188.           }
  189. }
  190. });
  191. this.setVisible(true);
  192. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  193. this.setLocationRelativeTo(null);
  194. this.setResizable(false);
  195. }

  196. private void finalresult() {

  197. if(flag1==0){
  198. sdraw ++;
  199. draw.setText("平:"+sdraw);
  200. score.setText("得分:"+sscore);
  201. }
  202. if(flag1==1){
  203. slose ++;
  204. sscore=sscore-1;
  205. lose.setText("輸:"+slose);
  206. score.setText("得分:"+sscore);
  207. }
  208. if(flag1==2) {
  209. swin ++;
  210. sscore=sscore+1;
  211. win.setText("贏:"+swin);
  212. score.setText("得分:"+sscore);
  213. }
  214. count1=swin+slose+sdraw;
  215. count.setText("總局:"+count1);
  216. }
  217. public static void main(String[] args) {
  218. Test u= new Test();

  219. }

  220. }

復制代碼

回復

使用道具 舉報

ID:336378 發表于 2020-10-27 17:19 | 顯示全部樓層
   看不懂,聽不清??!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩福利一区 | 亚洲狠狠爱| 国产一级视频在线 | 亚洲三级视频 | 在线资源视频 | 欧美福利视频 | 欧美精品一区在线 | 久久久99国产精品免费 | 色性av | 亚州成人| 亚洲成人午夜电影 | 亚洲精品久久久久久久久久吃药 | 亚洲精品乱码久久久久久久久 | 搞黄网站在线观看 | 99这里只有精品视频 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 日本精a在线观看 | 欧美激情久久久 | 91在线影院 | 农村妇女毛片精品久久久 | 精品一区二区三区四区五区 | 日本综合在线观看 | 亚洲精品免费在线观看 | 超碰最新在线 | 18成人在线观看 | 午夜天堂精品久久久久 | 久久午夜剧场 | 久久这里只有 | 免费一级黄色 | 亚洲电影一区二区三区 | 成人免费网站 | 久久99精品久久久久久 | 天天澡天天狠天天天做 | 9色网站 | 91文字幕巨乱亚洲香蕉 | 免费观看一级特黄欧美大片 | 一级特黄色毛片 | 亚洲一区视频在线播放 | 亚洲一区二区久久久 | 亚洲国产成人一区二区 | 成人国产精品免费观看 |