python编写篮球_自制python版篮球经理游戏(1)—准备

今天突发奇想,打算做一个单击模拟版的篮球经理游戏,主要功能包括随机组队、抽卡、更换阵容和模拟比赛。具体的等想到了再往里添加,目前设计的游戏流程是这样的:

今天就先来完成准备工作。

尽然是模拟抽卡的游戏,首先要有卡池,也就是数据库。我从虎扑数据库里爬取了所有现役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,可以在之前做的程序上稍加改动)做一个简单的游戏界面,实现随机组队和抽卡、更换阵容的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值