案例介绍
欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!
我们来用 Python 编程实战案例,做一个羊了个羊小游戏。输入序号,三个相同的序号会自动消除,消除所有的序号,完成游戏。
案例演示
用户对在槽位中输入小羊对应的序号,七个槽位,每三个相同的序号自动消除,当所有的序号被消除后,游戏通关。
源码学习
进入核心代码学习,我们先来看初始界面的核心代码。
def play(self):
self.check()
while True:
lay = f'''
欢迎来到我的小院
让我们一起来玩"羊了个羊"吧
====================
1.{self.l1[-1] if len(self.l1) != 0 else '[ ]'}\t 2.{self.l2[-1] if len(self.l2) != 0 else '[ ]'}\t 3.{self.l3[-1] if len(self.l3) != 0 else '[ ]'}
4.{self.l4[-1] if len(self.l4) != 0 else '[ ]'}\t 5.{self.l5[-1] if len(self.l5) != 0 else '[ ]'}\t 6.{self.l6[-1] if len(self.l6) != 0 else '[ ]'}
7.{self.l7[-1] if len(self.l7) != 0 else '[ ]'}\t 8.{self.l8[-1] if len(self.l8) != 0 else '[ ]'}\t 9.{self.l9[-1] if len(self.l9) != 0 else '[ ]'}
====================
空槽位:{self.space_l}
====================
请输入1~9将相应的羊放入空槽位:
'''
ch = input(lay)
if ch == '1':
self.select(self.l1)
复制代码
然后再让我们来看选择界面的核心代码,l 为一个列表,通过列表的长度来判断选择是否合理。
def select(self, l: list):
if len(l) == 0:
print('当前位置已经没有羊了,请重新选择!')
return
tmp_l = l.pop()
if tmp_l not in self.space_l:
self.space_l[self.space_l.index([])] = tmp_l
else:
self.space_l.insert(self.space_l.index(tmp_l), tmp_l)
self.space_l.pop()
if self.space_l.count(tmp_l) == 3:
for i in range(3):
self.space_l.remove(tmp_l)
self.space_l.append([])
复制代码
让我们来编写核心的生成代码,首先运用面向对象编程,创建‘Yang’类,再通过 pool 列表创建所有的小羊,利用 random 函数随机选择小羊放入牌局供玩家选择。
class Yang:
space_l = [[], [], [], [], [], [], []]
def __init__(self) -> None:
self.generate()
self.check()
def generate(self):
'''生成牌局'''
pool = ['白羊', '黑羊', '黄羊', '蓝羊', '花羊', '粉羊', '大羊', '小羊']
self.l1 = [random.choices(pool) for i in range(3)]
self.l2 = [random.choices(pool) for i in range(3)]
self.l3 = [random.choices(pool) for i in range(3)]
self.l4 = [random.choices(pool) for i in range(3)]
self.l5 = [random.choices(pool) for i in range(3)]
self.l6 = [random.choices(pool) for i in range(3)]
self.l7 = [random.choices(pool) for i in range(3)]
self.l8 = [random.choices(pool) for i in range(3)]
self.l9 = [random.choices(pool) for i in range(3)]
def check(self):
'''判断:如果出现无解的情况则重新洗牌'''
x = True
while x:
x = False
sum_l = self.l1 + self.l2 + self.l3 + self.l4 + \
self.l5 + self.l6 + self.l7 + self.l8 + self.l9
for i in sum_l:
if sum_l.count(i) % 3 != 0:
x = True
self.generate()
break
复制代码
记得关注我,每天学习一点点
你觉得这个系统核心还能做什么?
全网可搜:小院里的霍大侠, 免费获取简单易懂的实战编程案例。编程/就业/副业/创业/资源。
私微信:huodaxia_xfeater
二维码: http://www.yougexiaoyuan.com/images/weixin_huodaxia.jpg
公众号:有个小院(微信公众号:yougexiaoyuan)
github:yougexiaoyuan (视频源码免费获取)
(部分素材来源于互联网,如有保护请联系作者)
评论