Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Pascal & PHP 
:(
    Опции темы
dnts
Дата 22.7.2012, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 24.4.2011

Репутация: нет
Всего: нет



Доброго времени суток, нашел в интернете алгоритм на Паскале: 

Код

Program generateur ;
type t_gen = array[0..100,0..100] of integer;
type    t_gen_final = array[1..201,1..201] of char;
Procedure NettoieCellules(var lab:t_gen; x2, y2, dim_x, dim_y, v1, v2:integer);
Begin
lab[x2,y2] := v1;
If (x2 > 0) And (lab[x2 - 1,y2] = v2) Then
NettoieCellules(lab, x2 - 1, y2, dim_x, dim_y, v1, v2);
If (x2 < dim_x-1) And (lab[x2 + 1,y2] = v2) Then
NettoieCellules(lab, x2 + 1, y2, dim_x, dim_y, v1, v2);
If (y2 > 0) And (lab[x2,y2 - 1] = v2) Then
NettoieCellules(lab, x2, y2 - 1, dim_X, dim_y, v1, v2);
If (y2 < dim_y-1) And (lab[x2,y2 + 1] = v2) Then
NettoieCellules(lab, x2, y2 + 1, dim_x, dim_y, v1, v2);
End;
procedure generer_lab(outpout:string;dim:integer);
var lab : t_gen;
dim_x,dim_y,dim_Finale:integer;
continue,rand,x1,x2,y1,y2,i,j:integer;
v1,v2,NbMurs:integer;
MH : t_gen;
MV : t_gen;
rendu : t_gen_final;
fichier:text;
begin
dim_x := dim;
dim_y := dim;
dim_Finale := 2*dim+1;
randomize;
NbMurs := 0;
For i := 0 To dim_x-1 do
For j := 0 To dim_y-1 do
lab[i,j] := i * dim_y + j;
For i := 0 To dim_x-1 do
For j := 0 To dim_y-2 do
MH[i,j] := 1;
For i := 0 To dim_x-2 do
For j := 0 To dim_y-1 do
MV[i,j] := 1;
While NbMurs <> ((dim_x*dim_y)-1) do
Begin
continue := 0;
rand := random(2)+1;
Case rand of
1:begin//Murs Horizontaux
x1 := random(dim_x);
y1 := random(dim_y-1);
If (MH[x1,y1] = 1) Then
begin
continue := 1;
x2 := x1;
y2 := y1 + 1 ;
end;
end;
2:begin//Murs Verticaux
x1 := random(dim_x-1);
y1 := random(dim_y);
If MV[x1,y1] = 1 Then
begin
continue := 1;
x2 := x1+1;
y2 := y1;
end;
end;
End;
If continue = 1 Then
Begin
v1:=lab[x1,y1];
v2:=lab[x2,y2];
If v1 <> v2 Then
Begin
// On enlève le mur
Case rand of
1:
MH[x1][y1] := 0;
2:
MV[x1][y1] := 0;
End;
// On met la même valeur dans les cases de la chaîne
NettoieCellules(lab, x2, y2, dim_x, dim_y, v1, v2);
NbMurs := NbMurs+1;
End;
End;
End;
For i := 1 To dim_Finale do
For j := 1 To dim_Finale do
rendu[i,j]:=' ';
For i := 1 to dim_Finale do
rendu[1,i]:= 'M';
For i := 1 to dim_Finale do
rendu[dim_Finale,i]:= 'M';
For i := 1 to dim_Finale do
begin
rendu[i,1]:= 'M';
rendu[i,dim_Finale]:= 'M';
end;
For i := 0 To dim_x-2 do
Begin
For j := 0 To dim_y-1 do
If (MV[i,j] = 1) Then
Begin
rendu[2*(i+1)+1,j*2+1]:= 'M';
rendu[2*(i+1)+1,j*2+2]:= 'M';
rendu[2*(i+1)+1,j*2+3]:= 'M';
End;
End;
For i := 0 To dim_x-1 do
Begin
For j := 0 To dim_y-2 do
If (MH[i,j] = 1) Then
Begin
rendu[i*2+1,(j+1)*2+1]:= 'M';
rendu[i*2+2,(j+1)*2+1]:= 'M';
rendu[i*2+3,(j+1)*2+1]:= 'M';
End;
End;
rendu[(random(dim_Finale div 2)+1)*2,1]:='E';
rendu[(random(dim_Finale div 2)+1)*2,dim_Finale]:='S';
assign (fichier,outpout);
rewrite(fichier);
For i := 1 To dim_Finale do
Begin
For j := 1 To dim_Finale do
Write(fichier,rendu[i,j]);
Writeln(fichier,'');
End;
close(fichier);
End;
var car:char;
i:integer;
fil:string;
BEGIN
fil := Concat('labyrinthe','10','.txt');
generer_lab(fil,4);
END. 


Мне нужно переписать его на PHP - вот что вышло:

Код


function NettoieCellules($x2, $y2, $dim_x, $dim_y, $v1, $v2) {
    global $lab;
    $lab[$x2][$y2] = $v1;
    if(($x2 > 0) && ($lab[$x2 - 1][$y2] == $v2))
        NettoieCellules($x2 - 1, $y2, $dim_x, $dim_y, $v1, $v2);
    if(($x2 < ($dim_x - 1)) && ($lab[$x2 + 1][$y2] == $v2))
        NettoieCellules($x2 + 1, $y2, $dim_x, $dim_y, $v1, $v2);
    if(($y2 > 0) && ($lab[$x2][$y2 - 1] == $v2))
        NettoieCellules($x2, $y2 - 1, $dim_X, $dim_y, $v1, $v2);
    if(($y2 < ($dim_y - 1)) && ($lab[$x2][$y2 + 1] == $v2))
        NettoieCellules($x2, $y2 + 1, $dim_x, $dim_y, $v1, $v2);
}

function generate_lab3($dim) {
    global $lab,$dim_Finale,$rendu;
    $dim_x = $dim_y = $dim;
    $dim_Finale = 2 * $dim + 1;
    $NbMurs = 0;
    for($i = 0; $i < $dim_x; $i++)
        for($j = 0; $j < $dim_y; $j++)
            $lab[$i][$j] = $i * $dim_y + $j;
    for($i = 0; $i < $dim_x; $i++)
        for($j = 0; $j < $dim_y - 1; $j++)
            $MH[$i][$j] = 1;
    for($i = 0; $i < $dim_x - 1; $i++)
        for($j = 0; $j < $dim_y; $j++)
            $MV[$i][$j] = 1;
            

    while ($NbMurs <> (($dim_x * $dim_y) - 1)) {
        $continue = 0;
        $rnd = rand(1, 2);
        switch($rnd) {
            case 1:
                $x1 = rand(0, $dim_x - 1);
                $y1 = rand(0, $dim_y - 2);
                echo $y1."<br>";
                if ($MH[$x1][$y1] == 1) {
                    $continue = 1;
                    $x2 = $x1;
                    $y2 = $y1 + 1;
                }
                break;
            case 2:
                $x1 = rand(0, $dim_x - 2);
                $y1 = rand(0, $dim_y - 1);
                if ($MV[$x1][$y1] == 1) {
                    $continue = 1;
                    $x2 = $x1 + 1;
                    $y2 = $y1;
                }
                break;
        }
        if ($continue == 1) {
            $v1 = $lab[$x1][$y1];
            $v2 = $lab[$x2][$y2];
            if($v1 <> $v2) {
                switch($rnd) {
                    case 1:
                        $MH[$x1][$y1] = 0;
                        break;
                    case 2:
                        $MV[$x1][$y1] = 0;
                        break;
                }
                NettoieCellules($x2, $y2, $dim_x, $dim_y, $v1, $v2);
                $NbMurs++;
            }
        }
    }

 for ($i = 1; $i <= $dim_Finale; $i++)
    for ($j = 1; $j <= $dim_Finale; $j++)
     $rendu[$i][$j] = '-';

 for ($i = 1; $i <= $dim_Finale; $i++) {
    $rendu[1][$i] = 'M';
    $rendu[$i][1] = 'M';
    $rendu[$i][$dim_Finale] = 'M';
    $rendu[$dim_Finale][$i] = 'M';
 }
 

 

 // On met les murs la ou ils doivent etre en sachant que la dimension finale va etre multipliйe par 2 puis additionйe а 1.
 for($i = 0; $i < $dim_x-1; $i++)
  for($j = 0; $j < $dim_y; $j++)
   if ($MV[$i][$j] == 1) {
    $rendu[2*($i+1)+1][$j*2+1] = 'V';
    $rendu[2*($i+1)+1][$j*2+2] = 'V';
    $rendu[2*($i+1)+1][$j*2+3] = 'V';
   }

 for($i = 0; $i < $dim_x-1; $i++)
  for($j = 0; $j < $dim_y; $j++)
   if ($MH[$i][$j] == 1) {
     $rendu[$i*2+1][($j+1)*2+1] = 'H';
     $rendu[$i*2+2][($j+1)*2+1] = 'H';
     $rendu[$i*2+3][($j+1)*2+1] = 'H';
   }
   
    for ($i = 1; $i < $dim_Finale + 1; $i++) {
        print "<tr>";
        for ($j = 1; $j < $dim_Finale + 1; $j++)
            echo "<td>".$rendu[$i][$j]."</td>";
        print "</tr>";
    }   

// $rendu[rand($dim_Finale % 2)*2][1] = 'E';
// $rendu[rand($dim_Finale % 2)*2][$dim_Finale] = 'S';


}


generate_lab3(4);




Но результат на PHP совсем не такой какой должен был быть( Подскажите пожалуйста в чем ошибка
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.