面向对象——剪刀石头布

实现一个简单的猜拳游戏(剪刀石头布)

项目需求:

此游戏的规则为:人机对战。分为三局两胜,每一局比赛结束后,统计人和电脑的分数,从而得出当前局比赛的输赢。共三局,得出最终胜利者。
三局玩完后,询问是否继续比赛?用户输入:是,则比赛重新开始。输入:否,则程序结束退出。

思路:

人机对战需要:人、电脑、游戏规则和主函数四个类,人和电脑的类中需要name和score两个成员变量和一个出拳方式。游戏规则中需要定义:①玩3次,②获得结果,③开始,三个方法。

在这里插入图片描述

代码:

1.Person类:

import java.util.Scanner;
public class Person {
    private String name;  //私有成员变量
    private int score;

    public Person(String name) { //带参数的构造函数
        this.name = name; 
        this.score = 0;
    }

    public int first() {
        System.out.println("请输入你要出的拳:【0】石头,【1】剪刀,【2】布");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        return n;
    }

    public void addScore() { //增加分数
      score += 1;
    }
    public int getScore() { //得到分数
        return  score;
    }
    public String getName() { //得到名字
        return name;
    }
}

2.Computer类:

import java.util.Random;

public class Computer {
    private String name;
    private int score;

    public Computer(String name) {
        this.name = name;
        this.score = 0;
    }
    public int first() {   //电脑随机出
        Random random = new Random();
        int n = random.nextInt(3)+1;//[1,3] [0,3) == > 1, 2  3
        switch (n){
            case 1:System.out.println(name+":"+"出石头");n = 0;break;
            case 2:System.out.println(name+":"+"出剪刀");n = 1;break;
            case 3:System.out.println(name+":"+"出布");n = 2;break;
        }
        return n;
    }
    public void addScore() { //增加分数
        this.score += 1;
    }
    public int getScore() { //得到分数
        return  score;
    }
    public String getName() {//得到名字
        return name;
    }
}

3.Game类:

import java.util.Scanner;

public class Game {

    private Person person;//组合
    private Computer computer;

    //用户  和  电脑
    public Game(){
        System.out.println("请输入您的名字:");
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        person = new Person(str);
        computer = new Computer("电脑");
    }

    //三局两胜  胜者加分  比赛三局自动结束  每玩一局,判断赢家并输出。
    private void playThreeTime(){
        int count = 0;
        while (count < 3) {
            int pFirst = person.first();
            int cFirst = computer.first();
                if (pFirst == 0 && cFirst == 1 ||
                        pFirst == 1 && cFirst == 2 ||
                        pFirst == 2 && cFirst == 0) {//石头剪刀布,人赢
                    System.out.println(person.getName() + ":此局获胜");
                    person.addScore();
                } else if (pFirst == cFirst) {
                    System.out.println("此局平局");
                } else {
                    computer.addScore();
                    System.out.println(computer.getName() + ":此局获胜");
                }
                count++;
            }
        }
    //获得比赛结果  分别输出此次比赛  各得到多少分  胜负情况
    private void getResult(){
        int pScore = person.getScore();
        int cScore = computer.getScore();
        if (pScore > cScore) {
            System.out.println(person.getName() + ":最终结果赢了");

        } else if (pScore == cScore) {
            System.out.println("平局");
        } else {
            System.out.println(computer.getName() + ":最终结果赢了");
        }
        System.out.println(person.getName()+" : "+computer.getName()+" = "
                +person.getScore()+" : "+computer.getScore());
    }
   public void start(){
        while(true) {
            playThreeTime();
            getResult();
            System.out.println("是否继续?【0】是  【1】否");
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            if (n == 0) {
                continue;
            }else{
                break;
            }
        }
    }
}

4.Mainapp:

public class MainApp {

    public static void main(String[] args) {
      Game game = new Game();
        System.out.println("========欢迎来到猜拳游戏==========");
        System.out.println("游戏规则:三局两胜,每局统计分数,判断哪一方获胜,三局过后,得到最终胜利玩家"+'\n'+"最后可以选择继续和结束游戏");
        System.out.println("==================");
      game.start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值