• python实现微信打飞机游戏(by crossin)


    # -*- coding: utf-8 -*-
    
    import pygame
    from sys import exit
    import random
    
    pygame.init()
    screen = pygame.display.set_mode((450, 600), 0, 32)
    background = pygame.image.load("back.jpg").convert()
    plane = pygame.image.load("plane.png").convert_alpha()
    pygame.display.set_icon(plane)
    pygame.display.set_caption("打飞机")
    
    class Enemy:
            def restart(self):
                    #重置敌机位置和速度
                    self.x = random.randint(50, 400)
                    self.y = random.randint(-200, -50)
                    self.speed = random.random() + 0.1
                    
            def __init__(self):
                            #初始化
                    self.restart()
                    self.image = pygame.image.load('enemy.png').convert_alpha()
    
            def move(self):
                    if self.y < 600:
                            #向下移动
                        self.y += 0.3
                    else:
                            #重置
                        self.restart()
    #enemy = Enemy()
    enemies = []
    for i in range(3):
        enemies.append(Enemy())
    
    class Bullet:
            def __init__(self):
                    #初始化成员变量,x,y,image
                    self.x = 0
                    self.y = -1
                    self.image = pygame.image.load('bullet.png').convert_alpha()
                    self.active = False
            def restart(self):
                    mouseX, mouseY = pygame.mouse.get_pos()
                    self.x = mouseX - self.image.get_width() / 2
                    self.y = mouseY - self.image.get_height() /2
                    self.active = True
            def move(self):
                    #处理子弹的运动
                    if self.y < 0:
                            self.active = False
                    if self.active:
                            self.y -= 3          
    #创建子弹的list
    bullets = []
    #向list中添加5发子弹
    for i in range(5):
        bullets.append(Bullet())
    #子弹总数
    count_b = len(bullets)
    #即将激活的子弹序号
    index_b = 0
    #发射子弹的间隔
    interval_b = 0
    
    class Plane:
        def restart(self):
            self.x = 200
            self.y = 600
            
        def __init__(self):
            self.restart()
            self.image = pygame.image.load('plane.png').convert_alpha()
    
        def move(self):
            x, y = pygame.mouse.get_pos()
            x-= self.image.get_width() / 2
            y-= self.image.get_height() / 2
            self.x = x
            self.y = y
    
    plane = Plane()
    bullet = Bullet()
    enemy = Enemy()
    def checkHit(enemy, bullet):
            if (bullet.x > enemy.x and bullet.x < enemy.x + enemy.image.get_width()) and (bullet.y > enemy.y and bullet.y < enemy.y + enemy.image.get_height()):
                enemy.restart()
                bullet.active = False
                return True
            return False
    
    def checkCrash(enemy, plane):
        if (plane.x + 0.7*plane.image.get_width() > enemy.x) and (plane.x + 0.3*plane.image.get_width() < enemy.x + enemy.image.get_width()) and (plane.y + 0.7*plane.image.get_height() > enemy.y) and (plane.y + 0.3*plane.image.get_height() < enemy.y + enemy.image.get_height()):
            return True
        return False
    
    gameover = False
    score = 0
    Hscore = []
    font = pygame.font.SysFont('楷体', 16)
    text1 = font.render(u"点击鼠标左键重新开始", 1, (0, 0, 0))
    
    while True:
            for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        pygame.quit()
                        exit()
                    #判断在gameover状态下点击了鼠标
                    if gameover and event.type == pygame.MOUSEBUTTONUP:
                        #重置游戏
                        plane.restart()
                        for e in enemies:
                            e.restart()
                        for b in bullets:
                            b.active = False
                        score = 0
                        gameover = False
            screen.blit(background, (0,0))  
            if not gameover:
                    interval_b -= 1
                    if interval_b < 0:
                            bullets[index_b].restart()
                            interval_b = 100
                            index_b = (index_b+1) % count_b
                    for b in bullets:
                            if b.active:
                                    for e in enemies:
                                            if checkHit(e, b):
                                                    score += 100
                                            if checkCrash(e, plane):
                                                    gameover = True
                                            
                                    b.move()
                                    screen.blit(b.image, (b.x-23, b.y))
                                    screen.blit(b.image, (b.x+25, b.y))
                    for e in enemies:
                            e.move()
                            screen.blit(e.image, (e.x, e.y))
                    plane.move()
                    screen.blit(plane.image, (plane.x, plane.y))
                    text = font.render("Socre:%d" % score, 1, (0, 0, 0))
                    screen.blit(text, (0, 0))
            else:
                    screen.blit(text, (0, 0))
                    screen.blit(text1,(100,32))
                    Hscore.append(score)
                    text2 = font.render(u"HScore:%d" % sorted(Hscore)[-1], 1, (0, 0, 0))
                    screen.blit(text2, (250, 0))
                    pass
            pygame.display.update()
  • 相关阅读:
    Glide优化
    Java多线程知识点
    Android知识点
    Gradle的一些技巧和遇到的问题
    Python用Django写restful api接口
    Python写爬虫爬妹子
    用最简单的例子说明设计模式(三)之责任链、建造者、适配器、代理模式、享元模式
    【Python】扫描指定文件夹下特定后缀的文件
    【Python】生成多级树结构的xml文件
    【转】【Linux】安装pyinstaller
  • 原文地址:https://www.cnblogs.com/jackyshan/p/3386971.html
Copyright © 2020-2023  润新知