#coding=utf-8
'''
坦克大战游戏需求
1.项目中有哪些类
2.每个类中有哪些方法
1.坦克类(敌方坦克类,我方坦克类)【敌我坦克都继承坦克类】
射击
移动
显示坦克的方法
2.子弹类
移动
显示子弹的方法
3.墙壁类
属性:是否能通过
4.爆炸效果类
展示爆炸效果
5.音效类
播放音乐
6.主类
开始游戏
结束游戏
'''
'''
新增功能:
加载主窗口
可参考pygame官方网址:www.pygame.org
'''
'''
添加事件
1.点击关闭 关闭窗口
2.按键盘时候,判断按下的键位,分别对不同的按键做处理
'''
'''
新增功能:
左上角文字绘制:
左上角输出敌方坦克数量:6
'''
'''
新增功能:
加载我方坦克
'''
#导入pygame模块
import pygame
#设置主窗口大小 颜色(常量)
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
def __init__(self):#初始化方法
pass
#开始游戏方法
def startGame(self):
#加载主窗口
#初始化主窗口
pygame.display.init()
#显示窗口以及设置窗口大小
MainGame.window = pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT])#set_mod会返回Surface值 MainGame.window 接收返回的值 (大surface :MainGame.window)
#初始化我方坦克
MainGame.my_tank = Tank(350,250)
#设置窗口标题
pygame.display.set_caption('呢呢领导坦克大作战1.03')
#while循环 update使其一直显示
while True:
#给窗口设置填充颜色并一直显示
MainGame.window.fill(BG_COLOR)
#获取事件
self.getEvent()
#绘制文字(大surface调用小surface,小surface显示在大surface的10,10坐标处)
MainGame.window.blit(self.getTextSuface("呢呢注意,敌方坦克剩余数量%d"%6),(10,10))
#调用坦克显示方法
MainGame.my_tank.displayTank()
#持续刷新
pygame.display.update()
#结束游戏方法
def endGame(self):
print("呢呢再见,不要太远!")
exit()#退出
#左上角文字绘制方法
def getTextSuface(self,text):
#初始化字体模块
pygame.font.init()
#获取字体font对象
'''查看所有的字体名称(需在下方调用才可见)
print(pygame.font.get_fonts())'''
font = pygame.font.SysFont("kaiti",18)
#绘制文本文字信息
textSurface = font.render(text,True,Text_Color)#textSurface接收。已绘制的文本信息 抗锯齿 字体颜色
return textSurface#返回方法 (小surface:textSurface)
#获取事件方法
def getEvent(self):
#获取所有事件 返回eventList
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:
print("呢呢意向左,则坦克便向左")
elif event.key == pygame.K_RIGHT:
print("呢呢意向右,坦克则向右")
elif event.key == pygame.K_UP:
print("呢呢意向上,则坦克便向上")
elif event.key == pygame.K_DOWN:
print("呢呢意向下,则坦克向下")
class Tank():#坦克类
def __init__(self, left, top):#初始化方法(添加距离左边 距离上边的距离)
self.images={'U':pygame.image.load("img/xnyss.gif"),
'D':pygame.image.load("img/xnyss(d).gif"),
'L':pygame.image.load("img/xnyss(l).gif"),
'R':pygame.image.load("img/xnyss(r).gif"),
} #用字典来保存加载的图片 'UDLR为图片朝向'
#方向
self.direction='U'
#根据当前图片方向,获取需要的朝向的图片↓
self.image=self.images[self.direction]#(小surface)
#根据图片获取区域
self.rect=self.image.get_rect()
#设置区域left和top(Tank初始化里)
self.rect.left=left
self.rect.top=top
#移动方法
def move(self):
pass
#射击方法
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):#初始化方法
pass
#子弹类
class Bullet():
def __init__(self):#初始化方法
pass
#子弹移动方法
def move(self):
pass
#子弹显示方法
def deiplayBullet(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() 方法,调用startGame()
#MainGame().getTextSuface() #调用这个方法可查看有哪些字体
报错 : "C:\Program Files\Python37\python.exe" D:/Users/MM/PycharmProjects/gui/imgs/tank06.py
pygame 2.0.1 (SDL 2.0.14, Python 3.7.7)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "D:/Users/MM/PycharmProjects/gui/imgs/tank06.py", line 202, in <module>
MainGame().startGame()#MainGame() 方法,调用startGame()
File "D:/Users/MM/PycharmProjects/gui/imgs/tank06.py", line 73, in startGame
MainGame.my_tank = Tank(350,250)
File "D:/Users/MM/PycharmProjects/gui/imgs/tank06.py", line 129, in __init__
self.images={'U':pygame.image.load("img/xnyss.gif"),
FileNotFoundError: No such file or directory.
我有gif图片啊 为什么还报错
FileNotFoundError: No such file or directory.