猜拳游戏—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();
- }
- }
复制代码
|