java面向对象小游戏:利用面向对象的思想制作一个剪刀石头布的游戏(基于控制台)

模拟实现人机对战的猜拳游戏


需求:

        定义Person玩家类,属性:name和score,行为:键盘录入出拳;
        Computer类,属性:name和score,行为:随机数方式出拳。
        定义游戏类MoraGame,创建person对象和computer对象,
           封装方法分别为对象name属性赋予玩家角色名称;
           封装方法可以实现对战游戏,通过提示是否继续游戏终止游戏。
           封装方法显示最终的对战结果。
        定义Test测试类,测试游戏。

Person类:

import java.util.Scanner;
//创建一个人类
public class Person extends GameUser{
    //定义一个变量,存储玩家输入的选择
    int a;

    public Person(){}
//定义玩家出拳的方法
    public void input(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的选择:0、石头 1、剪刀 2、布 3、退出游戏");
        a = sc.nextInt();

    }
}

Computer类:

import java.util.Random;
//创建一个电脑类
public class Computer extends GameUser {
    //定义一个变量存储电脑随机产生的选项
    int b;

    public Computer(){}
    //电脑出拳的方法
    public void ran(){
        //随机产生一个数字
        Random r = new Random();
        b = r.nextInt(3);
    }

}

MoraGame:

import java.util.Random;

public class MoraGame {
    //实例化人类和电脑类
    Person p = new Person();
    Computer c = new Computer();
    Random r = new Random();
    //随机产生玩家和电脑名字的方法
    public void gName(){
        String[] name = {"张三","李四","王五","赵六","傻逼","二货"};
        int a = r.nextInt(4);
        int b = r.nextInt(4);
        //从数组中随机抽取名字赋个玩家和电脑
        p.setScore(100);
        c.setScore(100);
        //名字不能相同,当名字相同时,电脑选择下一个名字
        if(a!=b){
            p.setName(name[a]);
            c.setName(name[b]);
        }else {
            p.setName(name[a]);
            c.setName(name[b+1]);
        }
    }
    //游戏执行的方法
    //游戏在此方法中执行
    public void play(){
        String[] game={"石头","剪刀","布"};
        //定义死循环,让游戏可以一直运行下去
        while (true){
            //调用玩家出拳方法
            p.input();
            //判断游戏是否结束
            if(p.a==3||p.getScore()==0||c.getScore()==0){
                System.out.println("游戏结束!");
                break;
            }
            //调用电脑出拳方法
            c.ran();
            //打印玩家的名字和分数
            System.out.println("玩家:"+p.getName()+",分数"+p.getScore());
            //判断玩家出拳是否合理,选择只有0-2;3是结束游戏,除此之外的选择都是不合理
            if(p.a<=2){
                //如果合理,打印玩家的选择
                System.out.println("出 "+game[p.a]);
            }else {
                System.out.println("你的输入有误!");
                //如果玩家时输入不合理,重新调用此方法重新进入游戏诚信输入
                play();
            }
            //打印电脑的名字和分数
            System.out.println("电脑:"+c.getName()+",分数"+c.getScore());
            //打印电脑随机产生的选择
            System.out.println("出 "+game[c.b]);
            //调用游戏判断输赢方法
            result();

        }
    }
    //判断游戏输赢方法
    public void result(){
        //判断电脑胜利的规则
        if((p.a==0&&c.b==2)||(p.a==1&&c.b==0)||(p.a==2&&c.b==1)){
            System.out.println("电脑胜利");
            //电脑胜利,电脑的分数加一,玩家的分数减一
            p.setScore(p.getScore()-1);
            c.setScore(c.getScore()+1);
        }else if((p.a==0&&c.b==0)||(p.a==1&&c.b==1)||(p.a==2&&c.b==2)){//判断平局的规则
            System.out.println("平局");
        }else {//除了以上的可能,剩下的就是玩家胜利
            System.out.println(p.getName()+"胜利");
            p.setScore(p.getScore()+1);
            c.setScore(c.getScore()-1);
        }
    }
}

主类:

public class Test {
    //主类
    public static void main(String[] args) {
        //实例化MoraGame对象
        MoraGame m = new MoraGame();
        //调用给名字的方法
        m.gName();
        //调用进行游戏的方法
        m.play();
    }
}

运行结果:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

皇正经

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

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

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

打赏作者

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

抵扣说明:

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

余额充值