猜生日 Java小游戏

最近看到一个很有趣的小游戏:

询问朋友5个问题,找到他出生在一个月的哪一天。每个问题都是询问他的生日是否是5个数字集合中的一个。

这5个集合分别是:

set1:1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31

set2:2 3 6 7 10 11 14 15 18 19 22 23  26 27 30 31

set3:4 5 6 7 12 13 14 15 20 21 22 23  28 29 30 31

set4:8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31

set5:16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

生日是出现这一天的每个集合的第一个数字之和,例如生日是19,那么它会出现在集合1、2和5中,三个集合的第一个数字分别是1、2和16,它们的和就是19。

用Java实现就是:

import javax.swing.JOptionPane;

public class GuessBirthday{
    public static void main(String[] args) {
        String set1=
            " 1  3  5  7\n"+
            " 9 11 13 15\n"+
            "17 19 21 23\n"+
            "25 27 29 31";  

        String set2=
            " 2  3  6  7\n"+
            "10 11 14 15\n"+
            "18 19 22 23\n"+
            "26 27 30 31";  

        String set3=
            " 4  5  6  7\n"+
            "12 13 14 15\n"+
            "20 21 22 23\n"+
            "28 29 30 31";  

        String set4=
            " 8  9 10 11\n"+
            "12 13 14 15\n"+
            "24 25 26 27\n"+
            "28 29 30 31";  

        String set5=
            "16 17 18 19\n"+
            "20 21 22 23\n"+
            "24 25 26 27\n"+
            "28 29 30 31";  

        int day=0;  

        //Prompt the user to answer questions
        int answer=JOptionPane.showConfirmDialog(null,
                "Is your birthday in these numbers?\n"+set1);  

        if(answer==JOptionPane.YES_OPTION)
            day+=1;  

        answer=JOptionPane.showConfirmDialog(null,
                "Is your birthday in these numbers?\n"+set2);  

        if(answer==JOptionPane.YES_OPTION)
            day+=2;  

        answer=JOptionPane.showConfirmDialog(null,
                "Is your birthday in these numbers?\n"+set3);  

        if(answer==JOptionPane.YES_OPTION)
            day+=4;  

        answer=JOptionPane.showConfirmDialog(null,
                "Is your birthday in these numbers\n"+set4);  

        if(answer==JOptionPane.YES_OPTION)
            day+=8;  

        answer=JOptionPane.showConfirmDialog(null,
                "Is your birthday in these numbers?\n"+set5);  

        if(answer==JOptionPane.YES_OPTION)
            day+=16;  

        JOptionPane.showMessageDialog(null, "Your birthday is "+
                day+"!");
    }
} 

运行测试:

测试日期为19

集合2:选择“是”

集合1:选择“是”

集合3:选择“否”

集合4:选择“否”

集合5:选择“是”

显示生日19,正确!

原理的话,涉及到一些二进制相关的知识。

从1到31的十进制数最多用5位的二进制数就可以表示:

十进制 二进制
1 00001
2 00010
3 00011
 
19  10011
 
31 11111

假设二进数表示为b5b4b3b2b1,

而这5个Set中的数分别是b1为1的集合,b2为1的集合,b3为1的集合,b4为1的集合,b5为1的集合,

如果某天的bk位为1,那么该数就出现在Setk中,

例如:  19的二进制数为10011,所以它就出现在Set1,Set2,Set5中;

     30的二进制数为11111,所以它在Set1~Set5中都有出现。

总之就是5个集合确定5位二进制数中对应位置上的值是1还是0,出现在集合中为1,未出现为0,最后组成一个5位二进制数,换算成10进制数就得到生日日期。

根据这个方法同理可以猜测月份,甚至年份,大家可以自行探索!

时间: 2024-10-04 02:06:24

猜生日 Java小游戏的相关文章

java编程的一个猜数字有趣小游戏

