• 外星人入侵


    今天是一个周末,宿舍的人全部都出去玩了,而我因为太懒一个人留在了宿舍,连床都不起,吃饭靠的是点外卖。

    不过,为了好玩,我跟着书本学习打了一个2D小游戏,并加入了一点自己的东西。

    一、游戏页面

            刚开始我把所有的游戏屏幕设置都放在了下面代码里,这使得代码看起来非常长,和杂乱, 所以为了使游戏方便扩展和整个代码逻辑更容易理解,我将整个游戏分为了几个文件。下面就是主程序文件

    import sys
    import pygame
    from settings import Settings
    from ship import Ship
    import game_functions as gf
    
    
    def run_game():
        #初始化游戏并创建一个屏幕对象
        pygame.init()#初始化背景设置,让Pygame能够正长工作
        # screen=pygame.display.set_mode((1200,800))#实参(1200,800)是一个元组,制定了游戏窗口的尺寸
        ai_settings=Settings()
        screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
        pygame.display.set_caption("外星人入侵")
    
        #创建一艘新飞船
        ship=Ship(screen)
    
    
        #设置背景色
        #bg_color=(230,250,250)
    
        #开始游戏的主循环
        while True:
    
            #监视键盘和鼠标事件
            # for event in pygame.event.get():
            #     if event.type==pygame.QUIT:#如果用户点叉号,则退出
            #         sys.exit()
            gf.check_events(ship)
    
            ship.update()
    
            #每次循环时重绘屏幕
            #screen.fill(bg_color)
            # screen.fill(ai_settings.bg_color)
            # ship.blitme()
            #
            # #让最近绘制的屏幕可见
            # pygame.display.flip()
            gf.update_screen(ai_settings,screen,ship)
    
    run_game()

    二、屏幕设置类settings.py

    class Settings(object):
        '''存储这个游戏的所有设置类'''
    
        def __init__(self):
            '''初始化游戏设置'''
            #屏幕设置
            self.screen_width=450
            self.screen_height=640
            # self.bg_color=(230,250,250)
            #self.ship_speed_factor=1.5

    本身我跟随书本里做的时候,它提供的是背景颜色,但是我觉得背景颜色太难看了,所以就自己进行了修改,修改在下一部分里

    三、创建ship类

    在这个类里,我们将飞船显示在屏幕上,并进行屏幕的更新,在这基础上,我在这个类里给游戏加上了背景图片,记住一定要先绘制背景图片,在绘制飞船,不然会显示不出飞船

    import pygame
    
    class Ship(object):
        def __init__(self,screen):
            '''初始化飞船,并设定其初始位置'''
            self.screen=screen
    
    
    
            #加载飞船图像,并获取其外接矩形
            self.image=pygame.image.load('images/img/plane_2.png')
            self.screen_image=pygame.image.load('images/bg_2.jpg')
            self.rect=self.image.get_rect()#获取飞船外接矩形
            self.screen_rect=screen.get_rect()#获取表示屏幕的矩形
            self.screen_image_rect=self.screen_image.get_rect()
    
    
            #将每艘新飞船放在屏幕底部中央
            self.screen_image_rect.centerx=self.screen_rect.centerx
            self.screen_image_rect.bottom = self.screen_rect.bottom
            self.rect.centerx=self.screen_rect.centerx
            self.rect.bottom=self.screen_rect.bottom
    
    
            #移动标示
            self.moving_right=False
            self.moving_left=False
    
            self.moving_up = False
            self.moving_down = False
    
    
    
        def update(self):
            ''' 根据移动标示移动飞船'''
            if self.moving_right:
                self.rect.centerx+=1
            if self.moving_left:
                self.rect.centerx-=1
            if self.moving_up :
                self.rect.bottom-=1
            if self.moving_down :
                self.rect.bottom+=1
    
    
    
    
        def blitme(self):
           '''在指定位置绘制飞船'''
           self.screen.blit(self.screen_image, self.screen_image_rect)
           self.screen.blit(self.image, self.rect)  # blitme(),根据self.rect将图片绘制到屏幕上。

    四、游戏操作

    既然是电脑游戏,则肯定是要通过键盘来控制飞船的移动,我们需要响应按键。每当用户按键时,都将在Pygame中注册一个事件。

    import sys
    import pygame
    
    
    def check_events(ship):
            for event in pygame.event.get():
                if event.type == pygame.QUIT:  # 如果用户点叉号,则退出
                    sys.exit()
                elif event.type==pygame.KEYDOWN:
                    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_UP:
                        ship.moving_up = True
                    elif event.key==pygame.K_DOWN:
                        ship.moving_down = True
    
                elif event.type==pygame.KEYUP:
                    if event.key==pygame.K_RIGHT:
                        ship.moving_right=False
                    elif event.key == pygame.K_LEFT:
                        ship.moving_left = False
                    elif event.key == pygame.K_UP:
                        ship.moving_up = False
                    elif event.key == pygame.K_DOWN:
                        ship.moving_down = False
    
    
    def update_screen(ai_settings,screen,ship):
        # screen.fill(ai_settings.bg_color)
    
        ship.blitme()
    
        # 让最近绘制的屏幕可见
        pygame.display.flip()

    这就是我这一天所学习的,至于限制飞船不出屏幕,填装弹药以及外星人的创建,要等到下次了。

  • 相关阅读:
    多任务异步操作在爬虫中的应用
    selenium怎样避免被服务器检测
    python查看文件夹下所有文件
    使用selenium实现站长素材图片采集
    云打码接口
    django的请求生命周期
    django中间件
    Python之Hello World的条件输出实例
    项目要部署到远程的服务器:
    饭侠main.js
  • 原文地址:https://www.cnblogs.com/fromzore/p/8544440.html
Copyright © 2020-2023  润新知