用java写猜拳小游戏

题目:用面向对象编程的思想,设计一个猜拳游戏,完成人机猜拳互动游戏的开发。

题目要求:

1)选取对战角色
2)猜拳
3)记录分数

基本思想:

1)创建一个Npc1类,类中有设定人物的编号属性,人物属性,分数属性。
2)创建一个Player1类,类中有玩家人名属性,玩家分数属性,
3)创建一个content方法,输入相应的拳的序号,返回相应的拳;
4)创建一个checked方法,将电脑随机产生的序号和我们从键盘呢输入的序号作比较,判断输赢,返回结果;
5)调用checked方法,将返回值在switch里面分别作比较,输出相应的结果;

各部分主要代码:

Npc1类代码:

class Npc1 {
    int number;//Npc1的编号
    String name;//Npc1的名字
    int score;//记录Npc1的分数
    public Npc1(){
    }

    public int getNumber() {
        return number;//调用此方法获取Npc编号
    }

    public void setNumber(int number) {
        this.number = number;//给Npc设置编号
    }

    public String getName() {
        return name;//调用此方法获取选手选择电脑的随机人物名
    }

    public void setName(String name) {
        this.name = name;//给Npc名字赋值
    }

    public int getScore() {
        return score;//调用此方法获取目前得分
    }

    public void addScore() {
        this.score++;//调用此方法,电脑分数加1
    }
    public int ran(){//调用此方法可以获取电脑随机出的什么拳
        Random random=new Random();
        int number=(random.nextInt(3)+1);//随机产生(1、2、3)三个数字
        return number;//返回随机产生的数字
    }
}

Player1类:

class Player1 {
        String name;//选手的名字
        int score;//选手的分数
    public Player1(){//无参构造方法
    }
    public Player1(String name,int score){//这是有参构造方法
        this.name=name;
        this.score=score;
    }
    public String getName() {
        return name;//调用此方法获取选手的名字
    }

    public void setName(String name) {
        this.name = name;//调用此方法给选手名字赋值
    }

    public int getScore() {
        return score;//调用此方法获取选手目前得分
    }

    public void addScore() {
        this.score++;//调用此方法,选手分数就加1
    }
    public int guess(){//调用此方法可以获取选手要出什么拳
        Scanner scanner=new Scanner(System.in);
        int number=scanner.nextInt();//选手从键盘获取要出的拳的对应的数字
        return number;//返回从键盘输入的数字
    }
}

content方法:

public static String content(int num){
        switch (num){
            case 1:return "剪刀";
            case 2:return "石头";
            case 3:return "布";
        }
        return null;
  }

checked方法:

  //规定0表示平局 1表示npc赢了  2表示玩家赢了
  public static int checked(int random,int guess){
        switch(random){
            case 1:
                switch(guess){
                    case 1:return 0;
                    case 2:return 2;
                    case 3:return 1;
                }
            case 2:
                switch(guess){
                    case 1:return 1;
                    case 2:return 0;
                    case 3:return 2;
                }
            case 3:
                switch (guess){
                    case 1:return 2;
                    case 2:return 1;
                    case 3:return 0;
                }
        }
        return -1;
  }

全部代码:

package homework09.homework0901;
import java.util.Random;
import java.util.Scanner;
//猜拳小游戏
public class Demo01 {
    public static void main(String[] args) {
        System.out.println("*************************************");
        System.out.println("**************猜拳,开始***************");
        System.out.println("*************************************");
        System.out.println("出拳规则:1、剪刀 2、石头 3、布");
        System.out.println("请选择对方角色:(1、孙膑 2、孙权 3、孙尚香)");
        Npc1 npc1=new Npc1();//实例化对象
        Player1 player1=new Player1();
        Scanner scanner = new Scanner(System.in);
        int number=scanner.nextInt();//从键盘输入一个数字,对应一个电脑人物
        switch(number){
            case 1:
                npc1.setNumber(1);
                npc1.setName("孙膑");
                break;
            case 2:
                npc1.setNumber(2);
                npc1.setName("孙权");
                break;
            case 3:
                npc1.setNumber(3);
                npc1.setName("孙尚香");
                break;
        }
        System.out.println("请输入你的名字:");
        String name=scanner.next();//从键盘输入一个名字
        player1.setName(name);//把名字值传递给setName方法,方便后期调用
        System.out.println(player1.getName()+" VS "+npc1.getName()+" 对战 ");
        System.out.println("要开始吗?(y/n)");//对局提示
        int count=0;//统计对战局数
        while(true){
        String str=scanner.next();//从键盘输入一个字符
        if(str.equals("y")) {//判断字符是否等于y
            count++;//对局次数加1
            System.out.println("请出拳:1、剪刀 2、石头 3、布(输入相应的数字)");
            int guess= player1.guess();
            System.out.println("你出拳为:"+content(guess));
            int ran=npc1.ran();
            System.out.println(npc1.getName()+"出拳为:"+content(ran));
            int result=checked(ran,guess);
            switch (result){
                case 0:
                    break;
                case 1:
                    npc1.addScore();
                    System.out.println("你输了,真是太笨了");
                    break;
                case 2:
                    player1.addScore();
                    System.out.println("你赢了,真棒!");
                    break;
            }
            System.out.println("是否要开始下一轮?(y/n)");
        }else{
            System.out.println("--------------------------------------");
            System.out.println(player1.getName()+" VS "+npc1.getName());
            System.out.println("对战次数:"+count);
            System.out.println();
            System.out.println("姓名"+"\t\t\t"+"得分");
            System.out.println(player1.getName()+"\t\t\t"+player1.getScore());
            System.out.println(npc1.getName()+"\t\t\t"+npc1.getScore());
            if(player1.getScore()<npc1.getScore()){
                System.out.println("结果:呵呵,笨笨,下次加油啊!");
            }else if(player1.getScore()==npc1.getScore()){
                System.out.println("结果:你和"+npc1.getName()+"平局");
            }
            else{
                System.out.println("结果:恭喜你真棒!");
            }
            break;
        }
    }
  }
  //规定0表示平局 1表示npc赢了  2表示玩家赢了
  public static int checked(int random,int guess){
        switch(random){
            case 1:
                switch(guess){
                    case 1:return 0;
                    case 2:return 2;
                    case 3:return 1;
                }
            case 2:
                switch(guess){
                    case 1:return 1;
                    case 2:return 0;
                    case 3:return 2;
                }
            case 3:
                switch (guess){
                    case 1:return 2;
                    case 2:return 1;
                    case 3:return 0;
                }
        }
        return -1;
  }
  public static String content(int num){
        switch (num){
            case 1:return "剪刀";
            case 2:return "石头";
            case 3:return "布";
        }
        return null;
  }
}
class Npc1 {
    int number;//Npc1的编号
    String name;//Npc1的名字
    int score;//记录Npc1的分数
    public Npc1(){
    }

    public int getNumber() {
        return number;//调用此方法获取Npc1编号
    }

    public void setNumber(int number) {
        this.number = number;//给Npc1设置编号
    }

    public String getName() {
        return name;//调用此方法获取玩家选择电脑人物的随机人物名
    }

    public void setName(String name) {
        this.name = name;//给Npc1名字赋值
    }

    public int getScore() {
        return score;//调用此方法获取电脑人物目前得分
    }

    public void addScore() {
        this.score++;//调用此方法,电脑人物分数加1
    }
    public int ran(){//调用此方法可以获取电脑人物随机出的什么拳
        Random random=new Random();
        int number=(random.nextInt(3)+1);//随机产生(1、2、3)三个数字
        return number;//返回随机产生的数字
    }
}

class Player1 {
        String name;//玩家的名字
        int score;//玩家的分数
    public Player1(){//无参构造方法
    }
    public Player1(String name,int score){//这是有参构造方法
        this.name=name;
        this.score=score;
    }
    public String getName() {
        return name;//调用此方法获取玩家的名字
    }

    public void setName(String name) {
        this.name = name;//调用此方法给玩家名字赋值
    }

    public int getScore() {
        return score;//调用此方法获取玩家目前得分
    }

    public void addScore() {
        this.score++;//调用此方法,玩家分数就加1
    }
    public int guess(){//调用此方法可以获取玩家要出什么拳
        Scanner scanner=new Scanner(System.in);
        int number=scanner.nextInt();//玩家从键盘获取要出的拳的对应的数字
        return number;//返回从键盘输入的数字
    }
}

结果展示:

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

faramita_of_mine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值