小屁孩日记——The Meltdown雪球大战(1)

我最近在读一套书:Jeff Kinney的小屁孩日记系列(Diary of a Wimpy Kid)。其中一本The Meltdown中雪球大战的情节让我萌生了做一个雪球大战游戏的念头。

语言我用的是python,使用pygame包。

注意:此项目尚未完成,目前只完成了部分内容,欢迎各位指正

部分代码展示:(请自行忽略前面的No Bugs护身符)我

'''
NO BUGS

    BBBBBBBBBBBBBBB       UUUU             UUUU             GGGG
    BBBBBBBBBBBBBBBB      UUUU             UUUU          GGGGGGGGGG
    BBBB         BBBB     UUUU             UUUU        GGGG       GGGG
    BBBB         BBBB     UUUU             UUUU       GGGG         GGGG
    BBBB         BBBB     UUUU             UUUU      GGGG           GGGG
    BBBB        BBB       UUUU             UUUU     GGGG            
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
    BBBB        BBB       UUUU             UUUU     GGGG          GGGGGGGGGGG
    BBBB         BBBB     UUUU             UUUU      GGGG         GGGGGG  GGGG
    BBBB         BBBB     UUUUU           UUUUU       GGGG         GGGG   GGGG
    BBBB         BBBB      UUUUU         UUUUU         GGGG       GGGG
    BBBBBBBBBBBBBBBB        UUUUUUUUUUUUUUUUU            GGGGGGGGGG
    BBBBBBBBBBBBBBB           UUUUUUUUUUUUU                 GGGG   
'''

import pygame
import sys

from background import Background
from greg import Greg
from snowball import Snowball

class Main:
    def __init__(self):
        pygame.init()
        self.screen_high = 522
        self.screen_wide = 1341
        self.screen = pygame.display.set_mode((self.screen_wide,self.screen_high))
        self.screen_rect = self.screen.get_rect()
        pygame.display.set_caption(f"---|Diary of a Wimpy Kid: The Meltdown|---")

        # 背景对象
        self.background = Background(self)
        # Greg对象
        self.greg = Greg(self)
        # 雪球对象
        self.snowballs = pygame.sprite.Group()

    def check(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                self._check_keydown(event.key)                   
            elif event.type == pygame.KEYUP:
                self._check_keyup(event.key)

    def _check_keydown(self,event):
        # WASD键控制Greg的移动
        if event == pygame.K_w:
            self.greg.move_up = True
        elif event == pygame.K_s:
            self.greg.move_down = True
        elif event == pygame.K_a:
            self.greg.move_left = True
        elif event == pygame.K_d:
            self.greg.move_right = True
        # 空格键投雪球
        elif event == pygame.K_SPACE:
            new_ball = Snowball(self.greg.direction,self)
            self.snowballs.add(new_ball)
        # esc键退出
        elif event == pygame.K_ESCAPE:
            sys.exit()

    def _check_keyup(self,event):
        # WASD键控制Greg不移动
        if event == pygame.K_w:
            self.greg.move_up = False
        elif event == pygame.K_s:
            self.greg.move_down = False
        elif event == pygame.K_a:
            self.greg.move_left = False
        elif event == pygame.K_d:
            self.greg.move_right = False

    #刷新雪球
    def update_snowballs(self):
        self.snowballs.update()
        self.snowballs.draw(self.screen)
        for snowball in self.snowballs.sprites():
            # 监测是否触碰到边缘
            left_edge = snowball.x <= 0
            right_edge = snowball.x >= self.screen_wide
            up_edge = snowball.y <= 0
            down_edge = snowball.y >= self.screen_high
            if left_edge or right_edge or up_edge or down_edge:
                self.snowballs.remove(snowball)

    def update(self):
        # 刷新背景
        self.background.blitme()

        # 刷新Greg ^_^
        self.greg.blitme()
        self.greg.update()

        # 刷新雪球
        self.update_snowballs()

        pygame.display.flip()
        
    def run_game(self):
        while True:
            self.update()
            self.check()

if __name__ == '__main__':
    main = Main()
    main.run_game()

目前Greg可以四处走动并投掷雪球,下面我准备加入更多的元素,如敌人和障碍物等。我会持续更新这个系列的。

 详细代码可通过网盘链接下载:

链接:https://pan.baidu.com/s/1URppxgqf7prEiiXiOITe8w?pwd=p62i 

欢迎各位指正!


补发一张截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值