会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 133331个问题

我方坦克时,游戏界面停止了,并没有出现爆炸效果!


pygametimerandom
pygame.sprite Sprite

SCREEN_WIDTH SCREEN_HEIGHT BG_COLOR pygame.TEXT_COLOR pygame.BaseItemSpritepygame.sprite.Sprite.MainGamewindow my_tank enemyTankList enemyTankCount myBulletList enemyBulletList explodeList pygame.display.MainGame.window pygame.display.SCREEN_WIDTHSCREEN_HEIGHTMainGame.my_tank Tank.pygame.display.time.MainGame.window.BG_COLOR.MainGame.window..MainGame.enemyTankListMainGame.my_tank MainGame.my_tank.liveMainGame.my_tank.MainGame.my_tank
                MainGame.my_tank ....MainGame.my_tank MainGame.my_tank.liveMainGame.my_tank.stopMainGame.my_tank.pygame.display.top i MainGame.enemyTankCountleft random.speed random.enemy EnemyTanklefttopspeedMainGame.enemyTankList.enemyexplode MainGame.explodeListexplode.liveexplode.MainGame.explodeList.explodeenemyTank MainGame.enemyTankListenemyTank.liveenemyTank.enemyTank.enemyBullet enemyTank.enemyBulletMainGame.enemyBulletList.enemyBulletMainGame.enemyTankList.enemyTankmyBullet MainGame.myBulletListmyBullet.livemyBullet.myBullet.myBullet.MainGame.myBulletList.myBulletenemyBullet MainGame.enemyBulletListenemyBullet.liveenemyBullet.enemyBullet.enemyBullet.MainGame.enemyBulletList.enemyBulletpygame.font.font pygame.font.textSurface font.TEXT_COLORtextSurface

    eventList pygame.event.event eventListevent.type pygame.QUIT.event.type pygame.KEYDOWNMainGame.my_tank MainGame.my_tank.liveevent.key pygame.K_LEFTMainGame.my_tank.direction MainGame.my_tank.stop event.key pygame.K_RIGHTMainGame.my_tank.direction MainGame.my_tank.stop event.key pygame.K_UPMainGame.my_tank.direction MainGame.my_tank.stop event.key pygame.K_DOWNMainGame.my_tank.direction MainGame.my_tank.stop event.key pygame.K_SPACEMainGame.myBulletListmyBullet BulletMainGame.my_tankMainGame.myBulletList.myBulletevent.type pygame.KEYUPevent.key pygame.K_UP pygame.K_DOWN event.key pygame.K_LEFT event.key pygame.K_RIGHTMainGame.my_tank MainGame.my_tank.liveMainGame.my_tank.stop TankBaseItem.images pygame.image.pygame.image.pygame.image.pygame.image..direction .image .images.direction.rect .image..rect.left .rect.top .speed .stop .live .direction .rect.left .rect.left .speed
        .direction .rect.top .rect.top .speed
        .direction .rect.top .rect.height SCREEN_HEIGHT.rect.top .speed
        .direction .rect.left .rect.height SCREEN_WIDTH.rect.left .speed

    Bullet.image .images.directionMainGame.window..image.rectMyTankTankEnemyTankTankEnemyTank..images pygame.image.pygame.image.pygame.image.pygame.image..direction ..image .images.direction.rect .image..rect.left .rect.top .speed .flag .step num random.num num num num .step .direction ..step ..step num random.num BulletBulletBaseItem.image pygame.image..direction .direction
        .rect .image..direction .rect.left .rect.left .rect.width.rect.width.rect.top .rect.top .rect.height
        .direction .rect.left .rect.left .rect.width.rect.width.rect.top .rect.top .rect.height
        .direction .rect.left .rect.left .rect.width.rect.width.rect.top .rect.top .rect.width.rect.width.direction .rect.left .rect.left .rect.width
            .rect.top .rect.top .rect.width.rect.width.speed .live .direction .rect.top .rect.top .speed
            .live .direction .rect.left .rect.width SCREEN_WIDTH.rect.left .speed
            .live .direction .rect.top .rect.height SCREEN_HEIGHT.rect.top .speed
            .live .direction .rect.left .rect.left .speed
            .live MainGame.window..image.rectenemyTank MainGame.enemyTankListpygame.sprite.enemyTankenemyTank.live .live explode ExplodeenemyTankMainGame.explodeList.explodeMainGame.my_tank MainGame.my_tank.livepygame.sprite.MainGame.my_tankexplode ExplodeMainGame.my_tankMainGame.explodeList.explode.live MainGame.my_tank.live WallExplode.rect .rect
        .images pygame.image.pygame.image.pygame.image.pygame.image.pygame.image..step .image .images.step.live .step .images.image .images.step.step MainGame.window..image.rect.live .step Music__name__ MainGame.

