用户:FATAL_ERROR查看:0 回复:1 评论:0 创建时间:2019-06-07T17:42:14
【作品展示】

【作品介绍】
天呐...作业没写完呢...
【作品源代码】
# 0.模块区:引入游戏所需要的第三方库/模块
import datetime
import math
import os
import random
import sys
import pygame
from pygame.locals import *
class Begger(object):
def __init__(self, img, rect, speed, a, b):
self.ful_img = img
self.imgs = [self.ful_img.subsurface(Rect((0, 0), (a, b)))]
self.rect = rect
self.speed = speed
self.num = 0
self.a = 60
self.b = 60
def update(self, screen, press_keys):
if press_keys[K_a]:
self.rect.left -= self.speed
if self.rect.left <= 0:
self.rect.left = 0
if press_keys[K_d]:
self.rect.left += self.speed
if self.rect.right >= 200:
self.rect.right = 200
if press_keys[K_w]:
self.rect.top -= self.speed
if self.rect.top <= 0:
self.rect.top = 0
if press_keys[K_s]:
self.rect.top += self.speed
if self.rect.bottom >= 喵0:
self.rect.bottom = 喵0
self.num += 1
if self.num % 3 == 0:
self.num = 0
return [(self.rect.left + self.rect.right)/2, (self.rect.top + self.rect.bottom)/2], self.imgs[0]
# 1.pygame主要的工作区域
if __name__ == '__main__':
# 1 - 设置区
# 1.1 - 窗口设置区
white = (255, 255, 255)
screen_width, screen_height = 960, 喵0
os.environ['SDL_VIDEO_CENTERED'] = '1'
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Game")
# 1.2 - 基础设置区
pygame.init()
start = 0
win = 0
running = 0
distance = 200
health_value = 194
health_value_max = 194
fin_time = 90
start_time = datetime.datetime.now()
rect_bg = Rect(50, 50, 133, 142)
bg_speed = 2
begger_pos = []
monsters = []
monster_speed = 2
wave_set = []
wave_speed = 3.0
wave_max = 20
# 以下83-126行代码是程序中可以替换的图片素材
# 在文件夹中找到对应名称的素材,替换掉即可
# paper是背景图片,将背景素材名称改为“喵地背景”即可替换,
paper = pygame.image.load('1喵地背景.png').convert_alpha()
#paper = pygame.image.load('paper.png').convert_alpha()
# walls是保护角色的物体,这里设置的是“运动”
wall = pygame.image.load('2运动.png').convert_alpha()
#wall = pygame.image.load('walls.png').convert_alpha()
wall_width = wall.get_width()
wall_height = wall.get_height()
# beggers是主角,用来打败烦恼怪的主角,这里设置的是“大黄鸡”
begger = pygame.image.load('3大黄鸡.png').convert_alpha()
# begger = pygame.image.load('beggers2.png').convert_alpha()
begger_width = begger.get_width()
begger_height = begger.get_height()
# waves是攻击的子弹,这里设置的是大黄鸡的“铃铛”
waves = pygame.image.load('4铃铛.png').convert_alpha()
sub_wave = waves.subsurface(
Rect((0, 0), (waves.get_width(), waves.get_height())))
sub_wave_width = sub_wave.get_width()
sub_wave_height = sub_wave.get_height()
# monster1就是你要消灭的烦恼了,这里设置的是“体重秤”
monster_img1 = pygame.image.load('5体重秤.PNG').convert_alpha()
#monster_img1 = pygame.image.load('monster1.PNG').convert_alpha()
monster_width = monster_img1.get_width()
monster_height = monster_img1.get_height()
monster_img = monster_img1
# health_bar是血条满血的素材状态
health_bar_img = pygame.image.load("6health_bar.jpeg")
health_bar_height = health_bar_img.get_height()
# health是血槽已空的素材状态
health_img = pygame.image.load("7health.jpeg")
health_height = health_img.get_height()
# victory和game_over分别是胜利界面与失败界面
victory = pygame.image.load('8victory.png')
game_over = pygame.image.load('9game_over.png')
# start_img是游戏开始的素材界面
start_img = pygame.image.load('10开始游戏.png').convert_alpha()
#start_img = pygame.image.load('start.png').convert_alpha()
# 2 - 游戏区
while not start:
screen.fill(white)
screen.blit(start_img, (220, 0))
pygame.font.init()
font = pygame.font.Font(None, 70)
text = font.render("qiao yi xia kong ge",
True, (250, 50, 200))
text_Rect = text.get_rect()
text_Rect.centerx = screen.get_rect().centerx
text_Rect.centery = screen.get_rect().centery + 200
screen.blit(text, text_Rect)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == K_SPACE:
start = 1
running = 1
#pygame.mixer.music.load(fig_path + "Checkpoint.mp3")
#pygame.mixer.music.play(1, 0.0)
#pygame.mixer.music.set_volume(0.15)
start_time = datetime.datetime.now()
bg = Begger(begger, rect_bg, bg_speed, begger_width, begger_height)
# 2.2 - 游戏进行区
while running:
# 2.2.1 - 游戏显示区
screen.fill(white)
screen.blit(paper, (0, 0))
for height in range(0, screen_height, wall_height):
screen.blit(wall, (distance, height))
press_keys = pygame.key.get_pressed()
begger_pos, begger_img = bg.update(screen, press_keys)
position = pygame.mouse.get_pos()
angle = math.atan2(position[1] - (begger_pos[1] + begger_height),
position[0] - (begger_pos[0] + begger_width))
begger_rot = pygame.transform.rotate(begger_img, 360 - angle * 57.29)
begger_pos1 = (begger_pos[0] - begger_rot.get_rect().width / 2,
begger_pos[1] - begger_rot.get_rect().height / 2)
screen.blit(begger_rot, begger_pos1)
for wave in wave_set:
index = 0
vel_x = math.cos(wave[0]) * wave_speed
vel_y = math.sin(wave[0]) * wave_speed
wave[1] += vel_x
wave[2] += vel_y
if wave[1] < - sub_wave_width or wave[1] > screen_width \
or wave[2] < - sub_wave_height or wave[2] > screen_height:
wave_set.pop(index)
index += 1
for projectile in wave_set:
wave1 = pygame.transform.rotate(
sub_wave, 360 - projectile[0] * 57.29)
screen.blit(wave1, (projectile[1], projectile[2]))
monster_timer = random.choice(range(200))
if monster_timer < 1:
monsters.append([screen_width,
random.randint(monster_height, screen_height - monster_height)])
index = 0
for monster in monsters:
if monster[0] < - monster_width:
monsters.pop(index)
monster[0] -= monster_speed
monster_rect = pygame.Rect(monster_img.get_rect())
monster_rect.top = monster[1]
monster_rect.left = monster[0]
if monster_rect.left < wall_width + distance:
health_value -= random.randint(20, 50)
monsters.pop(index)
index1 = 0
for wave in wave_set:
wave_rect = pygame.Rect(sub_wave.get_rect())
wave_rect.left = wave[1]
wave_rect.top = wave[2]
# 检查两个矩形块是否交叉
if monster_rect.colliderect(wave_rect):
wave_set.pop(index1)
try:
monsters.pop(index)
except IndexError as error:
print("IndexError: " + str(error))
index1 += 1
index += 1
for monster in monsters:
screen.blit(monster_img, monster)
font = pygame.font.Font(None, 42)
cur_time = datetime.datetime.now()
play_time = (cur_time - start_time).seconds
if play_time % 60 < 10:
time_str = ":0"
else:
time_str = ":"
survived_text = font.render(
str(play_time // 60) +
time_str +
str(play_time % 60),
True, (0, 0, 0)
)
text_Rect = survived_text.get_rect()
text_Rect.topright = [screen_width - 5, 5]
screen.blit(survived_text, text_Rect)
health_bar_img = pygame.transform.scale(health_bar_img,
(health_value_max, health_bar_height))
screen.blit(health_bar_img, [0, 5])
if health_value < 0:
health_value = 0
health_img = pygame.transform.scale(health_img,
(health_value, health_height))
screen.blit(health_img, [0, 5])
pygame.display.flip()
# 2.2.2 - 游戏操作区
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN and len(wave_set) < wave_max:
position = pygame.mouse.get_pos()
wave_set.append([math.atan2(position[1] - (begger_pos1[1] + begger_height),
position[0] - (begger_pos1[0] + begger_width)),
begger_pos1[0], begger_pos1[1]])
if pygame.time.get_ticks() >= fin_time * 1000:
running = 0
win = 1
if health_value == 0:
running = 0
win = 0
while not running and start:
pygame.mixer.music.stop()
if win:
screen.blit(victory, (100, 0))
pygame.font.init()
font = pygame.font.Font(None, 84)
text = font.render("我赢了!",
True, (250, 50, 200))
text_Rect = text.get_rect()
text_Rect.centerx = screen.get_rect().centerx + 10
text_Rect.centery = screen.get_rect().centery + 50
screen.blit(text, text_Rect)
if not win:
screen.blit(game_over, (100, 0))
pygame.font.init()
font = pygame.font.Font(None, 100)
text = font.render("GAME OVER",
True, (250, 50, 200))
text_Rect = text.get_rect()
text_Rect.centerx = screen.get_rect().centerx
text_Rect.centery = screen.get_rect().centery + 80
screen.blit(text, text_Rect)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn