利用pygame实现简单的“打飞机”

以为比较喜欢玩游戏 所以一直对游戏有很深的情怀 之前在网上无意间看见有游戏的教程 然后就跟着学习了几天 最后跟着做了一个游戏的demo 感觉还不错,这是游戏内图片:
自己往里面加了点鬼畜素材 取自舍友 嘿嘿
下面是代码:这个是主类:

import pygame as pg
import Plane_sprites as Ps

pg.mixer.init()
class PlaneGame(object):

    def __init__(self):
        print("游戏初始化")
        self.screen = pg.display.set_mode(Ps.SCREEN_RECT.size)
        self.clock = pg.time.Clock()
        self.__creat_sprites()
        pg.time.set_timer(Ps.CREATE_ENEMY_EVENT,1000)
        pg.time.set_timer(Ps.HERO_FIRE_EVENT,500)
        pg.time.set_timer(Ps.BOSS_MOVE_EVENT,1500)
        pg.time.set_timer(Ps.BOSS_FIRE_EVENT,4000)
        pg.time.set_timer(Ps.BOSS_UP,10000)
  #      pg.time.set_timer(Ps.BOSS_TRACK_EVENT,500)
        self.Boss_blood = 20
        self.fenshu = 0
        self.boss_come = False
        self.bullets_sound = pg.mixer.Sound("./sound/bullet.wav")
        self.bullets_sound.set_volume(0.3)
        self.bgm_01 = pg.mixer.Sound("./sound/bgm_zhandou1.wav")
        self.bgm_01.set_volume(0.3)
        self.Boss_bullets = pg.mixer.Sound("./sound/ssz_03.wav")
        self.Boss_bullets.set_volume(1)
        self.enemy_Sum = 1
    def __event_handler(self):
        for event in pg.event.get():

            if event.type == pg.QUIT:
                self.__gameover()
            if event.type == Ps.CREATE_ENEMY_EVENT:
         #       print("敌机出场")
                self.enemy = Ps.Enemy()
         #       pg.time.set_timer(Ps.ENEMY_FIRE_EVENT+self.enemy_Sum,3000)
                self.enemy_Sum += 1

                self.enemy_Group.add(self.enemy)
            if event.type == Ps.HERO_FIRE_EVENT:
                self.hero.fire()
             #   self.bullets_sound.play()
            if event.type == Ps.ENEMY_FIRE_EVENT:
                self.enemy.fire()
            if event.type == Ps.BOSS_UP:
                if self.boss_come == False:
                    self.boss_come = True
                    print("Boss登场!!")
                    self.boss = Ps.Boss()

                    self.Boss_Group.add(self.boss)
       #     if event.type == Ps.BOSS_TRACK_EVENT:
        #        if self.boss_come:
        #            self.boss.track(self.hero.rect.centerx,self.hero.rect.y)

            if event.type == Ps.BOSS_FIRE_EVENT and self.boss_come:
                self.boss.fire()
                self.Boss_bullets.play()
            if event.type == Ps.BOSS_MOVE_EVENT and self.boss_come:
                self.boss.move()

        keys_pressed = pg.key.get_pressed()
        if keys_pressed[pg.K_RIGHT]:
            self.hero.speed_x = Ps.HERO_SPEED
        elif keys_pressed[pg.K_LEFT]:
            self.hero.speed_x = -Ps.HERO_SPEED
        elif keys_pressed[pg.K_UP]:
            self.hero.speed_y = -Ps.HERO_SPEED
        elif keys_pressed[pg.K_DOWN]:
            self.hero.speed_y = Ps.HERO_SPEED
        else:
            if not keys_pressed[pg.K_LEFT] or keys_pressed[pg.K_RIGHT]:
                self.hero.speed_x = 0
            if not keys_pressed[pg.K_UP] or keys_pressed[pg.K_DOWN]:
                self.hero.speed_y = 0
        pass
    def __check_collide(self):


        bo = pg.sprite.groupcollide(self.Boss_Group,self.hero.bullets,False,True)
        if bo:
            self.Boss_blood -= 1
            print("Boss剩余血量 %d" % self.Boss_blood)
        if  self.Boss_blood == 0:
            print("boss Killed!")
            self.boss.kill()
            self.Boss_blood = 20
            self.boss_come = False
            self.fenshu += 10

      #  try:
        if self.boss_come:
            f = pg.sprite.groupcollide(self.hero_Group,self.boss.bullets,True,True)
            if f:
                print("被击中!")
                self.__gameover()
       # except:


      #  if d:
      #     self.hero.kill()
      #      self.__gameover()
     #   except:
     #       print("boss没有出现")
    #    finally:
        a = pg.sprite.groupcollide(self.hero.bullets,self.enemy_Group,True,True)
        if a:
            self.fenshu += 1
        b = pg.sprite.spritecollide(self.hero,self.enemy_Group,True)
        if b:
            self.hero.kill()
            self.__gameover()
    def __update_sprites(self):
        self.bg_Group.update()
        self.bg_Group.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)

        self.Boss_Group.update()
        self.Boss_Group.draw(self.screen)
        try:
            if self.boss_come:
                self.boss.bullets.update()
                self.boss.bullets.draw(self.screen)
        except:
            pass
    #@staticmethod
    def __gameover(self):
        pg.quit()
        print(self.fenshu)
        exit()
    def start_game(self):


        print("游戏开始")
        while True:
            self.clock.tick(Ps.GAME_FPS)
            self.__event_handler()
            self.__check_collide()
            self.__update_sprites()
            pg.display.update()
    def __creat_sprites(self):
        bg1 = Ps.Background()
        bg2 = Ps.Background(True)
    #    bg2.rect.y = -bg2.rect.height
        self.bg_Group = pg.sprite.Group(bg1,bg2)

        self.enemy_Group = pg.sprite.Group()
        self.hero = Ps.Hero()
        self.hero_Group = pg.sprite.Group(self.hero)
        self.Boss_Group = pg.sprite.Group()
if __name__ == '__main__':

    game = PlaneGame()
    game.bgm_01.play()
    game.start_game()


下面这个是包含敌人和主角的类的定义 还有子弹 小兵 各种计时器和操作控制定义:

import random
from pygame.sprite import Sprite
import pygame as pg

SCREEN_RECT = pg.Rect(0,0,480,700)
GAME_FPS = 60
HERO_SPEED = 3
#创建敌人数量
CREATE_ENEMY_EVENT = pg.USEREVENT
HERO_FIRE_EVENT = pg.USEREVENT + 1
BOSS_FIRE_EVENT = pg.USEREVENT + 2
BOSS_MOVE_EVENT = pg.USEREVENT + 3
BOSS_UP = pg.USEREVENT + 4
ENEMY_FIRE_EVENT = pg.USEREVENT + 5
BOSS_TRACK_EVENT = pg.USEREVENT + 6
class GameSprite(Sprite):

    def __init__(self,image_name,speed=1):

        super().__init__()
        self.image = pg.image.load(image_name)
        self.rect = self.image.get_rect()
        self.speed = speed

    def update(self):

        self.rect.y += self.speed
    def check(self):
        if self.rect.x <= 0:
            self.rect.x = 0
        if self.rect.right >= SCREEN_RECT.right:
            self.rect.x = SCREEN_RECT.right
        if self.rect.bottom >= SCREEN_RECT.height:
            self.rect.bottom = SCREEN_RECT.height
        if self.rect.y <= -100:
            self.rect.y = 0


class Background(GameSprite):

    #创建背景
    def __init__(self,is_alt=False):
        super().__init__("./images/background.png")

        if is_alt:
            self.rect.y = self.rect.height



    def update(self):

        super().update()

        if self.rect.y >= SCREEN_RECT.height:
            self.rect.y = -SCREEN_RECT.height


class Enemy(GameSprite):

    def __init__(self):
        super().__init__("./images/enemy1.png")
        self.speed = random.randint(1,3)
        self.rect.bottom = 0
        max_x = SCREEN_RECT.width - self.rect.width
        self.rect.x = random.randint(0,max_x)
        self.bullet = pg.sprite.Group()
    def update(self):
        super().update()

        if self.rect.y >= SCREEN_RECT.height:
         #   print("敌机删除")
            self.kill()

    def __del__(self):
#        print("敌机挂了 %s" % self.rect)
        pass
    def fire(self):
        bullet = Bullet_enemy()
        bullet.rect.x = self.rect.bottom
        bullet.rect.centerx = self.rect.centerx
        self.bullet.add(bullet)


class Hero(GameSprite):

    def __init__(self):
        super().__init__("./images/me1.png")
        self.speed_x = 0
        self.speed_y = 0
        self.rect.centerx = SCREEN_RECT.centerx
        self.rect.bottom = SCREEN_RECT.bottom - 30
        self.bullets = pg.sprite.Group()
    def update(self):
        self.rect.x += self.speed_x
        self.rect.y += self.speed_y
        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):
        for i in (-1,0,1):
            bullet = Bullet()
            bullet.speed_x = i
            bullet.rect.bottom = self.rect.y
            bullet.rect.centerx = self.rect.centerx

            self.bullets.add(bullet)
            pass

class Bullet(GameSprite):

    def __init__(self):
        super().__init__("./images/bullet1.png",-3)
        self.speed_x = 0

    def update(self):
        super().update()
        self.rect.x += self.speed_x


        if self.rect.y <= 0:
            self.kill()
    def __del__(self):
   #     print("子弹被销毁")
        pass

class Bullet_enemy(GameSprite):

    def __init__(self):
        super().__init__("./images/bullet2.png",2)
        self.speed_x = 0
    def update(self):
        super().update()
        self.rect.x += self.speed_x


        if self.rect.y <= 0 or self.rect.x <= 0 or self.rect.right >= SCREEN_RECT.right :
            self.kill()
    def __del__(self):
     #   print("子弹被销毁")
        pass



class Boss(GameSprite):

    def __init__(self):
        super().__init__("./images/enemy3_n1.png")
        self.speed_y = 0
        self.rect.bottom = 0
        self.speed_x = 0
        self.bullets = pg.sprite.Group()
    def update(self):
        self.check()
        self.rect.x += self.speed_x
        self.rect.y += self.speed_y
        if self.rect.x <= 0:
            self.rect.x = 0
        if self.rect.right >= SCREEN_RECT.right:
            self.rect.right = SCREEN_RECT.right
        if self.rect.bottom >= (SCREEN_RECT.height / 2):
            self.rect.bottom = SCREEN_RECT.height/2
        if self.rect.y <= 0:
            self.rect.y = 0
    def fire(self):
        for i in (-1,0,1):
            bullet = Bullet_enemy()
            bullet.speed_x = i
            bullet.rect.y = self.rect.bottom
            bullet.rect.centerx = self.rect.centerx

            self.bullets.add(bullet)
            pass
    def track(self,x,y):
        x_speed = abs(self.rect.centerx - x) / abs(self.rect.bottom - y)
        self.bullet.speed_x = x_speed * 2
    def move(self):
        self.speed_x = random.randint(-2,2)
        self.speed_y = random.randint(-2,2)

这两个是主要代码 其他的东西就不贴出来了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现智能点餐的游戏需要以下几个步骤: 1. 界面设计:使用pygame创建游戏界面,包括菜单、点餐界面、结算界面等。 2. 菜单设计:设计菜单,包括菜品名称、价格、图片等信息,并将其存储在数据库中。 3. 点餐流程:用户在点餐界面选择菜品,并可以选择数量和口味等选项,系统将用户的点餐信息存储在订单中。 4. 结算流程:用户在结算界面可以查看订单中的菜品、数量和价格等信息,可以选择支付方式,并将订单信息发送给后台系统。 5. 后台系统:后台系统接收用户订单信息,进行订单处理、打印发票等操作。 代码示例: ```python import pygame # 初始化pygame pygame.init() # 设置窗口尺寸 size = (700, 500) screen = pygame.display.set_mode(size) # 设置窗口标题 pygame.display.set_caption("智能点餐游戏") # 加载背景图片 background_image = pygame.image.load("background.jpg").convert() # 加载菜单 menu = { "鸡肉卷": {"price": 10, "image": pygame.image.load("chicken_roll.jpg").convert()}, "牛肉面": {"price": 12, "image": pygame.image.load("beef_noodle.jpg").convert()}, "蛋糕": {"price": 8, "image": pygame.image.load("cake.jpg").convert()} } # 初始化订单 order = {} # 字体设置 font = pygame.font.Font(None, 36) # 游戏循环 done = False while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True # 绘制背景 screen.blit(background_image, [0, 0]) # 绘制菜单 menu_x = 50 menu_y = 100 for item in menu: item_image = menu[item]["image"] screen.blit(item_image, [menu_x, menu_y]) item_price = menu[item]["price"] item_text = font.render(item + " - " + str(item_price) + "元", True, (255, 255, 255)) screen.blit(item_text, [menu_x, menu_y + 150]) menu_x += 200 # 处理用户点餐 mouse = pygame.mouse.get_pos() if menu_x - 200 <= mouse[0] <= menu_x and menu_y <= mouse[1] <= menu_y + 150: if event.type == pygame.MOUSEBUTTONDOWN: if item in order: order[item] += 1 else: order[item] = 1 # 绘制订单 order_x = 400 order_y = 100 order_text = font.render("订单", True, (255, 255, 255)) screen.blit(order_text, [order_x, order_y]) order_y += 50 for item in order: item_text = font.render(item + " x " + str(order[item]) + " - " + str(menu[item]["price"]) + "元", True, (255, 255, 255)) screen.blit(item_text, [order_x, order_y]) order_y += 50 # 绘制总价 total_price = sum([order[item] * menu[item]["price"] for item in order]) total_text = font.render("总价:" + str(total_price) + "元", True, (255, 255, 255)) screen.blit(total_text, [order_x, order_y + 50]) # 更新界面 pygame.display.flip() # 退出游戏 pygame.quit() ``` 以上代码实现了一个简单的智能点餐游戏,用户可以在菜单中选择菜品,并将其加入订单中,最终显示订单和总价。需要注意的是,此代码仅为示例,实际开发中需要根据具体需求进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值