我正在做类似糖果的游戏,但我在创建逻辑时遇到了问题 让我们举一个这张地图的例子:
如何在其中一行中检查行中是否有重复数字,大于或等于3次?我不想要完整的代码,我知道它太多了,我只是想要一些提示。
我试过"如果陈述"对于每个案例,但我不认为这是一个非常好的主意,对于每个案例,应该有特殊的功能......或者至少创建一个。
我可以使用JavaScript,jQuery和PHP。
答案 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 Baker所建议
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个相同数字的行组合),此后您开始循环并在所有其他行中生成随机数除外选中的组合行,在循环中生成数字,然后比较它是否相同然后在该行中打印,如果没有则再次执行循环。