首页 > 编程语言 >java-猜拳游戏

java-猜拳游戏

时间:2022-08-18 17:44:26浏览次数:82  
标签:java 猜拳 int System 游戏 接收 变量 出拳

猜拳游戏

  1. 规则
    电脑每次都会随机生成0,1,2,分别表示石头,剪刀,布,规定玩三次;

  2. 思路

  • 先创建一个Tom类,里面的属性有玩家,电脑出拳的类型,玩家赢的次数和比赛的次数;

  • 成员方法有电脑随机猜拳的方法,设置玩家猜拳的方法,比较猜拳的结果,赢得次数的方法;

  • 在main类中创建出对象,和一个二维数组,用来接收局数,Tom出拳情况以及电脑出拳情况及一个一维数组,用来接收输赢情况;

  • 设置for循环,三次后退出,下面大部分程序都在循环中,进行循环赋值;

  • 创建输入函数,设置变量来接收输入的值,将此变量当作玩家出拳的set方法的参数后,设置新变量利用get方法接收这次玩家出拳的值,再将新变量赋值给二维数组的第二列,j要提前设为0;

  • 再直接设置变量接收电脑随机出拳的值,并将变量赋值给二维数组的第三列;

  • 创建变量接收对象调用的pk方法,再将输赢结果赋值一维数组,再将对象调用的局数常量赋给二维数组的第一列;

  • 对每一局进行输出,调用变量输出即可,输出完一轮后,创建变量接收赢得次数的方法,实参时统计输赢结果的变量;

  • for循环结束后,里面数组循环遍历对最终结果进行输出;

  1. 代码
点击查看代码
import java.util.Random;
import java.util.Scanner;

/*                                                                                                    
请编写一个猜拳的游戏                                                                                            
有个人 Tom,设计他的成员变量. 成员方法, 可以电脑猜拳. 电脑每次都会随机生成 0, 1, 2                                                    
0 表示 石头 1 表示剪刀 2 表示 布                                                                                 
并要可以显示 Tom的输赢次数(清单), 假定 玩三次.                                                                          
 */
// 测试类,主类
public class MoraGame {
    public static void main(String[] args) {
        int isWinCount = 0; //最后输赢的次数
        int arr1[][] = new int[3][3];
        String arr2[] = new String[3];
        int j = 0;
        Tom t = new Tom();
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入你要出的拳(0-拳头,1-剪刀,2-布):");
            Scanner in = new Scanner(System.in);
            int num = in.nextInt();
            t.setTomGuess(num);
            int tomGuess = t.getTomGuess(); //获取玩的出的拳类型
            //int tomGuess=num;
            arr1[i][j+1]=tomGuess;
            int comGuess=t.comGuessNum();//获取电脑出的拳类型
            arr1[i][j+2]=comGuess;
            arr1[i][j]=t.count;
             String isWin=t.vscomputer();  //接收每局输赢的情况
            arr2[i]=isWin;
//对每一局情况进行输出
            System.out.println("============================");
            System.out.println("局数\t玩家的出拳\t电脑出拳\t输赢情况");
            System.out.println(t.count+"\t\t\t\t"+tomGuess+"\t\t\t\t"+comGuess+"\t\t\t"+isWin);
            System.out.println("============================");
            System.out.println();
             isWinCount=t.winCount(isWin); //接收最终输赢的情况
        }
        //输出最终的情况
        System.out.println("局数\t玩家的出拳\t电脑出拳\t\t输赢情况");
         for(int a=0;a<arr1.length;a++){
             for(int b=0;b<arr1[a].length;b++){
                 System.out.print(arr1[a][b]+"\t\t\t\t");
             }
             System.out.print(arr2[a]);
             System.out.println();
         }
        System.out.println("你赢了"+isWinCount+"次");
    }

}
class Tom{
    private int tomGuessNum;  //玩家出拳情况
    private int comGuessNum;
     int winCountNum;
     int count=1;
    public int getTomGuess() {
        return tomGuessNum;
    }
   //玩家出拳情况获取
    public void setTomGuess(int tomGuess) {
        this.tomGuessNum = tomGuess;
    }
    public int comGuessNum(){
   Random r=new Random();
     comGuessNum=r.nextInt(3);
     return comGuessNum;
    }//电脑出拳获取

