BBS.ChinaUnix.net
首页 | 新闻 | Linux | FreeBSD | AIX | Windows | 博客 | 论坛 | 存储 | 网络 | 人才 | Wiki | 资料 | 读书 | 手册 | 下载 | 空间 | 搜索
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


石头剪刀布游戏(单机版)

首页 » 论坛 » Php »  
[打印] [订阅] [收藏] [本帖文本页] [推荐此主题给朋友,立即获积分]
帅的不能再输啦   帅哥 (雪悟)
圣骑士



UID:363444
注册:2006-1-14
最后登录: 2008-08-27
帖子:99
精华:1

可用积分:597 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


1楼 发表于 2008-6-26 18:11 
#!/usr/bin/php
<?php
/**
* 石头剪刀布游戏(单机版)
*
* @author   genghonghao@gmail.com
*
* @date     2008/06/26
*
* @version  v,1.0(beta)
*
*/

set_time_limit(0);

$input = array(

                'STONE'    => 's',

                'SHEARS'   => 'j',

                'CLOTH'    => 'b'
);

define('INTEGRAL', 'INTEGRA_LOG');       
define('SUCCESS_MARK', 5);
define('FAILURE_MARK', -5);
define('TIE_MARK', 0);

fwrite(STDOUT,"\n出招的规则是:  s代表石头  j代表剪刀  b代表布\n退出请输入  :  quit\n积分的规则是:  胜利+5分 失败-5分 平局不加分也不减分\n");
while (true) {
        fwrite(STDOUT, "\n请 出 招 : ");

        $inputu = trim(fgets(STDIN));
        if($inputu == 'quit') {
                fwrite(STDOUT, "\nBye Bye\n\n");
                break;
        }

        $rand_key = array_rand($input, 1);
        $rand_key = $input[$rand_key];

        $user_out = get_out($inputu);
        $syst_out = get_out($rand_key);

        $diff = diff($inputu, $rand_key);
       
        if($user_out[1] != false) {
                switch($diff) {
                        case '>':
                                write_integral(SUCCESS_MARK."\n");
                                $mark = read_integral();
                                $mark_content = "本局获得积分: ". SUCCESS_MARK.  "剩余积分: {$mark}\n";
                                fwrite(STDOUT, "\n您在这次战斗中取得了胜利!\n你的出招:\"{$user_out[0]}\"\n系统出招:\"{$syst_out[0]}\"  {$mark_content}");
                                break;
                        case '<':
                                write_integral(FAILURE_MARK."\n");
                                $mark = read_integral();
                                $mark_content = "本局获得积分: ". FAILURE_MARK.  "剩余积分: {$mark}\n";
                                fwrite(STDOUT, "\n您在这次战斗中被系统战败!\n你的出招:\"{$user_out[0]}\"\n系统出招:\"{$syst_out[0]}\"  {$mark_content}");
                                break;
                        case '=':
                                write_integral(TIE_MARK."\n");
                                $mark = read_integral();
                                $mark_content = "本局获得积分: ". TIE_MARK.  "剩余积分: {$mark}\n";
                                fwrite(STDOUT, "\n您和系统选择的都是\"{$user_out[0]}\",这次战斗是个平局!  {$mark_content}");
                                break;
                        default:
                                echo $user_out[0]."\n";
                                break;
                }
        } else{

                fwrite(STDOUT, $user_out[0]."\n");

        }
       
}

function write_integral($content) {

                $handle = @fopen(INTEGRAL, 'a');

                @fwrite($handle, $content);

                @fclose($handle);

}

function read_integral() {

        $file = @file(INTEGRAL);
        $count = 0;

        foreach($file as $k => $v) {
                $count += !empty($v) ? (int)(str_replace('\n', '', $v)) : 0;       
        }
        return $count;
}

function get_out($str) {

        $val = array();

        switch($str) {

                case 's':
                        $val[] = '石头';
                        $val[] = true;
                        break;
                case 'j':
                        $val[] = '剪刀';
                        $val[] = true;
                        break;
                case 'b':
                        $val[] = '布';
                        $val[] = true;
                        break;
                default:
                        $val[] = "\n您的出招不正确!\n";
                        $val[] = false;
        }

        return $val;
}

