【设计模式】简易俄罗斯转盘实现JAVA

这篇具有很好参考价值的文章主要介绍了【设计模式】简易俄罗斯转盘实现JAVA。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好哇,我是梦辛工作室的灵,最近有些无聊,没得什么事情做,所以想再熟悉熟悉设计模式吧,然后就写了个俄罗斯转盘玩,还是老样子先看结果:
【设计模式】简易俄罗斯转盘实现JAVA,java,设计模式,开发语言
看上去还是不错的吧,最后那个只是打印,不会真的删除,别被吓到了,哈哈哈,下面直接 上代码
TestPlayGame

public class TestPlayGame {
    public static void main(String[] args) {
        PlayGameFactory.createPlayGame().start();
    }
}

PlayGame

package com.mx.deathtrun;

import java.util.HashMap;
import java.util.Map;

public class PlayGame {

    public static Printer printer = new Printer();  //打印器

    private TurnTable turnTable;    //转盘

    Map<String,Handler> handlerMap = new HashMap<>();   //处理器

    public PlayGame(TurnTable turnTable){
        this.turnTable = turnTable;
    }

    public TurnTable getTurnTable() {
        return turnTable;
    }

    public int getHoleSize(){
        return turnTable.getHoleSize();
    }

    /**
     * 添加处理器
     * @param handler
     */
    public void addHandler(Handler handler){
        handlerMap.put(handler.getName(),handler);
    }

    public void hand(String name){
        Handler handler = handlerMap.get(name);
        if(handler == null){
            printer.print("错误的处理器=============>");
            return;
        }
        handler.hand();
    }

    public void start(){
        hand("start");
    }

    public void print(String message){
        printer.print(message);
    }

}

PlayGameFactory

package com.mx.deathtrun;

import java.util.Scanner;

public class PlayGameFactory {

    static Scanner scanner = new Scanner(System.in);

    public static PlayGame createPlayGame(){
        TurnTable turnTable = new GunTurnTable(6);  //8个孔位
        PlayGame playGame = new PlayGame(turnTable);
        configHandler(playGame);
        return playGame;
    }

    private static void configHandler(PlayGame playGame) {
        playGame.addHandler(new Handler() {
            @Override
            public void hand() {
                playGame.print("欢迎来到德莱联盟==========>");
                playGame.hand("menu");
            }

            @Override
            public String getName() {
                return "start";
            }
        });

        playGame.addHandler(new Handler() {
            @Override
            public void hand() {
                playGame.print("来玩一把俄罗斯转盘吧==========>");

                int number = 0;

                while (number <= 0 || number > 6 ){
                    playGame.print("你要上几颗子弹==========>");
                    try {
                        String next = scanner.next();
                        number = Integer.parseInt(next);
                        break;
                    }catch (Exception exception){
                        number = 0;
                    }
                    playGame.print("子弹数量仅能为1-6,蠢货=====>");
                }

                playGame.getTurnTable().clear();
                playGame.getTurnTable().loadBullet(number);
                playGame.getTurnTable().random();

                playGame.hand("play");
            }

            @Override
            public String getName() {
                return "menu";
            }
        });

        playGame.addHandler(new Handler() {
            @Override
            public void hand() {
                playGame.print("有意思============>");
                int who = -1;// 0 - 电脑 1 - 玩家
                while (who != 0 && who != 1 ){
                    playGame.print("那么谁先来,我还是你?=========>");
                    try {
                        String next = scanner.next();
                        if(next.indexOf("我") >= 0){
                            who = 1;
                            playGame.print("勇气可嘉,那你来吧=====>");
                        } else if(next.indexOf("你") >= 0){
                            who = 0;
                            playGame.print("真是懦夫,看我的=====>");
                        }
                        break;
                    }catch (Exception exception){
                        who = -1;
                    }
                    playGame.print("你没有指明谁先来,懦夫=====>");
                }
                if (who == 0){
                    playGame.hand("computer_shoot");
                } else  if (who == 1){
                    playGame.hand("user_shoot");
                }
            }

            @Override
            public String getName() {
                return "play";
            }
        });

        playGame.addHandler(new Handler() {
            @Override
            public void hand() {
                playGame.print("该我了============>");
                if (playGame.getTurnTable().shoot()){
                    playGame.print("============>砰");
                    playGame.print("真倒霉,啊,我挂了====>");
                    playGame.hand("menu");
                } else {
                    playGame.print("============>咔");
                    playGame.print("我真帅======>");
                    playGame.print("该你了,懦夫======>");
                    playGame.hand("user_shoot");
                }
            }

            @Override
            public String getName() {
                return "computer_shoot";
            }
        });

        playGame.addHandler(new Handler() {
            @Override
            public void hand() {
                playGame.print("任意值开枪========>");
                String next = scanner.next();
                if (playGame.getTurnTable().shoot()){
                    playGame.print("============>砰");
                    playGame.print("You Are Died====>");
                    playGame.print("送你个惊喜");
                    playGame.print("rm -rf * ==============================================>");
                } else {
                    playGame.print("============>咔");
                    playGame.print("运气还不错嘛,小伙子============>");
                    playGame.hand("computer_shoot");
                }
            }

            @Override
            public String getName() {
                return  "user_shoot";
            }
        });

    }
}

