php 简单的程序设计(轮流攻击)

php 简单的程序设计(轮流攻击),第1张

胡乱写了个简单程序,不过测试程序的时候发现,你的伤害计算有很大的问题。

上面说道:实际伤害=A部队攻击力-B部队防御力

那么攻击最高的骑兵攻击是30,打在防最低为5的弓兵身上,那么伤害等于30-5=25,这里倒是没多大问题,但是又看

实际伤害/B部队单位血量=本次攻击杀死敌兵数量,余数进位.

那么杀死弓兵的数量就等于25/200=0.125 按余数进位也就是1而已 0.125已经是里面最大的伤害了,所以造成每次无论任意兵种攻击任意兵种,死亡的单位都是1.

附程序(没怎么思考,期待楼下更精简的算法):

<?php

//初始化团队

$team_a=array(

"5"=>set_c("军团A骑兵甲","cavalry"),

"11"=>set_c("军团A弓兵甲","archer"),

"14"=>set_c("军团A弓兵乙","archer"),

"8"=>set_c("军团A步兵甲","infantry"),

"7"=>set_c("军团A步兵乙","infantry")

)

$team_b=array(

"8"=>set_c("军团B骑兵甲","cavalry"),

"9"=>set_c("军团B骑兵乙","cavalry"),

"13"=>set_c("军团B弓兵甲","archer"),

"5"=>set_c("军团B步兵甲","infantry"),

"10"=>set_c("军团B步兵乙","infantry")

)

//按速度对团队进行排序

$team_a=spe_sort($team_a)

$team_b=spe_sort($team_b)

//初始化战斗单位

function set_c($name,$type){

//初始化兵种 infantry 步兵 archer弓兵 cavalry骑兵,兵种=>(攻,防,HP,速度,数量).

$arm=array(

"infantry"=>array("tak"=>20,"def"=>10,"hp"=>250,"spe"=>"20|24","amo"=>120),

"archer"=>array("tak"=>25,"def"=>5,"hp"=>200,"spe"=>"25|27","amo"=>100),

"cavalry"=>array("tak"=>30,"def"=>15,"hp"=>300,"spe"=>"28|30","amo"=>80)

)

$d=$arm[$type]

$d["name"]=$name

$spe=explode("|",$d["spe"])

$d["spe"]=rand($spe[0],$spe[1])

return $d

}

//速度排序

function spe_sort($array){

foreach($array as $key =>$value)

{

$temp[$key] = $value['spe']

}

arsort($temp)

foreach($temp as $key =>$value)

{

$result[$key] = $array[$key]

}

return $result

}

//战斗函数 $active=攻击团队 $passive=被攻击团队

function fight($active,$passive){

//目标选择规则

$targeting=array(7,4,10,1,13,8,5,11,2,14,9,6,12,3,15)

foreach($active as $k=>$a)

{ foreach($targeting as $t)

{

if(isset($passive[$t]))

{

$hurt=$active[$k]["tak"]-$passive[$t]["def"]

$kill=ceil($hurt/$passive[$t]["hp"])

$passive[$t]["amo"]=$passive[$t]["amo"]-$kill

echo "<font color='#0000FF'>".$active[$k]["name"]."</font>攻击了 <font color='#0000FF'>". $passive[$t]["name"] ."</font>,共伤害<font color='#ff000'>$hurt </font>点,杀死<font color='#ff000'>$kill </font>个单位.剩余".$passive[$t]["amo"]."个单位</br>"

if( $passive[$t]["amo"]<=0)

{

echo "×<font color='#ff000'>".$passive[$t]["name"]."</font>被消灭了!</br>"

unset($passive[$t])

if(!count($passive)){echo "<font color='#ff000'>该军团已全军覆没!战斗结束....</font>"die()}

}

break

}

}

}

echo "-------------------本回合结束,换对方攻击-------------------</br>"

fight($passive,$active)

}

echo "战斗开始!</br>"

fight($team_a,$team_b)

?>

PHP本身再老版本有一些问题,另外,目前闹的轰轰烈烈的SQL Injection也是在PHP上有很多利用方式,所以要保证安全,PHP代码编写是一方面,PHP的配置更是非常关键。

(1) 打开php的安全模式

php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数

同时把很多文件 *** 作函数进行了权限控制,也不允许对某些关键文件的文件

但是默认的php.ini是没有打开安全模式的

(2) 用户组安全

当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。

如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行 *** 作了,比如我们需要

对文件进行 *** 作的时候。

(3) 安全模式下执行程序主目录

如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录

一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,

然后把需要执行的程序拷贝过去

但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录

(4) 安全模式下包含文件

如果要在安全模式下包含某些公共文件,

其实一般php脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。

(5) 控制php脚本能访问的目录

使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问

不应该访问的文件,一定程度上限制了phpshell的危害,我们一般可以设置为只能访问网站目录

(6) 关闭危险函数

如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,

我们觉得不希望执行包括system等在那的能够执行命令的php函数,或者能够查看php信息的

如果你要禁止任何文件和目录的 *** 作,那么可以关闭很多文件 *** 作

以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,

就能够抵制大部分的phpshell了。

(7) 关闭PHP版本信息在http头中的泄漏

我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中

(8) 关闭注册全局变量

在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,

这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭

当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式

(9) SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,

所以一定要小心。

这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,

(10) 错误信息控制

一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当

前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的

无论使用PHP还是Apache(.htaccess)的手段,这个IP的请求还是被彻底执行了。CPU还是被占用了,虽然可能会占用的稍微少一点。

所以通过服务器设置,比如在Linux使用iptables防火墙。或者使用其他的前置的硬件防火墙。过滤这种同一IP在短时间内的不间断访问。这才是有效的手段。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8112558.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存