function diff($str1, $str2) {
        switch($str1) {
                case 's':
                        switch($str2) {
                                case 's':
                                        $val = '=';
                                        break;
                                case 'j':
                                        $val = '>';
                                        break;
                                case 'b':
                                        $val = '<';
                                        break;
                                default :
                                        $val = '#';
                                        break;
                        }
                        break;
                case 'j':
                        switch($str2) {
                                case 's':
                                        $val = '<';
                                        break;
                                case 'j':
                                        $val = '=';
                                        break;
                                case 'b':
                                        $val = '>';
                                        break;
                                default :
                                        $val = '#';
                                        break;
                        }
                        break;
                case 'b':
                        switch($str2) {
                                case 's':
                                        $val = '>';
                                        break;
                                case 'j':
                                        $val = '<';
                                        break;
                                case 'b':
                                        $val = '=';
                                        break;
                                default :
                                        $val = '#';
                                        break;
                        }
                        break;
                default:
                        $val = '#';
                        break;
        }

        return $val;
}



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

OnlyCore
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
ysixin   帅哥
精灵



CU奥运火炬传递手2008
UID:275558
注册:2005-6-2
最后登录: 2008-10-06
帖子:226
精华:0

可用积分:511 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:828
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


2楼 发表于 2008-6-27 09:27 
呵呵,有点意思



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________


积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
kee212   帅哥 (冰)
圣骑士




UID:390727
注册:2006-3-22
最后登录: 2008-10-07
帖子:129
精华:0

可用积分:159 (白手起家)
信誉积分:100
专家积分:0 (本版:0)
空间积分:13
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


3楼 发表于 2008-6-27 11:12 
交互模式的优势在于没时间限制,可以运行一些跑很久的程序,比如蜘蛛、下载



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
帅的不能再输啦   帅哥 (雪悟)
圣骑士



UID:363444
注册:2006-1-14
最后登录: 2008-08-27
帖子:99
精华:1

可用积分:597 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


4楼 发表于 2008-6-27 11:57 
根据奶瓶同学的意见,改进后得到:

确实效率提高了很多啊,也节省了许多代码

#!/usr/bin/php
/**
* 石头剪刀布游戏(单机版)
*
* @author   [email]genghonghao@gmail.com[/email]
*
* @date     2008/06/26
*
* @version  v,1.0(beta)
*
*/

set_time_limit(0);

$input['s']    = array(1, '石头');
$input['j']    = array(2, '剪刀');
$input['b']    = array(3, '布');

define('STONE', 1);
define('SHEARS', 2);
define('CLOTH', 3);

define('INTEGRAL', 'INTEGRA_LOG');       

define('SUCCESS_MARK', 5);
define('FAILURE_MARK', -5);
define('TIE_MARK', 0);

define('SUCCESS', "\n您在这次战斗中取得了胜利!\n");
define('FAILURE', "\n您在这次战斗中被系统战败!\n");
define('TIE', "\n您和系统战成了平局!\n");

// 石头=1, 剪刀=2, 布=3
$stone[-1] = '>';
$stone[1]  = '<';
$stone[-2] = '<';
$stone[2]  = '>';
$stone[0]  = '=';

