python小游戏项目:小船打鱼
代码都在这里,只需要创建好项目,将对应的代码保存在对应文件名的文件中即可,由于图片不能在这里上传,读者自己随便下载一个,修改一下对应的代码的文件名就行。如果嫌拼接麻烦笔者就附上下载地址,直接下载即可链接
代码中如果不是源文件中已有的py文件导入调用,就需要在python中下载对应的包,比如pygame
游戏左上角表示玩家的生命数,中间的250是历史最高分,右边的两行数字分别表示当前得分和游戏的难度等级
游戏的操作方法:<-- --> 左右移动 space发射炮弹
文章的内容较长,读者可以更具目录跳转阅读
代码的具体意义在注释中
成果展示
代码解析
go_fishing.py
这是函数的主函数,集成其他文件让代码看起来简单易懂
import pygame
from pygame.sprite import Sprite
class Ship(Sprite):
def __init__(self,al_settings,screen):
# 初始化飞船并设置其初始位置
super(Ship, self).__init__()
self.screen = screen
self.al_settings = al_settings
# 加载飞船图像并获得外接矩形
self.image = pygame.image.load('images/ship.png')
self.image = pygame.transform.scale(self.image,(100,80))
self.background = pygame.image.load("images/seaside.png")
self.background = pygame.transform.scale(self.background, (al_settings.screen_width, al_settings.screen_height))
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
# 将每艘飞船放在屏幕底部中央
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
# 在飞船的属性center中存储小数值
self.center = float(self.rect.centerx)
# 移动标志
self.moving_right = False
self.moving_left = False
def update(self):
# 根据移动标志调整飞船位置
# 更新飞船的center值而不是rect的
# 且限制飞船的活动范围
if self.moving_right and self.rect.right < self.screen_rect.right:
self.center += self.al_settings.ship_speed_factor
if self.moving_left and self.rect.left > self.screen_rect.left:
self.center -= self.al_settings.ship_speed_factor
self.rect.centerx = self.center
def blitme(self):
# 在指定位置绘制飞船
self.screen.blit(self.background, (0, 0))
self.screen.blit(self.image,self.rect)
def center_ship(self):
# 让飞船在屏幕中居中
self.center = self.screen_rect.centerx
game_function.py
游戏中所有操作的文件,用于管理游戏事务
import sys
import pygame
from bullet import Bullet
from alien import Alien
from time import sleep
'''管理事件的代码
将游戏和事件分开管理'''
def check_keydown_events(event,al_settings,screen,ship,bullets):
# 响应按键
if event.key == pygame.K_RIGHT:
ship.moving_right = True
elif event.key == pygame.K_LEFT:
ship.moving_left = True
elif event.key == pygame.K_SPACE:
# 创建一颗子弹,并将其加入到编组bullets中
fire_bullet(al_settings,screen,ship,bullets)
elif event.key == pygame.K_q:
sys.exit()
def check_keyup_events(event,ship):
# 响应松开
if event.key == pygame.K_RIGHT:
ship.moving_right = False
elif event.key == pygame.K_LEFT:
ship.moving_left = False
def check_events(al_settings,screen,stats,sb,play_button,ship,aliens,bulltes):
# 响应按键和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN: # 按下按键
check_keydown_events(event,al_settings,screen,ship,bulltes)
elif event.type == pygame.KEYUP: # 松开按键
check_keyup_events(event,ship)
elif event.type == pygame.MOUSEBUTTONDOWN:
mouse_x,mouse_y = pygame.mouse.get_pos()
check_play_button(al_settings,screen,stats,sb,play_button,ship,aliens,bulltes,mouse_x,mouse_y)
def check_play_button(al_settings,screen,stats,sb,play_button,ship,aliens,bullets,mouse_x,mouse_y):
# 在玩家单击play按钮时开心新游戏
button_clicked = play_button.rect.collidepoint(mouse_x,mouse_y)
if button_clicked and not stats.game_active:
# 重置游戏信息
stats.reset_stats()
stats.game_active = True
al_settings.initialize_dynamic_settings()
# 隐藏光标
pygame.mouse.set_visible(