您的位置 首页 php

php的命令行游戏:石头剪刀布游戏

php通常用来写服务器端程序,通过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逻辑不变化的话,就只要往技能列表里增加技能元素就好,不用修改其他代码了。

文章来源:智云一二三科技

文章标题:php的命令行游戏:石头剪刀布游戏

文章地址:https://www.zhihuclub.com/151600.shtml

关于作者: 智云科技

热门文章

网站地图