anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Fr 29 Mär, 2024 15:59

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Wendespiel
BeitragVerfasst: Mo 16 Jun, 2008 13:47 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 20 Sep, 2004 23:43
Beiträge: 164
Wohnort: Berlin
LoGD: http://www.atrahor.de/source.php
So, Langeweile in Wien während der EM (ja, ich bin den ganzen Monat hier). Und wie immer wenn mir langweilig ist: irgendwelcher LOTGD [sch....] :-D
Das Wendespiel ist im Grunde ganz einfach. Ein Spielfeld von 8x8 Feldern, welches mit zweiseitigen Spielsteinen belegt ist. Ziel ist es eine zufällig ausgewählte Spalte und Reihe mit der gleichen Farbe zu befüllen. Hierzu wählt man ein feld aus und alle Steine der selben Reihe und Spalte werden ebenfalls gewendet.
Das wars schon. Gewinn und Verlust könnt ihr Euch ja selbst dazu schreiben.
$this->bbcode_second_pass_code('', '
<?php
/**
* @desc Ein kleines Schachbrettspiel um die Langeweile in Wien zur EM 2008 zu überstehen
* @author Dragonslayer
* @copyright Dragonslayer for Atrahor.de
*/

require_once 'common.php';

/**
* Goldbild hier definieren, bitte darauf achten dass es 60x60 groß ist, sonst wirds verzerrt.
*/
define('CHESS_PIC_1','./images/image1.png');
/**
* Silberbild hier definieren, bite darauf achten dass es 60x60 groß ist, sonst wirds verzerrt.
*/
define('CHESS_PIC_2','./images/image2.png');

/**
* Nennt die Datei doch wie ihr wollt :-)
*/
define('FILENAME',basename(__FILE__));

/**
* Wohin solls zurück gehen
*/
define('LINKBACK','inn_spielhoehle.php');

/**
* Welcher Navtext gilt für den Zurücklink
*/
define('LINKBACK_TEXT','Zurück zu Spielhoehle');

/**
* Ausgabe des benötigten CSS
*
* @return string
*/
function get_css()
{
$str_out .= '
<style type="text/css">
#chessboard
{
margin:auto;
width:480px;
height:480px;
}
.chess_bg1
{
background-color:red;
}
.chess_bg2
{
background-color:transparent;
}
</style>
';
return $str_out;
}

/**
* Erstelle ein neues Spielfeld
*
* @return array des Spielfelds
*/
function chess_create_chessboard()
{
global $session;
$arr_fields = array();
//Hier kann man die Komplexität einrichten.
//Wenn der Wert zu hoch ist wirds zu langweilig,
//bei einem Wert nahe Null ebenso.
//3 ist ein guter Wert
$int_difficulty = 3;
for($int_i = 0;$int_i <8 ;$int_i++)
{
$arr_field = array();
for($int_j = 0;$int_j <8 ;$int_j++)
{
$arr_field[] = (mt_rand(0,$int_difficulty)>0?0:1);
}
$arr_fields[] = $arr_field;
}
$arr_chess_maze = array();
$arr_chess_maze['fields'] = $arr_fields;

$arr_chess_maze['goal_row'] = mt_rand(0,7);
$arr_chess_maze['goal_column'] = mt_rand(0,7);

$arr_chess_maze['turns'] = 0;
$arr_chess_maze['cheated'] = false;

$session['user']['specialmisc'] = serialize($arr_chess_maze);
return $arr_fields;
}

/**
* Gib das Spielfeld aus
*
* @return string
*/
function chess_print_chessboard()
{
global $session;
$arr_chess = unserialize($session['user']['specialmisc']);
$arr_fields = $arr_chess['fields'];

$int_row = $arr_chess['goal_row'];
$int_column = $arr_chess['goal_column'];

$str_out = '<div id="chessboard">';

$str_act = '';
if($_GET['op'] == 'cheat')
{
$str_act = '&act=cheat';
}

for($int_i = 0;$int_i <8 ;$int_i++)
{
for($int_j = 0;$int_j <8 ;$int_j++)
{
$str_class = ($int_i === $int_row || $int_j === $int_column)? 'chess_bg1':'chess_bg2';
$str_out .= '<a href="'.FILENAME.'?op=switch'.$str_act.'&row='.$int_i.'&column='.$int_j.'" class="'.$str_class.'"><img src="'.($arr_fields[$int_i][$int_j] == true ? CHESS_PIC_1:CHESS_PIC_2).'" border="0" width="60" height="60" /></a>';
addnav('',FILENAME.'?op=switch'.$str_act.'&row=$int_i&column=$int_j');
}
}

$str_out .= '</div>';
return $str_out;
}

function chess_cheat()
{
global $session;
$arr_chess = unserialize($session['user']['specialmisc']);
$arr_fields = $arr_chess['fields'];

$int_row = (int)$_GET['row'];
$int_column = (int)$_GET['column'];

$arr_chess['turns']++;

$arr_fields[$int_row][$int_column] = ($arr_fields[$int_row][$int_column] == 0) ? 1 : 0;
$arr_chess['fields'] = $arr_fields;
$session['user']['specialmisc'] = serialize($arr_chess);
$int_gems = $arr_chess['turns'] >10 ? 2 : 1 ;

$arr_chess['cheated'] = true;

$session['user']['gems'] = max(0,$session['user']['gems'] - $int_gems);

return $arr_fields;
}

/**
* Dreht alle Felder um die sich in der gleichen Zeile und Spalte wie das angeklickte Element befinden
*
* @return array Die Felder
*/
function chess_switch()
{
global $session;
$arr_chess = unserialize($session['user']['specialmisc']);
$arr_fields = $arr_chess['fields'];

$int_row = (int)$_GET['row'];
$int_column = (int)$_GET['column'];

$arr_chess['turns']++;

if($_GET['act'] == 'cheat')
{
$arr_fields[$int_row][$int_column] = ($arr_fields[$int_row][$int_column] == 0) ? 1 : 0;
$arr_chess['fields'] = $arr_fields;
$session['user']['specialmisc'] = serialize($arr_chess);

$int_gems = $arr_chess['turns'] >10 ? 2 : 1 ;

$arr_chess['cheated'] = true;

$session['user']['gems'] = max(0,$session['user']['gems'] - $int_gems);
return $arr_fields;
}

for($int_i = 0;$int_i <8 ;$int_i++)
{
for($int_j = 0;$int_j <8 ;$int_j++)
{
$bool_rowcheck = false;
if($int_i == $int_row)
{
$arr_fields[$int_i][$int_j] = ($arr_fields[$int_i][$int_j] == 0) ? 1 : 0;
$bool_rowcheck = true;
}

if($int_j == $int_column && !$bool_rowcheck)
{
$arr_fields[$int_i][$int_j] = ($arr_fields[$int_i][$int_j] == 0) ? 1 : 0;
}
}
}
$arr_chess['fields'] = $arr_fields;
$session['user']['specialmisc'] = serialize($arr_chess);
return $arr_fields;
}

function chess_check($int_row=null,$int_column=null)
{
global $session;

$arr_chess = unserialize($session['user']['specialmisc']);
$arr_fields = $arr_chess['fields'];

$int_row = $arr_chess['goal_row'];
$int_column = $arr_chess['goal_column'];

//Es kann nur über eine Zeile und eine Spalte gesucht werden,
//sonst wirds zu schwer
if($int_column === null && $int_row === null)
{
return false;
}

$check_row = true;
$check_column = true;

for($int_i = 0;$int_i <8 ;$int_i++)
{
for($int_j = 0;$int_j <8 ;$int_j++)
{
//Wenn die Zeile mit der zu überprüfenden Zeile übereinstimmt und das aktuell
//betrachtete Feld dieser Zeile den Wert true hat, dann ist die Überprüfung wahr
if($int_i === $int_row && $arr_fields[$int_i][$int_j] == false)
{
$check_row = false;
continue;
}

//Wenn die Spalte mit der zu überprüfenden Spalte übereinstimmt und das aktuell
//betrachtete Feld dieser Spalte den Wert true hat, dann ist die Überprüfung wahr
if($int_j === $int_column && $arr_fields[$int_i][$int_j] == false)
{
$check_column = false;
continue;
}
}
}
return $check_row && $check_column;
}


///
/// Sodele, ab hier geht der Seitenaufbau los
///
page_header('Chessmaze');
addnav('Aktionen');

$str_out .= get_css();

switch ($_GET['op'])
{
default:
{
$str_out .= '`c`b`yDas Wendespiel`b`c`n`n`tAn einem der vielen kleinen Spieltische sitzt eine rothäutige Frau, mit langen, kunstvoll geflochtenen, schwarzen Haaren. Ihre Mandelförmigen, dunklen Augen geben ihrer grazilen Gestalt ihren letzten Schliff, so dass du nicht umhin kannst, als sie bereits für ihr Aussehen zu '.($session['user']['sex']?:'vergöttern':'beneiden').'. Kaum weniger interessant ist das kleine Denkspiel, welches sie hier feil bietet. Es handelt sich um eine Knobelaufgabe, welche auf einem Schachbrett gespielt wird. Der Einsatz kostet dich nur 100 Goldstücke, aber je länger du das Spiel spielst, desto teurer wird es. Wagst du ein neues Spiel?';
if($session['user']['gold']>100)
{
addnav('Neues Spiel beginnen (100G)',FILENAME.'?op=new');
}
addnav('Die Regeln',FILENAME.'?op=rules');
}
break;
case 'new':
{
chess_create_chessboard();
$session['user']['gold'] -= 100;
$str_out .= '`c`bDas Schachbrett`b`c`n`n`tKlicke auf das Feld, dass du umdrehen möchtest. Alle Felder in der gleichen Zeile und Spalte werden ebenfalls umgedreht. Versuche so alle Felder der rot hinterlegten Zeile und Spalte auf die Farbe Gold zu wenden.<hr />';
$str_out .= chess_print_chessboard();
}
break;
case 'win':
{
$arr_chess = unserialize($session['user']['specialmisc']);
$str_out .= '`c`b`yGewonnen`b`c`n`n`tHerzlichen Glückwunsch, du hast das Spiel gewonnen. ';
$str_out .= 'Als Belohnung erhälst du die versprochenen 1000 Goldstücke. Du bedankst dich artig und wärst nun bereit für ein neues Spiel.';
$session['user']['gold'] += 1000;
$session['user']['specialmisc'] = '';
}
break;
case 'loose':
{
$str_out .= '`c`b`yNicht gewonnen`b`c`n`n`tSchade, du hast es leider nicht geschafft das Rätsel zu lösen';
$session['user']['specialmisc'] = '';
}
break;
case 'rules':
{
$str_out .= '`c`b`yDie Regeln`b`c`n`n`tDas Wendespiel wird auf einem Schachbrett gespielt. Es existieren somit acht Zeilen und Spalten, also 64 Felder. Jedes dieser Felder hat zwei Seiten, eine silberne und eine goldene.`n
`bDer Spielbeginn:`b`n
Zu Beginn eines neuen Spiels werden die Seiten zufällig auf dem Spielfeld verteilt und je eine Zeile und Spalte zufällig ausgewählt (rot hinterlegt).`n
`bZiel des Spiels:`b`n
Ziel des Spiels ist es die hinterlegte Zeile und Spalte mit der goldenen Seite zu befüllen. Hierzu wählst du in jedem Zug eines der Felder aus. Nun werden alle Felder der gleichen Zeile und Spalte umgedreht. Aus gold wird silber und aus silber wird gold.`n
`bEinsatz:`b`n
In diesem Spiel geht es um Gold. Für jeden Zug den Du machst zahlst du, 50 Goldstücke. Wenn du das Spiel gewinnst erhälst du 1000 Goldstücke. Wenn Du das Spiel nicht innerhalb von 20 Zügen beendest, hast du verloren.`n
`bSchummeln`b:`n
In diesem Spiel darfst du schummeln! Das kostet dich jedoch Edelsteine. Einen Edelstein wenn du noch weniger als 10 Züge gemacht hast, sonst zwei!
';
if($session['user']['gold']>100)
{
addnav('Neues Spiel beginnen (100G)',FILENAME.'?op=new');
}
}
break;
case 'switch':
{
$arr_chess = unserialize($session['user']['specialmisc']);

$str_out .= '`c`bDas Schachbrett`b`c`n`n`tKlicke auf das Feld, dass du umdrehen möchtest. Alle Felder in der gleichen Zeile und Spalte werden ebenfalls umgedreht. Versuche so alle Felder der rot hinterlegten Zeile und Spalte auf die Farbe Gold zu wenden.<hr />';

if($_GET['act'] == 'cheat')
{
chess_cheat();
}
else
{
chess_switch();
}

$arr_chess = unserialize($session['user']['specialmisc']);
$int_gems = $arr_chess['turns'] >10 ? 2 : 1 ;

if($session['user']['gems'] > $int_gems || $access_control->su_lvl_check(1))
{
addnav('Mit '.$int_gems.' ES bestechen',FILENAME.'?op=cheat');
}

if(chess_check())
{
redirect(FILENAME.'?op=win');
}
if($session['user']['gold'] < 50 || $arr_chess['turns']>20)
{
redirect(FILENAME.'?op=loose');
}
else
{
$session['user']['gold'] -= 50;
}

addnav('Aufgeben',FILENAME.'?op=loose');

$str_out .= chess_print_chessboard();
}
break;
case 'cheat':
{
$str_out .= '`c`bSchummelei`b`c`n`n`tDu bezahlst einen Edelstein und darfst nun ein Feld auswählen das du einfach so umdrehen darfst.<hr />';
$str_out .= chess_print_chessboard();
}
break;
case 'end':
{
$session['user']['specialmisc'] = '';
redirect(LINKBACK);
}
break;
}

//Specialmisc in jedem Fall löschen
addnav(LINKBACK_TEXT,FILENAME.'?op=end');

output($str_out);
page_footer();

?>
')

_________________
Atrahor.de
http://www.atrahor.de/ci_images.php?id=1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wendespiel
BeitragVerfasst: Mo 16 Jun, 2008 21:51 
Offline
Freak
Freak
Benutzeravatar

Registriert: Mi 06 Jul, 2005 19:10
Beiträge: 543
Wohnort: Bremen
Geschlecht: Männlich
LoGD: http://my-logd.com/motwd
Das Spiel gefällt mir!
Da ich denke es verwenden zu wollen, finde ich es nur gerecht etwas beizusteuern.

Ich habe 2 Grafiken jeweils für eine Goldmünze und eine Silbermünze ertsellt:
Bild Bild

Anbei füge ich noch einen Download für die PSD-Dateien, damit der Schriftzug auf den Münzen geändert werden kann. Die Schriftart ist "Arial", die eigentlich jeder haben sollte...

http://my-logd.com/dl/Wendespiel_Muenzen.rar.htm

EDIT:
Ein kleinen Fehler habe ich ja noch entdeckt:
PHP:
//...
Aussehen zu '.($session['user']['sex']?:'vergöttern':'beneiden').'. Kaum we
/...

Muss zu dem hier ersetzt werden:
PHP:
//...
Aussehen zu '.($session['user']['sex']?'beneiden':'vergöttern').'. Kaum we
/...

_________________
Das schwarze Schaf der LotGD-Community, 2. platzierter, beim Giga.de Homepage-Award 2007 und 1. platzierter beim German Web Award 2008.
PC-ACTION meint: "Sehr gut" für MotWD!
Mind of the White Dragon => http://my-logd.com/motwd


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 30 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum