欢迎光临散文网 会员登陆 & 注册

飞机大战1.0(改编于编程候老师)

2023-02-17 19:16 作者:xiaotiaotiao2011  | 我要投稿

import pygame  # 导入pygame
import random  # 导入random
import os


# 设置常量,常量就是在python中不变的量

FPS = 60  # FPS是指帧数,指在一秒内运行多少次
WIDTH = 500
HEIGHT = 600
WHITE = (255, 255, 255)  # 这是一个RGB,R表示red,G表示green,B表示blue,数值是一个元组,必须带括号
GREEN = (0, 255, 0)
RED = (225, 0, 0)
YELLOW = (255, 255, 0)
BLACK = (0, 0, 0)
分数=0
big_or_small=random.randint(30,50)

# 初始化pygame

pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode(
   (WIDTH, HEIGHT))  # 创建一个窗口,宽为WIDTH常量,高为HEIGHT常量
clock = pygame.time.Clock()  # 设置帧数

background_img=pygame.image.load(os.path.join("img", "background.png")).convert()

player_img=pygame.image.load(os.path.join("img","player.png")).convert()

rock_img=pygame.image.load(os.path.join("img","rock.png")).convert()

bullet_img=pygame.image.load(os.path.join("img","bullet.png")).convert()

pygame.display.set_caption('plane_war')  # 窗口标题为字符串“plane_war”,引号是英文

hoot_sound=pygame.mixer.Sound(os.path.join("sound","shoot.wav"))
expl_sounds=[pygame.mixer.Sound(os.path.join("sound","expl0.wav")),
            pygame.mixer.Sound(os.path.join("sound","expl1.wav"))]

pygame.mixer.music.load(os.path.join("sound","background.ogg"))
pygame.mixer.music.set_volume(0.3)

font_name=pygame.font.match_font('微软雅黑')

def draw_text(surf,text,size,x,y):
   font=pygame.font.Font(font_name,size)
   text_surface=font.render(text,True,WHITE)
   text_rect=text_surface.get_rect()
   text_rect.centerx=x
   text_rect.top=y
   surf.blit (text_surface,text_rect)

class Player(pygame.sprite.Sprite):  # 设置一个类,继承父类pygame.sprite.Sprite

   def __init__(self):  # 设置初始化内容

       pygame.sprite.Sprite.__init__(self)

       self.image = pygame.transform.scale(player_img,(50,40))

       self.image.set_colorkey((BLACK))

       self.rect = self.image.get_rect()  # 获取长方形的矩形位置

       self.rect.centerx = WIDTH/2  # 设置长方形中心在x轴的中心

       self.rect.bottom = HEIGHT-20  # 设置长方形的底部在y轴的580位置

       self.speedx = 8  # 设置每次移动的像素(px)

       self.health=5

   def update(self):  # 定义update函数

       key_pressed = pygame.key.get_pressed()  # 获取键盘状态

       # 判断键盘状态

       if key_pressed[pygame.K_RIGHT]:  # 判断键盘右键是否按下

           self.rect.x += self.speedx

       if key_pressed[pygame.K_LEFT]:  # 判断键盘左键是否按下

           self.rect.x -= self.speedx

       # 判断位置

       if self.rect.right > WIDTH:  # 如果右边的位置大于宽

           self.rect.right = WIDTH

       if self.rect.left < 0:  # 如果左边小于宽

           self.rect.left = 0

   def shoot(self):

       bullet = Bullet(self.rect.centerx+7, self.rect.centery)
       all_sprites.add(bullet)
       bullets.add(bullet)
       hoot_sound.play()
       bullet = Bullet(self.rect.centerx-7 , self.rect.centery)
       all_sprites.add(bullet)
       bullets.add(bullet)
       hoot_sound.play()
   def k_shoot(self):
       for i in range(100):
           偏差 = random.randrange(-250, 250)
           bullet = Bullet(self.rect.centerx+偏差, self.rect.centery)
           all_sprites.add(bullet)
           bullets.add(bullet)
           hoot_sound.play()

