铁血丹心

 找回密码
 我要成为铁血侠客
搜索
12
返回列表 发新帖
楼主: 夏海

[通用] 经脉冲穴系统的LUA版实现

[复制链接]
发表于 2010-2-1 15:35 | 显示全部楼层
看着夏海大大的解释,觉得好复杂啊~~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-2-1 16:16 | 显示全部楼层
经脉冲穴V2.1

一.变量
(1)人物的“声望”属性作为“冲穴程度”变量
(2)秘籍的“加品德”属性作为“加冲穴”变量
(3)秘籍的“练出物品需经验”属性作为“需冲穴”变量
以上3个量都要减去10000,以防溢出
冲的穴位应该不多,因为根据平衡和取舍的思想,像拳/刀/剑/特,穴位只能在阴/阳/内/外中选择其中一种。而且总共才10种武功,能留给冲穴的最多两三种。

二.代码段
(1)判断需冲穴的代码:
在函数function CanUseThing(id,personid)的后部加入:

if JY.Thing[id]["练出物品需经验"] ~= 0 then
                local iii=0;
                local ii3=0;
                local ii2=0;
                for iii=0,15 do
                        ii3=math.floor((JY.Thing[id]["练出物品需经验"]+10000)/(2^iii));
                        if math.fmod(ii3,2)>0 then
                                ii2=math.floor((JY.Person[personid]["声望"]+10000)/(2^iii));
                                if math.fmod(ii2,2)==0 then
                                        return false;
                                end                                                        
                        end
                end
    end

(2)加冲穴代码:

在函数function War_PersonTrainBook(pid)中加入:

AddPersonAttrib(pid,"声望",JY.Thing[thingid]["加品德"]+10000);

(3)穴位状态显示代码:

添加在函数function ShowPersonStatus_sub(id,page)    --显示人物状态页面后部:

local iii=0;
local ii3=0;
local tmpstr={"阴维阴蹻","阳维阳蹻","冲带","任督","足厥阴","足少阴","足太阴","足阳明","足少阳","足太阳","手厥阴","手少阴","手太阴","手阳明","手少阳","手太阳"};
DrawString(x1,y1+h*i,"已冲穴位:",C_ORANGE,size);
for iii=0,15 do
        ii3=math.floor((p["声望"]+10000)/(2^iii));
        if math.fmod(ii3,2)>0 then
                DrawString(x1+size*5+size*3.5*iii,y1+h*i+size/4,tmpstr[iii+1],C_GOLD,size*3/4);
        end
end

(4)修炼第1级后显示冲破穴位:

在函数function War_PersonTrainBook(pid)的语句DrawStrBoxWaitKey( string.format("%s 修炼 %s 成功",p["姓名"],JY.Thing[thingid]["名称"]),C_WHITE,CC.DefaultFont);后添加:

if JY.Thing[thingid]["加品德"]~=0 then
                local tmp="穴位";
                local iii=0;
                local ii3=0;
                local tmpstr={"阴维阴蹻","阳维阳蹻","冲带","任督","足厥阴","足少阴","足太阴","足阳明","足少阳","足太阳","手厥阴","手少阴","手太阴","手阳明","手少阳","手太阳"};
                for iii=0,15 do
                        ii3=math.floor((JY.Thing[thingid]["加品德"]+10000)/(2^iii));
                        if math.fmod(ii3,2)>0 then
                                DrawStrBoxWaitKey( string.format("%s 冲破 %s 成功",p["姓名"],tmpstriii+1]),C_WHITE,CC.DefaultFont);                                
                        end
                end
        end

三.存在问题

源代码jymain.lua在附件中供测试

四.效果图

