小游戏——剪刀石头布

流程:

1、玩家参与:输入用户名
2、电脑:提供角色供选择
3、玩家选择:1-剪刀 2-石头 3-布
4、电脑随机选对一个数字1,2,3
5、判断对错(实现玩家赢或者电脑赢的结果)

全局变量:

玩家的名字 player_name  String

电脑的名字  com_name  String

玩家出拳数字  player_choice 定义数值(参与运算) int  

电脑出拳数字  com_choice   int  

考虑bug

(1)只输入一个空格,会进入程序执行,next()不会

       使用trim()方法判定字符串是不是只有空格的变量 。

(2)出拳时,输入1.2

  如果是nextInt,如果输入的类型不是这个类型,就报错,报错后程序退出.

 程序安全运行,保证程序在输入控制台安全退出,不致于出现退出,最好的方法只接收next().

这里把不同类型做强转,强转是同类型发生的类型转化,不同类型通过toXXX转化,每一个基本类型都有一个大型的全称,int--Integer ,帮助我们提供to方法,通过to方法决定什么类型转成什么类型。

除了char和int是java自动强制,其它都要通过强化或转化方法来进行类型的变换。

强转:(类型)转化前的类型 

转化方法:转化类型的全称大写.parse转换类型  

(3)最终输出,不清楚玩家和电脑的出拳名字.

需要加上电脑和玩家的出拳.这里还需要两个全局变量, 电脑出拳名称,玩家出拳名称 

第三点: 效率


Javap字节码,看机器是怎么执行的

从javap字节码中,javap –c XXXX.class编译成字节码.

 还有分支选择是 switch

先做一个hashCode()

后面是equals

注意switch

switch(com_no.hashCode()) {

case 49:
  
  if (com_no.equals("1")) {

        var10 = 0;
    }

    break;

case 50:

    if (com_no.equals("2")) {

        var10 = 1;
    }

}

 先把hashCode,结构顺序结构

Switch条件直接去找条件,if效率不高,swtich效率高,一般代码,能用switch不用if 

代码:


import java.util.Scanner;

/**

 * 流程

 * 1、玩家参与:输入用户名
 
 * 2、电脑:提供角色供选择

 * 3、玩家选择:1-剪刀 2-石头 3-布

 * 4、电脑随机选对一个数字1,2,3

 * 5、判断对错(实现玩家赢或者电脑赢的结果)

 */
public class MiniGame1 {

    public static void main(String[] args) {

        //定义全局变量,玩家名字player_name,电脑名字com_name,玩家出拳player_choice,电脑出拳com_choice

        String player_name;

        String com_name;
 
       int player_choice;
 
       int com_choice;

        //增加的bug变量,玩家的出拳名称 player_choice_name 电脑出拳名称 com_choice_name

        String player_choice_name;

        String com_choice_name;

        //按照流程写程序
 
       //欢迎界面
        System.out.println("**************************************");

        System.out.println("    游戏:剪刀石头布");

        System.out.println("                作者:AnYi");

        System.out.println("                版本:v1.0");
 
       System.out.println("*************************************");

        System.out.println("欢迎进入本游戏,请输出游戏玩家的名字:");

        //获取输入设备

        Scanner scanner = new Scanner(System.in);
 
       //结合上下文的变量来决定当前等式的变量,nextLine()游戏玩家的名字可以带空格
 
       player_name=scanner.nextLine();
 
       //玩家可能输入空格,哪一个结果为true,就是player_name的变量内容
 
       //这个变量的空格也可能是多个,包含空格 contains,这种 contains包含空格,但是中间也有,中间有合法
 
       //只有player变量全是空格,不合法,trim()方法去掉字符串开头和结尾的空格

        if(player_name.trim().equals("")){
 
           player_name="匿名玩家";


        }

        //选择电脑的玩家
        System.out.println("*************************************");
        System.out.println("1--------------蜡笔小新");
        System.out.println("2---------------葫芦娃");
        System.out.println("*************************************");
        //需要用户选择玩家
        String com_no=scanner.next();
        //switch.switch结构

        switch(com_no){
            case "1":
                com_name="蜡笔小新";
                break;
            case "2":
                com_name="葫芦娃";
                break;
            default:
                com_name="匿名用户";
        }
        //玩家出拳
        System.out.println("************请玩家选择出拳的代表数字**********");
        System.out.println("1------剪刀");
        System.out.println("2------石头");
        System.out.println("3------布");
        System.out.println("*******************************************");
        //玩家出拳为了运算方便,使用数字,next()接收的是字符串,如果用户输入1.2
        //因为变量player_choice是int型,直接接收可能会报错,这里使用字符串变量
        String tmp_choice=scanner.next();
        switch(tmp_choice){
            case "1":
                player_choice=Integer.parseInt(tmp_choice);
                break;
            case "2":
                player_choice=Integer.parseInt(tmp_choice);
                break;
            case "3":
                player_choice=Integer.parseInt(tmp_choice);
                break;
            default:
                player_choice=(int)Math.round(Math.random()*2+1);

        }

        switch(player_choice){
            case 1:
                player_choice_name="剪刀";
                break;
            case 2:
                player_choice_name="石头";
                break;
            default:
                player_choice_name="布";

        }
        //当用户出拳出的是1.2,看player_choice
        //电脑出拳Math.random()产生0-1
        //把Math.random()*3扩大3倍,再加1,再转型成int,就会把数字变成1,2,3
        //这里(int)强制转化,把long型的8个字节,只用4个字节存储,丢掉了4个字节,这里只有1,2,3
        com_choice=(int)(Math.random()*3+1);
        //也要判断电脑的出拳名称
        switch(com_choice){
            case 1:
                com_choice_name="剪刀";
                break;
            case 2:
                com_choice_name="石头";
                break;
            default:
                com_choice_name="布";

        }
        //判断数值计算用==
        if(player_choice-com_choice==1 || player_choice-com_choice==-2){
            System.out.println("玩家:"+player_name+",出拳:"+player_choice_name+"--赢");
            System.out.println("电脑:"+com_name+",出拳:"+com_choice_name+"--输");
        }else if(com_choice-player_choice==1 || com_choice-player_choice==-2){
            System.out.println("电脑:"+com_name+",出拳:"+com_choice_name+"--赢");
            System.out.println("玩家:"+player_name+",出拳:"+player_choice_name+"--输");
        }else{
            System.out.println("电脑:"+com_name+",出拳:"+com_choice_name+"--平局");
            System.out.println("玩家:"+player_name+",出拳:"+player_choice_name+"--平局");
        }
    }
}

