猫史档案馆


【Python作品分享】喵大战【求助帖】

用户:小小MiO1小小MiO1查看:0 回复:0 评论:0 创建时间:2023-01-21T14:58:26


【作品展示】

center_image

 

【作品介绍】

请问一下,我的代码运行不了,可以帮我改一下吗,在线等,挺急的

 

【作品源代码】

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


回复

上一页1 页 / 共 0下一页