From df3475eced66f7e8e63b231828587475ee3f32ca Mon Sep 17 00:00:00 2001
From: xue <>
Date: Sat, 24 Dec 2005 23:00:41 +0000
Subject:
---
.gitattributes | 4 +
.../quickstart/protected/pages/chap3/Hangman.page | 9 +-
.../protected/pages/chap3/Hangman/Home.page | 74 +++++++++++
.../protected/pages/chap3/Hangman/Home.php | 135 +++++++++++++++++++++
.../protected/pages/chap3/Hangman/config.xml | 5 +
.../protected/pages/chap3/Hangman/words.txt | 27 +++++
framework/Web/UI/WebControls/TRadioButton.php | 16 +--
7 files changed, 262 insertions(+), 8 deletions(-)
create mode 100644 demos/quickstart/protected/pages/chap3/Hangman/Home.page
create mode 100644 demos/quickstart/protected/pages/chap3/Hangman/Home.php
create mode 100644 demos/quickstart/protected/pages/chap3/Hangman/config.xml
create mode 100644 demos/quickstart/protected/pages/chap3/Hangman/words.txt
diff --git a/.gitattributes b/.gitattributes
index 95735c4b..294d396a 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -34,6 +34,10 @@ demos/quickstart/protected/pages/chap1/Installation.page -text
demos/quickstart/protected/pages/chap1/Introduction.page -text
demos/quickstart/protected/pages/chap1/config.xml -text
demos/quickstart/protected/pages/chap3/Hangman.page -text
+demos/quickstart/protected/pages/chap3/Hangman/Home.page -text
+demos/quickstart/protected/pages/chap3/Hangman/Home.php -text
+demos/quickstart/protected/pages/chap3/Hangman/config.xml -text
+demos/quickstart/protected/pages/chap3/Hangman/words.txt -text
demos/quickstart/protected/pages/chap3/HelloWorld.page -text
demos/quickstart/protected/pages/chap3/HelloWorld/Home.page -text
demos/quickstart/protected/pages/chap3/HelloWorld/Home.php -text
diff --git a/demos/quickstart/protected/pages/chap3/Hangman.page b/demos/quickstart/protected/pages/chap3/Hangman.page
index 603a040b..fc7bc2a5 100644
--- a/demos/quickstart/protected/pages/chap3/Hangman.page
+++ b/demos/quickstart/protected/pages/chap3/Hangman.page
@@ -1,6 +1,13 @@
Sample: Hangman Game
-
+
+To facilitate the building of this game, we show the state transition diagram of the gaming process in the following,
+
+
\ No newline at end of file
diff --git a/demos/quickstart/protected/pages/chap3/Hangman/Home.page b/demos/quickstart/protected/pages/chap3/Hangman/Home.page
new file mode 100644
index 00000000..1cc409d3
--- /dev/null
+++ b/demos/quickstart/protected/pages/chap3/Hangman/Home.page
@@ -0,0 +1,74 @@
+
+
+
+
+
+Hangman Game
+
+
+
+
+Hangman Game
+
+
+This is the game of Hangman. You must guess a word, a letter at a time.
+If you make too many mistakes, you lose the game!
+
+
+
+
+
+
+
+
+Please make a guess
+<%= $this->Page->GuessWord %>
+You have made <%=$this->Page->Misses %> bad guesses
+out of a maximum of <%= $this->Page->Level %>.
+Guess:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+You Win!
+The word was: <%= $this->Page->Word %>.
+
+
+
+
+You Lose!
+The word was: <%= $this->Page->Word %>.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demos/quickstart/protected/pages/chap3/Hangman/Home.php b/demos/quickstart/protected/pages/chap3/Hangman/Home.php
new file mode 100644
index 00000000..93028573
--- /dev/null
+++ b/demos/quickstart/protected/pages/chap3/Hangman/Home.php
@@ -0,0 +1,135 @@
+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;
+ }
+
+ $this->Word=$this->generateWord();
+ $this->GuessWord=str_repeat('_',strlen($this->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
+ {
+ $this->Misses++;
+ if($this->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 generateWord()
+ {
+ $wordFile=dirname(__FILE__).'/words.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));
+ return strtoupper($word);
+ }
+
+ 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
diff --git a/demos/quickstart/protected/pages/chap3/Hangman/config.xml b/demos/quickstart/protected/pages/chap3/Hangman/config.xml
new file mode 100644
index 00000000..67056f9d
--- /dev/null
+++ b/demos/quickstart/protected/pages/chap3/Hangman/config.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/demos/quickstart/protected/pages/chap3/Hangman/words.txt b/demos/quickstart/protected/pages/chap3/Hangman/words.txt
new file mode 100644
index 00000000..80814580
--- /dev/null
+++ b/demos/quickstart/protected/pages/chap3/Hangman/words.txt
@@ -0,0 +1,27 @@
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+PRADO is an event-driven and component-based framework
+for Web application development in PHP 5.
+
+Components following the PRADO protocol are highly
+configurable and reusable. Properties defining
+the basic features of a component can be configured
+in specifications, templates or code.
+New components can be developed by either inheriting
+an existing component class or composing several
+components together. The work of using a component
+amounts to placing the component tag on the page template,
+configuring component properties, and writing handler
+functions to respond to component events.
+
+PRADO shares many similarities with ASP.NET and other
+RAD tools for Windows GUI development, such as Borland Delphi.
+In particular, it supports event-driven programming,
+viewstate maintenance, javascript, template, form validations, etc.
\ No newline at end of file
diff --git a/framework/Web/UI/WebControls/TRadioButton.php b/framework/Web/UI/WebControls/TRadioButton.php
index 78dc6549..85a28941 100644
--- a/framework/Web/UI/WebControls/TRadioButton.php
+++ b/framework/Web/UI/WebControls/TRadioButton.php
@@ -109,14 +109,16 @@ class TRadioButton extends TCheckBox
if($uniqueID!=='')
{
if(($pos=strrpos($uniqueID,TControl::ID_SEPARATOR))!==false)
- $this->_uniqueGroupName=substr($uniqueID,0,$pos+1).$groupName;
- else if($this->getNameContainer() instanceof TRadioButtonList)
- $this->_uniqueGroupName=substr($uniqueID,0,$pos);
- if(empty($this->_uniqueGroupName))
- $this->_uniqueGroupName=$uniqueID;
+ {
+ if($groupName!=='')
+ $groupName=substr($uniqueID,0,$pos+1).$groupName;
+ else if($this->getNamingContainer() instanceof TRadioButtonList)
+ $groupName=substr($uniqueID,0,$pos);
+ }
+ if($groupName==='')
+ $groupName=$uniqueID;
}
- else
- $this->_uniqueGroupName=$groupName;
+ $this->_uniqueGroupName=$groupName;
}
return $this->_uniqueGroupName;
}
--
cgit v1.2.3