python 游戏开发框架_Python开发 基于python实现坦克大战游戏
这篇文章主要为大家详细介绍了基于python实现坦克大战游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了python实现坦克大战游戏的具体代码,供大家参考,具体内容如下
游戏界面
pygame游戏引擎的安装
pip安装
windows + R --> cmd --> 命令行输入 pip install 模块名==版本号
pycharm中安装
File --> setting --> Project --> Project Interpreter --> 右侧 + install --> 搜索框输入pygame --> 下方
installPackage
面向对象分析
分析组成类实现框架的搭建(类的设计)
主逻辑类
坦克类
我方坦克
敌方坦克 子弹类
爆炸类
墙壁类
音效类
框架搭建import pygame
#主逻辑类
class MainGame():
def startGame(self):
pass
def gameOver(self):
pass
#基本坦克类
class BaseTank():
pass
#我方坦克类
class MyTank():
pass
#敌方坦克类
class EnemyTank():
pass
#子弹类
class Bullet():
pass
#爆炸类
class Explode():
pass
#墙壁类
class Wall():
pass
#音效类
class Audio():
pass
game = MainGame()
game.startGame()
展示主窗口import pygame
SCREEN_WIDTH = 900
SCREEN_HEIGHT = 550
#主逻辑类
class MainGame():
#游戏主窗口
window = None
def startGame(self):
#调用窗口初始化方法
pygame.display.init()
MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
pygame.display.set_caption('坦克大战v1.02')
while True:
#填充窗口背景色
MainGame.window.fill((0,0,0))
#刷新
pygame.display.update()
def gameOver(self):
pass
事件监听class MainGame():
#游戏主窗口
window = None
def startGame(self):
#调用窗口初始化方法
pygame.display.init()
MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
pygame.display.set_caption('坦克大战'+VERSION)
while True:
#填充窗口背景色
MainGame.window.fill((0,0,0))
#调用事件处理方法
self.getEvents()
#刷新
pygame.display.update()
#所有事件处理的方法
def getEvents(self):
#获取队列中所有事件,遍历事件,对type为QUIT以及KEYDOWN两种事件类型处理
eventList = pygame.event.get()
#遍历所有事件
for e in eventList:
if e.type == pygame.QUIT:
#调用游戏结束的方法
self.gameOver()
#如果事件类型为按下键盘按键
elif e.type == pygame.KEYDOWN:
#根据具体按键做对应处理
if e.key == pygame.K_UP:
print("向上移动")
elif e.key == pygame.K_DOWN:
print("向下移动")
elif e.key == pygame.K_LEFT:
print("向左移动")
elif e.key == pygame.K_RIGHT:
print("向右移动")
elif e.key == pygame.K_SPACE:
print("biubiu~~~")
# elif e.type == pygame.MOUSEMOTION:
# print(e.pos)
def gameOver(self):
#结束程序
exit()
显示我方坦克#我方坦克类
class MyTank(BaseTank):
def __init__(self,x,y):
super(MyTank, self).__init__()
#设置具体的图片集
self.images = {
'U':pygame.image.load('img/p1tankU.gif'),
'D':pygame.image.load('img/p1tankD.gif'),
'L':pygame.image.load('img/p1tankL.gif'),
'R':pygame.image.load('img/p1tankR.gif')
}
#我方坦克的初始方向
self.direction = 'U'
#设置坦克的图片
self.image = self.images[self.direction]
#先基于图像获取坦克的位置以及大小
self.rect = self.image.get_rect()
#修改坦克坐标,改成自定义位置
self.rect.centerx = x
self.rect.centery = y
def displayTank(self):
self.image = self.images[self.direction]
MainGame.window.blit(self.image,self.rect)
实现我方坦克的移动
坦克类中,实现移动方法def move(self):
#移动,基于速度在指定的方向进行移动
if self.direction == 'U':
if self.rect.centery > self.rect.height/2:
self.rect.centery ‐= self.speed
elif self.direction == 'D':
if self.rect.centery < SCREEN_HEIGHT ‐ self.rect.height/2:
self.rect.centery += self.speed
elif self.direction == 'L':
if self.rect.centerx > self.rect.height/2:
self.rect.centerx ‐= self.speed
elif self.direction == 'R':
if self.rect.centerx < SCREEN_WIDTH ‐ self.rect.height/2:
self.rect.centerx += self.speed
事件处理方法中新增移动处理#所有事件处理的方法
def getEvents(self):
#获取队列中所有事件,遍历事件,对type为QUIT以及KEYDOWN两种事件类型处理
eventList = pygame.event.get()
#遍历所有事件
for e in eventList:
if e.type == pygame.QUIT:
#调用游戏结束的方法
self.gameOver()
#如果事件类型为按下键盘按键
elif e.type == pygame.KEYDOWN:
#根据具体按键做对应处理
if e.key == pygame.K_UP:
print("向上移动")
MainGame.tank1.direction = 'U'
MainGame.tank1.move()
elif e.key == pygame.K_DOWN:
print("向下移动")
MainGame.tank1.direction = 'D'
MainGame.tank1.move()
elif e.key == pygame.K_LEFT:
print("向左移动")
MainGame.tank1.direction = 'L'
MainGame.tank1.move()
elif e.key == pygame.K_RIGHT:
print("向右移动")
MainGame.tank1.direction = 'R'
MainGame.tank1.move()
elif e.key == pygame.K_SPACE:
print("biubiu~~~")
优化移动方式
事件中新增坦克移动开关控制#所有事件处理的方法
def getEvents(self):
#获取队列中所有事件,遍历事件,对type为QUIT以及KEYDOWN两种事件类型处理
eventList = pygame.event.get()
#遍历所有事件
for e in eventList:
if e.type == pygame.QUIT:
#调用游戏结束的方法
self.gameOver()
#如果事件类型为按下键盘按键
elif e.type == pygame.KEYDOWN:
#根据具体按键做对应处理
if e.key == pygame.K_UP:
print("向上移动")
MainGame.tank1.direction = 'U'
#修改坦克运动状态
MainGame.tank1.stop = False
elif e.key == pygame.K_DOWN:
print("向下移动")
MainGame.tank1.direction = 'D'
MainGame.tank1.stop = False
elif e.key == pygame.K_LEFT:
print("向左移动")
MainGame.tank1.direction = 'L'
MainGame.tank1.stop = False
elif e.key == pygame.K_RIGHT:
print("向右移动")
MainGame.tank1.direction = 'R'
MainGame.tank1.stop = False
elif e.key == pygame.K_SPACE:
print("biubiu~~~")
主逻辑的循环中优化移动def startGame(self):
#调用窗口初始化方法
pygame.display.init()
MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
pygame.display.set_caption('坦克大战'+VERSION)
#调用创建我方坦克的方法
self.creatMyTank()
while True:
#填充窗口背景色
MainGame.window.fill((0,0,0))
#调用事件处理方法
self.getEvents()
#展示我方坦克
self.showMyTank()
if not MainGame.tank1.stop:
# 我方坦克移动
MainGame.tank1.move()
#刷新
pygame.display.update()
#新增,程序休眠,优化坦克移动速度
time.sleep(0.020)
实现敌方坦克的加载
完善敌方坦克类#敌方坦克类
class EnemyTank(BaseException):
#v1.07
def __init__(self,x,y):
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.randomDirection()
# 设置坦克的图片
self.image = self.images[self.direction]
# 先基于图像获取坦克的位置以及大小
self.rect = self.image.get_rect()
# 修改坦克坐标,改成自定义位置
self.rect.centerx = x
self.rect.centery = y
#v1.07生成坦克的随机方向
def randomDirection(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'
#v1.07将敌方坦克加入到窗口中
def displayTank(self):
self.image = self.images[self.direction]
MainGame.window.blit(self.image, self.rect)
主逻辑中实现敌方坦克的加载class MainGame():
#游戏主窗口
window = None
tank1 = None
#v1.07 新增存储敌方坦克的列表
enemy_tanklist = []
def startGame(self):
#调用窗口初始化方法
pygame.display.init()
MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
pygame.display.set_caption('坦克大战'+VERSION)
#调用创建我方坦克的方法
self.creatMyTank()
#v1.07调用创建敌方坦克的方法
self.creatEnemyTank()
while True:
#填充窗口背景色
MainGame.window.fill((0,0,0))
#调用事件处理方法
self.getEvents()
#展示我方坦克
self.showMyTank()
#v1.07调用展示敌方坦克的方法
self.showEnemyTank()
if not MainGame.tank1.stop:
# 我方坦克移动
MainGame.tank1.move()
#刷新
pygame.display.update()
#v1.06新增,程序休眠,优化坦克移动速度
time.sleep(0.020)
#创建我方坦克
def creatMyTank(self):
MainGame.tank1 = MyTank(SCREEN_WIDTH/2,SCREEN_HEIGHT/3*2)
#展示我方坦克
def showMyTank(self):
MainGame.tank1.displayTank()
#v1.07创建敌方坦克
def creatEnemyTank(self):
for i in range(ENEMM_TANK_COUNT):
num = random.randint(1,7)
etank = EnemyTank(100*num,150)
MainGame.enemy_tanklist.append(etank)
#v1.07展示敌方坦克
def showEnemyTank(self):
for etank in MainGame.enemy_tanklist:
etank.displayTank()
运行效果
python 游戏开发框架_Python开发 基于python实现坦克大战游戏相关推荐
- 基于Java的坦克大战游戏的设计与实现(论文+PPT+源码)
幻灯片1 基于Java的坦克大战游戏的设计与实现 幻灯片2 CONTENTS 1 4 设计工具与相关技术 详细设计 2 5 系统分析 结论 3 总体设计 幻灯片3 PPT模板下载:http://www ...
- Java练手项目2:基于Java的坦克大战游戏(学习Java必备!!!)
1.引言 随着社会和时代的进步,来自各个方面的压力让人没精打采,为了分解人们的压力,休养那变得疲顿的头脑和劳累的身心,特设计了坦克大战小游戏,游戏操作非常容易,只要将手指放在键盘上敲击相关的游戏键就可 ...
- 基于java的坦克大战游戏-计算机毕业设计
项目介绍 坦克游戏是在Eclipse环境下使用java编程.它的主要功能有:坦克能够四处移动,能够发射子弹打击敌人,敌人的坦克能够自由移动,能够产生模拟爆炸效果,能够产生障碍物,能够增长生命.本游戏有 ...
- 基于java的坦克大战游戏
坦克游戏是在Eclipse环境下使用java编程.它的主要功能有:坦克能够四处移动,能够发射子弹打击敌人,敌人的坦克能够自由移动,能够产生模拟爆炸效果,能够产生障碍物,能够增长生命.本游戏有游戏主窗体 ...
- java小组坦克大战游戏开发文档开发日志_java实现坦克大战游戏
本文实例为大家分享了java实现坦克大战游戏的具体代码,供大家参考,具体内容如下 一.实现的功能 1.游戏玩法介绍 2.自定义游戏(选择游戏难度.关卡等) 3.自定义玩家姓名 4.数据的动态显示 二. ...
- 基于java的坦克大战游戏的开发设计与实现-(毕业论文+毕业设计源码+答辩PPT).rar
随着计算机的普及以及对电子游戏的认识, 电子游戏已被越来越多的人选作放松. 娱乐的休闲方式: 电子游戏既不需要专门购买游戏器材, 也不需要宽阔的游戏场地, 只需要一台能独立完成任务的计算机即可, 它可 ...
- 基于java的坦克大战游戏系统毕业设计-5.0(论文设计+源码+PPT答辩).rar
随着计算机的普及以及对电子游戏的认识, 电子游戏已被越来越多的人选作放松. 娱乐的休闲方式: 电子游戏既不需要专门购买游戏器材, 也不需要宽阔的游戏场地, 只需要一台能独立完成任务的计算机即可, 它可 ...
- 基于Java的坦克大战游戏的设计与实现
游戏由服务器端和客户端两部分组成. 在服务器端,ServerModel类主要用来创建主机,ServerView类主要负责服务器端图形界面的面板信息的设置,ServerControler类处理来自服务器 ...
- python web开发框架 支持windows_基于Python的Web开发框架研究_曾浩
INDUSTRY 计算 机 与 信息 技术 2011 年 8 月 第 8 期 ( 总第 153 期 ) 1 前言 Python 是 一 种开 发 效 率较 高的 语言 , 因此 比较 适 合需求 快 ...
最新文章
- C笔记(2014-12备份)
- 计算机可以保研什么专业吗,【计算机专业推免】推免生是什么?成为推免生要达到那些要求?...
- 学习笔记之Iframe
- Android--面试题整理(二)
- UML学习笔记(三):运用面向对象思想
- 图像的抽线、抽丝、抽图 神马是alpha通道
- 文件上传的几个 - 示例
- 整理Android应用源代码分享
- 【最新版1909 (updated Jan 2020)】Windows10操作系统官方原版镜像
- 【EXCEL】 EXCEL VBA SQL UPDATE:操作必须使用一个可更新的查询
- 说说我们怎么数据驱动企业
- 树莓派-硬件基础GDIO管脚(5)
- 这是一个刚入行程序员的成长
- matlab如何在三维曲面上画线,如何在三维曲面上画线
- 【ELM预测】基于粒子群算法PSO优化极限学习机预测含Matlab源码
- Zookeeper与统一配置管理
- Red Hat6 Linux镜像文件,红帽 Red Hat Linux 系统镜像iso下载(汇总.百度云)
- 软件工程团队项目------Beijing Subway
- 大话数据结构 -- 查找
- FAL:Flash 抽象层的使用