PHP实现猜数游戏

本文实例为大家分享了PHP实现猜数游戏的具体代码,供大家参考,具体内容如下

猜数游戏有两种玩法:

第一种:两个人玩,一方出数字,一方猜。出数字的人要想好一个指定位数的数,数字可重复,不能让猜的人知道。

猜的人就可以开始猜。每猜一个数,出数者就要说大过或小过出的数。

第二种:两个人玩,一方出数字,一方猜。出数字的人要先想好一个没有重复数字的4位数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。如正确答案为5234,而猜的人猜5346,则是1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为2B,合起来就是1A2B。接着猜的人再根据出题者的几A几B继续猜,直到猜中为止。

下面是PHP代码实现:

<?php
// 标准输入流和标准输出流
$stdin = null;
$stdout = null;

/**
 * 初始化 IO 流
 */
function init() {
 global $stdin;
 global $stdout;

 $stdin = fopen('php://stdin', 'r');
 $stdout = fopen('php://stdout', 'w');
}

/**
 * 关闭 IO 流
 */
function destroy() {
 global $stdin;
 global $stdout;

 if(is_resource($stdin)) {
 fclose($stdin);
 }
 if(is_resource($stdout)) {
 fclose($stdout);
 }
}

/**
 * 从命令行读取一行数据
 */
function read() {
 global $stdin;

 $line = fgets($stdin);
 return trim($line, PHP_EOL); //去除换行符
}

/**
 * 向命令行输出一行数据
 */
function write($line) {
 global $stdout;
 // 转换编码
 if(stripos(PHP_OS, 'winnt') !== false) {
 $line = iconv('UTF-8', 'GBK', $line);
 }
 fwrite($stdout, $line . PHP_EOL);
}

/**
 * 第一种玩法
 * @param $count 位数
 */
function guess_the_number($count = 2) {
 // 随机生成一个 $count 位数
 $min = pow(10, $count - 1);
 $max = pow(10, $count) - 1;
 $number = rand($min, $max);
 init();
 while(1) {
 write(sprintf('Please input your number (%s-bit digit), q or quit exit: ', $count));
 $readStr = read();
 // exit program
 if($readStr == 'q' || $readStr == 'quit') {
 break;
 }
 $readInt = intval($readStr);
 if($readInt > $number) {
 write('大了');
 } else if($readInt < $number) {
 write('小了');
 } else {
 write('恭喜你,猜对了!');
 write('Input c continue to play');
 $readStr = read();
 if($readStr == 'c' || $readStr == 'continue') {
 $number = rand($min, $max);
 } else {
 break ;
 }
 }
 }
 destroy();
}

/**
 * 得到一个没有重复数字的四位数
 */
function getRandNumber() {
 $num = rand(1, 9);
 $array = array_diff(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), [$num]);
 shuffle($array);
 $subarr = array_slice($array, 0, 3); //再取 3 个数字
 $str = implode('', array_merge([$num], $subarr));
 return intval($str);
}

/**
 * 第二种玩法
 */
function guess_the_number2() {
 $number = getRandNumber();
 $len = 4; //四位数
 init();
 while(1) {
 write(sprintf('Please input your number (%s-bit digit), q or quit exit: ', $len));
 $readStr = read();
 // exit program
 if($readStr == 'q' || $readStr == 'quit') {
 break;
 }
 $readInt = intval($readStr);
 if($readInt == $number) {
 write('恭喜你,猜对了!');
 write('Input c continue to play');
 $readStr = read();
 if($readStr == 'c' || $readStr == 'continue') {
 $number = getRandNumber();
 } else {
 break ;
 }
 } else {
 // 判断 几A几B
 $readInt = str_pad($readInt, $len, '0', STR_PAD_LEFT); //不足四位的补足四位
 $number = strval($number);
 $readArr = str_split($readInt, 1); // cast to array
 $numArr = str_split($number, 1);
 $aval = 0; // 几A
 $bval = 0; // 几B
 for($i = 0; $i < $len; $i++) {
 if($readArr[$i] == $numArr[$i]) {
 $aval++;
 unset($readArr[$i], $numArr[$i]);
 }
 }
 $bval = count(array_intersect($readArr, $numArr));
 write(sprintf('%sA%sB', $aval, $bval));
 }
 }
 destroy();
}