class Rock(pygame.sprite.Sprite ):  # 设置一个类,继承父类pygame.sprite.Sprite

   def __init__(self  ):  # 设置初始化内容
       pygame.sprite.Sprite.__init__(self)
       self.image_origin=rock_img
       self.image_origin.set_colorkey(BLACK)
       self.image=self.image_origin.copy()
       self.image = pygame.transform.scale(rock_img, (big_or_small, big_or_small))

       self.image.set_colorkey((BLACK))

       self.rect = self.image.get_rect()  # 获取长方形的矩形位置
       # 随机生成位置和速度

       try:

           self.rect.x = random.randint(0, WIDTH-self.rect.x)
           self.rect.y = random.randint(-40, -10)
           self.speedy = random.randint(2, 10)  # 设置每次移动的像素(px)
           self.speedx = random.randint(-3, 3)

       except:

           self.rect.x = random.randint(0, 470)
           self.rect.y = -10
           self.speedy = random.randint(2, 10)
           self.speedx = random.randint(-3, 3)

       self.total_degree=0
       self.rot_degree=random.randrange(-3,3)
   def rotate(self):
       self.total_degree+=3
       self.total_degree%=360
       self.image=pygame.transform.rotate(self.image_origin,self.rot_degree)
       center=self.rect.center
       self.rect=self.image.get_rect()
       self.rect.center=center
   def update(self):  # 定义update函数

       self.rect.y += self.speedy  # y轴增加

       self.rect.x += self.speedx  # x轴增加

       if self.rect.top > HEIGHT or self.rect.left > WIDTH or self.rect.right < 0:

           try:

               self.rect.x = random.randint(0, WIDTH-self.rect.x)

               self.rect.y = random.randint(-40, -10)

               self.speedy = random.randint(2, 10)  # 设置每次移动的像素(px)

               self.speedx = random.randint(-3, 3)

           except:

               self.rect.x = random.randint(0, 470)

               self.rect.y = -10

               self.speedy = random.randint(2, 10)

               self.speedx = random.randint(-3, 3)

class Bullet(pygame.sprite.Sprite):  # 设置一个类,继承父类pygame.sprite.Sprite

   def __init__(self, x, y):  # 设置初始化内容

       pygame.sprite.Sprite.__init__(self)

       self.image =pygame.transform.scale(bullet_img,(5,20))  # 创建一个宽10,高20的长方形,数值为数组
       self.image.set_colorkey(BLACK)

       self.rect = self.image.get_rect()
       self.rect.x = x
       self.rect.y = y

       self.speedy = -10  # 速度-10

   def update(self):  # 定义update函数

       self.rect.y += self.speedy  # y轴增加

       if self.rect.bottom < 0:

           self.kill()  # 隐藏


all_sprites = pygame.sprite.Group()  # 创建一个所有精灵列表

rocks = pygame.sprite.Group()

bullets = pygame.sprite.Group()

player = Player()

all_sprites.add(player)
pygame.mixer.music.play(-1)

for i in range(8):

   rock = Rock()

   all_sprites.add(rock)

   rocks.add(rock)

   big_or_small = random.randint(30, 70)

running = True  # 设running为布尔值True,表示真

# 主循环

while running:

   clock.tick(FPS)  # 设置帧数为60/s
   big_or_small = random.randint(30, 70)
   for event in pygame.event.get():  # 判断窗口状态

       if event.type == pygame.QUIT:  # 检测窗口是否关闭

           running = False  # 如果是,将running设为False,停止判断

       elif event.type == pygame.KEYDOWN:

           if event.key == pygame.K_SPACE:
               player.shoot()
           if event.key==pygame.K_k:
               player.k_shoot()

   # 更新游戏

   all_sprites.update()

   hits_rockandbullet = pygame.sprite.groupcollide(
       rocks, bullets, True, True)  # 检测子弹与陨石是否碰撞
   for hit in hits_rockandbullet:
       # 打中一个再生成一个
       random.choice(expl_sounds).play()
       r = Rock()
       all_sprites.add(r)
       rocks.add(r)
       small_big_or_small=+int(big_or_small/15 )
       分数+=random.randint(1,2)+small_big_or_small
       print("你的分数是%d分"%分数)
   # 显示画面
   hits_player_and_bullet=pygame.sprite.spritecollide(player,rocks,False)
   if hits_player_and_bullet:
       running = False  # True

   screen.fill(BLACK)
   screen.blit(background_img,(0,0))
   all_sprites.draw(screen)
   draw_text(screen,str(分数),18,WIDTH/2,0)
   pygame.display.update()  # 窗口刷新


pygame.quit()


"""

部分内容进行了删减

"""

飞机大战1.0(改编于编程候老师)的评论 (共 条)

分享到微博请遵守国家法律