使用python的pygame做的小游戏项目:小船打鱼

代码都在这里,只需要创建好项目,将对应的代码保存在对应文件名的文件中即可,由于图片不能在这里上传,读者自己随便下载一个,修改一下对应的代码的文件名就行。如果嫌拼接麻烦笔者就附上下载地址,直接下载即可链接
代码中如果不是源文件中已有的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(
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原创小白变怪兽

帮助原创小白成为怪兽吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值