用户:小小MiO1查看:0 回复:0 评论:0 创建时间:2023-01-21T14:58:26
【作品展示】

【作品介绍】
请问一下,我的代码运行不了,可以帮我改一下吗,在线等,挺急的
【作品源代码】
from tkinter import *
import pygame
from pygame.locals import*
import threading
import time
from PIL import Image
from PIL import ImageTk
pygame.init()
running = False
#pygame库初始化
#创建喵对象
WIDTH, HEIGHT = 800,600
FPS = 60
tx = 100
tx2 = 100
shijian = 0
def shijian():
running = True
class Bullet1(pygame.sprite.Sprite):
def __init__(self, x, y,m):
self.dan = 250
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('paodan.png')
self.rect = self.image.get_rect()
keys = pygame.key.get_pressed()
self.fangxiang = m
self.speedx=0
self.speedy=0
if keys[K_UP]:
self.fangxiang = 1
if keys[K_DOWN]:
self.fangxiang = 2
if keys[K_LEFT]:
self.fangxiang = 3
if keys[K_RIGHT]:
self.fangxiang = 4
# 设置出现的位置
self.rect.centery = y
self.rect.centerx = x
if self.fangxiang == 1:
self.speedy = -35
self.image = pygame.image.load('Sprite-paodan4.png')
if self.fangxiang == 2:
self.speedy = 35
self.image = pygame.image.load('Sprite-paodan3.png')
if self.fangxiang == 3:
self.speedx = -27
self.image = pygame.image.load('Sprite-paodan2.png')
if self.fangxiang == 4:
self.speedx = 27
self.image = pygame.image.load('Sprite-paodan.png')
# 设置子弹由下往上飞速度
def update(self):
if self.dan > 0:
self.rect.y += self.speedy
self.rect.x += self.speedx
self.dan -= 1
# 子弹超出屏幕检测
if self.rect.bottom < 0:
self.喵()
if self.rect.bottom < 0:
self.喵()
class Bullet2(pygame.sprite.Sprite):
def __init__(self, x, y, m):
self.dan = 250
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('paodan.png')
self.rect = self.image.get_rect()
keys = pygame.key.get_pressed()
self.fangxiang = m
self.speedx = 0
self.speedy = 0
if keys[K_w]:
self.fangxiang = 1
if keys[K_s]:
self.fangxiang = 2
if keys[K_a]:
self.fangxiang = 3
if keys[K_d]:
self.fangxiang = 4
# 设置出现的位置
self.rect.centery = y
self.rect.centerx = x
if self.fangxiang == 1:
self.speedy = -35
self.image = pygame.image.load('Sprite-paodan4.png')
if self.fangxiang == 2:
self.speedy = 35
self.image = pygame.image.load('Sprite-paodan3.png')
if self.fangxiang == 3:
self.speedx = -27
self.image = pygame.image.load('Sprite-paodan2.png')
if self.fangxiang == 4:
self.speedx = 27
self.image = pygame.image.load('Sprite-paodan.png')
# 设置子弹由下往上飞速度
def update(self):
if self.dan > 0:
self.rect.y += self.speedy
self.rect.x += self.speedx
# 子弹超出屏幕检测
if self.rect.bottom < 0:
self.喵()
if self.rect.bottom < 0:
self.喵()
class Tank(pygame.sprite.Sprite):
def __init__(self):
# 完成精灵的初始化
pygame.sprite.Sprite.__init__(self)
# 初始化飞机精灵的图片
self.image = pygame.image.load('tank.png')
# 初始化飞机精灵的颜色
# 角色的长方形
self.rect = self.image.get_rect()
# 设置长方形中心的X的值
self.rect.centerx = WIDTH / 2-20
# 设置长方形底的值
self.rect.bottom = HEIGHT - 10
def update(self):
self.speedx = 0
self.speedy = 0
keys = pygame.key.get_pressed()
if keys[K_UP]:
self.speedy = -3
self.fangxiang = 1
self.image = pygame.image.load('tank.png')
# Bullet.fangxiang = 1
if keys[K_DOWN]:
self.speedy = 3
self.fangxiang = 2
self.image = pygame.image.load('tank5.png')
# Bullet.fangxiang = 2
if keys[K_RIGHT]:
self.speedx = 5
self.fangxiang = 3
self.image = pygame.image.load('tank3.png')
# Bullet.fangxiang = 3
if keys[K_LEFT]:
self.speedx = -5
self.fangxiang = 4
self.image = pygame.image.load('tank4.png')
# Bullet.fangxiang = 4
self.rect.x += self.speedx
self.rect.y += self.speedy
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
if self.rect.bottom > HEIGHT:
self.rect.bottom = HEIGHT
if self.rect.top < 0:
self.rect.top = 0
def shoot(self,fx):
m=fx
# if self.fangxiang == 1:
# self.image = pygame.image.load('tank(1).png')
# time.sleep(0.1)
# self.image = pygame.image.load('tank(2).png')
# time.sleep(0.1)
# self.image = pygame.image.load('tank(3).png')
# if self.fangxiang == 2:
# self.image = pygame.image.load('tank5(1).png')
# time.sleep(0.05)
# self.image = pygame.image.load('tank5(2).png')
# time.sleep(0.05)
# self.image = pygame.image.load('tank5(3).png')
# time.sleep(0.05)
# self.image = pygame.image.load('tank5.png')
# if self.fangxiang == 3:
# self.image = pygame.image.load('tank3(1).png')
# time.sleep(0.05)
# self.image = pygame.image.load('tank3(2).png')
# time.sleep(0.05)
# self.image = pygame.image.load('tank3(3).png')
# time.sleep(0.05)
# self.image = pygame.image.load('tank3.png')
# if self.fangxiang == 4:
# self.image = pygame.image.load('tank4(1).png')
# time.sleep(0.05)
# self.image = pygame.image.load('tank4(2).png')
# time.sleep(0.05)
# self.image = pygame.image.load('tank4(3).png')
# time.sleep(0.05)
# self.image = pygame.image.load('tank4.png')
# 定义子弹
bullet = Bullet1(self.rect.centerx+8, self.rect.centery,m)
# 将子弹加入全部精灵组
all_sprites.add(bullet)
# 将子弹放置在子弹精灵组
one_bullets.add(bullet)
class Tank2(pygame.sprite.Sprite):
def __init__(self):
# 完成精灵的初始化
pygame.sprite.Sprite.__init__(self)
# 初始化飞机精灵的图片
self.image = pygame.image.load('tank2.png')
# 初始化飞机精灵的颜色
# 角色的长方形
self.rect = self.image.get_rect()
# 设置长方形中心的X的值
self.rect.centerx = WIDTH / 2+20
# 设置长方形底的值
self.rect.bottom = HEIGHT - 10
def update(self):
self.speedx = 0
self.speedy = 0
keys = pygame.key.get_pressed()
if keys[K_w]:
self.speedy = -3
self.fangxiang = 1
self.image = pygame.image.load('tank2.png')
# Bullet.fangxiang = 1
if keys[K_s]:
self.speedy = 3
self.fangxiang = 2
self.image = pygame.image.load('tank8.png')
# Bullet.fangxiang = 2
if keys[K_d]:
self.speedx = 5
self.fangxiang = 3
self.image = pygame.image.load('tank7.png')
# Bullet.fangxiang = 3
if keys[K_a]:
self.speedx = -5
self.fangxiang = 4
self.image = pygame.image.load('tank6.png')
# Bullet.fangxiang = 4
self.rect.x += self.speedx
self.rect.y += self.speedy
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
if self.rect.bottom > HEIGHT:
self.rect.bottom = HEIGHT
if self.rect.top < 0:
self.rect.top = 0
def shoot(self,fx):
m=fx
# 定义子弹
bullet2 = Bullet2(self.rect.centerx+8, self.rect.centery,m)
# 将子弹加入全部精灵组
all_sprites.add(bullet2)
# 将子弹放置在子弹精灵组
two_bullets.add(bullet2)
#定义窗口的宽高
tank = Tank()
tank2 = Tank2()
clock = pygame.time.Clock()
tk = Tk()
tk.title('喵大战')
img = Image.open('ui.jpg')
img = ImageTk.PhotoImage(img)
chuangkou = pygame.display.set_mode((WIDTH, HEIGHT))
all_sprites = pygame.sprite.Group()
all_sprites.add(tank)
all_sprites.add(tank2)
one_bullets = pygame.sprite.Group()
two_bullets = pygame.sprite.Group()
fx1 = 1
fx2 = 1
bg = pygame.image.load('bg.jpg')
tk.geometry("800x600+200+200")
tk.resizable(0, 0)
label = Label(tk, width=800, height=600, image=img)
label.place(x=0,y =0)
btn_pre = Button(tk, text="开始", font=("黑体", 20), command=shijian)
btn_pre.place(x=100,y=550)
# 创建窗口
while running:
clock.tick(FPS)
chuangkou.blit(bg,(0,0))
#在窗口绘制喵,方位为100,100
all_sprites.update()
all_sprites.draw(chuangkou)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
fx2 = 3
if event.key == pygame.K_w:
fx2 = 1
if event.key == pygame.K_s:
fx2 = 2
if event.key == pygame.K_d:
fx2 = 4
if event.key == pygame.K_LEFT:
fx1 = 3
if event.key == pygame.K_UP:
fx1 = 1
if event.key == pygame.K_DOWN:
fx1 = 2
if event.key == pygame.K_RIGHT:
fx1 = 4
if event.key == pygame.K_SPACE:
tank.shoot(fx1)
if event.key == pygame.K_e:
tank2.shoot(fx2)
if event.key == pygame.K_ESCAPE:
running = False
#检查按键,判断是否退出
hits = pygame.sprite.spritecollide(tank, two_bullets, True)
hits2 = pygame.sprite.spritecollide(tank2, one_bullets, True)
if hits:
tx -= 5
if hits2:
tx2 -= 5
if tx <= 0:
running = False
root = Tk()
root.title("胜利结算")
text = StringVar()
text.set('喵二胜利')
root.geometry("600x400+500+300")
label_text = Label(root, font = ("黑体",25), width=20, textvariable = text)
label_text.place(x=120,y=180)
if tx2 <= 0:
running = False
root = Tk()
root.title("胜利结算")
text = StringVar()
text.set('喵一胜利')
root.geometry("600x400+700+300")
label_text = Label(root, font = ("黑体", 25), width=20, textvariable = text)
label_text.place(x=120,y=180)
chuangkou.blit(tank.image, tank.rect)
chuangkou.blit(tank2.image,tank2.rect)
pygame.display.flip()
tk.mainloop()
root.mainloop()
pygame.quit()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn