日期:2025/04/05 05:56来源:未知 人气:53
一说到MOBA游戏,相信很多人第一时间想到的就是Dota和LOL,相信很多人都会以为Dota1(魔兽争霸地图)就是MOBA游戏的原型。其实并非如此,早在1998年,美国暴雪游戏推出了《星际称霸》开始,有一个玩家就设计了一张叫“Aeon of Strife”的地图,这张地图,其实也就是MOBA游戏的原型,只是Dota1后面出现在公众视野,由此我们才认为Dota就是MOBA游戏的始祖。
当然,这里我不会很详细的跟你说MOBA游戏到底是个什么东西。
Moba游戏是什么?
一说起MOBA,必须要要提到以下几种RTS游戏,例如星际争霸、魔兽争霸、红警等等
比如魔兽争霸,魔兽争霸传统的地图来说,我们跟MOBA来做一个对比:
魔兽争霸3:建造建筑、采集、研究科技、攻击敌人、杀死所有敌人则胜利
MOBA:选择角色、攻击敌人、摧毁中心枢纽建筑则胜利
MOBA是基于RTS的,或者是它也是RTS的一种,只是他更简略。
最大的区别是:MOBA游戏玩家只能控制一个Hero(英雄,角色),而魔兽争霸中玩家需要控制多个单位,MOBA游戏没有采集、建立建筑、玩家科技,MOBA的线路一般都是固定的(例如Dota的3条路,上中下),而在魔兽争霸中,没有这些限制,你甚至可以在一片森林中开出一条路。
MOBA游戏的地图终归可以分成以下几种地图(在不同的MOBA游戏中总结出来的):
水平方向一条线路:
斜角方向一条线路:
斜角方向两条线路:
等等,不管线路是对角,水平,还是弯弯曲曲的线路,也不管有几条线路,这都不是重点,重点就是:MOBA一定会有固定的攻击线路,MOBA游戏的胜利条件也一定是攻击敌方中心枢纽建筑,摧毁则胜利
Python实现MOBA自动打怪的原理
这里只能以俯视视角类型的MOBA游戏为例,MOBA + 3D第一人称那种类型实在不行。
以水平方向2条攻击线路为例:
第一步:让Python程序知道,玩家在左边还是右边,这样才能让Python知道点击鼠标往右边移动还是往左边移动。解决办法有很多种,不过一般的MOBA都提供了小地图,往往在小地图有标明玩家所在的位置,由此玩家从出生点出来的时候可以轻松的通过判断坐标颜色的方式(或者其他方法)来获得玩家是属于左边势力还是右边势力
第二步:让玩家判断走哪条路。
第三步:判断是否遇怪。
先说说判断是否遇怪,我们可以通过PIL包来解决这个问题。
解决办法:
1、锁定视角(锁定视角之后,玩家永远处于游戏的中心位置,视角会随着玩家移动而自动移动)
2、创建一个玩家的遇敌范围。例如,在以玩家为中心点的,500X500的像素点内。
game_Width = ...
game_Height = ...
center = {"x":game_Width/2, "y":game_Height/2}
hero_div = (center["x"] - (500/2),center["y"] - (500/2),\
center["x"] + (500/2), center["y"] + (500/2))
得到基于游戏窗口内的玩家500x500的区域之后,把游戏窗口移动到0,0 或者是根据游戏窗口所在屏幕坐标,再计算,因为PIL是根据屏幕坐标来进行截图的
from PIL import ImageGrab
him_hero = 0xff.. #敌人关键的像素颜色,自行用取像素颜色工具去取敌人的关键颜色
while .....
im = ImageGrab.grab(hero_div) #得到玩家遇敌范围内的图片
im_pix = im.load() #得到图片坐标对象
for x in range(im.width):
for y in range(im.height):
if(him_hero == im_pix[x,y]): #如果颜色匹配,说明敌人进入了我们规定的遇敌范围
break
这种方法能轻松搞定所有非第一人称视角的MOBA游戏,例如手机上的王者荣耀、虚荣、自由之战等等,电脑上的LOL、Dota、300英雄等等。
我是斌哥,喜欢请点击关注。
斌哥说Python,只专注于Python技术!