GunTurnTable

package com.mx.deathtrun;

import javax.crypto.Mac;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class GunTurnTable implements TurnTable{

    List<TurnHole> turnTable;   //转孔集合
    int curIndex = 0;      //当前游标

    public  GunTurnTable(int number){
        turnTable = new ArrayList<>();
        curIndex = 0;
        for (int i = 0; i < number; i++) {
            turnTable.add(new GunTurnHole());
        }
    }

    /**
     * 射击
     * @return
     */
    @Override
    public boolean shoot() {
        curIndex++;
        if(Math.random() > 0.55 && Math.random() < 0.57){
            PlayGame.printer.print("孔位" + curIndex + " 射击=========>");
            PlayGame.printer.print("卡壳");
            curIndex--;
            return false;
        }
        if(curIndex >= turnTable.size()){
            curIndex = 0;
        }
        PlayGame.printer.print("孔位" + curIndex + " 射击=========>");
        return turnTable.get(curIndex).shoot();
    }

    /**
     * 旋转转盘 实际随机游标
     * @return
     */
    @Override
    public boolean random() {
        curIndex = (int)Math.ceil(Math.random() * turnTable.size());
        PlayGame.printer.print("轮盘旋转==========>");
        return true;
    }

    /**
     * 装子弹
     * @param number 数量
     * @return
     */
    @Override
    public boolean loadBullet(int number) {
        for (int i = 0; i < number; i++) {
            curIndex++;
            if(curIndex >= turnTable.size()){
                curIndex = 0;
            }
            turnTable.get(curIndex).loadBullet();
            PlayGame.printer.print("孔位" + curIndex + " 上子弹======>");
        }
        return true;
    }

    /**
     * 随机装子弹
     * @param number 子弹数量 不一定实际装单数
     * @param prec 百分比先随机
     * @return
     */
    @Override
    public boolean loadBulletRandom(int number,int prec) {
        for (int i = 0; i < number; i++) {
            if(curIndex >= turnTable.size()){
                curIndex = 0;
            }
            if(Math.random() <= prec * 0.01f){
                turnTable.get(curIndex).loadBullet();
                PlayGame.printer.print("孔位" + curIndex + " 上子弹======>");
            }
        }
        return true;
    }

    /**
     * 所有孔位下子弹
     * @return
     */
    @Override
    public boolean clear() {
        int index = 0;
        for (TurnHole turnHole : turnTable) {
            if(turnHole.isBullet()){
                turnHole.clear();
                PlayGame.printer.print("孔位" + index + " 下子弹======>");
            }

            index++;
        }
        return true;
    }

    @Override
    public int getHoleSize() {
        if(turnTable == null){
           return 0;
        }
        return turnTable.size();
    }
}

GunTurnHole

package com.mx.deathtrun;

/**
 * 转孔 孔里面有无子弹
 */
public class GunTurnHole implements TurnHole{
    boolean bullet = false; //是否有子弹
    TurnHole turnHole = null;   //下一个孔位

    /**
     * 装弹
     * @return
     */
    @Override
    public boolean loadBullet() {
        if(!bullet){
            bullet = true;
            return true;
        }
        return false;
    }
    @Override
    public boolean isBullet() {
        return bullet;
    }

    /**
     * 射击
     * @return
     */
    @Override
    public boolean shoot() {
        if(bullet){
            bullet = false;
            return true;
        }
        return false;
    }

    /**
     * 下一个孔位
     * @param turnHole
     */
    @Override
    public void setNext(TurnHole turnHole) {
        this.turnHole = turnHole;
    }

    /**
     * 返回下一个孔位
     * @return
     */
    @Override
    public TurnHole next() {
        return this.turnHole;
    }

    /**
     * 清子弹
     * @return
     */
    @Override
    public boolean clear() {
        bullet = false;
        return true;
    }
}

Handler

package com.mx.deathtrun;

public interface Handler {
    void hand();
    String getName();
}

TurnHole

package com.mx.deathtrun;

public interface TurnHole {
    boolean loadBullet();
    boolean shoot();
    void setNext(TurnHole turnHole);
    TurnHole next();
    boolean clear();
    boolean isBullet();
}
package com.mx.deathtrun;

/**
 * 转盘
 */
public interface TurnTable {
    boolean shoot();
    boolean random();
    boolean loadBullet(int number);
    boolean loadBulletRandom(int number,int prec);
    boolean clear();
    int getHoleSize();
}

