用python 游戏能不能写出游戏外挂?

一步步用python制作游戏外挂 - Python GUI教程 - Win Python|PyQt|Tkinter|Python游戏
官方微博:
一步步用python制作游戏外挂
玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就...
玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂。。。。我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按照菜单做好端给他便好~ 为啥这么有难度?8种菜单记不清,点点就点错,鼠标还不好使肌肉劳损啥的伤不起啊……首先要声明,这里的游戏外挂的概念,和那些大型网游里的外挂可不同,不能自动打怪,不能喝药不能躲避GM…… 那做这个外挂有啥用?问的好,没用,除了可以浪费你一点时间,提高一下编程技术,增加一点点点点点点的做外挂的基础以外,毫无用处,如果您是以制作一个惊天地泣鬼神不开则已一开立刻超神的外挂为目标过来的话,恐怕要让您失望了,请及早绕道。我的目的很简单,就是自动玩这款小游戏而已。工具的准备这篇文章需要您有Python基础,我不会讲解Python语法啥的~Python需要安装autopy和PIL以及pywin32包。autopy是一个自动化操作的python库,可以模拟一些鼠标、键盘事件,还能对屏幕进行访问,本来我想用win32api来模拟输入事件的,发现这个用起来比较简单,最厉害的是它是跨平台的,请搜索安装;而PIL那是大名鼎鼎了,Python图像处理的No.1,下面会说明用它来做什么;pywin32其实不是必须的,但是为了方便(鼠标它在自己动着呢,如何结束它呢),还是建议安装一下,哦对了,我是在win平台上做的,外挂大概只有windows用户需要吧?截屏和图像处理工具截屏是获取游戏图像以供分析游戏提示,其实没有专门的工具直接Print Screen粘贴到图像处理工具里也可以。我用的是PicPick,相当好用,而且个人用户是免费的;而图像处理则是为了获取各种信息的,我们要用它得到点菜图像后保存起来,供外挂分析判断。我用的是PhotoShop… 不要告诉Adobe,其实PicPick中自带的图像编辑器也足够了,只要能查看图像坐标和剪贴图片就好饿了,只不过我习惯PS了~编辑器这个我就不用说了吧,写代码得要个编辑器啊!俺用VIM,您若愿意用写字板也可以……原理分析外挂的历史啥的我不想说啦,有兴趣请谷歌或度娘(注:非技术问题尽可以百度)。看这个游戏,有8种菜,每种菜都有固定的做法,顾客一旦坐下来,头顶上就会有一个图片,看图片就知道他想要点什么菜,点击左边原料区域,然后点击一下……不知道叫什么,像个竹简一样的东西,菜就做完了,然后把做好的食物拖拽到客户面前就好了。顾客头上显示图片的位置是固定的,总共也只有四个位置,我们可以逐一分析,而原料的位置也是固定的,每种菜的做法更是清清楚楚,这样一来我们完全可以判断,程序可以很好的帮我们做出一份一份的佳肴并奉上,于是钱滚滚的来:)autopy介绍github上有一篇很不错的入门文章,虽然是英文但是很简单,不过我还是摘几个这次用得到的说明一下,以显示我很勤劳。移动鼠标import autopyautopy.mouse.move(100, 100) # 移动鼠标autopy.mouse.smooth_move(400, 400) # 平滑移动鼠标(上面那个是瞬间的)这个命令会让鼠标迅速移动到指定屏幕坐标,你知道什么是屏幕坐标的吧,左上角是(0,0),然后向右向下递增,所以屏幕的右下角坐标是……你猜对了,是()。不过有些不幸的,如果你实际用一下这个命令,然后用autopy.mouse.get_pos()获得一下当前坐标,发现它并不在(100,100)上,而是更小一些,比如我的机器上是(97,99),和分辨率有关。这个移动是用户了和windows中mouse_event函数,若不清楚api的,知道这回事就好了,就是这个坐标不是很精确的。像我一样很好奇的,可以去读一下autopy的源码,我发现他计算绝对坐标算法有问题:point.x *= 0xFFFF / GetSystemMetrics(SM_CXSCREEN);这里先做除法再做乘法,学过一点计算方法的就应该知道对于整数运算,应该先乘再除的,否则就会产生比较大的误差,如果他写成:point.x = point.x * 0xffff / GetSystemMetrics(SM_CXSCREEN);就会准多了,虽然理论上会慢一点点,不过我也懒得改代码重新编译了,差几个像素,这里对我们影响不大~咱要吸取教训呀。点击鼠标import autopyautopy.mouse.click() # 单击autopy.mouse.toggle(True) # 按下左键autopy.mouse.toggle(False) # 松开左键这个比较简单,不过记得这里的操作都是非常非常快的,有可能游戏还没反应过来呢,你就完成了,于是失败了…… 所以必要的时候,请sleep一小会儿。键盘操作我们这次没用到键盘,所以我就不说了。怎么做?分析顾客头上的图像就可以,来,从获取图像开始吧~打开你钟爱的图像编辑器,开始丈量吧~ 我们得知道图像在屏幕的具体位置,可以用标尺量出来,本来直接量也是可以的,但是我这里使用了画面左上角的位置(也就是点1)来当做参考位置,这样一旦画面有变动,我们只需要修改一个点坐标就好了,否则每一个点都需要重新写一遍可不是一件快乐的事情。看最左边的顾客头像上面的图像,我们需要两个点才可确定这个范围,分别是图像的左上角和右下角,也就是点2和点3,。后面还有三个顾客的位置,只需要简单的加上一个增量就好了,for循环就是为此而生!同样的,我们原料的位置,“竹席”的位置等等,都可以用这种方法获得。注意获得的都是相对游戏画面左上角的相对位置。至于抓图的方法,PIL的ImageGrab就很好用,autopy也可以抓图,为什么不用,我下面就会说到。分析图像我们这个外挂里相当有难度的一个问题出现了,如何知道我们获得的图像到底是哪一个菜?对人眼……甚至狗眼来说,这都是一个相当easy的问题,“一看就知道”!对的,这就是人比机器高明的地方,我们做起来很简单的事情,电脑却傻傻分不清楚。autopy图像局限如果你看过autopy的api,会发现它有一个bitmap包,里面有find_bitmap方法,就是在一个大图像里寻找样品小图像的。聪明的你一定可以想到,我们可以截下整个游戏画面,然后准备所有的菜的小图像用这个方法一找就明白哪个菜被叫到了。确实,一开始我也有这样做的冲动,不过立刻就放弃了……这个方法查找图像,速度先不说,它有个条件是“精确匹配”,图像上有一个像素的RGB值差了1,它就查不出来了。我们知道flash是矢量绘图,它把一个点阵图片显示在屏幕上是经过了缩放的,这里变数就很大,理论上相同的输入相同的算法得出的结果肯定是一致的,但是因为绘图背景等的关系,总会有一点点的差距,就是这点差距使得这个美妙的函数不可使用了……好吧,不能用也是好事,否则我怎么引出我们高明的图像分析算法呢?相似图像查找原理相信你一定用过Google的“按图搜图”功能,如果没有,你就落伍啦,快去试试!当你输入一张图片时,它会把与这张图相似的图像都给你呈现出来,所以当你找到一张中意的图想做壁纸又觉得太小的时候,基本可以用这个方法找到合适的~我们就要利用和这个相似的原理来判断用户的点餐,当然我们的算法不可能和Google那般复杂,知乎上有一篇很不错的文章描述了这个问题,有兴趣的可以看看,我直接给出实现: & &def get_hash(self, img): & & & &image = img.resize((18, 13), Image.ANTIALIAS).convert(&L&) & & & &pixels = list(image.getdata()) & & & &avg = sum(pixels) / len(pixels) & & & &return &&.join(map(lambda p : &1& if p & avg else &0&, pixels))因为这是类的一个方法,所以有个self参数,无视它。这里的img应该传入一个Image对象,可以使读入图像文件后的结果,也可以是截屏后的结果。而缩放的尺寸(18,13)是我根据实际情况定的,因为顾客头像上的菜的图像基本就是这个比例。事实证明这个比例还是挺重要的,因为我们的菜有点儿相似,如果比例不合适压缩后就失真了,容易误判(我之前就吃亏了)。得到一个图片的“指纹”后,我们就可以与标准的图片指纹比较,怎么比较呢,应该使用“汉明距离”,也就是两个字符串对应位置的不同字符的个数。实现也很简单…… & &def hamming_dist(self, hash1, hash2): & & & &return sum(itertools.imap(operator.ne, hash1, hash2))好了,我们可以用准备好的标准图像,然后预先读取计算特征码存储起来,然后再截图与它们比较就好了,距离最小的那个就是对应的菜,代码如下: & &def order(self, i): & & & &l, t = self.left + i * self.step, self.top & & & &r, b = l + self.width, t + self.height & & & &hash2 = self.get_hash(ImageGrab.grab((l, t, r, b))) & & & &(mi, dist) = None, 50 & & & &for i, hash1 in enumerate(self.maps): & & & & & &if hash1 is None: & & & & & & & &continue & & & & & &this_dist = self.hamming_dist(hash1, hash2) & & & & & &if this_dist & dist: & & & & & & & &mi = i & & & & & & & &dist = this_dist & & & &return mi这里有一个50的初始距离,如果截取图像与任何菜单相比都大于50,说明什么?说明现在那个位置的图像不是菜,也就是说顾客还没坐那位置上呢,或者我们把游戏最小化了(老板来了),这样处理很重要,免得它随意找一个最相近但又完全不搭边的菜进行处理。自动做菜这个问题很简单,我们只需要把菜单的原料记录在案,然后点击相应位置便可,我把它写成了一个类来调用:class Menu: & &def __init__(self): & & & &self.stuff_pos = [] & & & &self.recipes = [None] * 8 & & & &self.init_stuff() & & & &self.init_recipe()
& &def init_stuff(self): & & & &for i in range(9): & & & & & &self.stuff_pos.append( (L + 102 + (i % 3) * 42, T + 303 + (i / 3) * 42) )
& &def init_recipe(self): & & & &self.recipes[0] = (1, 2) & & & &self.recipes[1] = (0, 1, 2) & & & &self.recipes[2] = (5, 1, 2) & & & &self.recipes[3] = (3, 0, 1, 2) & & & &self.recipes[4] = (4, 1, 2) & & & &self.recipes[5] = (7, 1, 2) & & & &self.recipes[6] = (6, 1, 2) & & & &self.recipes[7] = (8, 1, 2)
& &def click(self, i): & & & &autopy.mouse.move(self.stuff_pos[i][0] + 20, self.stuff_pos[i][1] + 20) & & & &autopy.mouse.click()
& &def make(self, i): & & & &for x in self.recipes[i]: & & & & & &self.click(x) & & & &autopy.mouse.move(L + 315, T + 363) & & & &autopy.mouse.click()这是本外挂中最没技术含量的一个类了:)请原谅我没有写注释和doc,因为都很简单,相信你懂得。
相关文章:
相关词搜索:
如对本文内容有疑问,或想进一步交流学习,欢迎通过以下方式:
2. python技术互助群:
3. 关注PythonTab微信: Pythontab ,公众号:Pythontab中文网
版权声明:本站文章除非注明,均为原创内容,如需转载请务必注明出处,违者本站保留追究其法律责任之权利。
频道总排行
频道本月排行跟老齐学Python之做一个小游戏
投稿:hebedich
字体:[ ] 类型:转载 时间:
经过一段时间学习,看官已经不是纯粹小白了,已经属于python初级者了。现在就是开始做那个游戏的时候了。说是做游戏,不过还是先来点基础知识吧
在讲述有关list的时候,提到做游戏的事情,后来这个事情一直没有接续。不是忘记了,是在想在哪个阶段做最合适。经过一段时间学习,看官已经不是纯粹小白了,已经属于python初级者了。现在就是开始做那个游戏的时候了。
游戏内容:猜数字游戏
太简单了吧。是的,游戏难度不大,不过这个游戏中蕴含的东西可是值得玩味的。
游戏过程描述
程序运行起来,随机在某个范围内选择一个整数。
提示用户输入数字,也就是猜程序随即选的那个数字。
程序将用户输入的数字与自己选定的对比,一样则用户完成游戏,否则继续猜。
使用次数少的用户得胜.
在任何形式的程序开发之前,不管是大还是小,都要进行分析。即根据功能需求,将不同功能点进行分解。从而确定开发过程。我们现在做一个很小的程序,也是这样来做。
随机选择一个数
要实现随机选择一个数字,可以使用python中的一个随机函数:random。下面对这个函数做简要介绍,除了针对本次应用之外,还扩展点,也许别处看官能用上。
还是要首先强化一种学习方法,就是要学会查看帮助文档。
&&& import random& #这个是必须的,因为不是内置函数
&&& dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', 'WichmannHill', '_BuiltinMethodType', '_MethodType', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_acos', '_ceil', '_cos', '_e', '_exp', '_hashlib', '_hexlify', '_inst', '_log', '_pi', '_random', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'division', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'jumpahead', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
&&& help(random.randint)
Help on method randint in module random:
randint(self, a, b) method of random.Random instance
&&& Return random integer in range [a, b], including both end points.
耐心地看文档,就明白怎么用了。不过,还是把主要的东西列出来,但仍然建议看官在看每个函数的使用之前,在交互模式下通过help来查看文档。
随机整数:
&&& import random
&&& random.randint(0,99)
随机选取0到100间的偶数:
&&& import random
&&& random.randrange(0, 101, 2)
随机浮点数:
&&& import random
&&& random.random()
&&& random.uniform(1, 10)
随机字符:
&&& import random
&&& random.choice('qiwsir.github.io')
多个字符中选取特定数量的字符:
&&& import random
random.sample('qiwsir.github.io',3)
['w', 's', 'b']
随机选取字符串:
&&& import random
&&& random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )
洗牌:把原有的顺序打乱,按照随机顺序排列
&&& import random
&&& items = [1, 2, 3, 4, 5, 6]
&&& random.shuffle(items)
[3, 2, 5, 6, 4, 1]
有点多了。不过,本次实验中,值用到了random.randint()即可。多出来是买一送一的(哦。忘记了,没有人买呢,本课程全是白送的)。
关键技术点之一已经突破。可以编程了。再梳理一下流程。画个图展示:
(备注:这里我先懒惰一下吧,看官能不能画出这个程序的流程图呢?特别是如果是一个初学者,流程图一定要自己画哦。刚才看到网上一个朋友说自己学编程,但是逻辑思维差,所以没有学好。其实,画流程图就是帮助提高逻辑思维的一种好方式,请画图吧。)
图画好了,按照直观的理解,下面的代码是一个初学者常常写出来的(老鸟们不要喷,因为是代表初学者的)。
#!/usr/bin/env python
#coding:utf-8
import random
number = random.randint(1,100)
print "请输入一个100以内的自然数:"
input_number = raw_input()
if number == int(input_number):
&&& print "猜对了,这个数是:"
&&& print number
&&& print "错了。"
上面的程序已经能够基本走通,但是,还有很多缺陷。
最明显的就是只能让人猜一次,不能多次。怎么修改,能够多次猜呢?动动脑筋之后看代码,或者看官在自己的代码上改改,能不能实现多次猜测?
另外,能不能增强一些友好性呢,让用户知道自己输入的数是大了,还是小了。
根据上述修改想法,新代码如下:
#!/usr/bin/env python
#coding:utf-8
import random
number = random.randint(1,100)
print "请输入一个100以内的自然数:"
input_number = raw_input()
if number == int(input_number):
&&& print "猜对了,这个数是:"
&&& print number
elif number & int(input_number):
&&& print "小了"
&&& input_number = raw_input()
elif number & int(input_number):
&&& print "大了"
&&& input_number = raw_input()
&&& print "错了。"
嗯,似乎比原来进步一点点,因为允许用户输入第二次了。同时也告诉用户输入的是大还是小了。但,这也不行呀。应该能够输入很多次,直到正确为止。
是的。这就要用到一个新的东西:循环。如果看官心急,可以google一下while或者for循环,来进一步完善这个游戏,如果不着急,可以等等,随后我也会讲到这部分。
这个游戏还没有完呢,即使用了循环,后面还会继续。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Python爬虫辅助利器PyQuery模块的安装使用攻略
Windows下的安装:
下载地址:https://pypi.python.org/pypi/pyquery/#downloads
下载后安装:
C:\Python27&easy_install E:\python\pyquery-1.2.4.zip
也可以直接在线安装:
C:\Python27&easy_install pyquery
pyquery是一个类似jquery的python库,可以使用像jquery那样的语法来提取网页中的任何数据,这个用于html网页的数据提取和挖掘还是一个很不错的第三方库的。下面我们来看下pyquery的用法有哪些。
从html字符串中提取信息
#!/usr/bin/python
# -*- coding: utf-8 -*-
from pyquery import PyQuery as pq
html = '''
&title&this is title&/title&
&p id="hi"&Hello, World&/p&
&p id="hi2"&Nihao&/p&
&div class="class1"&
&img src="1.jpg" /&
&li&list1&/li&
&li&list2&/li&
d=pq(html)
print d('title') # 相当于css选择器,根据html标签获取元素
print d('title').text() # text()方法获取当前选中的文本块
print d('#hi').text() # 相当于id选择器,直接根据id名获取元素
print d('p').filter('#hi2').text() # 可以根据id或class得到指定元素
print d('.class1') # 相当于class选择器
print d('.class1').html() # html()方法获取当前选中的html块
print d('.class1').find('img').attr('src') # 查找嵌套元素,并选中属性
print d('ul').find('li').eq(0).text() # 根据索引号获取多个相同html元素中的某一个
print d('ul').children() # 获取所有子元素
print d('ul').children().eq(0) #根据索引获取子元素
print d('img').parents() # 获取父元素
print d('#hi').next() # 获取下一个元素
print d('#hi').nextAll() #获取后面全部元素块
print d('p').not_('#hi2') # 返回不匹配选择器的元素
# 遍历所有匹配的元素
for i in d.items('li'):
print i.text()
print [i.text() for i in d.items('li')] # 遍历用于列表推倒
print d.make_links_absolute(base_url='') # 把html文档中的相对路径变为绝对路径
上面的代码段给出了pyquery常用的操作方法。我们先定义了一段html代码,然后利用pyquery的一系列方法对该html代码进行了操作,主要是获取特定的元素以及文本等。当然,pyquery不仅仅能够获取元素,还能进行设置元素属性、增加元素等功能,鉴于我们最常用的就是上面代码中用到的方法,这里就不再对其他方法进行介绍了。
从url或本地html文件中提取信息
当然,pyquery也不仅仅可以解析像上面的html字符串,还可以这样:
d = pq(url='/')
我们可以直接加载一个URL,和上面的操作方法没有任何区别。这种方法默认使用urllib模块进行http请求,但如果你的系统中安装了requests的话,那么就会使用requests来进行http请求,这也就意味着你可以使用requests的任何参数,比如:
pq('/', headers={'user-agent': 'pyquery'})
或者,如果你在你的本地已经有了对应的html文件,那么还可以这样:
d = pq(filename=path_to_html_file)
上面的写法直接指定了本地的html文件,且操作方法仍然与上面的相同。
可以看到,pyquery给我们提供充分的便利性来进行任何元素的选取,就像jquery一样。
利用pyquery抓取豆瓣电影top250
看完了pyquery的语法,我们来看一个实例,抓取豆瓣电影top250。
因为豆瓣反爬虫反的厉害,运行几次就没法再抓了,我只好先用requests把页面下载下来,直接使用pyquery分析页面的方法来提取信息:
from pyquery import PyQuery as pq
import requests
head_req = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0. Safari/537.36',
'Referer':'/top250?start=0',
r=requests.get("/top250?start=0",headers=head_req)
with open("1.html","wb") as html:
html.write(r.content)
d=pq(filename="1.html")
# print d('ol').find('li').html()
for data in d('ol').items('li'):
print data.find('.hd').find('.title').eq(0).text()
print data.find('.star').find('.rating_num').text()
print data.find('.quote').find('.inq').text()
运行下看看结果:
肖申克的救赎
希望让人自由。
这个杀手不太冷
怪蜀黍和小萝莉不得不说的故事。
一部美国近现代史。
风华绝代。
最美的谎言。
最好的宫崎骏,最好的久石让。
辛德勒的名单
拯救一个人,就是拯救整个世界。
海上钢琴师
每个人都要走一条自己坚定了的路,就算是粉身碎骨。
机器人总动员
小瓦力,大人生。
诺兰给了我们一场无法盗取的梦。
泰坦尼克号
失去的才是永恒的。
三傻大闹宝莱坞
英俊版憨豆,高情商版谢耳朵。
放牛班的春天
天籁一般的童声,是最接近上帝的存在。
忠犬八公的故事
永远都不能忘记你所爱的人。
人人心中都有个龙猫,童年就永远不会消失。
大话西游之大圣娶亲
一生所爱。
千万不要记恨你的对手,这样会让你失去理智。
Tomorrow is another day.
天堂电影院
那些吻戏,那些青春,都在影院的黑暗里被泪水冲刷得无比清晰。
当幸福来敲门
平民励志片。
搏击俱乐部
邪恶与平庸蛰伏于同一个母体,在特定的时间互相对峙。
楚门的世界
如果再也不能见到你,祝你早安,午安,晚安。
满满温情的高雅喜剧。
指环王3:王者无敌
史诗的终章。
爱情哪怕只有一天。
当然这只是第一页的25条,我们已经知道了豆瓣电影top250的url是
/top250?start=0
start参数从0,每次加25,直到
/top250?start=225
所以可以写个循环把它们都抓下来。
相关报道:
本站地址:
责任编辑:
已有位网友参与评论
本类周最热
分类导航: |
软件名称软件类别好评率
本站所有资源均来自互联网,本站只做收集,如本站侵犯到您的版权请发送邮件给我们,我们收到邮件后会在第一时间删除!商务QQ:1674653
Copyright (C)求教:用python写游戏的后端服务器,有什么好的实践? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
推荐学习书目
Python Sites
值得关注的项目
Python 编程
求教:用python写游戏的后端服务器,有什么好的实践?
19:57:18 +08:00 · 6308 次点击
不是大规模实时在线游戏,主要的需求是登录验证,用户数据的请求,以及某些操作的响应。比如偷菜、抢车位这种社交游戏,或者类似大掌门这种需要在线进行的手游。虽然实时性要求不是非常高,但是如果流量上去的话,并发和IO也会比较高。用python做后端有没有什么问题?有什么框架比较适合这类应用?Django能不能搞定这种事情?
13 回复 &| &直到
08:00:00 +08:00
& & 20:16:20 +08:00
似乎跟你要求很match
& & 20:34:56 +08:00
@ 确实很不错的样子,我去看看
& & 20:43:18 +08:00
我这里的开发是用Erlang写的服务端,以前的是C++,python的游戏服务端我还没有见到过。从业经历可能太短了解太少了
& & 20:49:28 +08:00
@ 云风BLOG不是说他们是LUA的,而且也开源掉了貌似
& & 20:55:31 +08:00
@ 国内可能用python的不多,有家被google收购的slide,以前在fb上做社交游戏的,就是用python。不过他们开发实力比较强,自己搞的架构
& & 21:45:35 +08:00
@ 云风的服务器框架是C的,开源在github,叫skynet。
& & 22:39:47 +08:00
哈,先生,在这里也能看到你。
& & 23:20:02 +08:00
& & 00:04:34 +08:00
前几天朋友还说让我看看他们用python做的服务器端的代码,我就在想为毛做游戏要用python做后端。。
& & 12:31:17 +08:00
用过twisted写过德州扑克和斗地主的游戏服务端
不过那已经是前几年的事情了
不过楼主的需求貌似不需要实时的。。
& & 12:35:53 +08:00
@ C&LUA吧,不过说真的我没看过代码……
& & 01:34:47 +08:00
忽然想起了这个帖子
后来翻看了朋友写的手游后端 棋牌对战的 还不算复杂 -,-
web框架是flask
数据库是mangodb
用了flask-admin 来管理后台数据 很方便 这是用flask的主要原因吧
特别的地方是 通讯是把json格式的数据转换成protobuf 第一次知道这玩意-,-
好了 希望能给你点启发
& & 23:55:36 +08:00
@ 多谢。
这两天我也又考虑了下,觉得可能我自己把需求想复杂了。初步像一般的web架构大概就可以搞定,比如你说的flask。
打算先用熟悉的技术把功能搞定,后面再做压力测试,根据瓶颈来优化。
& · & 1230 人在线 & 最高记录 1856 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.7.3 · 46ms · UTC 13:14 · PVG 21:14 · LAX 06:14 · JFK 09:14? Do have faith in what you're doing.

我要回帖

更多关于 python小游戏 的文章

 

随机推荐