在写飞翔的小鸟游戏前,要用到pygame这个模块。pygame是一个利用SDL库(全名Simple DirectMedia Layer)写就的游戏库。可以用pip3 install pygame命令来安装pygame。也可在pycharm中安装
pycharm安装方式:File –>setting
安装完成后就可以使用pygame模块进行游戏的编写
需导入的模块
import pygame # pygame模块
import sys # sys模块
import random # 随机数模块
首先实现将游戏窗口画出来,将背景加载到游戏窗口中
第一步:实现游戏窗口
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 400
初始化操作
pygame.display.init()
创建窗口
window = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
设置菜单栏上的游戏名称
pygame.display.set_caption(‘会飞的小超人’)
加载背景图
beijing = pygame.image.load(‘img/beijing.jpg’).convert_alpha()
beijing = pygame.transform.scale(beijing, (800, 600))
while True:
pygame.init()
添加背景
window.blit(beijing, (0, 0))
第二步、加载小鸟图片(这里为了有趣,我用了超人代替)
加载图片
bird = pygame.image.load(‘img/bird.png’)
位置
top = (SCREEN_HEIGHT – 50)/2
bird_rect = bird.get_rect(left=150, top=top)
while True:
pygame.init()
加载小鸟
window.blit(bird, bird_rect)
让程序每10毫秒执行一次
pygame.time.wait(10)
pygame.display.update()
第三步:
1、完成时间的处理,点击关闭按钮事件,按键事件
2、实现小鸟移动,上升,下降
while True:
pygame.init()
为窗口填充颜色
window.blit(beijing, (0, 0))
加载小鸟
window.blit(bird, bird_rect)
v1.2 小鸟的移动处理
bird_speed += 0.2
bird_rect = bird_rect.move(0,bird_speed)
新增事件处理
event_list = pygame.event.get()
for e in event_list:
if e.type == pygame.QUIT:
print(‘退出程序’)
sys.exit()
事件类型 按键按下事件
elif e.type == pygame.KEYDOWN:
点击的按键为 空格 的触发
if e.key == pygame.K_SPACE:
print(‘按下空格键’)
bird_speed = -6
第四步:
实现障碍物的加载和移动
存储所有柱子的列表
pillar_list = []
v1.3 每间隔3秒,生成一次障碍物
获取当前的系统时间
end_time = pygame.time.get_ticks()
if end_time – start_time >= 3000:
print(‘生成一次障碍物’)
start_time = end_time
x = 500
y = 0
width = 50
height = random.randint(30, 150)
障碍物的矩形区域
pillar_rect_top = pygame.rect.Rect(x,y,width,height)
将生成的障碍物存储到列表中
pillar_list.append(pillar_rect_top)
v1.3 将所有障碍物加载出来
for p in pillar_list:
window.fill(COLOR_GREEN,p)
v1.3 所有障碍物的移动
for p in pillar_list:
if p.x > 0:
p.x -= 1
else:
pillar_list.remove(p)
print(f’删除一个障碍物,剩余障碍物{len(pillar_list)}’)
第五步:处理小鸟的死亡
处理小鸟的死亡
for p in pillar_list:
if p.colliderect(bird_rect):
is_over = True
if bird_rect.y > SCREEN_HEIGHT – bird_rect.height or bird_rect.y < 0:
is_over = True
小鸟死亡事件
if is_over and e.key == pygame.K_SPACE:
小鸟回到初始位置
bird_rect = bird.get_rect(left=150, top=top)
速度清空
bird_speed = 1
分数清空
score = 0
障碍物清空
pillar_list.clear()
is_over 状态改变
is_over = False
第六步,统计分数,处理结束画面
得分计算:
for p in pillar_list:
if p.x < bird_rect.x and p.y > bird_rect.y:
score += 1
if score > height_score(FILE_NAME):
score_w = open(FILE_NAME, ‘w’, encoding=’utf-8′)
score_w.write(str(score))
score_w.close()
else:
pass
处理结束画面
设置字体
font = pygame.font.SysFont(“arial”, 30)
font1 = pygame.font.SysFont(“arial”, 20)
设置显示内容和颜色
fail_text = font.render(‘GAME OVER !’, True, COLOR_RED)
score_text = font.render(f’SCORE:{score}’, True, COLOR_RED)
score_text1 = font1.render(f’SCORE:{score}’, True, COLOR_RED)
height_text = font1.render(f’HIGH_SCORE: {height_score(FILE_NAME)}’, True, COLOR_RED)
设置显示位置
text_width, text_height = 200, 100
score_width, score_height = 200, 100
score_text1_width, score_text1_height = 100, 50
fail_rect = pygame.Rect((SCREEN_WIDTH – text_width) / 2,
(SCREEN_HEIGHT – text_height) / 2 – 30,
text_width, text_height)
score_rect = pygame.Rect((SCREEN_WIDTH – text_width) / 2 + 25,
(SCREEN_HEIGHT – text_height) / 2,
score_width, score_height)
time_score_rect = pygame.Rect(0, 0, score_text1_width, score_text1_height)
显示当前成绩,和 最高分
window.blit(score_text1, time_score_rect)
window.blit(height_text, (SCREEN_WIDTH / 2, 0))
第七步: 数据持久化,将最高分存入文件,每次游戏开始读取
记录分数功能
def height_score(FILE_NAME):
if os.path.exists(FILE_NAME):
f = open(FILE_NAME, ‘r’, encoding=’utf-8′)
最高分从文件中读取
height_score1 = f.read()
if len(height_score1) > 0:
height_score = int(height_score1)
else:
f = open(FILE_NAME, ‘w’, encoding=’utf-8′)
height_score = 0
f.close()
else:
f = open(FILE_NAME, ‘w’, encoding=’utf-8′)
height_score = 0
return height_score
最终效果:
源码:百度盘: 飞翔的小鸟:https://pan.baidu.com/s/1AB7sioRIQu63vJydxFZqqw 提取码:hrwl
这篇飞翔的小鸟没有用到面向对象编程,针对面向过程实现(主要我学习的内容还没有学到面向对象),继续奋斗,加油!!!
Original: https://blog.csdn.net/weixin_27722377/article/details/114414849
Author: 抖抖村
Title: python仿写print_python 仿写飞翔的小鸟,附带源码
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/782807/
转载文章受原作者版权保护。转载请注明原作者出处!