if(PHP_SAPI == 'cli') {
 // guess_the_number(1);
 guess_the_number2();
} else {
 echo 'Please run under command line!';
 exit;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • PHP n个不重复的随机数生成代码

    复制代码 代码如下: <?php //range 是将1到100 列成一个数组 $numbers = range (1,100); //shuffle 将数组顺序随即打乱 shuffle ($numbers); //array_slice 取该数组中的某一段 $no=6; $result = array_slice($numbers,0,$no); for ($i=0;$i<$no;$i++){ echo $result[$i]."<br>"; } print_

  • Java实现简单猜数字小游戏

    本文实例为大家分享了Java实现猜数字游戏的具体代码,供大家参考,具体内容如下 完成猜数字游戏需要实现以下几点: 获得一个随机数作为"答案数": 输入数字,与"答案数"作比较(判断大了,小了,相等): 循环输入所猜的数字,直到与"答案数"相等时游戏结束: 代码实现: import java.util.Random; import java.util.Scanner; public class guessNum { public static in

  • PHP生成不重复随机数的方法汇总

    无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地.在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道,所以,对于PHP如何产生不重复随机数常用的几种方法小结一下. 方法一: 复制代码 代码如下: <?php $numbers = range (1,50); //shuffle 将数组顺序随即打乱 shuffle ($numbers); //array_slice 取该数组中的某一段 $num=6; $result = array_slice($numbers,0,$n

  • php生成随机数的三种方法

    如何用php生成1-10之间的不重复随机数? 例1,使用shuffle函数生成随机数. <?php $arr=range(1,10); shuffle($arr); foreach($arr as $values) { echo $values." "; } ?> 例2,使用array_unique函数生成随机数. <?php $arr=array(); while(count($arr)<10) { $arr[]=rand(1,10); $arr=array_

  • Java实现猜数程序

    用Java编写一个猜数程序,供大家参考,具体内容如下 要求如下: 编写一个猜数程序.命令行显示菜单:1.开始:2.退出.用户选择1,则程序生成一个0~99之间的随机整数,命令行显示"请输入你猜的数:"让用户猜.用户输入猜测的数据,猜对了命令行显示"你猜对了",并且出现菜单:1.再来一次:2.退出.没有猜对程序给出提示(如:太大了,太小了),并要求在命令行继续输入猜测的值:三次没猜对则程序公布正确的数字,并且出现菜单:1.再来一次:2.退出.猜数时任何一个环节,命令行

  • 猜数游戏java实现代码

    本文实例为大家分享了java实现猜数游戏的具体代码,供大家参考,具体内容如下 有开始界面,可以设置范围,设置猜的次数 代码如下: public static void main(String[] args) { Random rand = new Random(); Scanner sc = new Scanner(System.in); System.out.println("----------猜数游戏----------"); System.out.println("

  • Python实现破解猜数游戏算法示例

    本文实例讲述了Python实现破解猜数游戏算法.分享给大家供大家参考,具体如下: QQ群里的聊天机器人会发起猜数小游戏. 玩法如下: 1. 用户发 #猜数    到群里 2. 机器人响应: 猜数已经开始, 范围是1-10000之间的某个数 3. 你发送 #猜数[123] 到群里 4. 机器人响应: 大了或者小了, 或者恭喜你猜中了 5. 你根据刚才猜的123, 和返回, 猜一个更小或更大的数, 发送 #猜数[111] , 即返回第2步 那么最好的猜测方法肯定是找居中的数了, 由于心算耗时, 所以

  • python简单猜数游戏实例

    本文实例讲述了python简单猜数游戏.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python import random number = random.randint(0,100) print "Hello,Number guessing Game: betwween 0 and 100 inclusive." guessString = raw_input("guess a number: ") guess = int(guess

  • 用JavaScript实现 铁甲无敌奖门人 “开口中”猜数游戏

    在线演示demo本人平时就喜欢拿它来写点实用工具或应用,本文演示用JavaScript实现的<铁甲无敌奖门人>"开口中"猜数游戏,以后我还会陆续上传自己写的小东西,都是些工作之余的小作. <铁甲无敌奖门人>是TVB综艺节目,香港艺人曾志伟就是其中重要的主持人,节目中有众多好玩又刺激的游戏,其中有一个叫"开口中"的猜数游戏正是本文要实现的功能.游戏规则大致是:首先电脑在1到100内选一个数字作为最终答案(这个答案嘉宾一开始是不知道的),然后嘉宾

  • python实现猜数游戏

    本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 一.问题描述: 使用python开发一个猜数小游戏,程序随机产生0~1024之间的数字,用户输入猜测数字,程序告诉用户猜大了还是小了.在一定次数内猜对用户获胜,否则用户失败. 每一轮游戏要求用户输入用户名 程序会一直运行,直到用户输入"3",停止游戏.在每一轮游戏前输入"1"可以查看用户输入历史. 二.涉及知识点: 1.随机生成数字,设计python 的随机数模块. 2.用户输入数字,

  • shell脚本实现猜数游戏

    用shell脚本写一个猜数游戏 最近用shell写的一个猜数游戏,包括4个不同难度,脚本如下: #作者:p_小王 echo '欢迎来到猜数游戏!' while true do read -p '开始/退出(y/n):' x #提示用户输入 if [ -z $x ] #判断用户输入为空 then echo '不能为空' #提示 echo '' continue elif [ $x = y ] #判断用户输入'y' then echo '' echo '游戏即将开始' echo '' while t

  • C++实现猜数游戏

    猜数游戏 编程先由计算机"想"一个1-100之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者"猜"的水平,则结束游戏:否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数.每次运行程序可以反复猜多个数,直到操作者想停止时才结束. [思考题] 如果用户输入用户猜测的数据时,如果用户不小心输入了非法字符,如字符a,那么程序运行就会出错,用什么方法可以避免这样的

  • python实现猜数游戏(保存游戏记录)

    本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 内容如下: ①游戏可以重复进行,每当一个用户结束后,程序会提示是否还要继续,输入y继续,输入其他的字符退出: ②增加玩家姓名,并对该玩家的成绩进行记录,并存储在new.txt文件中: ③增加文件读取功能,即每次程序启动,都首先读取new.txt文件,并给出之前玩家的最高成绩和姓名.(当最高成绩重叠时,取最新记录) import random import os if os.path.exists("D:\\new.

  • 使用c#实现随机数猜数游戏的示例代码

    本文主要介绍了使用c#实现随机数猜数游戏,分享给大家,具体如下: using System;//在任何 C# 程序中的第一条语句都是:using System的意思是引用名称为baiSystem的命名空间 using System.Runtime.InteropServices.ComTypes;//c#语言的互操作服务, namespace ConsoleApp5//namespace 声明.一个 namespace 里包含了一系列的类. { class Program//定义类名 { sta

  • pycharm实现猜数游戏

    本文实例为大家分享了pycharm实现猜数游戏的具体代码,供大家参考,具体内容如下 1. 设计界面 如下所示,利用QTdesigner设计的界面: 然后将设计好的界面转换为.py文件: guess_number.py # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'guess_number.ui' # # Created by: PyQt5 UI code generator 5.15.2

  • PHP实现猜数游戏

    本文实例为大家分享了PHP实现猜数游戏的具体代码,供大家参考,具体内容如下 猜数游戏有两种玩法: 第一种:两个人玩,一方出数字,一方猜.出数字的人要想好一个指定位数的数,数字可重复,不能让猜的人知道. 猜的人就可以开始猜.每猜一个数,出数者就要说大过或小过出的数. 第二种:两个人玩,一方出数字,一方猜.出数字的人要先想好一个没有重复数字的4位数,不能让猜的人知道.猜的人就可以开始猜.每猜一个数,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而

随机推荐