    public String vscomputer(){
        if(tomGuessNum==0&&comGuessNum==1){
            return "你赢了";
        }else if(tomGuessNum==1&&comGuessNum==2){
            return "你赢了";
        }else if(tomGuessNum==2&&comGuessNum==0){
            return "你赢了";
        }else if(tomGuessNum==comGuessNum){
            return "平手";
        }else{
            return "你输了";
        }
        }
    public int winCount(String s) {
        count++;    //控制玩的次数
        if (s.equals("你赢了")) {     //统计赢的次数
            winCountNum++;
        }
        return winCountNum;
    }//返回赢得次数

}
                                                                                                      
  1. 心得
  • 如果不考虑封装性的话,可以直接创建创建变量来接收输入的值当作玩家出拳的类型

  • 再输出完一轮后,再接收赢得次数,是因为方法中有局数增加的代码,所有需要循环完一轮再增加局数,以便于接收;

  • 赢得次数方法中用到了equals方法,判断参数和"你赢了"是否相等,相同就增加赢得次数;

  • 在pk方法中只判断赢得情况和平手情况,其他else都是输的情况;

  • 想要控制玩的次数,只需要改变循环次数,二维数组的排数(第一个参数),一维数组的值即可;

参考:https://www.bilibili.com/video/BV1fh411y7R8?p=262&vd_source=f937f0092d385a7b990a2f3311d7d6ef

标签:java,猜拳,int,System,游戏,接收,变量,出拳
From: https://www.cnblogs.com/xljy/p/16599536.html

相关文章

  • java反编译工具--jd-gui
        反编译:将二进制执行代码转换为源代码。        首先java的源代码文件是java文件,进行编译器编译后会生成字节码class文件。但是这你能看懂?  所以......
  • JavaSE:第五章:数组
    史上最全的知识体系脑图,覆盖所有知识点,所有细节,注意事项。数组:包含一维数组,二维数组,Arrays的常用算法,Arrays工具类的使用,可变形参,常见异常,理解main方法的语法。更多内容......
  • java常用类String
    java常用类String理解String的不可变性packagecom.zx.java;importorg.junit.Test;/***String的使用**@authorzx*@create2022-08-1718:00*/public......
  • JavaWeb 开发入门
    原文:JavaWeb学习总结(一)——JavaWeb开发入门一、基本概念1.1、Web开发的相关知识Web,在英语中Web即表示网页的意思,它用于表示Internet主机上供外界访问的资源......
  • Java常用类
    Object和Objects类toString()方法用来返回当前对象本身的有关信息,默认的是返回对象所在的类名和哈希码的16进制表示。一般需要重写toString()方法获取该对象的字段名和值......
  • macOS最强Java开发分析软件JProfiler for Mac中文永久版
    mac软件下载:https://mac.macxf.com/mac/808.html?id=NjU2MTE%3DJProfiler11破解版可以快速的帮助用户这进行使用的过程中,分析出您的操作错误这存在的错误,以此让开发者进......
  • 【Java基础】二进制的三种形式:原码、反码、补码
    1.二进制的三种形式原码:数值的二进制,最高位是符号位负数的反码:对原码按位取反,最高位确定为1负数的补码:反码+1计算机以二进制补码的形式保存所有的整数正数的原码、反......
  • 从XXE漏洞修复引起Not supported: http://javax.xml.XMLConstants/property/accessExt
    引子 在使用Fortify扫描时代码报XMLExternalEntityInjection,此漏洞为xml实体注入漏洞,XXE攻击可利用在处理时动态构建文档的XML功能。修复方案也包含了增加安全......
  • 【Java基础】二、八、十、十六进制
    1.进制是什么我们平常遇到的数字0、1、2、3...9,9再加1满10进1,得到10,这些数就表示十进制数。(decimal)同样的满2进1就表示二进制(binary)。满8进1就表示八进制(octal)。满16进......
  • java的char类型
    一、Char介绍字符型数据类型。用于存放单个字符。用单引号【''】括住2字节,16位。char在java中是16位,因为java用的是Unicode。一个16位的编码所能产生的字符只有65536个。U......