Python小游戏——王校长的S8冠军奖杯【上】 - Go语言中文社区

Python小游戏——王校长的S8冠军奖杯【上】


【前情提要】

1、pygame的安装:https://blog.csdn.net/Xiaomo_haa/article/details/83962300

2、Python小游戏——王校长的S8冠军奖杯【引子】:https://blog.csdn.net/Xiaomo_haa/article/details/83929275

 

【素材准备】

首先将我们需要用到的几张图片放在pycharm工程目录下,比如我新建一个文件夹命名为 image,然后将需要用到的几个图片放置在该目录下。图片经Photoshop处理,图片背景为透明,且尺寸调整到合适大小。

由于需要使用的图片格式为png格式,在调用过程中可能会出现“iccp known incorrect srgb profile”警告,请参考这里https://blog.csdn.net/Xiaomo_haa/article/details/83996501)解决该问题。

 

【CODE】

hotdog_wxz.py

该文件导入了整个工程中所需要的pygame、sys模块,并且初始化工程,创建游戏开头函数run_game():

import pygame
from settings import Settings
from wxz import Wxz
import game_functions as gf
from pygame.sprite import Group
from button import Button
from game_stats import GameStats
from scoreboard import Scoreboard


def run_game():
    #初始化pygame、设置和屏幕对象
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption("王校长的S8冠军奖杯")

    #创建Play按钮
    play_button = Button(ai_settings,screen,"Play")

    #创建一个WXZ,一个hotdog编组和一个奖杯编组
    wxz = Wxz(ai_settings,screen)
    hotdogs = Group()
    cups = Group()

    #创建奖杯群
    gf.create_fleet(ai_settings,screen,wxz,cups)

    #创建一个用于存储游戏统计信息的实例,并创建记分牌
    stats = GameStats(ai_settings)
    sb = Scoreboard(ai_settings,screen,stats)

    #开始游戏的主循环
    while True:
        gf.check_events(ai_settings,screen,stats,sb,play_button,wxz,cups,hotdogs)

        if stats.game_active:
            wxz.update()
            gf.update_hotdogs(ai_settings,screen,stats,sb,wxz,cups,hotdogs)
            gf.update_cups(ai_settings,screen,stats,sb,wxz,cups,hotdogs)

        gf.update_screen(ai_settings,screen,stats,sb,wxz,cups,hotdogs,play_button)


run_game()

 

wxz.py

添加王校长到游戏中,并且创建wxz更新函数以及wxz绘制函数,在需要之时在屏幕上相应位置绘制wxz:

import pygame
from pygame.sprite import Sprite


class Wxz(Sprite):

    def __init__(self,ai_settings,screen):
        """初始化WXZ并设置其初始位置"""
        super(Wxz,self).__init__()
        self.screen = screen
        self.ai_settings = ai_settings

        #加载WXZ图像并获取其外接矩形
        self.image = pygame.image.load('image/wxz.png')
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()

        #将每个WXZ放在屏幕底部中央
        self.rect.centerx = self.screen_rect.centerx
        self.rect.bottom = self.screen_rect.bottom

        #在WXZ的属性center中存储小数值
        self.center = float(self.rect.centerx)

        #移动标志
        self.moving_right = False
        self.moving_left = False


    def update(self):
        """根据移动标志调整WXZ位置"""
        #更新WXZ的center值
        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.center += self.ai_settings.wxz_speed_factor
        if self.moving_left and self.rect.left > 0:
            self.center -= self.ai_settings.wxz_speed_factor

        #根据self.center更新rect对象
        self.rect.centerx = self.center


    def blitme(self):
        """在指定位置绘制WXZ"""
        self.screen.blit(self.image,self.rect)


    def center_wxz(self):
        """让WXZ在屏幕上居中"""
        self.center = self.screen_rect.centerx

 

settings.py

有关本游戏中所有的设置,包含游戏所创建的窗口大小、wxz设置、hotdog设置、奖杯设置、记分设置、游戏速度设置等等。除此之外,还包含随游戏进行加快游戏速度函数和奖杯分数的函数。

class Settings():

    def __init__(self):
        """初始化游戏的设置"""
        #屏幕设置
        self.screen_width = 1200
        self.screen_height = 800
        self.bg_color = (230,230,230)

        #WXZ的设置
        self.wxz_speed_factor = 5
        self.wxz_limit = 3

        #hotdog的设置
        self.hotdog_speed_factor = 1
        self.hotdogs_allowed = 10

        #奖杯设置
        self.cup_speed_factor = 1
        self.fleet_drop_speed = 10
        #fleet_direction为1表示向右移,为-1表示向左移
        self.fleet_direction = 1

        #以什么样的速度加快游戏节奏
        self.speedup_scale = 1.1
        self.score_scale = 1.5

        #记分
        self.cup_points = 50

        self.initialize_dynamic_settings()


    def initialize_dynamic_settings(self):
        """初始化随游戏进行而变化的设置"""
        self.wxz_speed_factor = 5
        self.hotdog_speed_factor = 10
        self.cup_speed_factor = 1

        #fleet_direction为1表示向右,为-1表示向左
        self.fleet_direction = 1


    def increase_speed(self):
        """提高游戏速度和奖杯分数"""
        self.wxz_speed_factor *= self.speedup_scale
        self.hotdog_speed_factor *= self.speedup_scale
        self.cup_speed_factor *= self.speedup_scale

        self.cup_points = int(self.cup_points * self.score_scale)

        print(self.cup_points)

 

cup.py

在游戏中导入奖杯图像,并且创建在指定位置绘制奖杯函数、移动奖杯函数、控制奖杯在创建的屏幕范围内移动函数。

import pygame
from pygame.sprite import Sprite


class Cup(Sprite):
    """表示单个奖杯的类"""

    def __init__(self,ai_settings,screen):
        """初始化奖杯并设置其起始位置"""
        super(Cup, self).__init__()
        self.screen = screen
        self.ai_settings = ai_settings

        #加载奖杯图像,并设置其rect属性
        self.image = pygame.image.load('image/cup.png')
        self.rect = self.image.get_rect()

        #让每个奖杯最初都在屏幕左上角附近
        self.rect.x = self.rect.width
        self.rect.y = self.rect.height

        #存储奖杯的准确位置
        self.x = float(self.rect.x)


    def blitme(self):
        """在指定位置绘制奖杯"""
        self.screen.blit(self.image,self.rect)


    def check_edges(self):
        """如果奖杯位于屏幕边缘,就返回True"""
        screen_rect = self.screen.get_rect()
        if self.rect.right >= screen_rect.right:
            return True
        elif self.rect.left <= 0:
            return True


    def update(self):
        """向右移动奖杯"""
        self.x += (self.ai_settings.cup_speed_factor * self.ai_settings.fleet_direction)
        self.rect.x = self.x

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Xiaomo_haa/article/details/83963110
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 14:10:14
  • 阅读 ( 1231 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