LoGD Standardrelease steht hier zum Download zur Verfügung!

Home-Adresse dieser Version: anpera.net/logd
Anfragen nach dieser Version bitte an: logd@anpera.de

Zeige Source: /hangman.php

Hier klicken für den Source, ODER
Weitere Dateien, von denen du den Quelltext sehen kannst:
(Das Lesen des Source, um sich spielerische Vorteile zu verschaffen, ist nicht erlaubt. Solltest du Schwachstellen oder Fehler entdecken, bist du als Spieler verpflichtet, diese zu melden.)

Source von: /hangman.php

<?php
#####################################################
#   -hangman for LotgD 0.97 by Solovaid             #
#   -grafiken by schansche(http://via-silianae.ch/) #
#   -24.11.05                                       #
#   -codet for http://ossilein.de                   #
#   -nutzung nur erlaubt wenn eigene source auch    #
#    frei zugänglich ist                            #
#   -Kontakt: godric@ossilein.de                    #
#             ossiboy29@t-online.de                 #
#   -ICQ: 348 295 075                               #
#                                                   #
#   -copyright für function display_table liegt     #
#    nicht bei mir                                  #
#                                                   #
#   -sql von hier unten ausführen und hangman.php   #
#    in den root                                    #
#   -an beliebiger stelle mit                       #
#    addnav("Hangman","hangman.php");               #
#    verlinken, addnavs im Code anpassen            #
#                                                   #
#   -beim eintragen von neuen Wörtern in die DB     #
#    unbedingt GROß schreiben, keine Umlaute,       #
#    kein ß verwenden. Leerzeichen und - können     #
#    mit verwendet werden                           #
#                                                   #
#####################################################

/*
        "CREATE TABLE `hangman_txt` (
        `id` int(10) unsigned NOT NULL auto_increment,
        `word` varchar(20) NOT NULL default '',
        `best` int(11) NOT NULL default '',
        `errors` tinyint(3) unsigned NOT NULL default '6',
        `time` int(11) unsigned NOT NULL default '0',
        `name` varchar(50) NOT NULL default '',
        PRIMARY KEY  (id)
        ) TYPE=MyISAM;";

        Einträge in der DB mit:
        INSERT INTO hangman_txt (word) VALUES ('TEST');

*/

$ergebnis false//setze es auf true wenn zum schluß das richtige wort angezeigt werden soll
require_once("common.php");

// functions and variable
$alphabet = array ('A' => 'a','B' => 'b','C' => 'c','D' => 'd','E' => 'e',
'F' => 'f','G' => 'g','H' => 'h','I' => 'i','J' => 'j','K' => 'k','L' => 'l',
'M' => 'm','N' => 'n','O' => 'o','P' => 'p','Q' => 'q','R' => 'r','S' => 's',
'T' => 't','U' => 'u','V' => 'v','W' => 'w','X' => 'x','Y' => 'y','Z' => 'z');
session_start ();

//liest ein zufallswort aus der db aus
function zufallswort () {
    
$result db_query("SELECT id, word FROM hangman_txt ORDER BY RAND() LIMIT 1");
    
$wort db_fetch_assoc($result);
    return (
$wort);
}

