GAME-NamePK 基于MD5的名字PK(上)
先上Demo:
灵感来自网上的“MD5大作战”,不过无法找到原作者的链接。
这个游戏过程很简单,只要输入2个名字,点击“StartPk”,就开始战斗,直到有一个被扁趴下为止。
详细的制作过程如下:
首先要让输入的名字对应的角色属性值唯一化,实现这个的方法有很多种(例如MD5,SHA),这里用的是MD5,先把输入的名字去除左右空格后转化做MD5转换,这样出来的就是一个固定32位长度的字符串,接下去只要把这个字符串转换成数字就可以了,做法有好几种,可以将字符串里的字母转换为ASCII码值,可以直接去掉里边的字母只保留数字,也可以自己做一个转换函数来把字母转换成特定的数字,这里我直接去掉字符串中的字母。
实现这部分功能的代码,根据输入字符串生成Player属性的类,Player.as:
[js]
package org.nwhy{
import utils.MD5;
import flash.display.MovieClip;
public class Player {
//名字
private var _name:String;
//血量值
private var _hp:int;
//力量值,影响攻击力
private var _str:uint;
//敏捷值,影响命中和躲避率
private var _dex:uint;
//幸运值,影响攻击力和命中/闪避率
private var _luck:uint;
//显示状态的MC
private var _bindMC:MovieClip;
//攻击方式
private var _aryAttackStyle:Array=new Array("不知从哪丢出一陀大便","搬起一块石头砸了过来","喝下一口酒精喷出一个大火球","高唱我的菊花为谁开","使出了砖石星辰拳","扔出了发着佛光的雅典娜");
public function Player (__str:String="") {
var strTmp=MD5.hash(__str);
strTmp=str2num(strTmp);
//保证strTmp的长度为10个字符以上
while (strTmp.length<10) {
strTmp+=strTmp;
}
//各属性的赋值和调整
_hp=int(strTmp.substr(0,3));
if (_hp<150) {
_hp+=200;
} else if (500<_hp ) {
_hp=(_hp*0.8)<<0;
}
_str=int(strTmp.substr(3,2));
if (_str<20) {
_str+=20;
} else if (90<_str) {
_str=(_str*0.9)<<0;
}
_dex=int(strTmp.substr(5,2));
if (_dex<20) {
_dex+=20;
} else if (80<_dex) {
_dex=(_dex*0.75)<<0;
}
_luck=int(strTmp.substr(7,2));
_name=__str;
}
public function getName ():String {
return _name;
}
public function setHp (value:int):void {
if(value<0){
value=0;
}
_hp=value;
}
public function getHp ():int {
return _hp;
}
public function getStr ():uint {
return _str;
}
public function getDex ():uint {
return _dex;
}
public function getLuck ():uint {
return _luck;
}
//绑定显示用的MC
public function setBindMC (_mc:MovieClip):void {
_bindMC=_mc;
}
public function getBindMC ():MovieClip {
return _bindMC;
}
//判断是不是还活着
public function isAlive ():Boolean {
if (_hp>0) {
return true;
} else {
return false;
}
}
//攻击函数
public function attack():Array{
var aryAttack:Array=new Array((Math.random()*_str< <0)+_str/5+_luck,_aryAttackStyle[Math.random()*_aryAttackStyle.length<<0]);
return aryAttack;
}
//生成命中和闪避率
public function getRate():Number{
return Math.random()*((_dex+_luck)/100);
}
//获取字符串中数字
public static function str2num (char:String):String {
var pattern:RegExp=/^[-\+]?\d+$/;
var strTemp:String="";
for (var i:uint=0; i
if (rs==null) {
} else {
strTemp+=char.charAt(i);
}
}
return strTemp;
}
}
}
[/js]
下边是具体的游戏实现部分和源码下载:“GAME-NamePK 基于MD5的名字PK(下)”。
March 24th, 2009 - 19:48
比对敏捷值 丫头 获得优先攻击权
丫头 喝下一口酒精喷出一个大火球 伤害值为 101
豆腐 高唱我的菊花为谁开 伤害值为 88
丫头 搬起一块石头砸了过来 伤害值为 109
豆腐 搬起一块石头砸了过来 伤害值为 92
丫头 扔出了发着佛光的雅典娜 伤害值为 120
豆腐 搬起一块石头砸了过来 伤害值为 83
但是 丫头 闪开了
丫头 喝下一口酒精喷出一个大火球 伤害值为 108
豆腐 高唱我的菊花为谁开 伤害值为 79
丫头 被扁趴下 豆腐 获得胜利
[Reply]
May 13th, 2009 - 16:54
[Reply]
August 20th, 2010 - 17:39
[Reply]
DFdou Reply:
2010-8-23 at 10:54 am
@, 随意~~
[Reply]