Jump to content
php.lv forumi

Vajadzētu palīdzību algoritma precizēšanā


Erdogans Klucis
 Share

Recommended Posts

Sveiki, ja kāds neguļ :)

 

Taisu ar PHP spēli "desas" (krustiņi-nullītes). 15x15 rūtiņu matrica, rūtiņās neredzami attēli ar linkiem. Spēlējot tie nomainās ar divu dažādu krāsu lodītēm. Veidojas tabula, kur katrai lodītei viens ieraksts - kādā krāsā, kurā rindā (y poz.), kurā stabiņā (x poz). Viss ripo, bet algoritmā ar iegūtas "desas" noteikšanu laikam esmu aizgājis ne pa to ceļu.

 

Mans variants:

- sametu ekrānu 2 dimensiju masīvā;

- ciklā braucu cauri masīvam, ņemot katru elementu (tjipa lodīti) un nosakot:

vai tādas pašas krāsas lodīte ir pa labi?

vai tādas pašas krāsas lodīte ir pa kreisi?

vai tādas pašas krāsas lodīte ir augstāk?

vai tādas pašas krāsas lodīte ir zemāk?

vai tādas pašas krāsas lodīte ir augstāk pa labi (pa diagonāli)?

vai tādas pašas krāsas lodīte ir augstāk pa kreisi (pa diagonāli)?

vai tādas pašas krāsas lodīte ir zemāk pa labi (pa diagonāli)?

vai tādas pašas krāsas lodīte ir zemāk pa labi (pa diagonāli)?

- ja kāds no šiem noteikumiem izpildās, tālāk meklēju, vai tai pašā virzienā ir vēl.

- ja tai pašā virzienā ir vēl, meklēju tālāk... ja ir vēl, meklēju tālāk... tālāk... kamēr ir VISMAZ 5 vienā rindā.

Ja vienmēr būtu iespējama "desa" tikai no 5 lodītēm, problēmu nebutu:

 

Man ir apmērm tā:

 

if ()

{

if (tur ir lodīte?)

{

if (aiz tās vēl ir?)

{

if (un aiz tās vēl?)

{

if (aha, četras ir, vai tur ir vēl viena?)

{

// "desa" ir gatava, spēle beigusies

}

}

}

}

}

 

Taču diemžēl iespējamas arī "desas" ar 6, 7, 8, 9 lodītēm. Tādas rodas no

0000 0000

0000 000

0000 00

0000 0

ja tukšajā vietā ieliek vienu 0

 

It kā jau strādā: kad tai garajā desā atrod vismaz 5 lodītes, paziņo, ka ir uzvara.

 

Bet man vajag rezultātu ielikt tabulā, piefiksējot visas rūtiņas, kurās ir "desa".

Bez tam es gribu arī tās tabulas rūtiņas, kurās ir "desa", pie uzvaras iekrāsot sarkanas.

 

Tagad iznāk mocīties ar 2 problēmām:

1. Pie cik lodītēm vienā rindā spēle ir beigusies (tjipa cik ifi iekš ifa un kurš pasaka "beigas"?

2. Piecas lodītes garajā desā atrodamas vairākas reizes:

 

000000000

00000

<- ->

 

Būšu pateicīgs par palīdzību. Ar manuāli esmu draugos. Taču algoritmu manuālī neatradīsi.

 

P.S. Pilnu skripta tekstu nerakstu, ceru, ka savu problēmu izklāstīju pietiekami skaidri.

 

Paldies par iespējamām atbildēm.

Link to comment
Share on other sites

-aiz vismaz 5 tak nav grūti paskatīties vai ir sestā, tālāk septītā utt. uzvara ir tad kad ir vairāk/vienāds ar pieci un nākošā lodīte nav vairs pareizā (vai ārpus laukuma)

 

- katru reizi nevajag cauri visam masīvam, pietiek ja pārbaudīs pa pāriem uz abām pusēm - uz augšu+leju, pa labi +pa kreisi, pa diognāli kreisās apakšējās+ labās augšējās un pa diognāli no kreisās augšējās + labās apakšējās no pēdējās ieliktās lodītes.

Edited by v3rb0
Link to comment
Share on other sites

cik es sapratu, tu manuaali raksti 5 if'us... taisi ar ciklu, piem, pa diagonaali: palielini x un y par 1 un skaties, ja ir lodiite, turpini ciklu, ja nee, tad ej aaraa. tad skaties, cik kopaa bijushas bumbinjas. ja 5 vai vairaak - uzvara.

Link to comment
Share on other sites

es esmu taisījis ciklus ar četrām iterācijām - horizontāli, vertikāli, diagonāle /, diagonāle \. Katrā no tiem eju uz abām pusēm un skaitu vienādos kauliņus. Kopsumma ir arī tā, kas uzlikusies. Uz kuru pusi iet aprakstu ar masīvu:

$dx = array(0, 1, 1, 1);

$dy = array(1, 0, 1, -1);

Tad katrā iterācijā tekošai korrdinātēm $x,$y pieskaitu $dx[$i],$dy[$i] vai, uz otru pusi ejot -$dx[$i], -$dy[$i].

Link to comment
Share on other sites

 Share

×
×
  • Create New...