这篇文章主要为大家详细介绍了基于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实现坦克大战游戏相关推荐

  1. 基于Java的坦克大战游戏的设计与实现(论文+PPT+源码)

    幻灯片1 基于Java的坦克大战游戏的设计与实现 幻灯片2 CONTENTS 1 4 设计工具与相关技术 详细设计 2 5 系统分析 结论 3 总体设计 幻灯片3 PPT模板下载:http://www ...

  2. Java练手项目2:基于Java的坦克大战游戏(学习Java必备!!!)

    1.引言 随着社会和时代的进步,来自各个方面的压力让人没精打采,为了分解人们的压力,休养那变得疲顿的头脑和劳累的身心,特设计了坦克大战小游戏,游戏操作非常容易,只要将手指放在键盘上敲击相关的游戏键就可 ...

  3. 基于java的坦克大战游戏-计算机毕业设计

    项目介绍 坦克游戏是在Eclipse环境下使用java编程.它的主要功能有:坦克能够四处移动,能够发射子弹打击敌人,敌人的坦克能够自由移动,能够产生模拟爆炸效果,能够产生障碍物,能够增长生命.本游戏有 ...

  4. 基于java的坦克大战游戏

    坦克游戏是在Eclipse环境下使用java编程.它的主要功能有:坦克能够四处移动,能够发射子弹打击敌人,敌人的坦克能够自由移动,能够产生模拟爆炸效果,能够产生障碍物,能够增长生命.本游戏有游戏主窗体 ...

  5. java小组坦克大战游戏开发文档开发日志_java实现坦克大战游戏

    本文实例为大家分享了java实现坦克大战游戏的具体代码,供大家参考,具体内容如下 一.实现的功能 1.游戏玩法介绍 2.自定义游戏(选择游戏难度.关卡等) 3.自定义玩家姓名 4.数据的动态显示 二. ...

  6. 基于java的坦克大战游戏的开发设计与实现-(毕业论文+毕业设计源码+答辩PPT).rar

    随着计算机的普及以及对电子游戏的认识, 电子游戏已被越来越多的人选作放松. 娱乐的休闲方式: 电子游戏既不需要专门购买游戏器材, 也不需要宽阔的游戏场地, 只需要一台能独立完成任务的计算机即可, 它可 ...

  7. 基于java的坦克大战游戏系统毕业设计-5.0(论文设计+源码+PPT答辩).rar

    随着计算机的普及以及对电子游戏的认识, 电子游戏已被越来越多的人选作放松. 娱乐的休闲方式: 电子游戏既不需要专门购买游戏器材, 也不需要宽阔的游戏场地, 只需要一台能独立完成任务的计算机即可, 它可 ...

  8. 基于Java的坦克大战游戏的设计与实现

    游戏由服务器端和客户端两部分组成. 在服务器端,ServerModel类主要用来创建主机,ServerView类主要负责服务器端图形界面的面板信息的设置,ServerControler类处理来自服务器 ...

  9. python web开发框架 支持windows_基于Python的Web开发框架研究_曾浩

    INDUSTRY 计算 机 与 信息 技术 2011 年 8 月 第 8 期 ( 总第 153 期 ) 1 前言 Python 是 一 种开 发 效 率较 高的 语言 , 因此 比较 适 合需求 快 ...

最新文章

  1. C笔记(2014-12备份)
  2. 计算机可以保研什么专业吗,【计算机专业推免】推免生是什么?成为推免生要达到那些要求?...
  3. 学习笔记之Iframe
  4. Android--面试题整理(二)
  5. UML学习笔记(三):运用面向对象思想
  6. 图像的抽线、抽丝、抽图 神马是alpha通道
  7. 文件上传的几个 - 示例
  8. 整理Android应用源代码分享
  9. 【最新版1909 (updated Jan 2020)】Windows10操作系统官方原版镜像
  10. 【EXCEL】 EXCEL VBA SQL UPDATE:操作必须使用一个可更新的查询
  11. 说说我们怎么数据驱动企业
  12. 树莓派-硬件基础GDIO管脚(5)
  13. 这是一个刚入行程序员的成长
  14. matlab如何在三维曲面上画线,如何在三维曲面上画线
  15. 【ELM预测】基于粒子群算法PSO优化极限学习机预测含Matlab源码
  16. Zookeeper与统一配置管理
  17. Red Hat6 Linux镜像文件,红帽 Red Hat Linux 系统镜像iso下载(汇总.百度云)
  18. 软件工程团队项目------Beijing Subway
  19. 大话数据结构 -- 查找
  20. FAL:Flash 抽象层的使用

热门文章

  1. ChatGPT 中文指南
  2. 钉钉的密聊消息会保存在服务器吗,钉钉密聊怎么保护客户的隐私?
  3. 软件测试架构师究竟干哪些工作?
  4. RNA 31. SCI文章临床蛋白质组肿瘤在线数据挖掘神器(CPTAC)
  5. vulnhub sp ike
  6. Focal and Global Knowledge Distillation for Detectors--FGD论文解读
  7. 保养皮肤的20种方法
  8. cmd 下mysql常用的数据库命令
  9. 简单python脚本 爬取杭州链家二手房 房价信息
  10. react withRouter