Java实现刘谦春晚魔术

这篇文章详细介绍了使用Java编程实现的一个魔术牌游戏过程,涉及列表操作、用户输入处理和基于条件的牌移动规则。通过一系列步骤,最终只剩一张牌时宣布游戏成功。
摘要由CSDN通过智能技术生成

 基于集合实现,逻辑非常简单

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class LiuqianMagic {

    public static void main(String[] args) {
        //步骤1,选四张牌平均撕成两份叠在一起
        List<String> cards = initCards();
        Scanner sc = new Scanner(System.in);

        //步骤2,根据名字的长度将部分牌放到牌底
        moveCardByNameLength(cards, sc);

        //步骤3,将前三张牌插入中间
        theFirstThreeCardsGoIinTheMiddle(cards, sc);

        //步骤4,将第一张牌取出放置在一旁,并将牌顶若干张牌插入牌中间,南方人1张,北方人2张,不确定是南方人还是北方人3张
        String topCard = cards.get(0);
        cards.remove(0);
        accordingToTheNorthAndSouthInsertTheMiddle(cards, sc);

        //步骤5,男生扔掉牌顶1张,女生扔掉牌顶2张
        throwCardsAccordingToGender(cards, sc);

        //步骤6,输入魔法七字箴言,每说一个字,取出牌顶一张牌放在牌底
        sevenWordMotto(cards, sc);

        //步骤7,从牌顶开始,每次先将牌顶的一张牌放在牌底,再扔掉牌顶的一张牌,重复以上操作,直到只剩一张牌
        repeatUntilThereIsOnlyOneLeft(cards, sc);
        if (cards.get(0).equals(topCard)) {
            System.out.println("恭喜您,魔术成功");
        }
    }

    private static void repeatUntilThereIsOnlyOneLeft(List<String> cards, Scanner sc) {
        int listLength = cards.size();
        for (int i = 0; i < listLength; i++) {
            String firstCard = cards.get(0);
            cards.remove(0);
            cards.add(firstCard);
            cards.remove(0);
            if (cards.size() == 1) {
                break;
            }
        }
    }

    private static void sevenWordMotto(List<String> cards, Scanner sc) {
        System.out.println("请输入魔法口诀:");
        String input = sc.nextLine();
        if ("见证奇迹的时刻".equals(input)) {
            int length = "见证奇迹的时刻".length();
            for (int i = 0; i < length % cards.size(); i++) {
                String firstCard = cards.get(0);
                cards.remove(0);
                cards.add(firstCard);
            }
        }
        if (!"见证奇迹的时刻".equals(input)) {
            System.out.println("输入有误");
            throw new RuntimeException();
        }
    }

    private static void throwCardsAccordingToGender(List<String> cards, Scanner sc) {
        System.out.println("请输入性别,1代表男生,0代表女生");
        String s = sc.nextLine();
        int sex = Integer.parseInt(s);

        if (sex == 1) {
            cards.remove(0);
        } else {
            cards.remove(0);
            cards.remove(0);
        }
    }

    private static void accordingToTheNorthAndSouthInsertTheMiddle(List<String> cards, Scanner sc) {
        System.out.println("请输入牌数:南方为1,北方为2,不确定是南方人还是北方人为3");
        String s = sc.nextLine();
        int southernersOrNortherners = Integer.parseInt(s);

        if (southernersOrNortherners == 1) {
            System.out.println("请选择插入第几张牌的后面:输入数字1-5代表插入到第几张牌的后面");
            String s1 = sc.nextLine();
            int index = Integer.parseInt(s1);
            String firstCard = cards.get(0);
            cards.remove(0);
            cards.add(index, firstCard);
        } else if (southernersOrNortherners == 2) {
            System.out.println("请选择插入第几张牌的后面:输入数字1-4代表插入到第几张牌的后面");
            String s2 = sc.nextLine();
            int index = Integer.parseInt(s2);
            String firstCard = cards.get(0);
            String secondCard = cards.get(1);
            cards.remove(0);
            cards.remove(0);
            cards.add(index, firstCard);
            cards.add(index + 1, secondCard);
        } else {
            System.out.println("请选择插入第几张牌的后面:输入数字1-3代表插入到第几张牌的后面");
            String s3 = sc.nextLine();
            int index = Integer.parseInt(s3);
            String firstCard = cards.get(0);
            String secondCard = cards.get(1);
            String thirdCard = cards.get(2);
            cards.remove(0);
            cards.remove(0);
            cards.remove(0);
            cards.add(index, firstCard);
            cards.add(index + 1, secondCard);
            cards.add(index + 2, thirdCard);
        }

    }

    private static void theFirstThreeCardsGoIinTheMiddle(List<String> cards, Scanner sc) {
        System.out.println("请选择把前三张牌插入的位置:输入数字1-4代表插入到第几张牌的后面");
        String s = sc.nextLine();
        int index = Integer.parseInt(s);
        String firstCard = cards.get(0);
        String secondCard = cards.get(1);
        String thirdCard = cards.get(2);
        cards.remove(0);
        cards.remove(0);
        cards.remove(0);
        cards.add(index, firstCard);
        cards.add(index + 1, secondCard);
        cards.add(index + 2, thirdCard);

    }

    private static void moveCardByNameLength(List<String> cards, Scanner sc) {
        System.out.println("请输入名字的长度:");
        String s = sc.nextLine();
        int nameLength = Integer.parseInt(s);
        for (int i = 0; i < nameLength % cards.size(); i++) {
            String remove = cards.get(0);
            cards.remove(remove);
            cards.add(remove);
        }
    }

    private static List<String> initCards() {
        List<String> cards = new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            cards.add("恭喜发财");
            cards.add("阖家欢乐");
            cards.add("龙年大吉");
            cards.add("身体健康");
        }
        return cards;
    }
}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java老狗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值