zoukankan      html  css  js  c++  java
  • pygame之植物大战僵尸-peter

    # 导入相关库并初始化pygame
    import pygame,sys,os
    from pygame import *
    pygame.init()
    # 窗口居中显示
    os.environ['SDL_VIDEO_WINDOW_POS'] = '%d,%d'%(50,50)
    # 设置游戏窗口、颜色和标题
    canvas = pygame.display.set_mode((1200,600))
    canvas.fill((255,255,255))
    pygame.display.set_caption('植物大战僵尸')
    # 创建关闭窗口方法
    def handleEvent():
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
    # 加载背景、坚果图片
    bg = pygame.image.load('images/img/bg.jpg')
    nut1 = pygame.image.load('images/plants/TallNut.gif')
    nut2 = pygame.image.load('images/plants/TallnutCracked1.gif')
    nut3 = pygame.image.load('images/plants/TallnutCracked2.gif')
    nut4 = pygame.image.load('images/plants/WallNut.gif')
    won = pygame.image.load('images/img/won.png')
    # 僵尸移动列表
    moveList = []
    for x in range(13):
        if x < 9:
            moveList.append(pygame.image.load('images/move/0'+str(x+1)+'.png'))
        else:
            moveList.append(pygame.image.load('images/move/'+str(x+1)+'.png'))
    # 僵尸攻击列表
    attackList = []
    for x in range(31,42):
        attackList.append(pygame.image.load('images/attack/'+str(x)+'.png'))
    # 僵尸站立行走列表
    standList = []
    for x in range(21,27):
        standList.append(pygame.image.load('images/stand/'+str(x)+'.png'))
    MOVE = 1
    ATTACK = 2
    STAND = 3
    # 创建僵尸类Zombie()
    class Zombie():
        def __init__(self,x,y):
            self.x   = x
            self.y   = y
            self.index = 0
            self.state = MOVE
            self.img = moveList[self.index]
        def paint(self):
            canvas.blit(self.img,(self.x,self.y))
        def move(self):
            self.x -= 10
        # 创建僵尸动画播放(图片切换)方法
        def animation(self):
            if self.state == MOVE:
                self.img = moveList[self.index%13]
                self.move()
            elif self.state == ATTACK:
                self.img = attackList[self.index%11]
            elif self.state == STAND:
                self.img = standList[self.index%6]
            self.index += 1
    # 创建坚果类Nut()
    class Nut():
        def __init__(self,x,y,width,height,img):
            self.x      = x
            self.y      = y
            self.width  = width
            self.height = height
            self.img    = img
            self.life   = 100
        def paint(self):
            canvas.blit(self.img,(self.x,self.y))
    nut = Nut(500,300,83,119,nut1)
    zombie = Zombie(1000,250)
    # 创建check()方法:检测僵尸碰到坚果时,坚果发生变化。
    def check(n,z):
        if zombie.x <= nut.x + nut.width/5:
            zombie.state = ATTACK
            if nut.life >= 75:
                nut.img = nut2
            elif nut.life >= 50:
                nut.img = nut3
            elif nut.life >= 25:
                nut.img = nut4
            elif nut.life < 0 and zombie.x > 200:
                zombie.state = MOVE
            elif zombie.x <= 200:
                zombie.state = STAND
                canvas.blit(won,(300,0))
            nut.life -= 1
    while True:
        canvas.blit(bg,(0,0))
        zombie.paint()
        zombie.animation()
        if nut.life > 0:
            nut.paint()
        check(nut,zombie)
        pygame.time.delay(100)
        # 更新屏幕并调用handleEvent()方法
        pygame.display.update()
        handleEvent()

  • 相关阅读:
    ThinkPHP6.0.5 验证码 遇到的坑 (验证失败)
    css已知宽高和未知宽高的居中定位
    有关CLR的初学小整理(可能理解不深刻,望大牛指出)
    关于CRC循环冗余校验的总结(C#)
    lesson 4 再谈继承多态,抽象类和接口
    Lesson 3
    Lesson 2
    lesson 1
    08_Spring实现action调用service,service调用dao的过程
    07_配置文件中决定接口的实现类
  • 原文地址:https://www.cnblogs.com/dongks/p/11865241.html
Copyright © 2011-2022 走看看