11.jpg

22.jpg

Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 2536楼

当敌方子弹击中我方坦克时,游戏界面停止了,并没有出现爆炸效果
pygametimerandom
pygame.sprite Sprite

SCREEN_WIDTH SCREEN_HEIGHT BG_COLOR pygame.TEXT_COLOR pygame.BaseItemSpritepygame.sprite.Sprite.MainGamewindow my_tank enemyTankList enemyTankCount myBulletList enemyBulletList explodeList pygame.display.MainGame.window pygame.display.SCREEN_WIDTHSCREEN_HEIGHTMainGame.my_tank Tank.pygame.display.time.MainGame.window.BG_COLOR.MainGame.window..MainGame.enemyTankListMainGame.my_tank MainGame.my_tank.liveMainGame.my_tank.MainGame.my_tank
                MainGame.my_tank ....MainGame.my_tank MainGame.my_tank.liveMainGame.my_tank.stopMainGame.my_tank.pygame.display.top i MainGame.enemyTankCountleft random.speed random.enemy EnemyTanklefttopspeedMainGame.enemyTankList.enemyexplode MainGame.explodeListexplode.liveexplode.MainGame.explodeList.explodeenemyTank MainGame.enemyTankListenemyTank.liveenemyTank.enemyTank.enemyBullet enemyTank.enemyBulletMainGame.enemyBulletList.enemyBulletMainGame.enemyTankList.enemyTankmyBullet MainGame.myBulletListmyBullet.livemyBullet.myBullet.myBullet.MainGame.myBulletList.myBulletenemyBullet MainGame.enemyBulletListenemyBullet.liveenemyBullet.enemyBullet.enemyBullet.MainGame.enemyBulletList.enemyBulletpygame.font.font pygame.font.textSurface font.TEXT_COLORtextSurface

    eventList pygame.event.event eventListevent.type pygame.QUIT.event.type pygame.KEYDOWNMainGame.my_tank MainGame.my_tank.liveevent.key pygame.K_LEFTMainGame.my_tank.direction MainGame.my_tank.stop event.key pygame.K_RIGHTMainGame.my_tank.direction MainGame.my_tank.stop event.key pygame.K_UPMainGame.my_tank.direction MainGame.my_tank.stop event.key pygame.K_DOWNMainGame.my_tank.direction MainGame.my_tank.stop event.key pygame.K_SPACEMainGame.myBulletListmyBullet BulletMainGame.my_tankMainGame.myBulletList.myBulletevent.type pygame.KEYUPevent.key pygame.K_UP pygame.K_DOWN event.key pygame.K_LEFT event.key pygame.K_RIGHTMainGame.my_tank MainGame.my_tank.liveMainGame.my_tank.stop TankBaseItem.images pygame.image.pygame.image.pygame.image.pygame.image..direction .image .images.direction.rect .image..rect.left .rect.top .speed .stop .live .direction .rect.left .rect.left .speed
        .direction .rect.top .rect.top .speed
        .direction .rect.top .rect.height SCREEN_HEIGHT.rect.top .speed
        .direction .rect.left .rect.height SCREEN_WIDTH.rect.left .speed

    Bullet.image .images.directionMainGame.window..image.rectMyTankTankEnemyTankTankEnemyTank..images pygame.image.pygame.image.pygame.image.pygame.image..direction ..image .images.direction.rect .image..rect.left .rect.top .speed .flag .step num random.num num num num .step .direction ..step ..step num random.num BulletBulletBaseItem.image pygame.image..direction .direction
        .rect .image..direction .rect.left .rect.left .rect.width.rect.width.rect.top .rect.top .rect.height
        .direction .rect.left .rect.left .rect.width.rect.width.rect.top .rect.top .rect.height
        .direction .rect.left .rect.left .rect.width.rect.width.rect.top .rect.top .rect.width.rect.width.direction .rect.left .rect.left .rect.width
            .rect.top .rect.top .rect.width.rect.width.speed .live .direction .rect.top .rect.top .speed
            .live .direction .rect.left .rect.width SCREEN_WIDTH.rect.left .speed
            .live .direction .rect.top .rect.height SCREEN_HEIGHT.rect.top .speed
            .live .direction .rect.left .rect.left .speed
            .live MainGame.window..image.rectenemyTank MainGame.enemyTankListpygame.sprite.enemyTankenemyTank.live .live explode ExplodeenemyTankMainGame.explodeList.explodeMainGame.my_tank MainGame.my_tank.livepygame.sprite.MainGame.my_tankexplode ExplodeMainGame.my_tankMainGame.explodeList.explode.live MainGame.my_tank.live WallExplode.rect .rect
        .images pygame.image.pygame.image.pygame.image.pygame.image.pygame.image..step .image .images.step.live .step .images.image .images.step.step MainGame.window..image.rect.live .step Music__name__ MainGame.

