Jump to content
php.lv forumi

Wait for input


SplinterCDO

Recommended Posts

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 ;)

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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 ;)

Link to comment
Share on other sites

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 by SplinterCDO
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

 

 

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 :)

Link to comment
Share on other sites

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 by briedis
Link to comment
Share on other sites

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 ;)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...