fwrite(STDOUT,"\n出招的规则是:  s代表石头  j代表剪刀  b代表布\n退出请输入  :  quit\n积分的规则是:  胜利+5分 失败-5分 平局不加分也不减分\n");
while (true) {
        fwrite(STDOUT, "\n请 出 招 : ");

        $inputu = trim(fgets(STDIN));
        if($inputu == 'quit') {
                fwrite(STDOUT, "\nBye Bye\n\n");
                break;
        }

        $key = array_rand($input, 1);
        $syst_out = $input[$key];
       
        if(array_key_exists($inputu, $input)) {
                $user_out = $input[$inputu];       
                $diff_err = $user_out[0] - $syst_out[0];
               
                if(array_key_exists($diff_err, $stone)) {
                        switch($diff_err) {
                                case -1:
                                        $marke = SUCCESS_MARK;
                                        $if    = SUCCESS;
                                        break;
                                case 1:
                                        $marke = FAILURE_MARK;
                                        $if    = FAILURE;
                                        break;
                                case -2:
                                        $marke = FAILURE_MARK;
                                        $if    = FAILURE;
                                        break;
                                case 2:
                                        $marke = SUCCESS_MARK;
                                        $if    = SUCCESS;
                                        break;
                                case 0:
                                        $marke = TIE_MARK;
                                        $if    = TIE;
                                        break;
                        }
                        write_integral($marke . "\n");
                        $total = read_integral();
                        $mark_content = "本局获得积分: {$marke}剩余积分: {$total}\n";
                        fwrite(STDOUT, "\n{$if}\n你的出招:\"{$user_out[1]}\"\n系统出招:\"{$syst_out[1]}\"  {$mark_content}");
                }

        }
       
}

function write_integral($content) {

                $handle = @fopen(INTEGRAL, 'a');

                @fwrite($handle, $content);

                @fclose($handle);

}

function read_integral() {

        $file = @file(INTEGRAL);
        $count = 0;

        foreach($file as $k => $v) {
                $count += !empty($v) ? (int)(str_replace('\n', '', $v)) : 0;       
        }
        return $count;
}

[ 本帖最后由 帅的不能再输啦 于 2008-6-27 11:58 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

OnlyCore
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
kts2tt
侠客




UID:700776
注册:2008-5-5
最后登录: 2008-09-25
帖子:14
精华:0

可用积分:13 (白手起家)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


5楼 发表于 2008-6-27 15:02 
不错,很强大。



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
hahajohn2006
侠客



UID:620235
注册:2007-9-22
最后登录: 2008-09-04
帖子:30
精华:0

可用积分:19 (白手起家)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


6楼 发表于 2008-6-30 10:23 
这个怎么玩?
要带参数吗?



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

技术才是王道!
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
帅的不能再输啦   帅哥 (雪悟)
圣骑士



UID:363444
注册:2006-1-14
最后登录: 2008-08-27
帖子:99
精华:1

可用积分:597 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


7楼 发表于 2008-6-30 12:43 
不用带参数的。



QUOTE:
原帖由 hahajohn2006 于 2008-6-30 10:23 发表
这个怎么玩?
要带参数吗?

不用带参数的。在当前目录下运行这个PHP程序种。
会提示你每次出招。然后会显示当前积分和你的总积分。
输入quit回车即可退出游戏。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

OnlyCore
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
kts2tt
侠客




UID:700776
注册:2008-5-5
最后登录: 2008-09-25
帖子:14
精华:0

可用积分:13 (白手起家)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


8楼 发表于 2008-6-30 13:24 
如果把这个单机版升级成PVP版
是否在服务器端分别为两个临时PLAYER生成一个文件记录他们的出招,最后通过两个文件比较得出结果呢?
最后再用server push回去?



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
帅的不能再输啦   帅哥 (雪悟)
圣骑士



UID:363444
注册:2006-1-14
最后登录: 2008-08-27
帖子:99
精华:1

可用积分:597 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


9楼 发表于 2008-6-30 13:40 


QUOTE:
原帖由 kts2tt 于 2008-6-30 13:24 发表
如果把这个单机版升级成PVP版
是否在服务器端分别为两个临时PLAYER生成一个文件记录他们的出招,最后通过两个文件比较得出结果呢?
最后再用server push回去?

哈哈。
是啊。这是个简单的命令行游戏。做简单修改即能运行在WEB上。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

OnlyCore
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?
kts2tt
侠客




UID:700776
注册:2008-5-5
最后登录: 2008-09-25
帖子:14
精华:0

可用积分:13 (白手起家)
信誉积分:0
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[个人空间] [短信] [博客]


10楼 发表于 2008-7-1 10:59 
呵呵,可以发展成极致简单的webgame



您对本贴的看法:鲜花[0] 臭蛋[0]
积分兑换专区 | IT节能和TPC-E活动获奖名单 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘 | 站长如何获得资金?

首页 » 论坛 » Php »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.193986 second(s), 4 queries , Gzip enabled