Maison > Article > développement back-end > Partage d'exemples de code pour implémenter un jeu de devinettes en PHP
Il existe deux façons de jouer au jeu de devinettes :
La première façon : deux personnes jouent, l'une donne le numéro et l'autre devine. La personne qui devine le nombre doit penser à un nombre comportant un nombre spécifié de chiffres. Le nombre peut être répété et celui qui devine ne peut pas le connaître.
Celui qui devine peut commencer à deviner. Chaque fois qu'un nombre est deviné, la personne qui devine le nombre doit dire s'il est supérieur ou inférieur au nombre.
Le deuxième type : deux personnes jouent, l'une donne le numéro et l'autre devine. La personne qui devine le nombre doit d’abord penser à un nombre à 4 chiffres sans chiffres répétés et ne peut pas le faire savoir. Quiconque devine
peut commencer à deviner. Chaque fois que vous devinez un nombre, la personne qui devine le nombre donnera combien de A et combien de B en fonction de ce nombre. Le nombre avant A indique le nombre de nombres dans la bonne position, et le nombre avant
B Le nombre représente le nombre de nombres avec des nombres corrects mais des positions incorrectes. Par exemple, la bonne réponse est 5234, et le devineur devine 5346, ce qui correspond à 1A2B. Il y a un chiffre de 5
défini correctement, qui est enregistré comme 1A, et les deux chiffres. 3 et 4 Le nombre est correct, mais la position ne l'est pas, il est donc enregistré comme 2B, ce qui donne 1A2B. Le devineur continue ensuite de deviner en fonction des
numéros A et B du questionneur jusqu'à ce que la supposition soit correcte.
Voici l'implémentation du code 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; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!