Karel v php (robot na výuku pgr na ZŠ) – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Karel v php (robot na výuku pgr na ZŠ) – PHP – Fórum – Programujte.comKarel v php (robot na výuku pgr na ZŠ) – PHP – Fórum – Programujte.com

 

Kryštof
~ Anonymní uživatel
6 příspěvků
21. 5. 2012   #1
-
0
-

Zdravim, dělám na domácím úkolu Karel v php.. Základní verze má zvládat: krok, levobok a poloz to mám, ale potřebuji pokročilou verzi, která bude umět i parametry takže "krok 4" = 4* "krok"

demo základní verze zde: http://narwhal.php5.cz/karel/karel.php

příkazy: krok, vlevo, poloz - oddělujte entrem

---

U té pokročilé verze jsem se zasekl u toho, že když si rozdělím podle mezery pole hodnot vznikne mi např. toto:
"krok

4

levobok

3

krok"

a já potřebuji příkaz tj. krok, levobok, poloz uložit do proměnné $prikaz a parametr číslo do proměnné $cislo... podmínku na rozpoznání jestli jde o parametr nebo příkaz mám, ale nějak mi nejde zapisování do polí. ukázka zdrojáku ($hodnota1 je to smíšené pole parametrů a hodnot ve foreachi):

         if(strlen(trim($hodnota1)) == 1){
            $i++;
            $parametr[] = $hodnota1;
         } else {
            $q++;   
            $prikaz[] = $hodnota1;
         }
Nahlásit jako SPAM
IP: 213.180.34.–
CZechBoY+4
Věrný člen
21. 5. 2012   #2
-
0
-

   

$komplet=Preg_Replace('~\s{2,}~',' ',Trim($_POST['vstup']));
$radky=Explode('\n',$komplet);
foreach($radky as $radek) {
	$ex=Explode(' ',$radek);
	$prikaz[]=$ex[0];
	$parametr[]=$ex[1];
}
Nahlásit jako SPAM
IP: 213.192.10.–
Kryštof0
Duch
21. 5. 2012   #3
-
0
-

 zatim dík, k něčemu jsem se doplácal, ale funkčnost je jen částečná... po zadání dvou příkazů s parametrem pod sebe se program zacyclí

	<!-- formular -->
	<form action="karel-ex.php" method="POST">
    <textarea name="prikaz"></textarea><br />
    <input name="vykonat" type="submit" value="Vykonat" />
    </form>
    
    <?php
	$maxtr = 10;
	$maxtd = 10;
	
	if(isset($_POST["prikaz"])) {
		
			
			
			/*$pole=array(1=>'a','b','c'); 
			foreach ($pole as $klic=>$hodnota) { echo $klic.'-'.$hodnota.',';}*/
			
			//$pokyny = array('krok 5', 'krok', 'otoc 2');
			$prikazy = explode("\n", $_POST["prikaz"]);
				foreach($prikazy as $pokyn) {
				$exPrikaz = explode(' ', $pokyn);
					if(count($exPrikaz) == 2) {
						$prikaz[] = $exPrikaz[0];
						$pocet[] = $exPrikaz[1];
					} else {
						$prikaz[] = $exPrikaz[0];
						$pocet[] = 1;
					}

			switch (trim($prikaz[0])) {
				
				/* posunuti karla o jedno pole s osetrujici podminkou aby nevylezl z pole */
				case "krok":
					if($pocet[0] > 0) {
						for($i=$pocet[0];$i>0;$i--){
					switch ($_SESSION['karel']['smer']) {
							case "j": if ($_SESSION['karel']['y'] < $maxtr) {$_SESSION['karel']['y']++;} break;
							case "z": if ($_SESSION['karel']['x'] > 1) {$_SESSION['karel']['x']--;} break;
							case "s": if ($_SESSION['karel']['y'] > 1) {$_SESSION['karel']['y']--;} break;
							case "v": if ($_SESSION['karel']['x'] < $maxtd) {$_SESSION['karel']['x']++;} break;
						}}}
					break;
				
				/* zadani prikazu vlevo - otoci karla doleva o jeden smer */	
				case "vlevobok":
					if($pocet[0] > 0) {
							for($i=$pocet[0];$i>0;$i--){
						switch ($_SESSION['karel']['smer']) {
							case "j": $_SESSION['karel']['smer'] = "z"; $_SESSION['karel']['img'] = "<img src='doleva.png' alt='z' />"; break;
							case "z": $_SESSION['karel']['smer'] = "s"; $_SESSION['karel']['img'] = "<img src='nahoru.png' alt='s' />"; break;
							case "s": $_SESSION['karel']['smer'] = "v"; $_SESSION['karel']['img'] = "<img src='doprava.png' alt='v' />"; break;
							case "v": $_SESSION['karel']['smer'] = "j"; $_SESSION['karel']['img'] = "<img src='dolu.png' alt='j' />"; break;
						}}}
					break;
				
				/* poloz - polozeni objektu */	
				case "poloz":
					$_SESSION['cihlaid']++;
					$_SESSION['cihla']['cihlaid'] = $pocet1;
					$_SESSION['cihlay'] = $_SESSION['karel']['y'];
					$_SESSION['cihlax'] = $_SESSION['karel']['x'];
					$_SESSION['cihla'][$_SESSION['cihlay']][$_SESSION['cihlax']] = $_SESSION['cihla']['cihlaid'];
					//$cihla[$_SESSION['karel']['y']][$_SESSION['karel']['x']] = "X";
					//$_SESSION['cihla'][$_SESSION['karel']['y']][$_SESSION['karel']['x']] = "X";
					break;
				
				/* nastaveni defaultnich hodnot */	
				case "reset":
					$_SESSION['cihlaid'] = 0;
					$_SESSION['karel']['smer'] = "j"; 
					$_SESSION['karel']['img'] = "<img src='dolu.png' alt='j' />";
					$_SESSION['karel']['y'] = 1;
					$_SESSION['karel']['x'] = 1;
					unset($_SESSION['cihla']);
					break;
			}			
		}
	
	} else 
			/* Reset hodnot pri znovu nacteni stranky */
			{$_SESSION['cihlaid'] = 0;
			$_SESSION['karel']['smer'] = "j"; 
			$_SESSION['karel']['img'] = "<img src='dolu.png' alt='j' />";
			$_SESSION['karel']['y'] = 1;
			$_SESSION['karel']['x'] = 1;
			unset($_SESSION['cihla']);}
	
	$karel[$_SESSION['karel']['y']][$_SESSION['karel']['x']] = $_SESSION['karel']['img'];
	
	/* samotna tabulka s karlem */
	echo "<table>\n";
	for($tr=1;$tr<=$maxtr;$tr++){
		echo "<tr>\n";
			for($td=1;$td<=$maxtd;$td++){
				echo "<td align='center'>\n";
				if (isset($karel[$tr][$td])) {
				if ($karel[$tr][$td] == $_SESSION['karel']['img']) {
				echo $karel[$tr][$td];} }
				
				if (isset($_SESSION['cihla'][$tr][$td])) {
				if ($_SESSION['cihla'][$tr][$td] == $_SESSION['cihla']['cihlaid']) {
				echo $_SESSION['cihla'][$tr][$td];} }
				echo "</td>\n";
			}
		echo "</tr>\n";
	}
	echo "</table>\n";
	?>
Nahlásit jako SPAM
IP: 213.180.34.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý