• python小游戏水文


    脚本不会,全都白费。所以就去学习了简单的python,结果不慎学了python中的pygame,浪费了不少时间,没啥用如果不做游戏个人觉得最好别学,学爬虫她不香吗?不过也有一点收获,打飞机小游戏,源码奉上(注意:安装pygame库哦!!!)

    python学习地址:https://www.bilibili.com/video/BV1ex411x7Em?from=search&seid=16707064392510899029

    文件命名为plane_main.py

    import pygame
    
    from plane_sprites import *
    
    
    class PlaneGame(object):
       # """飞机大战主游戏"""
    
       def __init__(self):
           print("游戏初始化...")
    
           # 1.创建游戏窗口,宽度x和高度y,常量SCREEN_RECT = pygame.Rect(0, 0, 480, 700),SCREEN_RECT.size=(480,700)
           self.screen = pygame.display.set_mode(SCREEN_RECT.size)
           # 2.创建游戏的时钟
           self.clock = pygame.time.Clock()
           # 3.调用私有方法,精灵和精灵组的创建
           self.__create_sprites()
           # 4.设置定时时间 - 创建敌机 1s,CREATE_ENEMY_EVENT创建敌机频率,HERO_FIRE_EVENT发射子弹频率
           pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)
           pygame.time.set_timer(HERO_FIRE_EVENT, 500)
    
       def __create_sprites(self):
    
           # 创建背景精灵和精灵组,调用plane_sprites的Background()类
           bg1 = Background()
           bg2 = Background(True)
           self.back_ground = pygame.sprite.Group(bg1, bg2)
    
           # 创建敌机的精灵组
           self.enemy_group = pygame.sprite.Group()
    
           # 创建英雄的精灵和精灵组
           self.hero = Hero()
           self.hero_group = pygame.sprite.Group(self.hero)
    
       def start_game(self):
           print("游戏开始...")
    
           while True:
               # 1.设置刷新帧率
               self.clock.tick(FRAME_PER_SEC)
               # 2.事件监听
               self.__event_handler()
               # 3.碰撞检测
               self.__check_collide()
               # 4.更新/绘制精灵组
               self.__update_sprites()
               # 5.更新刷新显示
               pygame.display.update()
    
       def __event_handler(self):
    
           for event in pygame.event.get():
    
               # 判断是否点×退出游戏
               if event.type == pygame.QUIT:
                   PlaneGame.__game_over()
               elif event.type == CREATE_ENEMY_EVENT:
                   print("敌机出场...")
                   # 1.创建敌机精灵
                   enemy = Enemy()
                   # 2.将敌机精灵添加到精灵组
                   self.enemy_group.add(enemy)
               elif event.type == HERO_FIRE_EVENT:
                   self.hero.fire()
    
           # 使用键盘提供的方法获取键盘按键
           keys_pressed = pygame.key.get_pressed()
           # 判断元组中对应的按键索引值 1
           if keys_pressed[pygame.K_RIGHT]:
               self.hero.speed = 3
           elif keys_pressed[pygame.K_LEFT]:
               self.hero.speed = -3
           else:
               self.hero.speed = 0
    
       def __check_collide(self):
    
           # 1.子弹摧毁敌机,子弹和敌机都销毁
           pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)
           # 2.敌机摧毁英雄
           enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)
           # 3.判断列表是否有内容,有内容英雄飞机摧毁
           if len(enemies) > 0:
               # 让英雄牺牲
               self.hero.kill()
               # 结束游戏
               PlaneGame.__game_over()
    
       def __update_sprites(self):
           # 背景精灵组更新
           self.back_ground.update()
           self.back_ground.draw(self.screen)
           # 敌机精灵组更新
           self.enemy_group.update()
           self.enemy_group.draw(self.screen)
           # 英雄精灵组更新
           self.hero_group.update()
           self.hero_group.draw(self.screen)
           # 子弹精灵组更新
           self.hero.bullets.update()
           self.hero.bullets.draw(self.screen)
    
       @staticmethod
       def __game_over():
           print("游戏结束...")
    
           pygame.quit()
           exit()
    
    
    if __name__ == '__main__':
       # 创建游戏对象
       game = PlaneGame()
    
       # 启动游戏
       game.start_game()
    

    文件命名为plane_sprites.py

    import pygame
    import random
    
    
    # 定义屏幕大小的常量
    SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
    # 刷新的帧率,画面多少毫秒刷新一次
    FRAME_PER_SEC = 60
    # 创建敌机的定时器常量
    CREATE_ENEMY_EVENT = pygame.USEREVENT
    # 英雄发射子弹事件定时器常量
    HERO_FIRE_EVENT = pygame.USEREVENT + 1
    
    
    class GameSprite(pygame.sprite.Sprite):
       """飞机大战游戏精灵"""
    
       def __init__(self, image_name, speed=1):
           # 调用父类的初始化方法
           super().__init__()
    
           # 定义对象的属性,图像、位置、速度
           self.image = pygame.image.load(image_name)
           self.rect = self.image.get_rect()
           self.speed = speed
    
       def update(self):
           # 在屏幕的垂直方向上移动
           self.rect.y += self.speed
    
    
    class Background(GameSprite):
       """游戏背景精灵"""
    
       def __init__(self, is_alt=False):
    
           # 1. 调用父类方法实现精灵的创建
           super().__init__("./images/background.png")
           # 2. 判断是否是交替图像,如果是,需要设置初始位置
           if is_alt:
               self.rect.y = -self.rect.height
    
       def update(self):
    
           # 1.调用父类的方法实现垂直移动
           super().update()
           # 2.判断是否移除屏幕,如果移除了,再将图片设置到屏幕的上方
           if self.rect.y >= SCREEN_RECT.height:
               self.rect.y = -self.rect.height
    
    
    class Enemy(GameSprite):
       """敌机精灵"""
    
       def __init__(self):
           # 1.调用父类方法,创建敌机精灵,同时制定敌机图片
           super().__init__("./images/enemy1.png")
           # 2.制定敌机的初始随机速度
           self.speed = random.randint(1, 3)
           # 3.制定敌机的初始随机位置
           self.rect.bottom = 0
           max_x = SCREEN_RECT.width - self.rect.width
           self.rect.x = random.randint(0, max_x)
    
       def update(self):
           # 1.调用父类方法,保持垂直方向的飞行
           super().update()
           # 2.判断是否飞出屏幕,如果是,需要从精灵组删除敌机
           if self.rect.y >= SCREEN_RECT.height:
               print("飞出屏幕,需要从精灵组删除...")
               # kill方法可以将精灵从所有精灵组中移除,精灵组就会被自动销毁
               self.kill()
    
       def __del__(self):
           print("敌机挂了... %s" % self.rect)
    
    
    class Hero(GameSprite):
       """英雄精灵"""
    
       def __init__(self):
           # 1.调用父类方法,设置image & speed
           super().__init__("./images/me1.png", 0)
           # 2.设置英雄的初始位置
           self.rect.centerx = SCREEN_RECT.centerx
           self.rect.bottom = SCREEN_RECT.bottom - 120
           # 3.创建子弹的精灵组
           self.bullets = pygame.sprite.Group()
    
       def update(self):
           # 英雄在水平方向上移动
           self.rect.x += self.speed
    
           # 控制英雄的位置
           if self.rect.x < 0:
               self.rect.x = 0
           elif self.rect.right > SCREEN_RECT.right:
               self.rect.right = SCREEN_RECT.right
    
       def fire(self):
           print("发射子弹...")
    
           for i in (0, 1, 2):
               # 1.创建子弹精灵
               bullet = Bullet()
               # 2.设置精灵的位置
               bullet.rect.bottom = self.rect.y - i * 20
               bullet.rect.centerx = self.rect.centerx
    
               # 3.将精灵添加到精灵组
               self.bullets.add(bullet)
    
    
    class Bullet(GameSprite):
       """子弹精灵"""
    
       def __init__(self):
           # 调用父类方法,设置子弹图片,设置初始速度
           super().__init__("./images/bullet1.png", -2)
    
       def update(self):
           # 调用父类方法,让子弹沿垂直方向飞行
           super().update()
    
           # 判断子弹是否飞出屏幕
           if self.rect.bottom < 0:
               self.kill()
    
       def __del__(self):
           print("子弹被销毁了...")
    

    游戏源码及图片下载地址链接:https://pan.baidu.com/s/1oQwSl9HuOve6WBbEae0KUw

    提取码:meje

    游戏效果图

    图片

    结束乖乖学爬虫和脚本去了/发抖/发抖/发抖

  • 相关阅读:
    Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
    Atitit Gaussian Blur 高斯模糊 的原理and实现and 用途
    Atitit 图像处理 灰度图片 灰度化的原理与实现
    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结
    Atitit 实现java的linq 以及与stream api的比较
    Atitit attilax在自然语言处理领域的成果
    Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库
    Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结
    Atitit apache 和guava的反射工具
    atitit。企业的价值观 员工第一 vs 客户第一.docx
  • 原文地址:https://www.cnblogs.com/Lmg66/p/13272548.html
Copyright © 2020-2023  润新知