11.jpg

22.jpg

Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 2537楼
Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 2540楼

tank0.01.rar

直接粘贴的有问题,上传附件,请老师帮忙看看

Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 2546楼

我测试了一下,mytank和enemytank两个子类都没法使用,有点奇怪,请老师帮忙看看

pygamerandom

Screen_Width = Screen_Height = text_color = pygame.Color()
bg_color = ()
Max_Enemy_Tank = Tank():
    (lefttop):
        .images = {
            : pygame.image.load(): pygame.image.load(): pygame.image.load(): pygame.image.load()}
        .direction = .image = .images[.direction]
        .rect = .image.get_rect()
        .rect.left = left
        .rect.top = top
        .speed = .tankstop = ():
        .direction == :
            .rect.top > :
                .rect.top -= .speed
        .direction == :
            .rect.top + .rect.height < Screen_Height:
                .rect.top += .speed
        .direction == :
            .rect.left > :
                .rect.left -= .speed
        .direction == :
            .rect.left + .rect.height < Screen_Width:
                .rect.left += .speed

    ():
        ():
        .image = .images[.direction]
        MainGame.Window.blit(.image.rect)



MyTank(Tank):
    ():
        EnemyTank(Tank):
    (lefttopspeed):
        .images = {
            : pygame.image.load(): pygame.image.load(): pygame.image.load(): pygame.image.load()}
        .direction = .direct = {: : : : }
        i random.randint():
            .direction = .direct(i)
        .image = .images[.direction]
        .rect = .image.get_rect()
        .rect.left = left
        .rect.top = top
        .speed = speed
        .tankstop = MainGame:
    Window = MyTank = enemy = enemytanklist = []
    enemytankcount = ():
        ():
        EventList = pygame.event.get()
        pygame.key.set_repeat()
        key_pressed = pygame.key.get_pressed()
        event EventList:
            event.type == pygame.QUIT:
                .EndGame()
            event.type == pygame.KEYDOWN:
                key_pressed[pygame.K_LEFT]:
                    MainGame.MyTank.direction = MainGame.MyTank.tankstop = event.key == pygame.K_RIGHT:
                    MainGame.MyTank.direction = MainGame.MyTank.tankstop = event.key == pygame.K_UP:
                    MainGame.MyTank.direction = MainGame.MyTank.tankstop = event.key == pygame.K_DOWN:
                    MainGame.MyTank.direction = MainGame.MyTank.tankstop = event.key == pygame.K_SPACE:
                    MainGame.MyTank.shootBullet()
            event.type == pygame.KEYUP:
                event.key != pygame.K_SPACE:
                    MainGame.MyTank.tankstop = ():
        pygame.display.init()
        MainGame.Window = pygame.display.set_mode([Screen_WidthScreen_Height])
        pygame.display.set_caption()
        MainGame.MyTank = Tank()
        MainGame.enemy = EnemyTank()
        :
            .GetEvent()
            MainGame.Window.fill(bg_color)
            MainGame.Window.blit(.GetTextSurface(%)())
            MainGame.MyTank.displayTank()
            MainGame.MyTank.tankstop:
                MainGame.MyTank.moveTank()
            EnemyTank MainGame.enemytanklist:
                EnemyTank.displayTank()
            pygame.display.update()

    (text):
        pygame.font.init()
        s = pygame.font.SysFont()
        s.render(texttext_color)


    ():
        ()
        ()



