<?php
$xxl
=
array
(
array
('', '', '', '', '', '', '', ''),
array
('', '', '', '', '', '', '', ''),
array
('', '', '', '', '', '', '', ''),
array
('', '', '', '', '', '', '', ''),
array
('', '', '', '', '', '', '', ''),
array
('', '', '', '', '', '', '', ''),
array
('', '', '', '', '', '', '', ''),
array
('', '', '', '', '', '', '', ''),
);
$point
= play(
$xxl
,
$point
);
echo
"\n共获得积分数量:{$point}"
;
$bu
= 0;
function
play(
$xxl
,
$point
){
global
$bu
;
$bu
++;
echo
'=================================开始第'.
$bu
.'步==================================';
$color
=
array
(1 => 'red',2 => 'green',3 => 'yellow',4 => 'blue',5 => 'black');
$samCol
=
array
();
$nowCol
=
array
();
$samArr
=
array
();
$group
= 1;
foreach
(
$xxl
as
$k1
=>
$v1
){
$sam
=
array
();
$now
= 1;
foreach
(
$v1
as
$k2
=>
$v2
){
if
(
empty
(
$v2
) ||
$v2
== ' '){
$v2
=
$xxl
[
$k1
][
$k2
] =
array_rand
(
$color
);
}
if
(!isset(
$nowCol
[
$k2
])){
$nowCol
[
$k2
] = 1;
}
if
(
$k1
=== 0){
$samCol
[
$k2
][
$nowCol
[
$k2
]][
$k1
.'-'.
$k2
] =
array
(
$k1
,
$k2
,
$v2
,
$k1
.'-'.
$k2
.'-'.
$v2
);
}
else
{
if
(
$v2
!=
$xxl
[
$k1
-1][
$k2
]){
$nowCol
[
$k2
] ++;
}
$samCol
[
$k2
][
$nowCol
[
$k2
]][
$k1
.'-'.
$k2
] =
array
(
$k1
,
$k2
,
$v2
,
$k1
.'-'.
$k2
.'-'.
$v2
);
}
if
(
$k2
=== 0){
$sam
[
$now
][
$k1
.'-'.
$k2
] =
array
(
$k1
,
$k2
,
$v2
,
$k1
.'-'.
$k2
.'-'.
$v2
);
}
else
{
if
(
$v2
!=
$xxl
[
$k1
][
$k2
-1]){
$now
++;
}
$sam
[
$now
][
$k1
.'-'.
$k2
] =
array
(
$k1
,
$k2
,
$v2
,
$k1
.'-'.
$k2
.'-'.
$v2
);
}
}
foreach
(
$sam
as
$x
=>
$y
){
if
(
count
(
$y
) > 2){
$key
= 'R-'.
$group
;
foreach
(
$y
as
$x2
=>
$y2
){
$y
[
$x2
]['group']['r'] =
$key
;
}
$samArr
+=
$y
;
$group
++;
}
}
}
$group
= 1;
foreach
(
$samCol
as
$k
=>
$v
){
foreach
(
$v
as
$x
=>
$y
){
if
(
count
(
$y
) > 2){
$key
= 'L-'.
$group
;
foreach
(
$y
as
$x2
=>
$y2
){
$y
[
$x2
]['group']['l'] =
$key
;
if
(isset(
$samArr
[
$x2
]['group']['r'])){
$samArr
[
$x2
]['group']['l'] =
$key
;
}
}
$samArr
+=
$y
;
$group
++;
}
}
}
$res
=
array
();
$hasRes
=
array
();
foreach
(
$samArr
as
$k
=>
$v
){
if
(isset(
$hasRes
[
$k
])){
continue
;
}
$arr
=
array
();
seek(
$samArr
,
$v
,
$arr
);
$res
[] =
array_keys
(
$arr
);
$hasRes
+=
$arr
;
}
show(
$xxl
);
if
(
empty
(
$res
)){
echo
'=================================消除完毕!==================================';
return
$point
;
}
$thisPoint
= countPoint(
$res
);
$point
+=
$thisPoint
;
$next
=
$xxl
;
foreach
(
$res
as
$k
=>
$v
){
foreach
(
$v
as
$k2
=>
$v2
){
$y
=
$samArr
[
$v2
][0];
$x
=
$samArr
[
$v2
][1];
$xxl
[
$y
][
$x
] = '*';
unset(
$next
[
$y
][
$x
]);
}
}
show(
$xxl
);
$next
= step(
$next
);
show(
$next
);
echo
"本次消除获得积分数量:{$thisPoint}\n"
;
return
play(
$next
,
$point
);
}
function
countPoint(
$xxl
){
$config
=
array
(3 => 10, 4 => 15, 5 => 20, 6 => 30, 7 => 40, 8 => 70, 9 => 100);
for
(
$i
= 10;
$i
<= 64;
$i
++){
$config
[
$i
] = 100 + (
$i
- 9) * 50;
}
$point
= 0;
foreach
(
$xxl
as
$v
){
$key
=
count
(
$v
);
$point
+=
$config
[
$key
];
}
return
$point
;
}
function
step(
$xxl
){
foreach
(
$xxl
as
$k
=>
$v
){
$temp
=
array_merge
(
$v
);
$count
=
count
(
$temp
);
if
(
$count
== 8){
continue
;
}
for
(
$i
=
$count
;
$i
<= 7;
$i
++){
$temp
[
$i
] = ' ';
}
$xxl
[
$k
] =
$temp
;
}
return
$xxl
;
}
function
seek(
$xxl
,
$one
, &
$arr
){
$near
=
array
();
$near
['up'] = (
$one
[0] - 1).'-'.
$one
[1];
$near
['down'] = (
$one
[0] + 1).'-'.
$one
[1];
$near
['left'] =
$one
[0].'-'.(
$one
[1] - 1);
$near
['right'] =
$one
[0].'-'.(
$one
[1] + 1);
foreach
(
$near
as
$v
){
if
(isset(
$xxl
[
$v
]) &&
$xxl
[
$v
][2] ==
$one
[2]){
$xj
=
array_intersect
(
$one
['group'],
$xxl
[
$v
]['group']);
if
(
empty
(
$xj
)){
continue
;
}
if
(isset(
$arr
[
$v
])){
continue
;
}
$arr
[
$v
] =
$xxl
[
$v
];
seek(
$xxl
,
$xxl
[
$v
],
$arr
);
}
}
}
function
show(
$xxl
){
$arr
=
array
();
foreach
(
$xxl
as
$k
=>
$v
){
foreach
(
$v
as
$k2
=>
$v2
){
$arr
[7-
$k2
][
$k
] =
$v2
;
}
}
ksort(
$arr
);
$str
= '';
foreach
(
$arr
as
$v
){
foreach
(
$v
as
$v2
){
$str
.= ' '.
$v2
;
}
$str
.=
"\n"
;
}
echo
"\n"
.
$str
;
}