咸鱼虾扯蛋

编程入门 行业动态 更新时间:2024-10-25 18:35:05

<a href=https://www.elefans.com/category/jswz/34/1762853.html style=咸鱼虾扯蛋"/>

咸鱼虾扯蛋

    最近又玩起了flash 小游戏,但是打不过怎么办啊? 做为一个屌丝级别的极品,额!打不过很丢人的!肿么办?

    所以洒家,制作了kula 一键发招, 按键脚本,觉着好用!哈哈哈哈!(用到了多线程和时钟哦,菜鸡写的好辛苦)

    1、操作流程

     kula的发招 主要是 {{下右, 下左, 右左, 下左右} | {下左, 下右, 左右, 下右左}} * {轻|重拳, 轻|重脚}。方向键和拳脚之间的按键时间间隔要求非常短,不然就会发不出招。所以只好将拳,脚的J,K键写入宏里面。

     下右J,下左K,这个设置是给摇杆玩的啊,对于摇杆来说一个 {下右}的操作能够连贯的完成。但是对于键盘侠来说,我们需要按两个键啊,想要玩的好左手就得鬼畜,右手就得配合啊。操作流程如下图所示:

KulaUML_flow

 

    2、第一版代码

     于是写下了第一版的代码(附源码)。1、画了一个界面,界面上放了几个按键宏,每个按键宏执行一个招式(如:大招 下左右重拳 或者 下右左重拳,取决于角色的面向,可以简写为 下前后重拳),2、使用Hotkey触发界面上按键Click代码块。3、使用BeginThread设置一个时钟,在一定时间内禁止重复按键触发。4、使用timer修改界面按钮样式,在界面上显示按钮被按下的过程。如下图所示:

KulaUML_problem_form

     3、第一版遇到的问题

     角色面向问题:我一个大招需要使用两个按键,一个是在左边发大招 下右左 宏,另一个是在右边发大招 下左右 宏,这个也太不方便了,我手动也只是按三个键,有没有自动判断面向一键大招啊。于是本咸鱼第二天继续工作,一定要解决这个问题。还自称中级咸鱼呢,不能丢了自家门面Facade不是?我找到了FindPic、FindSharp、FindColor几个方法在windows窗口找kula,找到左边的kula就代表了kula当前面向为向左。如下图所示:

KulaUML_problem_findpic

1、首先我想到,把flash里的游戏素材提取出来,提取后发现一个站立状态有6~7张图,用尾巴想一想都知道去界面上找图6~7次会行不通

2、其次我想到的是抓形状,但是抓形状也很难标记准确,需要计算位置,弄了半天也没有成功。

3、然后我想到了找颜色。我发现kula的红眼睛比较好辨认,我就想在眼睛上取5个点做为特征值。据不完全统计,头发会遮住眼睛啊,站立有三种眼睛,后退有5种以上的眼睛,前进有6种眼睛,而且每次抓取颜色还有些许颜色偏差,很难在到眼睛上一个固定不变的色块。

4、在找眼睛特征时的时候我对着图片╰(‵□′)╯时,突然眼睛一亮,对,这双鞋,这双鞋上没有长飘来飘去的头发,而且基本上是平移。我把鞋子图片放大了之后得到了12张特征图——站立左、站立右、前进左(单脚着地)、前进左(双脚着地)、后退左1、后退左2、后退左3.....

4、第二版遇到的问题

     慢!屏幕区域找图很慢,我按下了一键大招过了1秒才发动,早被打成猪头了。如下图所示:

KulaUML_perform_findpic

     最后是整理状态,减少抓图次数。

     5、优化算法

     1、旧版本的算法与角色待命状态迁移图:

KulaUML_perform_stateold

     2、但是我们的算法可以优化,用户按键A、S、D是可以作为算法输入提前获取的,为什么要写到算法里面成为一个复杂的组合状态呢?用户ASD做为算法输入,简化算法后的角色待命状态迁移图:

KulaUML_perform_statenew

6、问题:

     我以前编码也遇到过要做状态机的情况,那么 如上图  KulaUML_perform_statenew 上下两张图都可以表示为kula角色待机状态的 状态图,那么我们,依据算法流程来设计一个系统的状态迁移图?我们给了6个最终状态不同的划分(partitions)。第一次我们划分为6份,我们需要进行1次抓图匹配12张特征图——站立左、站立右....,也就是12次抓图,来确认角色面向。第二次我们依据按键状态分3份{A键按键状态,无方向键按下/S键按下,D键按下}通过对状态的有效划分,我们只抓图一次匹配1张图——站立左{无方向键按下/S键按下}、前进左{D键按下}、前进右{A键按键状态},就完成了角色发招前待命状态的判断!!!

关于有限状态机,参见博文:

防沉迷第一版代码如下:

Event Form1.Load
var_i = 15Form1.Hotkey1.Register TrueForm1.Hotkey2.Register TrueForm1.Hotkey3.Register TrueForm1.Hotkey4.Register TrueForm1.Hotkey5.Register TrueForm1.Hotkey6.Register TrueForm1.Hotkey7.Register TrueForm1.Hotkey8.Register TrueForm1.Hotkey9.Register TrueForm1.Hotkey10.Register TrueEnd Event// 键盘按键1
Event Form1.Hotkey1.HotkeyIf var_clock = 0 or var_clock > 20 Then Form1.Button1.Click start(200)End If	
End Event
Event Form1.Button1.ClickKeyPress "S", 1
KeyDown "D", 1
Delay var_i
KeyPress "K", 1
Delay var_i
KeyUp "D", 1
EndScriptEnd Event// 键盘按键2
Event Form1.Hotkey2.HotkeyIf var_clock = 0 or var_clock > 20 Then Form1.Button2.Click start(200)End If
End Event
Event Form1.Button2.ClickKeyDown "S", 1
Delay var_i
KeyPress "D", 1
Delay var_i
KeyPress "A", 1
Delay var_i
KeyUp "S", 1
KeyPress "J", 1
Delay var_i
KeyDown "S", 1
Delay var_i
KeyPress "A", 1
Delay var_i
KeyPress "D", 1
Delay var_i
KeyPress "J", 1
Delay var_i
KeyUp "S", 1
EndScriptEnd Event// 键盘按键3
Event Form1.Hotkey3.HotkeyIf var_clock = 0 or var_clock > 20 Then Form1.Button3.Click start(200)End If
End Event
Event Form1.Button3.ClickKeyPress "S", 1
Delay var_i
KeyDown "A", 1
Delay var_i
KeyPress "K", 1
Delay var_i
KeyUp "A", 1
EndScriptEnd Event// 键盘按键Q
Event Form1.Hotkey4.HotkeyIf var_clock = 0 or var_clock > 20 Then Form1.Button4.Click start(200)End If
End Event
Event Form1.Button4.ClickKeyDown "S", 1
Delay var_i
KeyPress "J", 1
Delay var_i
KeyUp "S", 1
EndScriptEnd Event// 键盘按键E
Event Form1.Hotkey5.HotkeyIf var_clock = 0 or var_clock > 20 Then Form1.Button5.Click start(200)End If
End Event
Event Form1.Button5.ClickKeyDown "W", 1
Delay 300
KeyPress "I", 1
Delay var_i
KeyUp "W", 1
EndScriptEnd Event// 键盘按键R
Event Form1.Hotkey6.HotkeyIf var_clock = 0 or var_clock > 20 Then Form1.Button6.Click start(200)End If
End Event
Event Form1.Button6.ClickKeyPress "U", 1
Delay 300
KeyPress "K", 1
EndScriptEnd Event// 键盘按键F
Event Form1.Hotkey7.HotkeyIf var_clock = 0 or var_clock > 20 Then Form1.Button7.Click start(200)End If
End Event
Event Form1.Button7.ClickKeyDown "J", 1
Delay 1
KeyDown "K", 1
Delay var_i
KeyUp "J", 1
KeyUp "K", 1
EndScriptEnd Event// 键盘按键V
Event Form1.Hotkey8.HotkeyIf var_clock = 0 or var_clock > 20 Then Form1.Button8.Click start(200)End If
End Event
Event Form1.Button8.ClickKeyDown "S", 1
Delay var_i
KeyDown "I", 1
Delay var_i
KeyUp "I", 1
Delay var_i
KeyUp "S", 1
EndScriptEnd Event// 键盘按键N
Event Form1.Hotkey9.HotkeyIf var_clock = 0 or var_clock > 20 Then Form1.Button9.Click start(200)End If
End Event
Event Form1.Button9.ClickKeyPress "S", 1
Delay var_i
KeyUp "A",1
KeyDown "A", 1
Delay 25
KeyPress "J", 1
Delay var_i
KeyUp "A", 1
EndScript End Event// 键盘按键M
Event Form1.Hotkey10.HotkeyIf var_clock = 0 or var_clock > 20 Then Form1.Button10.Click start(200)End If
End Event
Event Form1.Button10.ClickKeyPress "S", 1
Delay var_i
KeyUp "D",1
KeyDown "D", 1
Delay 25
KeyPress "J", 1
Delay var_i
KeyUp "D", 1
EndScriptEnd Event// 修改按键延迟
Event Form1.Slider1.Slide//当滑块位置被鼠标拖动时触发的事件var_i = Form1.Slider1.Value
End Event// 使用时钟避免重复执行同一事件
Dimenv ID
Global var_clock	// 出发按键后1s内,长按不重复触发
Global var_flag		// 当前招式施展时间
var_clock = 0
var_flag = 0Sub start(n)var_flag = nvar_clock = 1ID = BeginThread(clock)
End SubSub clockDelay var_flagvar_clock = var_clock + 20//TracePrint var_clockEnd Sub

    我教你洛,你把按键打开,然后和其他童鞋PK,哈哈。尽情的虐他吧!!!!啊吸吧!!!

更多推荐

咸鱼虾扯蛋

本文发布于:2024-03-09 15:51:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1725414.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:咸鱼   虾扯蛋

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!