一个不难但比较挠头的题目,BINGO游戏,求个思路
想在PC上模拟下SEGA流行的BINGO游戏,游戏模型简化后是这样:
在一个5*5的方格矩阵,从上方依次掉落5个小球下来,小球以随机概率依次在其中任意一个格子里面,只要有任意三个球排成一条直线,如果是斜线则必须是对角线,则算玩家BINGO了,当然,一洞只能一球。
1.根据以上条件,判断玩家是否BINGO
2.假设这5*5的方格可以分成2个部分:
(1)2组对边中点连线形成的一个十字架形,共9个洞
(2)被上述“十字架”分割成的左上A、右上B、左下C、右下D4个区域,每个区域4个洞
假设玩家可以在3个球落下时候,对A、B、C、D这4个区域(连同区域内可能以有的球)进行“旋转”,来增加形成BINGO的几率,问这种情况下如何生成“旋转”策略
为方便其见,我举例说明下,用X表示空洞,F表示有球进洞,数字表示洞的编号(如需要)
*旋转
假设左上方A在3个球形成以下:
F1
23
则左上可调整为以下任意形式:
2F
31
32
1F
13
F2
*一些旋转的例子
1.三个球后
FXXXX
XXXXX
XFXXX
XXXXX
XFXXX
旋转后:
XXXXX
XFXXX
XFXXX
XFXXX
XXXXX
直接BINGO了
2.三个球后
XFXXX
XXXXF
XXXXX
XFXXX
XXXXX
旋转后:
XXXXX
XFXFX
XXXXX
XFXXX
XXXXX
通过旋转增加了3个球的BINGO机会
3.接上例,假设第4个球出来后,正好形成这种情况:
XXXXX
XFXFX
FXXXX
XFXXX
XXXXX
这种时候,不能再通过旋转左上和左下来形成BINGO!
我先给点思路:
1。数组结构,利用几何学原理判断是否BINGO
2。定义一个类,里面包含“十字架”等单个元素和4个元素链表表示ABCD区域
就本问题的第1问,采用数组结构不失为1个好办法,但考虑到第2问,这个方法就已经鸡肋了,因为旋转的时候必须要考虑到那些可能形成BINGO的机会,当然2个方法结合起来考虑也不错,就是结构冗余比较严重了,各位给点意见,陆续加分。。