python编写篮球 | 您所在的位置:网站首页 › 篮球插件手工制作 › python编写篮球 |
今天突发奇想,打算做一个单击模拟版的篮球经理游戏,主要功能包括随机组队、抽卡、更换阵容和模拟比赛。具体的等想到了再往里添加,目前设计的游戏流程是这样的: 今天就先来完成准备工作。 尽然是模拟抽卡的游戏,首先要有卡池,也就是数据库。我从虎扑数据库里爬取了所有现役NBA球员的姓名、位置和头像,然后再稍加处理。爬虫代码如下: from bs4 import BeautifulSoup import requests '''保存图片函数''' def saveImg(myurl): # 1.请求页面 thtml = requests.get(myurl) # 2.用返回内容创建soup对象 tsoup = BeautifulSoup(thtml.content, 'lxml') # 3.获取球员名称放入 namelist allname = tsoup.select("td.left > b > a") namelist=[] for tname in allname: namelist.append(tname.text) # 4.获取球员位置放入 loclist loc = tsoup.select("td") loclist=[] for tname in loc: if "F" in tname or "G" in tname or "C" in tname or "G-F" in tname or "F-G" in tname or "C-F" in tname or "F-C" in tname: loclist.append(tname.text) # 5.获取球员头像src连接放入 srclist allsrc=tsoup.select("td.td_padding > a >img") srclist=[] for tsrc in allsrc: srclist.append(tsrc.get("src")) # 6.进行图片和球员保存 for i in range(0,len(srclist)): data=requests.get(srclist[i]) path='image/'+namelist[i]+".jpg" #头像存储路径 path2='players.txt' #球员名单 file=open(path,"wb") file.write(data.content) doc=open(path2,"a") doc.write(namelist[i]+" "+loclist[i]+"\n") url="https://nba.hupu.com/players" #主界面网址 header={ "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.108 Safari/537.36 2345Explorer/8.1.0.14126" } urls=[] #用来存储各个队的球员列表所在的网址 html=requests.get(url,headers=header) soup=BeautifulSoup(html.content,"lxml") #获取所有球队页面所在的url地址 allurl=soup.select("span.team_name > a") for t in allurl: urls.append(t.get("href")) #开始爬取 for turl in urls: saveImg(turl) 虎扑的球员数据是按照球队来分布的,每个球队的球员可以在同一个网页上获取。其中比较麻烦的是球员位置,它的标签是 ,可是这个网页里有很多同名的标签,因此我们通过内容来筛选,也就是代码中的:if "F" in tname or "G" in tname or "C" in tname or "G-F" in tname or "F-G" in tname or "C-F" in tname or "F-C" in tname: loclist.append(tname.text) 得到头像图片和球员名单后,发现其中有一些名字空白的球员,把这些球员删掉后,还剩497人。然后我们需要在txt里,在每一行的末尾手动为该球员加上能力值,分隔符是一个空格。这个工作虽然很累,但也挺有趣,毕竟是自己玩的游戏,想怎么设就怎么设吧。对于那些根本不认识的饮水机球员,我一律设为了65,其他的都跟2K20差不多。 接下来还要对球员名单做进一步处理,按照位置分成G、F、C三部分,目的是为了在模拟组队的时候,能够组出一只正常的队伍,包括两个G、两个F和一个C。同时这样一分,也会让球员名单更加清晰。 这里面有一些双位置的球员,为了避免重复,我全部按照第一位置来划分的,比如G-F就是G。切分球员名单的代码如下: with open("players.txt", "r") as f: data = f.readlines() doc1 = open("G.txt",'a',encoding="utf-8") doc2 = open("F.txt",'a',encoding="utf-8") doc3 = open("C.txt",'a',encoding="utf-8") for i in data: loc=i.split() if "G" in loc[1] and loc[1] != "F-G": print("%s %s %s"%(loc[0],loc[1],loc[2]),file=doc1) elif "F" in loc[1] and loc[1] != "G-F" and loc[1] != "C-F": print("%s %s %s"%(loc[0],loc[1],loc[2]),file=doc2) elif "C" in loc[1] and loc[1] != "F-C": print("%s %s %s"%(loc[0],loc[1],loc[2]),file=doc3) 现在球员名单的顺序是按照球队划分的,如果想按照能力值排序也可以,但是没必要费劲巴拉写代码了,粘贴到excel里排序吧。不过直接粘进去以后,三列数据都挤在一列,只要选择“数据”中的“分列”,然后按空格分列即可,后面就能正常排序了。 下面是我们今天得到的图片: 还有三个球员名单: 明天我会用tkinter(也许用pygame更好,但最近都在研究tkinter,可以在之前做的程序上稍加改动)做一个简单的游戏界面,实现随机组队和抽卡、更换阵容的功能。 |
CopyRight 2018-2019 实验室设备网 版权所有 |