// überprüfen ob spieler zur bestenliste hinzugefügt werden kann
function kontrolle_rekorde ($wordid$speed$versuche) {
    
$chk = array(false);
    
$result =db_query("SELECT * FROM hangman_txt WHERE id = ".$wordid);
    
$spalte db_fetch_assoc($result);
    if (
$versuche<$spalte['errors'] or ($versuche==$spalte['errors'] and $speed<$spalte['time']))
    
$chk[0] = true;
    if (
$spalte['errors']==6$spalte['best']='*neu**';
    
$chk['best'] = $spalte['best'];
    
$chk['errors'] = $spalte['errors'];
    
$chk['time'] = $spalte['time'];
    return 
$chk;
}

// liest die aktuelle bestenliste
function anzeige_rekorde ($wordid) {
    
$result =db_query("SELECT best, errors, time FROM hangman_txt WHERE id = ".$wordid);
    
$spalte db_fetch_assoc($result);
    return 
$spalte;
}

// zeige alle ungeratenen buchstaben mit _
function berechne_eingabe ($wort$ausklammern$alphabet) {
    
$alphabet array_flip ($alphabet);
    
$ausgeklammert strtr ($ausklammern$alphabet);
    
$ausgeklammert '/['.$ausgeklammert.']/';
    
$ausgeklammert preg_replace($ausgeklammert,'','/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/');
    
$eingabe preg_replace ($ausgeklammert,'_'$wort);
    return 
$eingabe;
}

// sucht den gewählten Buchstaben im Wort
function buchstabe_finden ($buchstabe$wort$auswahl$alphabet) {
    
$alphabet array_flip ($alphabet);
    
$buchstabe substr ($buchstabe01);
    
$buchstabe strtr ($buchstabe$alphabet);
    
$auswahl.= $buchstabe;
    if (
preg_match('/'.$buchstabe.'/'$wort)) {
        
$kontrolle true;
    }
    else {
        
$kontrolle false;
    }
    
$antwort = array ($auswahl$kontrolle);
    return 
$antwort;
}

// nun zum programm!
page_header("Hangman");
    
output("<font size='+2'>`n`c`b`@HANGMAN`b`n</font>",true);
    
output("<font size='-2'>`&by Solovaid for http://ossilein.de`0`c`n`n</font>",true);//muß unbedingt stehen bleiben, sonst verfällt das Nutzungsrecht!!!
if ($_GET[op]==''){
// ist nur dazu da um die namen zu aktuallisieren falls einer geändert wurde
        
$sql "UPDATE hangman_txt SET name='".addslashes($session[user][name])."' WHERE  best='".$session[user][acctid]."'";
        
db_query($sql);
// Löscht veraltete Rekorde von Usern, die es nicht mehr gibt
$sql="SELECT `id`,`best` FROM hangman_txt WHERE NOT `best`=''";
$result db_query($sql);
  for(
$i=0;$i<db_num_rows($result);$i++){
    
$row=db_fetch_assoc($result);
    
$sq="SELECT count(`acctid`) AS count FROM accounts WHERE acctid={$row[best]}";
    
$resul=db_query($sq);
    
$ro=db_fetch_assoc($resul);
    if(
$ro['count']==0)db_query("UPDATE hangman_txt SET name='', best='', `errors`='6', `time`='0' WHERE `id`={$row['id']}");
  }
redirect("hangman.php?op=rang");
}

//Rangliste zum Spiel
if ($_GET[op]=='rang'){
$playersperpage 50;
$op "rang";
if (
$_GET['op']) $op $_GET['op'];
$subop "most";
if (
$_GET['subop']) $subop $_GET['subop'];

$sql "SELECT count(name) AS c FROM hangman_txt WHERE best > 0 GROUP BY best";
$result db_query($sql);
$row db_fetch_assoc($result);
$totalplayers $row['c'];

$page 1;
if (
$_GET['page']) $page = (int)$_GET['page'];
$pageoffset $page;
if (
$pageoffset 0$pageoffset--;
$pageoffset *= $playersperpage;
$from $pageoffset+1;
$to min($pageoffset+$playersperpage$totalplayers);
$limit "$pageoffset,$playersperpage";

function 
display_table_hangman($title$sql$none=false$foot=false$data_header=false$tag=false){
    global 
$session$from$to$page;
    
output("`c`b`^$title`0`b `7(Seite $page: $from-$to)`0`c`n");
    
output('<table cellspacing="0" cellpadding="2" align="center"><tr class="trhead">',true);
    
output("<td>`bRang`b</td><td>`bName`b</td>"true);
    if (
$data_header !== false) {
        for (
$i 0$i count($data_header); $i++) {
            
output("<td>`b".$data_header[$i]."`b</td>"true);
        }
    }
    
$result db_query($sql) or die(db_error(LINK));
    if (
db_num_rows($result)==0){
        
$size = ($data_header === false) ? 2+count($data_header);
        
//echo $size;
        
if ($none === false$none "Keine Spieler/innen gefunden";
        
output('<tr class="trlight"><td colspan="'$size .'" align="center">`&' $none .'`0</td></tr>',true);
    } else {
        for (
$i=0;$i<db_num_rows($result);$i++){
            
$row db_fetch_assoc($result);
            if (
$row[name]==$session[user][name]){
                
//output("<tr class='hilight'>",true);
                
output("<tr bgcolor='#005500'>",true);
            } else {
                
output('<tr class="'.($i%2?"trlight":"trdark").'">',true);
            }
            
output("<td>".($i+$from).".</td><td>`&{$row[name]}`0</td>",true);
            if (
$data_header !== false) {
                for (
$j 0$j count($data_header); $j++) {
                    
$id "data" . ($j+1);
                    
$val $row[$id];
                    if (
$tag !== false$val $val " " $tag[$j];
                    
output("<td align='center'>$val</td>",true);
                }
            }
            
output("</tr>",true);
        }
    }
    
output("</table>"true);
    if (
$foot !== falseoutput("`n`c$foot`c");
}

//Ausgabe der Rangliste
$order "DESC";
if (
$_GET[subop] == "least"$order "ASC";

        
$row8 db_fetch_assoc(db_query('SELECT count(id) AS maxwort FROM hangman_txt'));
        
$row9 db_fetch_assoc(db_query('SELECT count(id) AS vergeben FROM hangman_txt WHERE best > 0'));

    
output("`c`^Die Datenbank beinhaltet momentan`@ $row8[maxwort] `^Wörter,`ndavon sind schon `@$row9[vergeben] `^Rekorde vergeben.`n`n`@Ich glaube es ist an der Zeit einige Rekorde zu brechen ;-)`n`c");
$sql "SELECT name, COUNT(best) AS data1 FROM hangman_txt WHERE best > 0 GROUP BY name ORDER BY data1 $order";

    if (
$_GET[subop] == "least"$adverb "wenigsten";
    else 
$adverb "meisten";
    
$title "Die Spieler/innen, die bei den $adverb Wörtern in der Top 10 stehen";
    
$headers = array("Wörter");
    
$none "Dieses Abenteuer hat noch keiner geschafft";
    
display_table_hangman($title$sql$nonefalse$headersfalse);

addnav("Hangman");
addnav("zum Spiel","hangman.php?op=hangman");
addnav("Zurück zum Spielzimmer","spielzimmer.php");
addnav("Sortieren nach");
addnav("Meisten""hangman.php?op=$op&subop=most&page=$page");
addnav("Wenigsten""hangman.php?op=$op&subop=least&page=$page");
addnav("Seiten");
for(
$i 0$i $totalplayers$i+= $playersperpage) {
    
$pnum = ($i/$playersperpage+1);
    
$min = ($i+1);
    
$max min($i+$playersperpage,$totalplayers);
    
addnav("Seite $pnum ($min-$max)""hangman.php?op=$op&subop=$subop&page=$pnum");
    }
}
// nun zum programm!
if ($_GET[op]=='hangman'){
// das zu erratende Wort ist bereits gewählt worden
if (isset($_GET['letter']) and isset($session['gchangman'])) {
    
$variab explode ('/'$session['gchangman']);
    
$tip $variab[0];
    
$auswahl $variab[1];
    
$versuche $variab[2];
    
$checkbuchstabe buchstabe_finden ($_GET['letter'], $tip$auswahl$alphabet);
    
$auswahl $checkbuchstabe[0];
    if (!
$checkbuchstabe[1]) {
        
$versuche $versuche +1;
    }
    
$eingabe berechne_eingabe ($tip$auswahl$alphabet);
}
else {

    
// alles löschen und neues wort auswählen

    
$versuche=0;
    
$auswahl = ('_');
    
$wort zufallswort ();
    
$tip $wort['word'];
    
$session['gcid'] = $wort['id'];
    
$eingabe berechne_eingabe ($tip$auswahl$alphabet);
    
$session['gcspeed'] = time();
}

// setzt die Variablen per PHP sessions
$session['gchangman'] = ($tip.'/'.$auswahl.'/'.$versuche);

if (
$versuche>6$versuche=6;
// Ausgabe des zu lösenden Wortes
output('<p><img src="./hangman/hang_'.($versuche+1).'.gif" style="border:0;width:100px;height:100px" alt="Miss '.$versuche.'/6" /></p>',true);
output("\n<p>\n",true);
$charakter preg_split('//'$eingabe, -1PREG_SPLIT_NO_EMPTY);
foreach (
$charakter as $buchalpha) {
    
$buchalpha strtr ($buchalpha$alphabet);
    if (
$buchalpha==' ') {
        
output(' <img src="./hangman/lb_~.gif" style="border:0;width:5px;height:20px" alt="" />',true);
    }
    else {
        
output(' <img src="./hangman/lb_'.$buchalpha.'.gif" style="border:0;width:20px;height:20px" alt="'.$buchalpha.'" />',true);
    }
    
output("\n",true);
    
output(' <img src="./hangman/lb_~.gif" style="border:0;width:5px;height:20px" alt="" />',true);
    
output("\n",true);
}
output('</p>',true);


//Auswertung
if ($tip!=$eingabe) {
    if (
$versuche>=6) {

        
// hehe, erhängt ;-)
        
output("`\$Schade, du hast Dich erhängt.`n",true);
        if (
$ergebnisoutput('Das zu erratene Wort war:`^ '.$tip,true);
        
$bestnow anzeige_rekorde ($session['gcid']);
        if (
$bestnow['errors']==6)
        
output('`n`KKein Grund zum ärgern, das Wort hat noch keiner erraten.</p>',true);
        else {
            if (
$bestnow['best']==''$bestnow['best']="Ein anonymer Spieler";
    
$sql3="SELECT name FROM accounts WHERE acctid = '".$bestnow['best']."'";
    
$result3 db_query($sql3) or die(db_error(LINK));
    
$spielername1 db_fetch_assoc($result3);

            
output("`n`^$spielername1[name] `Kbrauchte nur `^$bestnow[time] `KSekunden und `^$bestnow[errors] `KFehlversuche.</p>",true);
        }
output("<a href='./hangman.php?op=hangman'>Neues Spiel</a>",true);
addnav("Hangman");
addnav("","hangman.php?op=hangman");
addnav("Neues Spiel","hangman.php?op=hangman");
addnav("zurück zum Spielzimmer","spielzimmer.php");
    }
    else {

        
// Alphabet anzeigen und gewählte Buchstaben markieren
        
$wahl preg_split('//'$auswahl, -1PREG_SPLIT_NO_EMPTY);
        
output("\n<p>\n",true);
        
addnav("Alphabet");
        
$al=array_flip($alphabet);
        foreach (
$alphabet as $buchalpha) {
            
$kontr false;
            foreach (
$wahl as $lett) {
                if (!
strcasecmp ($buchalpha$lett)) {
                    
$kontr true;
                }
            }
            if (
$kontr) {
                
output(' <img src="./hangman/lr_'.$buchalpha.'.gif" style="border:0;width:20px;height:20px" alt="'.$buchalpha.'" />',true);
            }
            else {
                
output(' <a href="./hangman.php?op=hangman&letter='.$buchalpha.'"><img src="./hangman/lb_'.$buchalpha.'.gif" style="border:0;width:20px;height:20px" alt="'.$buchalpha.'" /></a>',true);
                
addnav($al[$buchalpha],"hangman.php?op=hangman&letter=$buchalpha");
            }
            if (
$buchalpha=='m'output("\n <br />",true);
            
output("\n",true);
        }
        
output("</p>\n",true);
    }
}
else {

    
// Word gelöst
    
output("\n<p>\n",true);
    
output("`@Gratulation! Du hast das Wort erraten",true);
    
$speed time() - $session['gcspeed'];
    
$oldbest kontrolle_rekorde ($session['gcid'], $speed$versuche);
    
//if(empty($oldbest['best'])) $oldbest['best']="ein anonymer Spieler";
    
$sql3="SELECT name FROM accounts WHERE acctid=".(int)$oldbest['best'];
    
$result3 db_query($sql3) or die(db_error(LINK));
    
$spielername db_fetch_assoc($result3);
    if(empty(
$spielername['name'])) $spielername['name']="ein anonymer Spieler";
    if (
$oldbest[0]){
        
// und das ist ein neuer rekord
        
output("`@`nund du hast einen neuen Rekord mit `^$speed `@Sekunden und nur `^$versuche `@Fehlversuchen aufgestellt!",true);
        
addnews("`&".$session[user][name]."`& hat einen neuen Rekord bei Hangman aufgestellt!`0");

         if (
$oldbest['best']!='*neu**'output("`@Alter Rekordhalter: `^$spielername[name]",true);
        
$result =db_query("update hangman_txt set errors = "
        
.$versuche.", time = ".$speed.
        
" where id = ".$session['gcid']);

        
// übertragen der rekorddaten
        
output ("</p>",true);
        
$spielerid=$session['user']['acctid'];
        
output ("<form method='post' action='./hangman.php?op=newrekord'>",true);
        
output ("<input type='hidden' name='wordid' value='{$session[gcid]}' />",true);
        
output ("<input type='hidden' name='besttime' value='$speed' />",true);
        
output ("<input type='hidden' name='besttent' value='$versuche' />",true);
        
output ("<input type='hidden' name='newbest' value='$spielerid' />",true);
        
output ("`c<input type='submit' value='Rekord eintragen' name='go' />`c",true);
        
output ("</form>",true);
    }
    
// Wort gelöst aber ein anderer war schneller
    
else {output("<p>`n`^aber`@ {$spielername['name']} `^brauchte nur`@ $oldbest[time] `^Sekunden und nur`@ $oldbest[errors] `^Fehlversuche.</p>",true);
output("<a href='./hangman.php?op=hangman'>`cNeues Spiel`c</a>",true);
addnav("Hangman");
addnav("","hangman.php?op=hangman");
addnav("Neues Spiel","hangman.php?op=hangman");
addnav("zurück zum Spielzimmer","spielzimmer.php");
}
}

addnav("","hangman.php?op=hangman&letter=a");
addnav("","hangman.php?op=hangman&letter=b");
addnav("","hangman.php?op=hangman&letter=c");
addnav("","hangman.php?op=hangman&letter=d");
addnav("","hangman.php?op=hangman&letter=e");
addnav("","hangman.php?op=hangman&letter=f");
addnav("","hangman.php?op=hangman&letter=g");
addnav("","hangman.php?op=hangman&letter=h");
addnav("","hangman.php?op=hangman&letter=i");
addnav("","hangman.php?op=hangman&letter=j");
addnav("","hangman.php?op=hangman&letter=k");
addnav("","hangman.php?op=hangman&letter=l");
addnav("","hangman.php?op=hangman&letter=m");
addnav("","hangman.php?op=hangman&letter=n");
addnav("","hangman.php?op=hangman&letter=o");
addnav("","hangman.php?op=hangman&letter=p");
addnav("","hangman.php?op=hangman&letter=q");
addnav("","hangman.php?op=hangman&letter=r");
addnav("","hangman.php?op=hangman&letter=s");
addnav("","hangman.php?op=hangman&letter=t");
addnav("","hangman.php?op=hangman&letter=u");
addnav("","hangman.php?op=hangman&letter=v");
addnav("","hangman.php?op=hangman&letter=w");
addnav("","hangman.php?op=hangman&letter=x");
addnav("","hangman.php?op=hangman&letter=y");
addnav("","hangman.php?op=hangman&letter=z");
addnav("","hangman.php?op=newrekord");
}
if (
$_GET[op]=='newrekord'){
$result =db_query("select * from hangman_txt where id = '".$_POST['wordid']."'");
$spalte =db_fetch_assoc($result);

if (
$spalte['errors']==$_POST['besttent'] and $spalte['time']==$_POST['besttime']) {
    
$res =db_query("update hangman_txt set best = '".$_POST['newbest'].
    
"', name = '".$session['user']['name'].
    
"'where id = '".$_POST['wordid']."'");
    
output ("`c`@Neuer Rekord hinzugefügt!`c",true);
}
else 
output ("`c`\$Schade. Es trat ein Fehler auf und dein Name konnte nicht gespeichert werden.`c",true);

output('<a href="./hangman.php?op=hangman">Neues Spiel</a>',true);
addnav("Hangman");
addnav("","hangman.php?op=hangman");
addnav("Neues Spiel","hangman.php?op=hangman");
addnav("zurück zum Spielzimmer","spielzimmer.php");
}
page_footer();
?>