1、我执行之后突然出现了一个fps的窗口
然后点击右上角的叉号才能进入自己创建的窗口,然后点击叉号 就捕捉不到自己的这个动作进行结束游戏的操作
2、这边捕捉自己的动作的时候,打印出来的动作不是一次,而是点击上键打印出来10个print内容
代码如下:
# -*- coding: utf-8 -*-
# @Time : 2021/7/27 7:49
# @Author : wl
# @File : Tank_game_04.py
import pygame
from pygame.examples.sprite_texture import img
_display = pygame.display
# 定义一个颜色变量(全局)
Color = pygame.Color(0, 0, 0)
COLOR_RED = pygame.Color(255, 0, 0)
version = 'V 1.0.6'
'''
V 1.0.6
官方开发文档:https://www.pygame.org/docs
新增功能
加载我方坦克(主坦克)
考虑点:
1、坦克实际上是一个图片,需要做的是,将图片加载到窗口
2、坦克可以上下左右转动(方向)
3、坦克出现的位置(左上角,x,y)(x,y)用元组表示,(left,top)表示据2个点之间的坐标
'''
# 主逻辑类
class MainGame():
# 游戏主窗口
window = None
screen_height = 500 # 高
screen_width = 800 # 宽
# 创建我方坦克
Tank_P1 = None
def __init__(self):
pass
# 开始游戏
def startGame(self):
# 初始化显示模块
_display.init()
# 创建窗口,加载窗口
MainGame.window = _display.set_mode([MainGame.screen_width, MainGame.screen_height])
# 创建我方坦克
MainGame.Tank_P1 = Tank(300, 450)
# 设置一下游戏标题
_display.set_caption('坦克大战' + version)
# self.getTextSurface('13')
# 界面刷新(让窗口持续 )
while True:
# 给窗口完成一个填充颜色
MainGame.window.fill(Color)
# 在循环中持续的完成事件的获取
self.getEvent()
# 将绘制文字得到的小画布贴到窗口中
MainGame.window.blit(self.getTextSurface('剩余坦克数量是:%d' % 5), (5, 5))
# 将我方坦克加入到窗口中
MainGame.Tank_P1.dispiayTank()
# 持续刷新
_display.update()
# 获取程序运行期间所有事件(鼠标事件,键盘事件)
def getEvent(self):
# 1、获取所有事件(看官方文档)
eventlist = pygame.event.get()
# 2、对事件进行判断处理(1、点击关闭按钮 2、按下键盘上的某个按钮)
for event in eventlist:
# 判断event.type是否是QUIT(退出),如果是退出的话,直接调用程序结束方法
if event.type == pygame.QUIT:
self.endgame()
# 判断事件类型是否是按键按下,如果是,继续判断按键是哪一个按键,来进行对应处理
elif 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('坦克向下掉头,移动')
elif event.key == pygame.K_SPACE:
print(11111111)
print('发射子弹')
print(22222222)
# 左上角文字绘制的功能
def getTextSurface(self, text):
# 1、字体初始化
pygame.font.init()
# 1、1 查看系统所支持的所有字体
# fontlist = pygame.font.get_fonts()
# print(fontlist)
# 2、选中一个合适的字体
# font = pygame.font.SysFont('字体名称',字号大小)
font = pygame.font.SysFont('kaiti', 18)
# 3、使用对应字体完成相关内容的绘制
textSurface = font.render(text, True, COLOR_RED)
return textSurface
# 下一步要做的事情是,把返回的小画布贴到窗口中的做上角,而且需要持续刷新
# 结束游戏
def endgame(self):
print('使用')
# 结束Python解释器
exit()
# 坦克类
class Tank():
def __init__(self, left, top): # left,top 代表坐标
# 将坦克这个图片放到对应的坐标中(不同的坐标具有不同的坦克图片)
# 坦克图片是要从文件夹中取得(从磁盘加载到的图片中获取)
self.images = {
# 'U': 从磁盘中加载文档,
'U': pygame.image.load('img/Tank-U.gif'),
'D': pygame.image.load('img/Tank-D.gif'),
'L': pygame.image.load('img/Tank-L.gif'),
'R': pygame.image.load('img/Tank-R.gif')
}
# 坦克默认的方向 UP
self.direction = 'U'
# 根据方向 来取对应的坦克图片 从images中取得
self.image = self.images[self.direction]
# 坦克所在的区域 rect->
self.rect = self.image.get_rect()
# 指定坦克初始位置,分别距x,y轴的位置
self.rect.left = left
self.rect.top = top
# 移动
def move(self):
pass
# 射击
def shot(self):
pass
# 展示坦克(将坦克这个surface绘制到窗口中 blit())反复展示
def dispiayTank(self):
# 1、重新设置坦克的图片
self.image = self.images[self.direction]
# 2、将坦克加入到窗口中
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 displayBullet(self):
pass
# 爆炸效果类
class Explode():
def __init__(self):
pass
# 展示爆炸效果方法
def displayExplode(self):
pass
# 墙壁类
class Wall():
def __init__(self):
pass
# 展示墙壁的方法
def displayWall(self):
pass
# 音效类
class Music():
def __init__(self):
pass
# 开始播放音乐
def play(self):
pass
MainGame().startGame()
其他问题我暂时没看出来
但是结束程序难道不应该用sys.exit()吗
这个需要导入sys,就像下面这样
import sys
def endgame(self):
print('使用')
# 结束Python解释器
sys.exit()