### 运行结果

import java.util.Scanner;

/**
 * 流程
 * 1、玩家参与:输入用户名
 * 2、电脑:提供角色供选择
 * 3、玩家选择:1-剪刀 2-石头 3-布
 * 4、电脑随机选对一个数字1,2,3
 * 5、判断对错(实现玩家赢或者电脑赢的结果)
 */
public class MiniGame1 {
    public static void main(String[] args) {
        //定义全局变量,玩家名字player_name,电脑名字com_name,玩家出拳player_choice,电脑出拳com_choice
        String player_name;
        String com_name;
       int player_choice;
       int com_choice;
        //增加的bug变量,玩家的出拳名称 player_choice_name 电脑出拳名称 com_choice_name
        String player_choice_name;
        String com_choice_name;
        //按照流程写程序
       //欢迎界面
        System.out.println("**************************************");
        System.out.println("    游戏:剪刀石头布");
        System.out.println("                作者:AnYi");
        System.out.println("                版本:v1.0");
       System.out.println("*************************************");
        System.out.println("欢迎进入本游戏,请输出游戏玩家的名字:");
        //获取输入设备
        Scanner scanner = new Scanner(System.in);
       //结合上下文的变量来决定当前等式的变量,nextLine()游戏玩家的名字可以带空格
       player_name=scanner.nextLine();
       //玩家可能输入空格,哪一个结果为true,就是player_name的变量内容
       //只有player变量全是空格,不合法,trim()方法去掉字符串开头和结尾的空格
        if(player_name.trim().equals("")){
           player_name="匿名玩家";
        }
        //选择电脑的玩家
        System.out.println("*************************************");
        System.out.println("1--------------蜡笔小新");
        System.out.println("2---------------葫芦娃");
        System.out.println("*************************************");
        //需要用户选择玩家
        String com_no=scanner.next();
        //switch.switch结构
        switch(com_no){
            case "1":
                com_name="蜡笔小新";
                break;
            case "2":
                com_name="葫芦娃";
                break;
            default:
                com_name="匿名用户";
        }
        //玩家出拳
        System.out.println("************请玩家选择出拳的代表数字**********");
        System.out.println("1------剪刀");
        System.out.println("2------石头");
        System.out.println("3------布");
        System.out.println("*******************************************");
        //玩家出拳为了运算方便,使用数字,next()接收的是字符串,如果用户输入1.2
        //因为变量player_choice是int型,直接接收可能会报错,这里使用字符串变量
        String tmp_choice=scanner.next();
        switch(tmp_choice){
            case "1":
                player_choice=Integer.parseInt(tmp_choice);
                break;
            case "2":
                player_choice=Integer.parseInt(tmp_choice);
                break;
            case "3":
                player_choice=Integer.parseInt(tmp_choice);
                break;
            default:
                player_choice=(int)Math.round(Math.random()*2+1);

        }

        switch(player_choice){
            case 1:
                player_choice_name="剪刀";
                break;
            case 2:
                player_choice_name="石头";
                break;
            default:
                player_choice_name="布";

        }
        //当用户出拳出的是1.2,看player_choice
        //电脑出拳Math.random()产生0-1
        //把Math.random()*3扩大3倍,再加1,再转型成int,就会把数字变成1,2,3
        //这里(int)强制转化,把long型的8个字节,只用4个字节存储,丢掉了4个字节,这里只有1,2,3
        com_choice=(int)(Math.random()*3+1);
        //也要判断电脑的出拳名称
        switch(com_choice){
            case 1:
                com_choice_name="剪刀";
                break;
            case 2:
                com_choice_name="石头";
                break;
            default:
                com_choice_name="布";

        }
        //判断数值计算用==
        if(player_choice-com_choice==1 || player_choice-com_choice==-2){
            System.out.println("玩家:"+player_name+",出拳:"+player_choice_name+"--赢");
            System.out.println("电脑:"+com_name+",出拳:"+com_choice_name+"--输");
        }else if(com_choice-player_choice==1 || com_choice-player_choice==-2){
            System.out.println("电脑:"+com_name+",出拳:"+com_choice_name+"--赢");
            System.out.println("玩家:"+player_name+",出拳:"+player_choice_name+"--输");
        }else{
            System.out.println("电脑:"+com_name+",出拳:"+com_choice_name+"--平局");
            System.out.println("玩家:"+player_name+",出拳:"+player_choice_name+"--平局");
        }
    }
}

运行结果:
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值