import javax.swing.Icon; import javax.swing.JOptionPane; public class ai { /** * @param args */ public static void main(String[] args) { Icon icon = null; boolean bl = false; int put = 0; int c = (int) (((Math.random())*100)+1); //获取一个1-100的随机数 Syste

《Java小游戏实现》:坦克大战(续一)

<Java小游戏实现>:坦克大战(续一) 上篇博文(http://blog.csdn.net/u010412719/article/details/51712663)只介绍到了能够控制一个坦克在4个方向上移动就结束了,今天就在此基础上继续完成一个一个的小功能. 完成的功能:根据键盘的按键控制一个坦克在8个方向上移动 要完成这个功能,我们要做一下几个事情 1.记录下键盘的按键情况,即要重写键盘按下和抬起的监听事件 采用4个boolean变量来记录,按下为true,抬起为false 具体实现的代码

Java小游戏之打飞机(二)

这篇文章本应昨天写的,可是真打算写的时候,CSDN博客维护,导致拖到了今天: 在上篇文章Java小游戏之打飞机(一)中已经详细介绍了该游戏的基本架构和需求分析,今天就详细写一写具体每个类的实现: 1)PlaneGameFrame类    ----游戏的主界面以及一些具体的飞机动作方法.碰撞检测等 代码: package plane; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java

《Java小游戏实现》:坦克大战

<Java小游戏实现>:坦克大战 前面写了一个简单的聊天小程序,今天开始就写一个坦克大战的游戏,算是对Java相关小知识点的一个应用. 这个游戏的完成,我们也是分步完成,逐步累加,一个一个小功能的添加,最后直至完成整个游戏的开发. 第一步:写一个界面 public class TankClient extends JFrame{ public static void main(String[] args) { new TankClient().launchFrame(); } public v

java小游戏代码

一. 需求分析 曾几何时,游戏是海洛因的代名词,让人与玩物丧志联系在一起,一度遭到社会反感和家长抵制.但是,随着互联网的发展,和游戏潜在好处被发现,游戏的价值开始逐渐被社会认可,人们开始接受.认识和了解游戏带来的诸多好处. 现在学生的课业负担重,娱乐时间少,人际交往少,烦恼和压力也因此相应增加.其实玩游戏不仅帮助学生调节情绪,还可以锻炼与提高他们的反应能力和手脑的快速配合能力,同时帮助他们了解电脑和网络知识等,可谓是一举多得.据调查显示,经常玩游戏的学生思维活跃.善于表达.情绪乐观,解决问题时会

《Java小游戏实现》:坦克大战(续2)

<Java小游戏实现>:坦克大战(续2) 相关博文: <Java小游戏实现>:坦克大战http://blog.csdn.net/u010412719/article/details/51712663 <Java小游戏实现>:坦克大战(续一):http://blog.csdn.net/u010412719/article/details/51723570 博文<Java小游戏实现>:坦克大战(续1)中已经实现到了坦克可以发射一颗子弹了.这篇博文在此基础上继续实

《Java小游戏实现》:坦克大战(续三)

<Java小游戏实现>:坦克大战(续三) 相关博文: <Java小游戏实现>:坦克大战http://blog.csdn.net/u010412719/article/details/51712663 <Java小游戏实现>:坦克大战(续一):http://blog.csdn.net/u010412719/article/details/51723570 <Java小游戏实现>:坦克大战(续二):http://blog.csdn.net/u010412719/

java小游戏捕鱼达人,来学做java小游戏!

Java小项目捕鱼达人 跪求关注,祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早上贵子,从不掉发! 捕鱼达人这款游戏,相信和我年纪相仿的朋友,肯定很熟悉.在当时半智能手机和智能手机刚刚出现的时代,手机里有捕鱼达人,汤姆猫,植物大战僵尸等小游戏,是很值得炫耀的,在村里那可是备受小朋友欢迎的.这篇文章来分享一下这款我当时很喜欢玩的捕鱼达人,但是要知道哦,捕鱼达人可是有一点赌博性质的,特别是游戏厅里的,大家可不能沉迷哦!先上图:这个java小游戏,虽然没有很多炫酷的特效和复杂的机制,但是作

java小游戏贪吃蛇大作战:来一起回顾童年回忆!

Java小项目之贪吃蛇 跪求关注,祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早上贵子,从不掉发! 贪吃蛇,绝对是很多朋友的童年记忆.几乎没有人会说没玩过这款小游戏,因为不管在小灵通手机,直板手机,还是半智能手机,甚至是现在的5G手机,都能看见这款游戏的身影.虽然游戏一直在进化,画面,风格,操作方式越来越精细,但是游戏本质的玩法是没变的,例如蛇不断变大,碰到墙壁会死亡等设定.这篇文章来分享java小游戏贪吃蛇:部分代码展示:这个贪吃蛇小游戏,玩法和操控,都是比较完善的,大家感兴趣的可