像糖果一样的游戏逻辑

时间:2015-12-30 19:31:05

标签: javascript php jquery

我正在做类似糖果的游戏,但我在创建逻辑时遇到了问题 让我们举一个这张地图的例子:

1,3,2,1

2,2,2,3

1,3,2,2,

3,3,3,2

如何在其中一行中检查行中是否有重复数字,大于或等于3次?我不想要完整的代码,我知道它太多了,我只是想要一些提示。

我试过"如果陈述"对于每个案例,但我不认为这是一个非常好的主意,对于每个案例,应该有特殊的功能......或者至少创建一个。

我可以使用JavaScript,jQuery和PHP。

2 个答案:

答案 0 :(得分:4)

如果您使用下面的字符串表示,则preg_match()可能会有所帮助。

$rows = array(
  '1321',
  '2223',
  '1322',
  '3332',
  '3222',
  '12312322222222123123'
);


foreach($rows as $row) {
  echo $row .' 3+ repeating values: ';
  if(preg_match('/(1{3,}|2{3,}|3{3,})/',$row,$matches)) {
    echo 'Yes';
    echo ', found at pos. ' . strpos($row, $matches[0]);
    echo ' (' . $matches[0] . ')';
  } else {
    echo 'No';
  }

  echo "\n";
};

输出是:

1321 3+ repeating values: No
2223 3+ repeating values: Yes, found at pos. 0 (222)
1322 3+ repeating values: No
3332 3+ repeating values: Yes, found at pos. 0 (333)
3222 3+ repeating values: Yes, found at pos. 1 (222)
12312322222222123123 3+ repeating values: Yes, found at pos. 6 (22222222)

您可以使用http://sandbox.onlinephpfunctions.com/code/c183683c96af513e9a4b539ed8f713a685f34541

处的代码

使用PREG_OFFSET_CAPTURE标志的替代版本,如@Mark Ba​​ker所建议

foreach($rows as $row) {
  echo $row .' 3 repeating values: ';
  if(preg_match('/(1{3,}|2{3,}|3{3,})/',$row,$matches,PREG_OFFSET_CAPTURE)) {
    list($match, $pos) = $matches[0];
    echo "Yes, found at pos. $pos ($match)\n";
  } else {
    echo "No\n";
  }
};

答案 1 :(得分:2)

我有一个完成同样任务的想法 你有4行,每行有4列,你可以像这样创建简单的数组

$rows = array(
  '1321',
  '2223',
  '1322',
  '3332'
);

并开始打印元素循环 您创建一个从(1到4)范围内的随机数(它用于行选择器,这意味着存在3个相同数字的行组合),此后您开始循环并在所有其他行中生成随机数除外选中的组合行,在循环中生成数字,然后比较它是否相同然后在该行中打印,如果没有则再次执行循环。