summaryrefslogtreecommitdiff
path: root/demos/hangman/protected/pages/HomePage.php
diff options
context:
space:
mode:
authorxue <>2005-12-10 02:02:10 +0000
committerxue <>2005-12-10 02:02:10 +0000
commit1f1f96b7e143973e7da69fc01ebd6721f62e291c (patch)
tree342915f87c904d8a79a853101ad9d176051a588b /demos/hangman/protected/pages/HomePage.php
parent662547dc4c6c493c1c89f888e3ef73667ea783c4 (diff)
Diffstat (limited to 'demos/hangman/protected/pages/HomePage.php')
-rw-r--r--demos/hangman/protected/pages/HomePage.php132
1 files changed, 132 insertions, 0 deletions
diff --git a/demos/hangman/protected/pages/HomePage.php b/demos/hangman/protected/pages/HomePage.php
new file mode 100644
index 00000000..ed030d2f
--- /dev/null
+++ b/demos/hangman/protected/pages/HomePage.php
@@ -0,0 +1,132 @@
+<?php
+
+class HomePage extends TPage
+{
+ const EASY_LEVEL=10;
+ const MEDIUM_LEVEL=5;
+ const HARD_LEVEL=3;
+
+ public function selectLevel($sender,$param)
+ {
+ if($this->EasyLevel->Checked)
+ $this->Level=self::EASY_LEVEL;
+ else if($this->MediumLevel->Checked)
+ $this->Level=self::MEDIUM_LEVEL;
+ else if($this->HardLevel->Checked)
+ $this->Level=self::HARD_LEVEL;
+ else
+ {
+ $this->LevelError->Visible=true;
+ return;
+ }
+ $wordFile=Prado::getPathOfNamespace($this->Application->Parameters['wordFile'],'.txt');
+ $words=preg_split("/[\s,]+/",file_get_contents($wordFile));
+ do
+ {
+ $i=rand(0,count($words)-1);
+ $word=$words[$i];
+ } while(strlen($word)<5 || !preg_match('/^[a-z]*$/i',$word));
+ $word=strtoupper($word);
+
+ $this->Word=$word;
+ $this->GuessWord=str_repeat('_',strlen($word));
+ $this->Misses=0;
+ $this->showPanel('GuessPanel');
+ }
+
+ public function guessWord($sender,$param)
+ {
+ $sender->Enabled=false;
+ $letter=$sender->Text;
+ $word=$this->Word;
+ $guessWord=$this->GuessWord;
+ $pos=0;
+ $success=false;
+ while(($pos=strpos($word,$letter,$pos))!==false)
+ {
+ $guessWord[$pos]=$letter;
+ $success=true;
+ $pos++;
+ }
+ if($success)
+ {
+ $this->GuessWord=$guessWord;
+ if($guessWord===$word)
+ $this->showPanel('WinPanel');
+ }
+ else
+ {
+ $misses=$this->Misses+1;
+ $this->Misses=$misses;
+ if($misses>=$this->Level)
+ $this->giveUp(null,null);
+ }
+ }
+
+ public function giveUp($sender,$param)
+ {
+ $this->showPanel('LosePanel');
+ }
+
+ public function startAgain($sender,$param)
+ {
+ $this->showPanel('IntroPanel');
+ $this->LevelError->Visible=false;
+ for($letter=65;$letter<=90;++$letter)
+ {
+ $guessLetter='Guess'.chr($letter);
+ $this->$guessLetter->Enabled=true;
+ }
+ }
+
+ protected function showPanel($panelID)
+ {
+ $this->IntroPanel->Visible=false;
+ $this->GuessPanel->Visible=false;
+ $this->WinPanel->Visible=false;
+ $this->LosePanel->Visible=false;
+ $this->$panelID->Visible=true;
+ }
+
+ public function setLevel($value)
+ {
+ $this->setViewState('Level',$value,0);
+ }
+
+ public function getLevel()
+ {
+ return $this->getViewState('Level',0);
+ }
+
+ public function setWord($value)
+ {
+ $this->setViewState('Word',$value,'');
+ }
+
+ public function getWord()
+ {
+ return $this->getViewState('Word','');
+ }
+
+ public function getGuessWord()
+ {
+ return $this->getViewState('GuessWord','');
+ }
+
+ public function setGuessWord($value)
+ {
+ $this->setViewState('GuessWord',$value,'');
+ }
+
+ public function setMisses($value)
+ {
+ $this->setViewState('Misses',$value,0);
+ }
+
+ public function getMisses()
+ {
+ return $this->getViewState('Misses',0);
+ }
+}
+
+?> \ No newline at end of file