Bullet:
    ():
        ():
        ():
        Music:
    ():
        ():
        Wall:
    ():
        ():
        Destroy:
    ():
        ():
        __name__ == :
    MainGame().StartGame()


Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 2547楼

老师你好 我也出现类似的问题,敌方坦克都出现在左上角,看了好几百呢,没发现代码的问题。

'''新增功能:添加事件:
1.加载、创建、展示敌方坦克
pygame官方网站:www.pygame.org'''
import pygame
import time
import random
SCREEN_WIDTH = 700
SCREEN_HEIGHT = 500
BG_COLOR = pygame.Color(0,0,0)
TEXT_COLOR = pygame.Color(255,0,0)
class MainGame():
    window = None
    my_tank = None
    #创建存储敌方坦克的列表
    enemyTankList = []
    #创建存储敌方坦克的数量
    enemyTankCount = 5
    def __init__(self):
        pass
    #开始游戏
    def startGame(self):
        #加载主窗口
        #初始化窗口
        pygame.init()
        #设置窗口的大小及显示
        MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
        #初始化我方坦克
        MainGame.my_tank = Tank(350,350)
        #初始化敌方坦克,并将敌方坦克添加到列表
        self.creatEnemyTank()
        #设置窗口的标题
        pygame.display.set_caption('坦克大战1.03')
        while True:
            #使坦克移动的速度慢一点
            time.sleep(0.05)
            #给窗口设置填充色
            MainGame.window.fill(BG_COLOR)
            self.getEvent()     #获取事件
            MainGame.window.blit(self.getTextSurface('敌方剩余坦克数量:%d'%6),(10,10))
            #调用坦克显示的方法
            MainGame.my_tank.displayTank()
            #循环遍历敌方坦克列表,展示敌方坦克
            self.blitEnemyTank()
            #调用移动方法
            #如果坦克的开关开启,才可以移动
            if not MainGame.my_tank.stop:
                MainGame.my_tank.move()
            pygame.display.update()
    def creatEnemyTank(self):
        top = 100
        #循环生成敌方坦克
        for i in range(MainGame.enemyTankCount):
            left = random.randint(0,600)
            speed = random.randint(1,4)
            enemy = EnemyTank(left,top,speed)
            MainGame.enemyTankList.append(enemy)

    def blitEnemyTank(self):
        for enemyTank in MainGame.enemyTankList:
            enemyTank.displayTank()
    #结束游戏
    def endGame(self):
        print("谢谢使用,欢迎再来")
        exit()
    #获取事件
    def getEvent(self):
        eventList = pygame.event.get()
        #遍历事件
        for event in eventList:
            if event.type == pygame.QUIT:
                self.endGame()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    # 切换方向
                    MainGame.my_tank.direction = 'L'
                    #修改坦克的开关状态
                    MainGame.my_tank.stop = False
                elif event.key == pygame.K_RIGHT:
                    MainGame.my_tank.direction = 'R'
                    MainGame.my_tank.stop = False
                elif event.key == pygame.K_UP:
                    # 切换方向
                    MainGame.my_tank.direction = 'U'
                    MainGame.my_tank.stop = False
                elif event.key == pygame.K_DOWN:
                    MainGame.my_tank.direction = 'D'
                    MainGame.my_tank.stop = False
                elif event.key == pygame.K_SPACE:
                    print("发生")
            if event.type == pygame.KEYUP:
                #判断松开的键是方向键,才停止坦克移动
                if event.key == pygame. K_UP or event.key == pygame. K_DOWN \
                        or event.key == pygame. K_LEFT or event.key == pygame.K_RIGHT:
                    MainGame.my_tank.stop = True

    #左上角文字的绘制
    def getTextSurface(self,text):
        pygame.font.init()
        #查看所有字体名称
        #print(pygame.font.get_fonts())
        #获取字体font对象
        font = pygame.font.SysFont('kaiti',18)
        #绘制文字信息
        return font.render(text,True,TEXT_COLOR)
