SplinterCDO Posted March 1, 2010 Report Share Posted March 1, 2010 Sveiki, Sāku spēlēties ar PHP un gribu uztaisīt spēlīti, kura liek lietotājam atminēt datora iedomātu skaitli(pagaidām tikai 5 :)). Zinu, ka šo problēmu var atrisināt savadāk neizmantojot ciklu, taču parādījās interese, vai ir iespējams izsaukt kādu idle ciklu, vai ko tamlīdzīgu un gaidīt, kamēr lietotājs nav ievadījis kādu vērtību. Skripta piemērs: while ($limenis < 10){ $iedomatais_skaitlis = 5; echo "Lūdzu ievadiet skaitli, kurš lielāks par <span style='font-weight: bold;'> 1 </span> un mazāks par <span style='font-weight: bold;'>" . 10 * $limenis . "</span>"; echo "<form action='noname1.php' method='post'>"; echo "Skaitlis: <input type='number' name='skaitlis' />"; echo " "; echo "<input type='submit' id='mysubmit' value='Apstiprināt' />"; echo "</form>"; if ($_POST["skaitlis"] == $iedomatais_skaitlis) { $limenis++; echo "Apsveicu Jūs atminējāt iedomāto skaitli <span style='font-weight: bold;'>" . $iedomatais_skaitlis . "</span>"; mainy($limenis); $iedomatais_skaitlis = -1; } else if ($_POST["skaitlis"] != NULL) { if ($_POST["skaitlis"] < $iedomatais_skaitlis) { echo "Atvainojiet, Jūsu skaitlis ir mazāks par iedomāto!"; } else if ($_POST["skaitlis"] > $iedomatais_skaitlis) { echo "Atvainojiet, Jūsu skaitlis ir lielāks par iedomāto!"; } echo "<br>"; echo "Lūdzu mēģiniet vēlreiz!"; } } //Beidzas while Tāpēc, ka šobrīd, cikls izpildās bezgalīgi :( Jau iepriekš paldies ;) Quote Link to comment Share on other sites More sharing options...
waplet Posted March 1, 2010 Report Share Posted March 1, 2010 vispirms liec ievadīt skaitli un tad taisi pārbaudi.. ja nesakrīt liec atkal ievadīt , nevis ciklu taisi Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted March 1, 2010 Report Share Posted March 1, 2010 Reku ir ideja: izvēlamies iedomātu skaitli liekam ievadīt lietotājam skaitli (aka parādam formu) lietotājs ievada skaitli (aka nospiež formas submit un lapa pārlādējas) pārbaudam ievadīto skaitli (if, else) ja skaitlis ir pareizs beidzam (izvadam 'tu uzvarēji' vai tamlīdzigi) ja skaitlis nav pareizs liekam ievadit skaitli (aka parādam formu un tad pārceļamies uz soli 3 atkal, utt kamēr nav ievadits pareizais skaitlis) Quote Link to comment Share on other sites More sharing options...
SplinterCDO Posted March 2, 2010 Author Report Share Posted March 2, 2010 Paldies par atbildēm un jā jūsu varianti strādā, ja vēlos izpildīt pārbaudi viena skaitļa atminēšanai ;) , problēma ir tur, ka, es vēlos programmu, kurā, kad spēlētājs ir atminējis skaitli, tiek iedomāts jauns skaitlis un pēc tā atminēšanas jauns un tā 10 reizes (10 līmeņi ;)), BET, patiesībā, iedomājieties, ka tās spēles nav :D , svarīgākā lieta, ko vēlos uzzināt, vai ir iespējams apturēt programmas darbību noteiktā punktā un gaidīt, kamēr lietotājs nav ievadījis neko un kad ir, tad turpināt ;) Quote Link to comment Share on other sites More sharing options...
2easy Posted March 2, 2010 Report Share Posted March 2, 2010 web serveri tā arī dara: gaida, kad useris atsūtīs kādu requestu ;) Quote Link to comment Share on other sites More sharing options...
SplinterCDO Posted March 2, 2010 Author Report Share Posted March 2, 2010 (edited) web serveri tā arī dara: gaida, kad useris atsūtīs kādu requestu ;) OK pārgāju kodam ar debugeri un atklāju, ka nebiju paredzējis situāciju, kad useris nav ievadījis neko ;) , tāpat formu arī iznesu ārpus cikla, domāju, ka tagad kods ir daudz jaukāks :D , tagad cikls visu laiku griežās un izvada tekstu par teksta ievadi, ja cenšos tekstu noslēpt, tad uz lapas neparādās vispār nekas :( , <html> <body> <?php echo "<form action='noname2.php' method='post'>"; echo "Skaitlis: <input type='number' name='skaitlis' />"; echo " "; echo "<input type='submit' id='mysubmit' value='Apstiprināt' />"; echo "</form>"; $limenis = 1; while ($limenis < 10){ $iedomatais_skaitlis = 5; echo "Lūdzu ievadiet skaitli, kurš lielāks par <span style='font-weight: bold;'> 1 </span> un mazāks par <span style='font-weight: bold;'>" . 10 * $limenis . "</span>"; if ($_POST["skaitlis"] == $iedomatais_skaitlis) { $limenis++; echo "Apsveicu Jūs atminējāt iedomāto skaitli <span style='font-weight: bold;'>" . $iedomatais_skaitlis . "</span>"; $iedomatais_skaitlis = -1; } else if ($_POST["skaitlis"] != NULL) { if ($_POST["skaitlis"] < $iedomatais_skaitlis) { echo "Atvainojiet, Jūsu skaitlis ir mazāks par iedomāto!"; } else if ($_POST["skaitlis"] > $iedomatais_skaitlis) { echo "Atvainojiet, Jūsu skaitlis ir lielāks par iedomāto!"; } echo "<br>"; echo "Lūdzu mēģiniet vēlreiz!"; } else if ($_POST["skaitlis"] == NULL){ //echo "Jūs neievadījāt skaitli!"; //echo "<br>"; } } //Beidzas while ?> </body> </html> Un 2easy , jā tas ir labs ieteikums, man nav liela pieredze ar servera puses valodām, tāpēc, kā es varu dabūt atbildi no servera, lai zinātu, ka viņš ir saņēmis manu pieprasījumu? Edited March 2, 2010 by SplinterCDO Quote Link to comment Share on other sites More sharing options...
2easy Posted March 2, 2010 Report Share Posted March 2, 2010 Un 2easy , jā tas ir labs ieteikums, man nav liela pieredze ar servera puses valodām, tāpēc, kā es varu dabūt atbildi no servera, lai zinātu, ka viņš ir saņēmis manu pieprasījumu? echo vsp tur nevajag ciklu. ievēro, ka tas kods, ko tu esi uzrakstījis, izpildās katru reizi kad useris min skaitli. izmanto sesiju līmeņa glabāšanai. palasi manuāli par $_SESSION Quote Link to comment Share on other sites More sharing options...
SplinterCDO Posted March 2, 2010 Author Report Share Posted March 2, 2010 echo vsp tur nevajag ciklu. ievēro, ka tas kods, ko tu esi uzrakstījis, izpildās katru reizi kad useris min skaitli. izmanto sesiju līmeņa glabāšanai. palasi manuāli par $_SESSION Paldies cilvēkiem, kas iepriekš rakstīja ;), man vienkārši ir jāpierod pie PHP specifikas ;) un jābeidz lietot ciklu, tur, kur tas tiešām nav nepieciešams :), <html> <body> <?php //session_start(); $_SESSION['limenis'] = 1; echo "Lūdzu ievadiet skaitli, kurš lielāks par <span style='font-weight: bold;'> 1 </span> un mazāks par <span style='font-weight: bold;'>" . 10 * $_SESSION['limenis'] . "</span>"; echo "<form action='noname2.php' method='post'>"; echo "Skaitlis: <input type='number' name='skaitlis' />"; echo " "; echo "<input type='submit' id='mysubmit' value='Apstiprināt' />"; echo "</form>"; if ($_SESSION['limenis'] < 10){ echo $_SESSION['limenis']; $iedomatais_skaitlis = 5; if ($_POST["skaitlis"] == $iedomatais_skaitlis) { $_SESSION['limenis']++; echo "Apsveicu Jūs atminējāt iedomāto skaitli <span style='font-weight: bold;'>" . $iedomatais_skaitlis . "</span>"; $iedomatais_skaitlis = -1; } else if ($_POST["skaitlis"] != NULL) { if ($_POST["skaitlis"] < $iedomatais_skaitlis) { echo "Atvainojiet, Jūsu skaitlis ir mazāks par iedomāto!"; } else if ($_POST["skaitlis"] > $iedomatais_skaitlis) { echo "Atvainojiet, Jūsu skaitlis ir lielāks par iedomāto!"; } echo "<br>"; echo "Lūdzu mēģiniet vēlreiz!"; } else if ($_POST["skaitlis"] == NULL){ echo "Jūs neievadījāt skaitli!"; echo "<br>"; } } ?> </body> </html> BET jautājums, kā es varu izmantot PHP sesiju, lai glabātu līmeņa mainīgo, tāpēc, ka tagad daru kā rakstīts manuālī, taču saņemu kļūdu :(, kad mēģinu izpildīt session_start(); Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\testis\a.php:4) in C:\xampp\htdocs\testis\a.php on line 6 Vai kāds var dot kādu padomu? Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted March 2, 2010 Report Share Posted March 2, 2010 Izlasi sho topiku: http://php.lv/f/topic/7294-headers-already-sent/ Quote Link to comment Share on other sites More sharing options...
Chapman Posted March 2, 2010 Report Share Posted March 2, 2010 pat es kā iesācējs zinu, ka šo lietu atrisinās šis - Vispirms PHP, tad tik HTML! Quote Link to comment Share on other sites More sharing options...
SplinterCDO Posted March 2, 2010 Author Report Share Posted March 2, 2010 Izlasi sho topiku: http://php.lv/f/topic/7294-headers-already-sent/ Paldies, topiks tiešām ļoti labs ;) Uztaisīju strādājošo spēlīti ar punktu sistēmu, iespēju zaudēt un uzvarēt ;), komentāri strādā mazliet nepilnīgi, bet tagad nav laika sataisīt. Ja kādam interesē var paspēlēties ;) <?php session_start(); echo "<html>"; echo "<body>"; $_SESSION['limenis']; $_SESSION['punkti']; $_SESSION['iedomatais_skaitlis']; if ($_SESSION['limenis'] == NULL || $_SESSION['limenis'] == 10) {$_SESSION['limenis'] = 1; $_SESSION['punkti'] = 100; $_SESSION['iedomatais_skaitlis'] = rand(1, 10 * $_SESSION['limenis']);}; echo "Lūdzu ievadiet skaitli, "; echo "<form action='noname2.php' method='post'>"; echo "Skaitlis: <input type='number' name='skaitlis' />"; echo " "; echo "<input type='submit' id='mysubmit' value='Apstiprināt' />"; echo "</form>"; echo "kurš lielāks par <span style='font-weight: bold;'> 1 </span> un mazāks par <span style='font-weight: bold;'>" . 10 * $_SESSION['limenis'] . "</span>"; if ($_POST["skaitlis"] == $_SESSION['iedomatais_skaitlis']) { $_SESSION['limenis']++; echo "Apsveicu Jūs atminējāt iedomāto skaitli <span style='font-weight: bold;'>" . $_SESSION['iedomatais_skaitlis'] . "</span>"; $_SESSION['punkti'] += 10; echo "<br>"; if ($_SESSION['limenis'] >= 10) {echo "Apsveicu, Jūs izgājāt spēli ;)"; echo "<br>"; echo "Jūs ieguvāt " . $_SESSION['punkti'] . " punktus!"; echo "<br>"; echo "Mēģiniet vēlreiz! :)"; } $_SESSION['iedomatais_skaitlis'] = rand(1, 10 * $_SESSION['limenis']); } else if ($_POST["skaitlis"] != NULL) { if ($_POST["skaitlis"] < $_SESSION['iedomatais_skaitlis']) { echo "Atvainojiet, Jūsu skaitlis ir mazāks par iedomāto!"; } else if ($_POST["skaitlis"] > $_SESSION['iedomatais_skaitlis']) { echo "Atvainojiet, Jūsu skaitlis ir lielāks par iedomāto!"; } echo "<br>"; echo "Lūdzu mēģiniet vēlreiz!"; $_SESSION['punkti'] -= 10; if ($_SESSION['punkti'] <= 0) { echo "<br>"; echo "Diemžēl Jūs zaudējāt :()"; echo "<br>"; echo "Jūs ieguvāt " . $_SESSION['punkti'] . " punktus!"; echo "<br>"; echo "Mēģiniet vēlreiz! :)"; $_SESSION['limenis'] = NULL; } } else if ($_POST["skaitlis"] == NULL){ echo "Jūs neievadījāt skaitli!"; echo "<br>"; } echo "</body>"; echo "</html>"; ?> Paldies :) Quote Link to comment Share on other sites More sharing options...
SplinterCDO Posted March 2, 2010 Author Report Share Posted March 2, 2010 pat es kā iesācējs zinu, ka šo lietu atrisinās šis - Vispirms PHP, tad tik HTML! Ļoti labi, apsveicu tevi ;) Quote Link to comment Share on other sites More sharing options...
briedis Posted March 2, 2010 Report Share Posted March 2, 2010 (edited) Mācies jau no sākuma nodalīt php no html :) Es rakstītu šādi (pa 10 min tikko saķēpāju): http://paste.php.lv/df644ca278590d438f59c8619bb243ac?lang=php EDIT: kādu jēgu tu saskati šajās 3 rindiņās? $_SESSION['limenis']; $_SESSION['punkti']; $_SESSION['iedomatais_skaitlis']; Edited March 2, 2010 by briedis Quote Link to comment Share on other sites More sharing options...
SplinterCDO Posted March 2, 2010 Author Report Share Posted March 2, 2010 Mācies jau no sākuma nodalīt php no html :) Es rakstītu šādi (pa 10 min tikko saķēpāju): http://paste.php.lv/df644ca278590d438f59c8619bb243ac?lang=php EDIT: kādu jēgu tu saskati šajās 3 rindiņās? $_SESSION['limenis']; $_SESSION['punkti']; $_SESSION['iedomatais_skaitlis']; Super, ļoti elegants risinājums manā skatījumā ;) Taču tā kā programmēju iekš PHP tikai kopš vakar vakara, tad domāju, ka man var piedot ;) $_SESSION['limenis']; $_SESSION['punkti']; $_SESSION['iedomatais_skaitlis']; Domāju, ka tev taisnība par šīm trim rindiņām, varēja iztikt bez deklarēšanas, taču man ir niķis no sākuma nodeklarēt mainīgos, jo pēc tam ir vieglāk saprast kas ir kas :) (droši vien ir saglabājies no Pascala :D kkk) Vēlāk izpētīšu tavu kodu sīkāk, Paldies ;) Quote Link to comment Share on other sites More sharing options...
briedis Posted March 2, 2010 Report Share Posted March 2, 2010 Nu ja tu definē mainīgos, tad viņiem vajag piešķirt vērtības :) Tā kā php nav fiksēta mainīgā tipa, tad mainīgais iegūst kaut kādu nozīmi tikai ar tā piešķirto vērtību... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.