[ 本帖最后由 夏海 于 2010-2-1 16:23 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-2-1 19:12 | 显示全部楼层
怎么不能启动游戏了??????
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-2-1 20:45 | 显示全部楼层

回复 28# 的帖子

(1)覆盖clzr_lua/script
(2)把人物的初始声望改为-10000

[发帖际遇]: 夏海在佛山巧遇钟阿四一家被凤天南强逼,出手打趴凤天南,凤天南奉上银两22。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-2-2 15:53 | 显示全部楼层
楼主。。。。
1.C语言对于2进制那地方你好像还没学好
2.为啥不新加一个变量而去(好好读读游泳的鱼的注释,全局变量声明的位置不是随便的),偏要用道德和声望呢?
3.这个虽然是个人习惯问题。。。。不过要是想让别人读自己的代码最好是写注释,并养成编程习惯(比如变量的声明,个人推荐变量类型+变量英文名法)

[发帖际遇]: 孤魂野鬼客栈巧遇乔峰,与之对酒后付帐,花费银两19。


[ 本帖最后由 孤魂野鬼 于 2010-2-2 16:42 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-2-2 16:11 | 显示全部楼层
回楼上:
1您能具体举出27楼中一两处错误的地方吗?
2加全局变量,需要保存和读写文件。道德和声望是可用的,也是游大文章里写的
3.好吧,我加注释:

(1)判断需冲穴的代码:
在函数function CanUseThing(id,personid)的后部加入:

if JY.Thing[id]["练出物品需经验"] ~= 0 then        --有加穴要求
                local iii=0;
                local ii3=0;
                local ii2=0;
                for iii=0,15 do             --对16个穴位
                        ii3=math.floor((JY.Thing[id]["练出物品需经验"]+10000)/(2^iii));
                        if math.fmod(ii3,2)>0 then          --内功的该穴位的需冲穴=1
                                ii2=math.floor((JY.Person[personid]["声望"]+10000)/(2^iii));
                                if math.fmod(ii2,2)==0 then      --人物的改穴位为0
                                        return false;                         --不适合修炼
                                end                                                        
                        end
                end
    end

(2)加冲穴代码:

在函数function War_PersonTrainBook(pid)中加入:

AddPersonAttrib(pid,"声望",JY.Thing[thingid]["加品德"]+10000);     --加冲穴程度

(3)穴位状态显示代码:

添加在函数function ShowPersonStatus_sub(id,page)    --显示人物状态页面后部:

local iii=0;
local ii3=0;
local tmpstr={"阴维阴蹻","阳维阳蹻","冲带","任督","足厥阴","足少阴","足太阴","足阳明","足少阳","足太阳","手厥阴","手少阴","手太阴","手阳明","手少阳","手太阳"};
DrawString(x1,y1+h*i,"已冲穴位:",C_ORANGE,size);
for iii=0,15 do           --16个穴位
        ii3=math.floor((p["声望"]+10000)/(2^iii));
        if math.fmod(ii3,2)>0 then               --人物的该穴位已冲开
                DrawString(x1+size*5+size*3.5*iii,y1+h*i+size/4,tmpstr[iii+1],C_GOLD,size*3/4);
        end                                      --在状态页显示
end

(4)修炼第1级后显示冲破穴位:

在函数function War_PersonTrainBook(pid)的语句DrawStrBoxWaitKey( string.format("%s 修炼 %s 成功",p["姓名"],JY.Thing[thingid]["名称"]),C_WHITE,CC.DefaultFont);后添加:

if JY.Thing[thingid]["加品德"]~=0 then            --新修炼的武功冲破了穴位
                local tmp="穴位";
                local iii=0;
                local ii3=0;
                local tmpstr={"阴维阴蹻","阳维阳蹻","冲带","任督","足厥阴","足少阴","足太阴","足阳明","足少阳","足太阳","手厥阴","手少阴","手太阴","手阳明","手少阳","手太阳"};
                for iii=0,15 do                   --对16个穴位
                        ii3=math.floor((JY.Thing[thingid]["加品德"]+10000)/(2^iii));
                        if math.fmod(ii3,2)>0 then            --该位加冲穴=1
                                DrawStrBoxWaitKey( string.format("%s 冲破 %s 成功",p["姓名"],tmpstriii+1]),C_WHITE,CC.DefaultFont);                     --显示新冲破的穴位名            
                        end
                end
        end

[发帖际遇]: 夏海在华山山谷捡到被令狐冲打落的宝剑,送回给宁女侠,宁女侠感谢万分,送你银两30。

评分

参与人数 1声望 +20 收起 理由
凶神恶煞 + 20 辛苦了~

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-2-2 19:29 | 显示全部楼层
我道...
想看死我不...
誰能解釋哪些代碼...
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-2-4 09:42 | 显示全部楼层
谢谢楼上~
求游大验收


[发帖际遇]: 夏海投石杀死蒙古大汗蒙哥,天下闻名,增加声望5。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-2-4 09:55 | 显示全部楼层
其实我看不太懂夏海大的代码
尤其是+-10000 这个地方,作啥用的?
16bit 应该刚好全用光,怎么有溢位情形

[发帖际遇]: 游客想前往牛家村发掘曲灵风藏宝,却被侯通海弄脏了衣服,买新衣服花去银两5两。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-2-4 09:57 | 显示全部楼层
原帖由 凶神恶煞 于 2010-1-31 11:04 发表
游戏使用的有符号16位数范围是-32768~+32767
你用的35840应该减65536,实际上在游戏里应该是-29696


原因如上,look

[发帖际遇]: 夏海在丐帮大会揭露何师我的真正面目,得郭靖称赞,增加声望1。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-16 00:04

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表