Håller på att mixtra och har mig här hemma, funderade på att göra en hangman i bara text, ingen grafik dvs. Men jag kommer inte på hur jag skall fortsätta härifrån.
För ordet måste ju på nått vis sparas, dvs kanske i en session eller i en helt annan fil. Sedan måste jag också spara alla felaktiga angivna bokstäver, detta i en fil tänkte jag också.
Samma med de rätta bokstäverna... men jag tar mig inte vidare här ifrån utan att sitta och dunka huvudet i vägen... :OO
/***************************************************/
// Deklarera variablar.
$filename="hangman_ord.txt"; // Textfilen med orden.
$savefile="hangman_ordet.txt"; // Det fram loopade ordet.
$savefile1="hangman_ratt.txt"; // de rätta bokstäverna.
$savefile2="hangman_bad.txt"; // felaktiga bokstäver.
$line = "";
$antal_ord = 0;
/***************************************************/
// Skapa en funktion som öppnar textfilen och läser in orden.
function GetWords($filename) {
$file = fopen($filename,"r");
if(!$file) {
echo "Filen kunde inte öppnas!";
exit;
} else {
$ret = "";
while ( !feof( $file) ) {
$line = fgets( $file, 20 );
$ret.=$line;
}
return $ret;
}
}
/***************************************************/
/* Plocka ut ett ord efter ord och placera dem i array,
för att sedan randomisera fram ett ord */
function GetWordFromArray($text) {
$text = split("\n",$text);
$i = 1;
$antal_ord=sizeof($text)-1;
$rand_word = rand(0, $antal_ord);
$new_word=$text[$rand_word];
return $new_word;
}
// dippa ersätt bokstäver med __.
function HideWord($text) {
$textsize = strlen($text);
$letters = "";
$letter = "";
global $arrletters;
$arrletters = array();
for($i=0;$i <= $textsize;$i++) {
$letter = substr($text,$i,1);
$arrletters[$i] = $letter;
if($letter==" ") {
$letters.=str_replace($letter," ",$letter);
} else {
$letters.=str_replace($letter,"__ ",$letter);
}
}
return $letters;
}
/***************************************************/
// Skallebank i vägg, slääääga i skallen... slit och stonk...
/***************************************************/
Om jag är totalt ute och cyklar i mitt tankesätt SÄG TILL! Vill gärna ha lite idéer och hjälp på traven! :e
Jag tycker att det verkar dumt att spara bokstäverna man har valt i en textfil.
Så här skulle jag nog ha gjort det:
Ha en textfil med alla möjliga ord och välj ett av dem slumpmässigt när man kommer till sidan. Spara sedan undan detta ord i en sessions-variabel.
När man gissar på en bokstav sparas denna i en sessions-array (förslagsvis i en array om bokstaven är "rätt" och i en annan array om bokstaven är "fel").
Sen orkar jag inte tänka längre, eftersom det blir en massa pillande :)
men det var vad jag tror skulle vara smidigast eftersom det då inte har någon betydelse om det är flera användare inne samtidigt eller inte. Dessutom är det lättare att hämta sessionsvariabler än att hålla på att läsa från och skriva till textfiler.
När man gissar på en bokstav sparas denna i en sessions-array (förslagsvis i en array om bokstaven är "rätt" och i en annan array om bokstaven är "fel").
Hade den tanken också, ialla fall detta med att spara ordet i en session.
Men när det kom sedan till att spara en array i en session så vart jag störd.. för om jag exempel skall kolla om en bokstav finns i arrayen som vi kan kalla letters
Eftersom jag först skapade en array som delade ordet liksom denna:
Då fick jag ju alla enskilda bokstäver i en array för att på så sätt underlätta om den sökta bokstaven fanns eller inte..
om den fanns, så åkte den in i en array, om inte in i en annan... men det var då jag fick problemos.. :l
Men det är ju här allt blir fel... för här blir alla utrymmen i arrHits vektorn samma som sökta bokstaven om den finns, och detta gäller även för arrMiss vektorn om bokstaven inte finns..
Om jag förstått det rätt är problemet att du inte sparar arrayerna i en session och därför inte vet vilka bokstäver man missat och träffat med från föregående gissning. Stämmer det?
Isåfall kan du slänga ett öga på http://www.webforum.nu/showthread.php?s=&postid=730623#post730623. Det går nämligen att spara arrayer i sessions och då behöver du bara spara $arrHits och $arrMiss i en varsin session och hämta efter varje gissning och fylla på dessa. :)
Jag tycker denna loopen ser lite lustig ut.
Att ha $i för att hitta en plats i vektorn är väl inte jättebra, tycker jag, för när man väl skickar in en ny bokstav, så kommer väl (förutsatt att man sparat vektorerna så att den inte är tom när scriptet kör igång igen) $i att börjar på noll igen, och börjar tilldela gamla (redan tilldelade) platser i vektorn?
Skulle tycka att denna loop såg iaf. lite bättre ut:
Sedan skulle ju jag först (ovanför denna koden) skriva dit en if-sats som kollar om $_SESSION['arrHits'] finns (finns inte denna borde det vara första gången scriptet körs, och då måste man välja ett ord, och skapa sessionenen med $arrLetters, $arrHits och $arrMiss, och om dessa finns, så bara skriva till dem.
(Har inte direkt koll på om man kan mata in värden direkt i $_SESSION['arrHits'][] så som jag skrivit, men går inte det så får man väl ta omvägen via
Här kommer den uppdaterade koden... men lika fullt i fan så är det säkert något nu extremt stort fel.
Felaktiga bokstäver eller rätta bokstäver skrivs ej ut. Har tre frågor längst ned i koden.
<?
error_reporting("E^ALL");
session_start();
session_register("arrHits");
session_register("arrMiss");
session_register("arrletters");
session_register("word");
/***************************************************/
// Deklarera variablar.
$filename="hangman_ord.txt"; // Textfilen med orden.
$line = "";
$antal_ord = 0;
/***************************************************/
// Skapa en funktion som öppnar textfilen och läser in orden.
function GetWords($filename) {
$file = fopen($filename,"r");
if(!$file) {
echo "Filen kunde inte öppnas!";
exit;
} else {
$ret = "";
while ( !feof( $file) ) {
$line = fgets( $file, 20 );
$ret.=$line;
}
return $ret;
}
}
/***************************************************/
/* Plocka ut ett ord efter ord och placera dem i array,
för att sedan randomisera fram ett ord */
function GetWordFromArray($text) {
$text = split("\n",$text);
$i = 1;
$antal_ord=sizeof($text)-1;
$rand_word = rand(0, $antal_ord);
$new_word=$text[$rand_word];
return $new_word;
}
// dippa ersätt bokstäver med __.
function HideWord($text) {
$textsize = strlen($text);
$letters = "";
$letter = "";
$_SESSION['arrletters'] = array();
for($i=0;$i <= $textsize;$i++) {
$letter = substr($text,$i,1);
$_SESSION['arrletters'][$i] = $letter;
if($letter==" ") {
$letters.=str_replace($letter," ",$letter);
} else {
$letters.=str_replace($letter,"__ ",$letter);
}
}
return $letters;
}
/***************************************************/
// Skallebank i vägg, slääääga i skallen... slit och stonk...
/***************************************************/
function CheckIfLetterExists($letter) {
$_SESSION['arrHits'] = array();
$_SESSION['arrMiss'] = array();
foreach($_SESSION['arrletters'] as $v) {
if($v == $letter) {
$_SESSION['arrHits'][] = $v;
} else {
$_SESSION['arrMiss'][] = $_POST['bokstav'];
}
}
header("Location: index.php");
}
/***************************************************/
// Anropa funktionerna som visar det nya maskerade ordet.
if($_POST['submit'] == "nytt ord") {
$_SESSION['word'] = HideWord(GetWordFromArray(GetWords($filename)));
header("Location: index.php");
}
/***************************************************/
// Anropa funktionen som kollar om bokstaven finns eller ej.
if($_POST['submit'] == "skicka") {
CheckIfLetterExists($_POST['bokstav']);
}
/***************************************************/
// Skriv ut ordet som är maskerat.
echo $_SESSION['word']."<br><br>";
/***************************************************/
// Skriv ut varje bokstav som finns i ordet.
if(count($_SESSION['arrHits']) < 0) {
foreach($_SESSION['arrHits'] as $v) {
echo $v." ";
}
}
/***************************************************/
// Skriv ut ett formulär.
echo <<< EOT
<form action="index.php" method="POST">
<input type="text" name="bokstav" value="">
<input type="submit" name="submit" value="skicka">
<input type="submit" name="submit" value="nytt ord">
</form>
EOT;
/***************************************************/
// Skriv ut de bokstäver som inte finns.
echo "Bokstäverna finns ej: ";
if(count($_SESSION['arrMiss']) < 0) {
foreach($_SESSION['arrMiss'] as $v) {
echo $v." ";
}
} else {
echo "";
}
/***************************************************/
/* Skalle bank... fortfarande... har mina frågor här:
Frågor:
1. ) Kan man verkligen smocka in en vektor i en session?
2. ) I sådana fall gör man som vanligt med sessioner?
3. ) Skriver man ut värdena i den vektor som finns i sessionen på samma sätt som med en vanlig vektor?
*/
?>