Java面向对象开发剪刀石头布游戏

介绍

今天作业的需求是利用Java的 面向对象来完成石头剪刀布这个小游戏。

既然是利用面向对象的方式,那么一定会用到接口、与 的概念。
没有基础的小伙伴们可以在CSDN 以及 百度搜索引擎了解

需求分析

角色

  • 用户
  • 系统

用户则负责出拳 、 出拳采用Scannernext()方法控制
系统则通过Java的随机(Random)类来写随机算法出拳

面向对象

要了解以下相关知识点

  • 接口

没有面向对象基础的可以提前预习一下

准备工作

  • Game(接口)

定义接口Game
方法定义: onStart()onOver()onResult()

上代码

package cn.marinda.controll;

import cn.marinda.data.SystemData;
import cn.marinda.data.UserData;

public interface Game {
    /** Game游戏接口
     *
     *
     */

    /** 开始游戏的接口 方法
     *
     */
    public void onStart();

    /** 结束游戏的接口 方法
     *
     */
    public void onOver();

    /** 游戏结果的接口 方法
     *
     * @param userData
     * @param systemData
     * @return
     */
    public boolean onResult(UserData userData,SystemData systemData);

}

  • SystemData & UserData

定义SystemData & UserData
定义属性: String Plans(出拳)

上代码

package cn.marinda.data;

public class SystemData {
    private String plans = "";

    public SystemData(String plans)
    {
        this.plans = plans;
    }

    public SystemData()
    {

    }

    public void setPlans(String plans){
        this.plans = plans;
    }

    public String getPlans(){
        return plans;
    }
}

&

package cn.marinda.data;

public class UserData {
    private String plans = "";

    public UserData(String plans)
    {
        this.plans = plans;
    }

    public UserData()
    {

    }

    public void setPlans(String plans){
        this.plans = plans;
    }

    public String getPlans(){
        return plans;
    }
}

到这里我们的准备工作完成了

功能实现

  1. 定义一个GameHandle 类来实现 Game接口并实现相关方法
package cn.marinda.handle;

import cn.marinda.controll.Game;
import cn.marinda.data.SystemData;
import cn.marinda.data.UserData;
import cn.marinda.mannager.GameDataMannager;
import cn.marinda.utils.SystemUtils;
import javafx.application.Application;

import java.util.Scanner;

public class GameHandle implements Game {

    public GameHandle()
    {

    }
    /**
     * 开始游戏的接口 方法
     *
     */


    @Override
    public void onStart() {
        while(true){
            System.out.println("欢迎游玩 石头剪刀布 游戏");
            Scanner sc = new Scanner(System.in);
            System.out.println("请出拳:");
            String nextPlans = sc.next();
            GameDataMannager dm = GameDataMannager.instance;
            UserData userDatas = dm.getUserData(nextPlans);
            String systemPlans = SystemUtils.onRandomResult();
            SystemData systemDatas = dm.getSystemData(systemPlans);
            System.out.println("系统出拳是:" +systemPlans);
            onResult(userDatas, systemDatas);
            System.out.println("按Q退出其他键继续!");
            String str = sc.next();
            if(SystemUtils.isExit(str)){
                onOver();
            }else{
                continue;
            }
        }

    }

    /**
     * 结束游戏的接口 方法
     *
     */
    @Override
    public void onOver() {
        System.out.println("退出游戏成功!");
        System.exit(0);
    }

    /**
     * 游戏结果的接口 方法
     *
     * @param userData
     * @param systemData
     * @return
     */
    @Override
    public boolean onResult(UserData userData, SystemData systemData) {
       SystemUtils.endResult(userData.getPlans(),systemData.getPlans());

        return true;
    }

}

  1. 定义一个游戏数据管理类 (GameMannager)
package cn.marinda.mannager;

import cn.marinda.data.SystemData;
import cn.marinda.data.UserData;

public class GameDataMannager {
    /** GameData 游戏数据管理器
     *
     */
    public static GameDataMannager instance = new GameDataMannager();
    public GameDataMannager()
    {

    }

    public SystemData getSystemData()
    {
        return new SystemData();
    }

    public SystemData getSystemData(String plans)
    {
        return new SystemData(plans);
    }

    public UserData getUserData()
    {
        return new UserData();
    }

    public UserData getUserData(String plans)
    {
        return new UserData(plans);
    }

}

系统工具类

主要实现相关 游戏逻辑 以及 猜拳机制 算法和结算
定义一个 SystemUtils

