本文正在参加「Python主题月」,详情查看 活动链接
hello大家好,今天我又发现了个有趣的小玩意。我是专写有趣小玩意的老诗。
不知道你们有没有玩过这种游戏,操作比较单一,就是通过点击屏幕,然后小鸟躲避障碍物。之前的黑白屏幕手机上也有类似的直升机小游戏。
老规矩,先上效果图
老诗这个界面比较简单,当然你们也可以把主角和障碍物换成其他的。这里重要的是游戏的逻辑和算法过程。
定义物品
bird = vector(0, 0)
balls = []
score = 0
我里面的界面比较简单,也就是3个:鸟,障碍物,分数。
画出主角
def draw(alive):
"Draw screen objects."
clear()
goto(bird.x, bird.y)
if alive:
dot(10, 'green')
else:
dot(10, 'red')
for ball in balls:
goto(ball.x, ball.y)
dot(20, 'black')
因为是重复执行的,所以每一帧都需要用clear()把屏幕清空。然后再画出鸟和所有的障碍物。
游戏逻辑和输赢判断
def move():
"Update object positions."
global score
bird.y -= 5
for ball in balls:
ball.x -= 3
if randrange(10) == 0:
y = randrange(-199, 199)
ball = vector(199, y)
balls.append(ball)
while len(balls) > 0 and not inside(balls[0]):
balls.pop(0)
score += 1
print(f'get {score} scores')
if not inside(bird):
draw(False)
return
for ball in balls:
if abs(ball - bird) < 15:
draw(False)
return
draw(True)
# 在鸟的位置,绘制分数
goto(bird.x, bird.y)
write(score, font=('Arial', 30, 'normal'))
ontimer(move, 50)
1这里面用了个定时器ontimer重复执行游戏逻辑。
2并且bird是正常情况下每一帧都-5,也就是位置下降。
3固定好x轴在199的位置,随机y轴产生新的障碍物。
4活着就能持续增加分数
5当小鸟触碰窗体边界或者障碍物的时候,就会输掉游戏。画面也停止更新。
游戏交互
def tap(x, y):
"Move bird up in response to screen tap."
up = vector(0, 30)
bird.move(up)
onscreenclick(tap)
这游戏唯一的游戏交互就是点击屏幕,并且点击之后小鸟会向上跑。
整体而言,游戏并不是太难,也很容易就可以学会。上面的思想还是说的比较清楚的。有需要拿完整源码的话,请移步到公众号:诗一样的代码。既然进来了,原创不易。小伙伴点个赞再走呗。