class Tank():
    #添加距离左边left,距离上边top
    def __init__(self,left,top):
        self.images = {'U': pygame.image.load('img/上.gif'),
                       'D': pygame.image.load('img/下.gif'),
                       'L': pygame.image.load('img/左.gif'),
                       'R': pygame.image.load('img/右.gif')}
        #方向
        self.direction='U'
        #根据方向获取图片
        self.image = self.images[self.direction]
        #根据图片获取区域
        self.rect = self.image.get_rect()
        #设置区域的left和top
        self.rect.left = left
        self.rect.top = top
        #速度决定移动的快慢
        self.speed=10
        #坦克移动的开关
        self.stop = True
    #移动
    def move(self):
        #判断坦克的方向来进行移动
        if self.direction == 'L':
            if self.rect.left > 0:
                self.rect.left -= self.speed
        elif self.direction == 'U':
            if self.rect.top > 0:
                self.rect.top -= self.speed
        elif self.direction == 'D':
            if self.rect.top + self.rect.height < SCREEN_HEIGHT:
                self.rect.top += self.speed
        elif self.direction == 'R':
            if self.rect.left + self.rect.height < SCREEN_WIDTH:
                self.rect.left += self.speed
    #射击
    def shot(self):
        pass
    #展示坦克的方法
    def displayTank(self):
        #获取展示的对象
        self.image = self.images[self.direction]
        #调用blit方式展示
        MainGame.window.blit(self.image,self.rect)
class MyTank(Tank):
    def __init__(self):
        pass
class EnemyTank(Tank):
    def __init__(self,left,top,speed):
        #加载图片集
        self.images = {'U':pygame.image.load('img/enemy1U.gif'),
                       'D':pygame.image.load('img/enemy1D.gif'),
                      'L':pygame.image.load('img/enemy1L.gif'),
                      'R':pygame.image.load('img/enemy1R.gif')}
        #方向,随机生成敌方坦克的方向
        self.direction=self.randDirection()
        #根据方向获取图片
        self.image = self.images[self.direction]
        #区域
        self.rect = self.image.get_rect()
        #对left、top进行赋值
        self.left = left
        self.top = top
        self.speed = speed
        self.flag = True
    def randDirection(self):
        num = random.randint(1,4)
        if num ==1:
            return 'U'
        elif num == 2:
            return 'D'
        elif num == 3:
            return 'L'
        elif num == 4:
            return 'R'

class Bullet():
    def __init__(self):
        pass
    #移动的方法
    def move(self):
        pass
    #展示子弹的方法
    def displayBullet(self):
        pass
class Wall():
    def __init__(self):
        pass
    #展示墙壁的方法
    def displayWall(self):
        pass
class Explode():
    def __init__(self):
        pass
    #展示爆炸效果的方法
    def displayExplode(self):
        pass
class Music():
    def __init__(self):
        pass
    #播放音乐的方法
    def play(self):
        pass
if __name__ == '__main__':
    MainGame().startGame()
    #MainGame().getTextSurface()


Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 2548楼

老师这个程序运行后,怎么没有菜单显示?哪里出问题了。

"""开发记事本软件的菜单"""
from tkinter import *
from tkinter.filedialog import *
from tkinter.colorchooser import *


class Application(Frame):

    def __init__(self,master=None):
        super().__init__(master)

        self.master = master
        self.textpad = None
        self.pack()
        self.createWidget()

    def createWidget(self):
        # 创建主菜单栏
        menubar = Menu(root)
        # 创建子菜单
        menuFile = Menu(menubar)
        menuEdit = Menu(menubar)
        menuHelp = Menu(menubar)
        # 将子菜单加入到主菜单栏
        menubar.add_cascade(label="文件(F)", menu=menuFile)
        menubar.add_cascade(label="编辑(E)", menu=menuEdit)
        menubar.add_cascade(label="帮助(H)", menu=menuHelp)
        # 添加菜单项
        menuFile.add_command(label="新建", accelerator="ctrl+n",command=self.test)
        menuFile.add_command(label="打开", accelerator="ctrl+o",command=self.test)
        menuFile.add_command(label="保存", accelerator="ctrl+s",command=self.test)
        menuFile.add_separator()  # 添加分割线
        menuFile.add_command(label="退出", accelerator="ctrl+q",command=self.test)

        # 将主菜单栏加到根窗口
        root["menu"] = menubar

        # 文本编辑区
        self.textpad = Text(root, width=50, height=30)
        self.textpad.pack()


    def test(self):
        pass



if __name__ == '__main__':
    root = Tk()
    root.geometry("450x300+200+300")
    root.title("百战程序员的简易记事本")
    app = Application(master=root)
    root.mainloop()


Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 2549楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637