package cn.marinda.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class SystemUtils {
    /** SystemUtils
     *  主要负责随机算法以及胜负判断
     *
     *
     */

    public static String onRandomResult()
    {
        Random random = new Random();
        int numx = random.nextInt(3);
        String plans = setPlans(numx);
        return plans;
    }

    /** 设置 返回字符串
     *
     *
     * @param num
     * @return
     */

    public static String setPlans(int num){

        switch (num){
            case 0:
                return "石头";
            case 1:
                return "布";
            case 2:
                return "剪刀";
        }
        return null;
    }


    /** 游戏计算结果
     *
     * @param userPlans
     * @param systemPlans
     */
    public static void endResult(String userPlans,String systemPlans)
    {
        int wins = 0;
        switch (userPlans){
            case "石头":
                 wins = isWin(systemPlans);
                if(wins == 1){
                    System.out.println("你输了!再接再厉");
                }else if(wins == 2){
                    System.out.println("你赢了!很棒!");
                }else if(wins == 0){
                    System.out.println("这局平!");
                }
                break;
            case "剪刀":
                 wins = isWin(systemPlans);
                if(wins == 1){
                    System.out.println("你赢了!很棒!");
                }else if(wins == 2){
                    System.out.println("这局平!");
                }else if(wins == 0){
                    System.out.println("你输了!再接再厉");
                }
                break;

            case "布":
                wins = isWin(systemPlans);
                if(wins == 1){
                    System.out.println("这局平!");
                }else if(wins == 2){
                    System.out.println("你输了!再接再厉");
                }else if(wins == 0){
                    System.out.println("你赢了!很棒!");
                }
                break;
        }

    }

    /** 根据字符串返回数字进行比较
     *
     * @param systemPlans
     * @return
     */

    public static int isWin(String systemPlans){
        //0 -> 石头
        if(systemPlans.equalsIgnoreCase("石头")){
            return 0;
        }
        else if(systemPlans.equalsIgnoreCase("剪刀"))
        {
            return 2;
        }
        else if(systemPlans.equalsIgnoreCase("布")){
            return 1;
        }
        return -1;
    }


    public static boolean isExit(String exitStr)
    {
        if(exitStr.equalsIgnoreCase("q")){
            return true;
        }
        return false;
    }

}

main方法

package cn.marinda;

import cn.marinda.handle.GameHandle;

public class Application {

    public static void main(String[] args) {
        application();

    }

    private static void application()
    {
        GameHandle handle = new GameHandle();
        handle.onStart();
    }
}

完成功能

注意事项

了解面向对象相关知识、熟练掌握 接口定义使用 以及相关实现类

关于一直强调的 面向对象知识

  • 可以看CSDN其他博主文章以及自行百度
  • 对发布的内容有疑问的欢迎评论指出
  • 感谢观看
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,以下是一个简单的剪刀石头布游戏Java代码: ```java import java.util.Random; import java.util.Scanner; public class RockPaperScissorsGame { public static void main(String[] args) { System.out.println("欢迎来到剪刀石头布游戏!"); System.out.println("请输入您的选择:1.剪刀 2.石头 3.布"); Scanner scanner = new Scanner(System.in); int playerChoice = scanner.nextInt(); if (playerChoice < 1 || playerChoice > 3) { System.out.println("输入无效!"); return; } String[] choices = {"剪刀", "石头", "布"}; String computerChoice = choices[new Random().nextInt(choices.length)]; System.out.println("电脑出了:" + computerChoice); int result = getResult(playerChoice, computerChoice); if (result == 0) { System.out.println("平局!"); } else if (result == 1) { System.out.println("恭喜您,您赢了!"); } else { System.out.println("很抱歉,您输了!"); } } public static int getResult(int playerChoice, String computerChoice) { if (playerChoice == 1) { // 玩家出剪刀 if (computerChoice.equals("剪刀")) { return 0; } else if (computerChoice.equals("石头")) { return -1; } else { return 1; } } else if (playerChoice == 2) { // 玩家出石头 if (computerChoice.equals("剪刀")) { return 1; } else if (computerChoice.equals("石头")) { return 0; } else { return -1; } } else { // 玩家出布 if (computerChoice.equals("剪刀")) { return -1; } else if (computerChoice.equals("石头")) { return 1; } else { return 0; } } } } ``` 在这个代码中,我们使用了 `Scanner` 类获取用户输入的选择,并且使用 `Random` 类生成电脑的选择。然后,我们使用 `getResult` 函数计算出游戏结果,并且根据结果输出相应的信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值