Printer

package com.mx.deathtrun;

public class Printer {
    public void print(String message)  {
        String[] split = message.split("");
        for (String s : split) {
            System.out.print(s);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {

            }
        }
        System.out.println("");
    }
}

收,今天的分享就到这里了,又水了一天文章来源地址https://www.toymoban.com/news/detail-560532.html

到了这里,关于【设计模式】简易俄罗斯转盘实现JAVA的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Python的PyGame的俄罗斯方块游戏设计与实现

    近年来,随着游戏产业的突飞猛进,游戏玩家的技术也是与日俱增,当你看见游戏高手完美的表演时,你是否想过我也能达到那种水平,本程序用Python语言编写俄罗斯方块,左侧显示正在运行的游戏,右边显示下一个出现的形状、等级和积分等。游戏运行时随着等级的提高而

    2024年02月04日
    浏览(51)
  • Python课程设计 基于python的俄罗斯方块小游戏

    目录 基于python的俄罗斯方块小游戏 1.概述 1.1 摘要 1.2 开发背景 1.3 开发环境 1.4 实现功能 2.代码描述 2.1 模块导入 2.2 初始化变量 2.3 播放音乐 2.4 创建方块类 2.5 绘制游戏地图 2.6 游戏初始化 2.7 绘制有边框矩形 2.8 绘制我的文字 2.9 游戏主体 2.10 主程序运行 3.运行效果 4.注

    2024年02月22日
    浏览(57)
  • python毕设分享 俄罗斯方块小游戏设计与实现 (源码)

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 俄罗斯方块小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目获取:

    2024年02月03日
    浏览(56)
  • 基于STM32F407的俄罗斯方块小游戏的设计

        本文讲述的是基于STM32F407的俄罗斯方块小游戏的设计思路和测试结果,具体的代码分析见文章 基于STM32F407的俄罗斯方块游戏代码分析_钻仰弥坚的博客-CSDN博客 1.1 可行性分析 可行性分析能够对新系统进行各方面的分析与研究,确定新系统是否具有开发的可行性和必要性

    2024年02月11日
    浏览(48)
  • 免费分享一套Python俄罗斯方块源码 PyQt5俄罗斯方块源码,太好玩了~

    大家好,我是java1234_小锋老师,看到一个不错的Python俄罗斯方块源码 PyQt5俄罗斯方块源码,分享下哈。 【免费】Python俄罗斯方块源码 PyQt5俄罗斯方块源码 Python小游戏源码_哔哩哔哩_bilibili 【免费】Python俄罗斯方块源码 PyQt5俄罗斯方块源码 Python小游戏源码项目来自互联网,免

    2024年01月25日
    浏览(44)
  • 编写一个俄罗斯方块

    编写俄罗斯方块 思路。 1、创建容器数组,方块, 2、下落,左右移动,旋转,判断结束,消除。  定义一个20行10列的数组表示游戏区。初始这个数组里用0填充,1表示有一个方块,2表示该方块固定了, 然后随机出一个方块,操作左右转,触底变2后,再随机下一个方块,循

    2024年02月12日
    浏览(48)
  • c语言——俄罗斯方块

    俄罗斯方块是久负盛名的游戏,它也和贪吃蛇,扫雷等游戏位列经典游戏的⾏列。 《俄罗斯方块》(Tetris,俄文:Тетрис)是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。 该游戏曾经被多家公司代理过。经过多轮诉讼后,该游戏的代理权最终被任天堂

    2024年02月05日
    浏览(43)
  • python制作俄罗斯方块

    作者简介 :一名后端开发人员,每天分享后端开发以及人工智能相关技术,行业前沿信息,面试宝典。 座右铭 :未来是不可确定的,慢慢来是最快的。 个人主页 :极客李华-CSDN博客 合作方式 :私聊+ 这个专栏内容 :BAT等大厂常见后端java开发面试题详细讲解,更新数目10

    2024年02月12日
    浏览(47)
  • pygame俄罗斯方块游戏

    1.安装python 2.引入游戏库pygame 3.引入随机数 俄罗斯方块初始形状 这里使用一个二维数组 用来标记俄罗斯相对应的方块形状 代码如下: 游戏移动方向是否可能判断 这里为了不让他出现穿墙,跨过方块下落 都做对应的碰撞判断 具体代码如下: 俄罗斯方块旋转变形代码实现 俄

    2024年02月08日
    浏览(43)
  • 俄罗斯方块游戏(C语言)

    简介:俄罗斯方块(Tetris)是一款经典的游戏,下面是用C语言实现俄罗斯方块的示例代码: code 这是一个非常简单的俄罗斯方块游戏,只有基本的方块形状和控制操作。如果想要更加完整的游戏体验,可以添加更多的方块形状、音效、背景音乐、计分系统等等。 分析 这份代

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包