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

【作品介绍】
可好玩了!
【作品源代码】
# 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