pythonは微信で飛行機ゲームを実現する(by crossin)

13610 ワード

# -*- 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()