整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          php的命令行游戲:石頭剪刀布游戲

          php的命令行游戲:石頭剪刀布游戲

          hp通常用來寫服務器端程序,通過php渲染HTML代碼并輸出到客戶端,或者用來寫API接口,服務器端的php程序通常是通過http協議進行調用訪問的。

          其實php程序也可以通過命令行調用,我們在寫程序的時候,為了驗證某個功能是否正確,可以直接寫一段調用代碼,然后通過命令行運行,就可以得到驗證結果了。

          通過命令行運行php程序有如下的好處:

          1 在開發程序的時候可以不用切換到瀏覽器進行測試,在phpstrom里直接通過終端窗口就可以執行驗證程序了

          2 通過命令行程序,可以快速建立最簡單的單元測試代碼,當然,如果要進行系統化、規范化的單元測試,最好還是選擇phpunit 或者是 codeception等測試框架進行測試

          3 通過命令行調用php程序,可以避免因為web服務器配置而引起的錯誤,導致程序調試時誤導了開發者,我曾經在php的web端代碼里調用curl功能,發現請求的目標服務器一直返回400錯誤,因為忽略了是web服務器的原因,一直在調試代碼,最后才發現代碼是正確的,只是因為web服務器配置的問題,導致調用curl功能出錯了,如果切換到命令行程序下代碼是正常運行的,這樣其實工作的重點就變成跳轉web服務器的配置,而不是在糊里糊涂的修改代碼了。

          下面我們就來看看怎么在命令行下執行php代碼。

          下面的代碼是一個用php代碼寫的石頭剪刀布游戲:

          <?php
          echo "****開始玩游戲****\r\n";
          $game=new Game();
          $isContinu=1;
          while ($isContinu){
           echo "請選擇你要出什么:1代表石頭、2代表剪刀、3代表布、0代表退出游戲\r\n";
           $input=intval(trim(fgets(STDIN)));
           switch ($input) {
           case 1:
           case 2:
           case 3:
           $computerSkill=$game->computerFight();
           $result=$game->pk($input, $computerSkill);
           echo "你出:". $game->skills[$input].",";
           echo "電腦出:".$game->skills[$computerSkill].",";
           echo "你".$game->pkResult[$result]."\r\n";
           break;
           case 0:
           echo '您已經退出游戲';
           $isContinu=0;
           break;
           default:
           echo "輸入有誤,只能輸入0到3的數字,1代表石頭、2代表剪刀、3代表布、0代表退出游戲\r\n";
           $isContinu=1;
           }
          }
          class SkillNode{
           public $previous=null;
           public $next=null;
           public $data=null;
          }
          class Game {
           public $skills=[1=>'石頭',2=>'剪刀',3=>'布'];
           public $pkResult=['輸了','贏了','平局'];
           public $skillNodeList=array();
           public $roundCount=0;
           public $winCount=0;
           public $loseCount=0;
           public $tieCount=0;
           public function __construct()
           {
           for ($i=1; $i < 4; $i++) {
           $skillNode=new SkillNode();
           $skillNode->data=$i;
           if ($i==1) {
           $skillNode->previous=3;
           $skillNode->next=$i+1;
           } elseif ($i==3) {
           $skillNode->previous=$i-1;
           $skillNode->next=1;
           }else{
           $skillNode->previous=$i-1;
           $skillNode->next=$i+1;
           }
           $this->skillNodeList[$i]=$skillNode;
           }
           }
           public function pk($skillMan,$skillComputer){
           $this->roundCount+=1;
           if ($skillMan==$skillComputer) {
           $this->tieCount+=1;
           return 2;
           }else{
           if (($this->skillNodeList[$skillMan])->next==$skillComputer) {
           $this->winCount+=1;
           return 1;
           }else{
           $this->loseCount+=1;
           return 0;
           }
           }
           }
           public function computerFight()
           {
           return random_int(1, 3);
           }
          }
          ?>
          

          假設我們將上面的代碼保存到d盤的rockgame.php文件上,這樣我們在phpstorm的terminal窗口,用下面的代碼就可以通過命令行調用該程序了:

          因為rockgame.php文件保存在D盤根目錄下,我用cd命令,跳轉到D盤,然后執行下面的命令就可以了,當然,前提條件是:你的電腦已經安裝了php并且將php的路徑加入到了系統參數中了:

          php rockgame.php

          結果入下圖:

          石頭、剪刀、布,只有三個游戲技能,最簡單的方式用幾個判斷語句就可以了,但是,為了體現封裝的效果,用了OOP的方式,建立了game類,將游戲的業務邏輯封裝到了game類里。

          同時,為了體現可擴展性和代碼判斷邏輯的統一,特意建立了skillNode類,并在游戲構造函數里進行了初始化,這樣在pk方法里,就可以用統一的判斷邏輯,假設游戲后來有更多的游戲技能加入,同時,游戲的pk邏輯不變化的話,就只要往技能列表里增加技能元素就好,不用修改其他代碼了。

          HP是世界上最好的語言,這是一個老梗。

          有不少學習PHP的程序員后來去做了前端開發,畢竟近些年前端開發還是蠻吃香的。

          學習PHP不僅僅要學習html,而且還要學習CSS。

          CSS是萬維網聯盟在 HTML 4.0 之外提出,目的是為了讓CSS完成樣式與內容的分離。

          那么,CSS如何入門呢?w3cschool在這里分享幾個方法:

          0、研究w3cschool CSS教程

          w3cschool官方本身就有CSS教程,我們看教程的目的主要還是要了解CSS到底是干什么用的。

          其實,用一句簡單的話來說,改變我們看的網頁的樣子.。

          1、CSS微課游戲化編程體驗

          w3cschool新開發了CSS微課,這可能是很多程序員小伙伴所需要的。

          CSS直接抓住了CSS教程中比較核心的一些概念和語法,并且有實戰的訓練習題。

          其內容包括了CSS基礎、CSS文本樣式、CSS屬性、CSS定位和布局,讓你系統、立體地全面認識CSS。

          CSS微課實現了游戲化的編程體驗,關卡是循序漸進的,這迫使你不能跳躍而忽略一些重要的編程知識。

          其中,習題類型包含了判斷題、選擇題、實戰訓練題。

          理論離不開實戰,CSS微課做到了例子多,概括技術全面。

          當你可以通關的時候,你已經對CSS算是有一個比較深刻的認識,也掌握了一定的CSS編程技能。

          2、CSS看什么書呢?

          學編程一定要讓編程本身變得有趣,所以大可以先玩編程。

          用CSS微課學習是一種有趣化的方法。

          另外,閱讀《css禪意花園》,就當成一本故事書看,隨便翻翻你會發現css確實很好玩的。

          .昨日回顧

          編號姓名性別學歷畢業院校
          1張三大專中國人民大學
          2李四
          3

          <table>

          <tr>

          <th>編號</th>

          <th>標題</th>

          <th>發布日期</th>

          </tr>

          <tr>

          <td>1</td>

          <td>重蔚自留地</td>

          <td>2014-10-20</td>

          </tr>

          </table>

          如果使用表格來排版網頁,搜索引擎搜互的幾乎很低。

          DIV+CSS布局或排版網頁,層級一般為3層左右。

          HTML網頁是一個結構化的文檔,是一按層次順序展示的一個文檔。

          <table>的子元素(標記)是<tbody>,而不是<tr>

          <tr>是<tbody>的子元素

          2.表單

          1、表單的主要功能:就是用來搜索用戶信息。

          2、表單的工作原理

          用戶填寫有表單的網頁,單擊某個按鈕進行提交;

          用戶填寫的表單數據,將發到服務器;

          服務器上有專門的程序來對用戶提交的數據進行驗證;

          如果有錯誤,服務器會返回給瀏覽器一個錯誤信息;

          如果沒有錯誤,PHP程序會將用戶提交的數據寫入數據庫,并返回一個成功的信息。

          補充:

          用戶輸入的信息是否正確,比如:郵箱地址、電話號碼、用戶名是否重名等

          這些信息都是由PHP后臺程序來做驗證。

          3<form>標記:是一組標記(多個標記)

          <form name=“form1” action=“login.php”>

          用戶名:<input type=“text” name=“username” size=“50” />

          密碼:<input type=“password” name=“password” size=“50” />

          <input type=“submit” name=“submit” value=“提交” />

          </form>

          注意:所有表單元素都必須放在<form>中,然后一起提交給服務器。

          <form>的常用屬性

          Name:指表單的名稱,這個名稱一般給JS或PHP來用。

          比如:要獲取“用戶名”框中輸入的信息,用JS獲取是:document.form1.username.value

          Action:設置表單數據的處理程序文件名;比如:login.php

          Method:表單數據的提交方式。有兩種方式:GET和POST

          默認的提交方式:就是GET方式。

          GET方式:將表單中的數據(以“名稱/值”)形式,追加到表單處理程序(action指定)的末尾。

          缺點:提交少量信息、不太安全、只能提交簡單的數據,一般可以提交100個字節內的數據

          http://www.sina.com.cn/news.php?id=234

          POST方式:將表單數據直接發放ACTION指定的處理程序,并沒有在地址欄顯示。

          優點:提交海量數據、相對比較安全、提交的數據類型多樣化

          Enctype:是指表單數據的編碼方式(加密方式)

          Application/x-www-form-urlencoded 普通的加密方式(默認)

          Multipart/form-data 只有上傳文件時使用。

          • 單行文本框:用戶名、地址、聯系方式、郵編等

          <input type=“text” name=“名稱” value=“默認值” size=“多少個字符寬” maxlength=“最多可放多少個字符” />

          注意:如果要把表單元素排齊,請使用表格來排,排的順序是<form>標記中嵌<table>,<td>中放每一個表單元素。

          2、單行密碼框:密碼框中的內容是以“*”號顯示,是為了保證數據的安全

          <input type=“password” name=“名稱” size=“字符寬” maxlength=“最大字符數” />

          3、按鈕

          提交銨鈕:<input type=“submit” name=“submit” value=“提交按鈕” />

          重置按鈕(清空):<input type=“reset” name=“reset” value=“重新填寫” />

          圖片按鈕:<input type=“image” src=“圖片URL” value=“值” />

          注意:圖片按鈕默認是提交表單

          普通按鈕:<input type=“button” name=“名稱” value=“按鈕文本” />

          <input type="button" value="普通按鈕" onclick="javascript:this.form.reset()" />

          注意:普通按鈕沒有任何功能,一般要結合JS來實現提交或重置。

          提示:如果哪一個表單項,不想讓它提交到服務器,請不要給它添加name屬性即可。

          4、單選按鈕:一組相互排斥的按鈕,也就是每一次只能選擇一個。

          <input type=“radio”name=“名稱” value=“值”checked=“checked />男

          注意:一組單選按鈕的name值是一樣的,最后只能提交選中的哪一個。

          5、復選框:一組復選框的名稱也是一樣的,在后臺獲取值時,將使用“數組”的形式來獲取。

          <input type=“checkbox”name=“名稱”value=“值”checked=“checked” />游戲

          注意:復選框可以同時選擇多個,也可以一個都不選。

          提示:數組是一個名字里,可以存放多個不同的值(了解)

          JS數組:Var hobby=[“游戲”,“美術”,“電腦”]

          6、下拉列表

          <select name=“edu”>

          <option value=“” selected=“selected”>請選擇……</option>

          <option value=“高中”>高中</option>

          <option value=“大專”>大專 </option>

          </select>

          7、文本區域

          <textarea name=“名稱”rows=“幾行高”cols=“多少個字符寬”></textarea>

          提示:如果要在<textarea>中插入圖片,實現圖文混排,這個標記做不到。一般網站的效果都是通過“在線HTML代碼編回器”實現的。比如:FCKEdit(就業班講)

          8、上傳文件

          <input type=“file”name=“uploadFile” />

          注意:value屬性是只讀屬性,是為了保證網站的安全。

          GET方式上傳不了文件,

          只有POST能上傳文件,并且編碼類型設置為:mulitpar/form-data

          3.框架

          1、框架的概念:將一個瀏覽器窗口劃分若干個區域,每個區域都是一個獨立的小窗口,小窗口中存放一個網頁文件。

          框架相當于一個窗戶。一個窗戶由窗格和玻璃構成。一個框架是由框架集(Frameset)和框架頁(Frame)構成。

          <frameset>中定義框架的結構(上下型、左右型)、大小、位置等。

          <frame>中定義小窗口是否顯示滾動條小窗口是否可以改大小、默認顯示的網頁

          在框架定義頁面中,不能出現<body>及<body>的子標記,換句話說,<frameset>和<body>只能選擇其中一個。

          2、框架的代碼結構

          <frameset>

          <frame />

          <frame />

          </frameset>

          3、<frameset>的常用屬性

          Rows:指定框架為上下型,例如:rows=“180,*”,上窗口的高為180px,剩下都給下窗口。

          Rows=“180,20,*”,頂窗口高為180px,中窗口高為20px,剩下高都給下窗口。

          Rows=“20%,50%,*”

          Cols:劃分框架為左右型,例如:cols=“200,*”,左窗口寬為200px,剩下都給右窗口。

          Cols=“200,10,*”

          Frameborder:是否顯示框架邊線,取值:1或0,yes或no

          Border:指定邊框的粗細

          Bordercolor:邊框的顏色

          Framespacing:指框架邊框間的距離

          4、<frame>的常用屬性:主要定義:是否可以調整大小、是否顯示滾動條、默認頁設置

          Src:設置小窗口中顯示的默認網頁;

          Noresize:是否可以調整窗口的大小,取值:noresize

          Scrolling:是否顯示滾動條,取值:yes、no、auto(自動)

          Name:設置每個小窗口的

          Index.html

          4.行內框架<iframe></iframe>

          <iframe>是<body>的子元素

          <ifame>是嵌套到<body>元素中的。

          常用屬性

          Src:引入哪個HTML文件

          Width:指行內框架的寬度

          Height:指行內框架的高度

          Scrolling:是否顯示滾動條

          Align:水平對齊方式


          主站蜘蛛池模板: 狠狠色成人一区二区三区| 3d动漫精品啪啪一区二区中| 波多野结衣精品一区二区三区 | 国产精品毛片一区二区三区| 亚洲一区二区三区自拍公司| 精品一区二区久久| 日韩精品无码一区二区三区不卡 | 亚洲av成人一区二区三区| 国产电影一区二区| 在线观看一区二区三区视频| 亚洲免费视频一区二区三区 | 久久国产精品无码一区二区三区 | 鲁丝丝国产一区二区| 亚洲美女高清一区二区三区| 无码一区二区三区视频| 无码人妻啪啪一区二区| 无码国产亚洲日韩国精品视频一区二区三区 | 精品人妻码一区二区三区| 国产小仙女视频一区二区三区| 亚洲国产成人精品久久久国产成人一区二区三区综 | 日韩一区二区三区在线| 在线观看国产区亚洲一区成人| 国产成人精品日本亚洲专一区| 立川理惠在线播放一区| 久久久精品人妻一区二区三区 | 国产人妖视频一区在线观看| 中文字幕精品亚洲无线码一区应用| 少妇无码一区二区三区免费| 精品无码国产一区二区三区麻豆| 91久久精一区二区三区大全 | 一本一道波多野结衣AV一区| 亚洲视频在线一区二区| 中字幕一区二区三区乱码| 精品一区二区无码AV| 亚洲AV成人精品日韩一区| 国产精品va无码一区二区| 日本精品一区二区三区在线视频 | 无码福利一区二区三区| 中文字幕精品一区二区精品| 国产精品日韩一区二区三区| 久久综合九九亚洲一区|