Python实现坦克大战

Python实现坦克大战

一、前言

前段时间,也就是国庆节。在寝室闲来无事,用pygame写了一个小游戏,就是标题写的《坦克大战》。这个游戏写了两个版本,第一个版本是按照书上的思想来写的,发现写到后面的时候代码太乱了。于是我又从头开始,用比较合理的面向对象思想重新写了一个版本。说比较合理也只是符合我自己的思想,所以难免会有一些不合理的设计,水平有限,希望各位读者能够包涵一下。

二、开发环境

我们先来看看我的开发环境,用的东西还是比较简单的:

作者:Zack

其中我还用了一些第三方模块,但是在游戏主体中没有使用,所以就先不介绍了。下面我们来看看游戏实现了些什么功能。

三、项目介绍

3.1 项目截图

我们主程序入口在main.py文件,在安装好pygame模块后就能直接运行。下面是运行截图:

下面是子弹击中墙壁的爆炸效果:

下面是多个敌方坦克的效果图:

我们再来看看项目的各个文件。

3.2 项目文件

下面是项目目录:

(1)resources

其中resources是资源文件,音频、图片等都在resources目录。而tools中提供了两个小工具,因为只是供个人临时使用的,这里不过多解释了。

(2)main.py

而main.py则是项目的主入口,代码很短:

from tank_war import TankWar

我们直接创建了TankWar的实例,然后调用run_game方法运行游戏。

(3)tank_war.py

tank_war.py中写了我们坦克大战游戏主体的模块,里面的TankWar类定义了游戏主体的一切行为。包括初始化屏幕、初始化pygame模块、创建敌方坦克、绘制地图、检测碰撞、监听事件等。

(4)sprites.py

在pygame中提供了一个sprite类用于创建有图像的物体。而sprites中定义的都是sprite的子类,因此也都是有图片的类。其中包括坦克基类、英雄类(我方坦克)、敌人类(敌方坦克)、子弹类、墙类等。

而各个类中定义了各自的行为,例如:坦克类有发射子弹的行为、移动的行为、爆炸的行为等。

(5)settings.py

settings.py中定义了一些设置信息,包括子弹的数量、子弹的速度、坦克的速度、地图信息、图片信息等。我们可以通过修改settings.py来调整游戏的一些设置,因为还没有写设置相关的操作,所以需要修改源码。

因为代码比较多,这里就不介绍代码了。游戏还要许多不足之处,后续会继续更新。项目已上传GitHub,欢迎各位来fork。今天就介绍到这里了~

项目地址:https://github.com/IronSpiderMan/TankWar

pygame文档地址:https://www.pygame.org/docs/

本文来源公众号:新建文件夹X,转载请标明出处。

本文分享自微信公众号 - ZackSock(ZackSock)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Python实现坦克大战 - HelloWorld