/** * Schachspiel für LotgD Dragonslayer Edition * written by Salator (salator@gmx.de) based on webchess 0.8.4 (http://webchess.sourceforge.net) * Installation siehe minigames/chess/docs/install.txt */ /* server settings */ $CFG_EXPIREGAME = 14; /* number of days before untouched games expire */ $str_extpath='minigames/chess/'; //Unterverzeichnis für Zusatz-Scripte und Grafiken $dateformat="d.m.y, H:i"; //Ausgabeformat für Zeitangaben define ("CHESS_HOF", 1); /* eine Kategorie in der Ruhmeshalle führen? */ define ("EMPTY", 0); /* 0000 0000 */ define ("PAWN", 1); /* 0000 0001 */ define ("KNIGHT", 2); /* 0000 0010 */ define ("BISHOP", 4); /* 0000 0100 */ define ("ROOK", 8); /* 0000 1000 */ define ("QUEEN", 16); /* 0001 0000 */ define ("KING", 32); /* 0010 0000 */ define ("BLACK", 128); /* 1000 0000 */ define ("WHITE", 0); define ("COLOR_MASK", 127); /* 0111 1111 */ /* Ende Settings */ $str_filename=basename(__FILE__); require_once('common.php'); require($str_extpath.'newgame.php'); require($str_extpath.'chessdb.php'); require($str_extpath.'chessutils.php'); page_header('Schach'); switch($_GET['op']) { case 'InvitePlayer': // Spiel beginnen { if($_POST['name']>'') //Namenssuche abgeschickt { $name=str_create_search_string($_POST['name']); $sql='SELECT login,acctid FROM accounts WHERE name LIKE "'.$name.'" AND acctid != '.$session['user']['acctid'].' ORDER BY login="'.mysql_real_escape_string($_POST['name']).'" DESC, login ASC LIMIT 50'; $result=db_query($sql); $rows=db_num_rows($result); if($rows==0) { $str_out.='Es gibt niemanden, der auf diesen Namen hört. Versuche es noch einmal!'; addnav('Neue Suche',$str_filename.'?op=InvitePlayer'); } elseif($rows>99) { $str_out.='Es treffen zu viele Namen auf diese Suche zu. Nur die ersten 50 werden angezeigt.'; addnav('Neue Suche',$str_filename.'?op=InvitePlayer'); } if($rows>0) { $str_out.='
`n`nHinweis zum Spieleinsatz: `nBeide Spieler zahlen diesen Betrag in den Pot, welchen der Gewinner der Partie bekommt. `nEine Rückgabe der Beträge beim Zurückziehen der Herausforderung ist nicht möglich.'; //sonst könnte man auf die Idee kommen, vor dem DK ein paar Karteileichen herauszufordern addnav('',$str_filename); } } else { $str_out.='Wen willst du zu einer Partie Schach herausfordern? '; addnav('',$str_filename.'?op=InvitePlayer'); } addnav('Zurück'); addnav('Zur Übersicht',$str_filename); break; } case 'viewboard': //Spiel, Brettansicht { if(!$_SESSION['gameID'] && !isset($_POST['gameID'])) redirect ($str_filename); require $str_extpath.'gui.php'; require $str_extpath.'move.php'; require $str_extpath.'undo.php'; /* check if loading game */ if (isset($_POST['gameID'])) $_SESSION['gameID'] = $_POST['gameID']; /* debug flag */ define ("DEBUG", 0); /* load game */ $isInCheck = ($_POST['isInCheck'] == 'true'); $isCheckMate = false; $isPromoting = false; $isUndoing = false; loadHistory(); loadGame(); processMessages(); if ($isUndoing) { doUndo(); saveGame(); } elseif (($_POST['promotion'] != "") && ($_POST['toRow'] != "") && ($_POST['toCol'] != "")) { savePromotion(); $board[$_POST['toRow']][$_POST['toCol']] = $_POST['promotion'] | ($board[$_POST['toRow']][$_POST['toCol']] & BLACK); saveGame(); } elseif (($_POST['fromRow'] != "") && ($_POST['fromCol'] != "") && ($_POST['toRow'] != "") && ($_POST['toCol'] != "")) { /* ensure it's the current player moving */ /* NOTE: if not, this will currently ignore the command... */ /* perhaps the status should be instead? */ /* (Could be confusing to player if they double-click or something */ $tmpIsValid = true; if (($numMoves == -1) || ($numMoves % 2 == 1)) { /* White's move... ensure that piece being moved is white */ if ((($board[$_POST['fromRow']][$_POST['fromCol']] & BLACK) != 0) || ($board[$_POST['fromRow']][$_POST['fromCol']] == 0)) /* invalid move */ $tmpIsValid = false; } else { /* Black's move... ensure that piece being moved is black */ if ((($board[$_POST['fromRow']][$_POST['fromCol']] & BLACK) != BLACK) || ($board[$_POST['fromRow']][$_POST['fromCol']] == 0)) /* invalid move */ $tmpIsValid = false; } if ($tmpIsValid) { saveHistory(); doMove(); saveGame(); } } /* find out if it's the current player's turn */ if (( (($numMoves == -1) || (($numMoves % 2) == 1)) && ($playersColor == "white")) || ((($numMoves % 2) == 0) && ($playersColor == "black"))) $isPlayersTurn = true; else $isPlayersTurn = false; if ($isPlayersTurn) $str_out.="`c`bDrachenschach - Dein Zug`b`c`n"; else $str_out.="`c`bDrachenschach - Warte auf Zug des Gegners`b`c`n"; //echo("\n"); $str_out.='|
`c`c
Hinweise: `nFür eine Rochade muss nur der König gezogen werden, der Turm zieht automatisch. '.($bet>0?'`nDer Gewinner dieses Spiels erhält '.($bet*2).($bet<10?' Edelsteine.':' Gold.'):'').' |
'.writeStatus().'
'.writeHistory().' |