上面说道:实际伤害=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在短时间内的不间断访问。这才是有效的手段。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)