猫史档案馆


【Python作品分享】Botany VS Zombie 植物大战僵尸【作品秀】

用户:少年编程狂少年编程狂查看:0 回复:0 评论:0 创建时间:2019-12-21T15:09:49


【作品展示】

center_image

 

【作品介绍】

可好玩了!

 

【作品源代码】

# coding:utf-8
# Botany VS Zombie
# YuXuan Studio
# Made with python-pygame

import pygame
import sys
import time
import random
from pygame.locals import*
pygame.mixer.init()
# 初始化pygame环境
pygame.init()
# 设置一个长为1250,宽为700的窗口
canvas = pygame.display.set_mode((1200, 600))
canvas.fi喵])
# 设置窗口标题
pygame.display.set_caption("Botany VS Zombie")
# 背景图片加载
bg = pygame.image.load('img/bg_play.jpg')
bg_end = pygame.image.load('img/ZombiesWon.png')
# 坚果图片加载
nut1 = pygame.image.load('img/plants/TallNut.gif')
nut2 = pygame.image.load('img/plants/TallnutCracked1.gif')
nut3 = pygame.image.load('img/plants/TallnutCracked2.gif')
# 其他植物图片加载
plant1 = pygame.image.load('img/plants/IceShroom.gif')
plant2 = pygame.image.load('img/plants/HypnoShroom.gif')
plant3 = pygame.image.load('img/plants/SunFlower.gif')
plant4 = pygame.image.load('img/plants/WallNut.gif')
# 加载背景音乐并且播放
pygame.mixer.music.load('img/Laura Shigihara - Crazy Dave.mp3')
pygame.mixer.music.play()
# 僵尸的三种状态:移动、攻击、站立
MOVE = 0
STAND = 1
ATTACK = 2
# 将所有动画帧图片对象存储到列表中
# 僵尸移动图片数组
zombieM = []
for i in range(1, 14):
    if i < 10:
        zombieM.append(pygame.image.load('img/move/0' + str(i) + '.png'))
    else:
        zombieM.append(pygame.image.load('img/move/' + str(i) + '.png'))
# 僵尸站立图片数组
zombieS = []
for i in range(21, 27):
    zombieS.append(pygame.image.load('img/stand/' + str(i) + '.png'))
# 僵尸攻击图片数组
zombieA = []
for i in range(31, 42):
    zombieA.append(pygame.image.load('img/attack/' + str(i) + '.png'))


def handleEvent():
    for event in pygame.event.get():
        if event.type == pygame.QUIT or event.type == KEYDOWN and event.key == K_ESCAPE:
            pygame.quit()
            sys.exit()
# 创建僵尸类


class Zombie():
    def __init__(self, x, y):
        # 定义僵尸坐标
        self.x = x
        self.y = y
        # 定义僵尸的宽度和高度
        self.width = 180
        self.height = 180
        # 定义僵尸的初始状态(移动)
        self.state = MOVE
        # 定义僵尸图片在列表中的编号
        self.index = 0
        # 定义僵尸素材从列表回去的方式
        self.frame = zombieM[self.index]

    # 定义僵尸显示在屏幕上的方法
    def paint(self):
        canvas.blit(self.frame, (self.x, self.y))

        # 定义僵尸在屏幕上移动的方法
    def move(self):
        self.x = self.x - random.uniform(2.5, 9.8)
    # 僵尸播放动画方法

    def animation(self):
        if self.state == MOVE:
            self.frame = zombieM[self.index % 13]
            self.move()
        elif self.state == STAND:
            self.frame = zombieS[self.index % 6]
        elif self.state == ATTACK:
            self.frame = zombieA[self.index % 11]
        self.index += 1


class Tallnut():
    def __init__(self):
        # 定义土豆坐标
        self.x = 500
        self.y = 250
        # 定义土豆高宽
        self.width = 83
        self.height = 119
        # 定义土豆生命
        self.life = 88
        self.frame = nut1
    # 定义画坚果方法

    def paint(self):
        canvas.blit(self.frame, (self.x, self.y))

# 创建检测方法


def check(zom, nut):
    # 判断僵尸是否碰到僵尸
    if zom.x <= (nut.x + tallnut1.width / 2):
        # 僵尸切换到攻击状态
        zom.state = ATTACK
        # 坚果被吃动画
        if tallnut1.life > 44:
            tallnut1.frame = nut1
        elif tallnut1.life > 22:
            tallnut1.frame = nut2
        elif tallnut1.life > 0:
            tallnut1.frame = nut3
        elif zom.x <= 450 or nut.life <= 0:
            zom.state = MOVE
            return
        tallnut1.life = tallnut1.life - 0.2


def otherpaint():
    canvas.blit(plant1, (500, 150))
    canvas.blit(plant3, (500, 380))


# 创建对象贼多zombie
zombie1 = Zombie(1000, 210)
zombie2 = Zombie(1100, 210)
zombie3 = Zombie(1200, 210)
zombie4 = Zombie(1300, 210)
zombie5 = Zombie(1400, 210)
zombie6 = Zombie(1500, 210)

# 创建对象tallnut
tallnut1 = Tallnut()

while True:
        # 画背景
    canvas.blit(bg, (0, 0))

    # 僵尸运用方法完成效果
    zombie1.paint()
    zombie1.animation()
    zombie2.paint()
    zombie2.animation()
    zombie3.paint()
    zombie3.animation()
    zombie4.paint()
    zombie4.animation()
    zombie5.paint()
    zombie5.animation()
    zombie6.paint()
    zombie6.animation()
    # 运用函数画出其他的效果
    otherpaint()

    # 土豆运用方法完成效果
    if tallnut1.life > 0:
        tallnut1.paint()

    check(zombie1, tallnut1)
    check(zombie2, tallnut1)
    check(zombie3, tallnut1)
    check(zombie4, tallnut1)
    check(zombie5, tallnut1)
    check(zombie6, tallnut1)
    
    if zombie1.x < 300:
        zombie1.state = STAND
        zombie2.state = STAND
        zombie3.state = STAND
        zombie4.state = STAND
        zombie5.state = STAND
        zombie6.state = STAND

        canvas.blit(bg_end, (500, 20))
    # 进行帧率等待
    time.sleep(0.07)
    pygame.display.update()
    handleEvent()

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页