面向对象——剪刀石头布

面向对象开发设计剪刀石头布:

游戏至少有两个对象(玩家,电脑)

编程的逻辑:即游戏规则(出拳,判断谁出谁赢)

因为出拳比较困难,这里我们把剪刀石头布分别对应换成1,2,3

(1)分析游戏需要有几个类

两个玩家——>两个类,玩家类,电脑类

判断类——>判断(根据游戏规则去判断输赢)

主函数——>main

(2)找出需要封装的内容

玩家类:(属性)姓名,出拳名称

                (方法)出拳

电脑类:(属性)姓名,出拳名称

                (方法)出拳

裁判:(属性)

                (方法)判断

主函数:main函数

(3)找出不同类之间的继承关系

电脑类和玩家类——>继承同一个类

(4)多态

玩家类和电脑类转化成参与者类归纳,有继承和没有继承关系的类

主程序思想如下:

1、封装类时,私有化变量。

(1)所有变量做getter和setter方法

(2)当前类的无参和有参构造函数

(3)重写当前类的toString()方法

2、显示出界面,以及玩家选项

3、在判断类中,用数组来进行判断输赢。针对电脑和玩家的出拳,用差值来判断输赢。

4、实例化所有类

分区代码如下

电脑类

import java.util.Scanner;

public class Computer extends Joiner{
    @Override
    public void choice() {
        this.setChoiceName((int)(Math.random()*3+1));
    }
    @Override
    public void name_setting() {
        super.name_setting();
        String[] computer_names={"蜡笔小新","哆啦A梦"};
        System.out.println("*******************");
        System.out.println("1-----蜡笔小新");
        System.out.println("2-----哆啦A梦");
        System.out.println("*******************");
        System.out.println("请选择对阵玩家代码;");
        Scanner scanner = new Scanner(System.in);
        System.out.println("注意:必须输入内容,然后再回车,不能是空格加回车,否则程序执行不下去");
        try{
            //把scanner的nextInt先接收一下
            int tmp=scanner.nextInt();
            this.setName(computer_names[tmp-1]);
        }catch (Exception e){
        }
    }
}

玩家类

import java.util.Scanner;

public class Player extends Joiner{
    @Override
    public void choice() {
        System.out.println("****请玩家选择出拳的代表数字*********");
        System.out.println("1------剪刀");
        System.out.println("2------石头");
        System.out.println("3------布");
        System.out.println("*********************************");
        Scanner scanner = new Scanner(System.in);
        try{
            this.setChoiceName(scanner.nextInt());
        }catch (Exception e){
            this.setChoiceName((int) (Math.random()*3+1));
        }
    }
    @Override
    public void name_setting() {
        System.out.println("请输入玩家名称");
        Scanner scanner =new Scanner(System.in);
        String line=scanner.nextLine();
        if (!line.trim().equals("")){
            this.setName(line);
        }else {
            super.name_setting();
        }
    }
}

判断类

public class Judge extends Joiner{
    //裁判
    public void juder_winner(Player player, Computer computer){
        String[] arrs={"平局","赢","输"};
        try{
            System.out.println(arrs[sub_player]);
        }catch (Exception e){
            System.out.println("电脑"+arrs[Math.abs(sub_player)]);
        }
        System.out.println("双方出牌情况");
        String[] player_choices={"剪刀","石头","布"};
        System.out.println("玩家出拳:"+player_choices[player.getChoiceName()-1]);
        System.out.println("电脑出拳:"+player_choices[computer.getChoiceName()-1]);
    }
}

主函数

import java.util.Scanner;
public class MyMain {
    public static void main(String[] args) {
        Player player=new Player();
        Computer computer=new Computer();
        Judge judge =new Judge();
        System.out.println("**************");
        System.out.println(" 游戏,剪刀石头布");
        System.out.println("        作者:张三");
        System.out.println("**************");
        System.out.println("欢迎进入游戏,请输入玩家的名字");
        System.out.println("输入回车后,游戏开始");
        Scanner scanner = new Scanner(System.in);
        scanner.nextLine();
        System.out.println("游戏开始.......");
        player.name_setting();
        computer.name_setting();
        player.choice();
        computer.choice();
        judge.juder_winner(player,computer);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

从头开ぃ始176

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

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

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

打赏作者

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

抵扣说明:

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

余额充值