猫史档案馆


【Python作品分享】飞机大战

用户:小小MiO1小小MiO1查看:0 回复:0 评论:0 创建时间:2022-07-19T11:51:00


【作品展示】

center_image

 

【作品介绍】

半成品,p1用wasd+e p2上下左右键加空格

 

【作品源代码】

# 导入pygame并加载常量
import pygame
from pygame.locals import*
import random as r
pygame.init()
# 设置窗口的宽和高
WIDTH = 480
HEIGHT = 600
ck = pygame.display.set_mode((WIDTH, HEIGHT))
class zidan(pygame.sprite.Sprite):
    def __init__(self,x,y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('img\img_bullet.png')
        self.rect = self.image.get_rect()
        self.rect.y = y
        self.rect.centerx = x
        self.speedy = -10
    def update(self):
        self.rect.y += self.speedy
        if self.rect.bottom <=0:
            self.喵()

# 设置陨石
class yunshi(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('img\img_meteorite.png')
        self.rect = self.image.get_rect()
        self.rect.x = r.randrange(WIDTH-self.rect.width)
        self.rect.y = r.randint(-110, -40)
        self.speedy = r.randint(1, 3)
        self.speedx = r.randint(-2, 1)
    def update(self):
        self.rect.x += self.speedx
        self.rect.y += self.speedy
        if self.rect.top >= HEIGHT+10 or self.rect.left <= -30 or self.rect.right >= WIDTH+30:
            self.rect.x = r.randrange(WIDTH-self.rect.width)
            self.rect.y = r.randrange(-100, -40)
class Plane(pygame.sprite.Sprite):
    # 飞机初始化(self后面不要调参数,因为在初始化里已经有了)
    def __init__(self,image,rect,center,bottom):
        pygame.sprite.Sprite.__init__(self)
        #飞机图片导入
        self.image = image
        # 获取飞机的矩形坐标
        self.rect = rect
        # 飞机生成在背景的2/1
        self.rect.centerx = center
        # 飞机生成在背景距最底下还有10个像素的地方
        self.rect.bottom = bottom
    # 飞机的移动
    def update(self):
        # 设置飞机1秒可以跑多远(初始值为0,不然早跑了)
        self.speedx = 0
        self.speedy = 0
        #获取你的按键
        keys = pygame.key.get_pressed()
        # 如果按的是左键就往左边走三个像素
        if keys[pygame.K_LEFT]:
            self.speedx = -3
        # 如果按的是右键就往右边走三个像素
        if keys[pygame.K_RIGHT]:
            self.speedx = 3
        # 如果按的是上键就往上边走三个像素
        if keys[pygame.K_UP]:
            self.speedy = -5
        # 如果按的是下键就往下边走三个像素
        if keys[pygame.K_DOWN]:
            self.speedy = 5
        # 该往哪个方向走就往哪个方向走
        self.rect.left += self.speedx
        self.rect.bottom += self.speedy
        # 碰壁判断
        if self.rect.left <= 0:
            self.rect.left = 0
        if self.rect.right >= WIDTH:
            self.rect.right = WIDTH
        if self.rect.top <= 0:
            self.rect.top = 0
        if self.rect.bottom >= HEIGHT:
            self.rect.bottom = HEIGHT
    def shoot(self):
        zidan1 = zidan(self.rect.centerx,self.rect.top)
        all_sprite.add(zidan1)


class Plane1(pygame.sprite.Sprite):
    # 飞机初始化(self后面不要调参数,因为在初始化里已经有了)
    def __init__(self, image, rect, center, bottom):
        pygame.sprite.Sprite.__init__(self)
        #飞机图片导入
        self.image = image
        # 获取飞机的矩形坐标
        self.rect = rect
        # 飞机生成在背景的2/1
        self.rect.centerx = center
        # 飞机生成在背景距最底下还有10个像素的地方
        self.rect.bottom = bottom
    # 飞机的移动

    def update(self):
        # 设置飞机1秒可以跑多远(初始值为0,不然早跑了)
        self.speedx = 0
        self.speedy = 0
        #获取你的按键
        keys = pygame.key.get_pressed()
        # 如果按的是左键就往左边走三个像素
        if keys[pygame.K_a]:
            self.speedx = -3
        # 如果按的是右键就往右边走三个像素
        if keys[pygame.K_d]:
            self.speedx = 3
        # 如果按的是上键就往上边走三个像素
        if keys[pygame.K_w]:
            self.speedy = -5
        # 如果按的是下键就往下边走三个像素
        if keys[pygame.K_s]:
            self.speedy = 5
        # 该往哪个方向走就往哪个方向走
        self.rect.left += self.speedx
        self.rect.bottom += self.speedy
        # 碰壁判断
        if self.rect.left <= 0:
            self.rect.left = 0
        if self.rect.right >= WIDTH:
            self.rect.right = WIDTH
        if self.rect.top <= 0:
            self.rect.top = 0
        if self.rect.bottom >= HEIGHT:
            self.rect.bottom = HEIGHT
    def shoot(self):
        zidan1 = zidan(self.rect.centerx, self.rect.top)
        all_sprite.add(zidan1)
# 创建对象
img = pygame.image.load('img\img_plane.png')
plane = Plane(img, img.get_rect(), WIDTH/2-10, HEIGHT-10)
plane1 = Plane1(img, img.get_rect(), WIDTH/2+10, HEIGHT-10)
all_sprite = pygame.sprite.Group()
all_sprite.add(plane)
all_sprite.add(plane1)
for i in range(8):
    met = yunshi()
    all_sprite.add(met)
# 设置帧速率
clock = pygame.time.Clock()
FPS = 60
# 导入背景
beijin = pygame.image.load('img\img_bg.jpg')
kg = True
while kg:
    # 开启帧速率
    clock.tick(FPS)
    ck.blit(beijin,(0,0))
    all_sprite.update()
    all_sprite.draw(ck)
    pygame.display.flip()
    # pygame卸载1
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            kg = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                plane.shoot()
            if event.key == pygame.K_e:
                plane1.shoot()
            if event.key == pygame.K_ESCAPE:
                kg = False
# pygame卸载2
pygame.quit()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页