python--产品篇--游戏-坦克

文章目录

  • 准备
  • 代码
    • main.py
    • cfg.py
  • 效果

准备

下载
在这里插入图片描述

代码

main.py

import os
import cfg
import pygame
from modules import *



'''主函数'''
def main(cfg):
	# 游戏初始化
	pygame.init()
	pygame.mixer.init()
	screen = pygame.display.set_mode((cfg.WIDTH, cfg.HEIGHT))
	pygame.display.set_caption(cfg.TITLE)
	# 加载游戏素材
	sounds = {}
	for key, value in cfg.AUDIO_PATHS.items():
		sounds[key] = pygame.mixer.Sound(value)
		sounds[key].set_volume(1)
	# 开始界面
	is_dual_mode = gameStartInterface(screen, cfg)
	# 关卡数
	levelfilepaths = [os.path.join(cfg.LEVELFILEDIR, filename) for filename in sorted(os.listdir(cfg.LEVELFILEDIR))]
	# 主循环
	for idx, levelfilepath in enumerate(levelfilepaths):
		switchLevelIterface(screen, cfg, idx+1)
		game_level = GameLevel(idx+1, levelfilepath, sounds, is_dual_mode, cfg)
		is_win = game_level.start(screen)
		if not is_win: break
	is_quit_game = gameEndIterface(screen, cfg, is_win)
	return is_quit_game


'''run'''
if __name__ == '__main__':
	while True:
		is_quit_game = main(cfg)
		if is_quit_game:
			break

cfg.py

import os


'''字体'''
FONTPATH = os.path.join(os.getcwd(), 'resources/font/font.ttf')
'''图片'''
BULLET_IMAGE_PATHS = {
					  'up': os.path.join(os.getcwd(), 'resources/images/bullet/bullet_up.png'),
					  'down': os.path.join(os.getcwd(), 'resources/images/bullet/bullet_down.png'),
					  'left': os.path.join(os.getcwd(), 'resources/images/bullet/bullet_left.png'),
					  'right': os.path.join(os.getcwd(), 'resources/images/bullet/bullet_right.png')
					  }
ENEMY_TANK_IMAGE_PATHS = {
							'1': [os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_1_0.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_1_1.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_1_2.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_1_3.png')],
							'2': [os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_2_0.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_2_1.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_2_2.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_2_3.png')],
							'3': [os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_3_0.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_3_1.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_3_2.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_3_3.png')],
							'4': [os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_4_0.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_4_1.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_4_2.png'),
								  os.path.join(os.getcwd(), 'resources/images/enemyTank/enemy_4_3.png')]
						}
PLAYER_TANK_IMAGE_PATHS = {
							'player1': [os.path.join(os.getcwd(), 'resources/images/playerTank/tank_T1_0.png'),
										os.path.join(os.getcwd(), 'resources/images/playerTank/tank_T1_1.png'),
										os.path.join(os.getcwd(), 'resources/images/playerTank/tank_T1_2.png')],
							'player2': [os.path.join(os.getcwd(), 'resources/images/playerTank/tank_T2_0.png'),
										os.path.join(os.getcwd(), 'resources/images/playerTank/tank_T2_1.png'),
										os.path.join(os.getcwd(), 'resources/images/playerTank/tank_T2_2.png')]
						}
FOOD_IMAGE_PATHS = {
						'boom': os.path.join(os.getcwd(), 'resources/images/food/food_boom.png'),
						'clock': os.path.join(os.getcwd(), 'resources/images/food/food_clock.png'),
						'gun': os.path.join(os.getcwd(), 'resources/images/food/food_gun.png'),
						'iron': os.path.join(os.getcwd(), 'resources/images/food/food_iron.png'),
						'protect': os.path.join(os.getcwd(), 'resources/images/food/food_protect.png'),
						'star': os.path.join(os.getcwd(), 'resources/images/food/food_star.png'),
						'tank': os.path.join(os.getcwd(), 'resources/images/food/food_tank.png')
					}
HOME_IMAGE_PATHS = [os.path.join(os.getcwd(), 'resources/images/home/home1.png'),
					os.path.join(os.getcwd(), 'resources/images/home/home_destroyed.png')]
SCENE_IMAGE_PATHS = {
						'brick': os.path.join(os.getcwd(), 'resources/images/scene/brick.png'),
						'ice': os.path.join(os.getcwd(), 'resources/images/scene/ice.png'),
						'iron': os.path.join(os.getcwd(), 'resources/images/scene/iron.png'),
						'river1': os.path.join(os.getcwd(), 'resources/images/scene/river1.png'),
						'river2': os.path.join(os.getcwd(), 'resources/images/scene/river2.png'),
						'tree': os.path.join(os.getcwd(), 'resources/images/scene/tree.png')
					}
OTHER_IMAGE_PATHS = {
						'appear': os.path.join(os.getcwd(), 'resources/images/others/appear.png'),
						'background': os.path.join(os.getcwd(), 'resources/images/others/background.png'),
						'boom_dynamic': os.path.join(os.getcwd(), 'resources/images/others/boom_dynamic.png'),
						'boom_static': os.path.join(os.getcwd(), 'resources/images/others/boom_static.png'),
						'gameover': os.path.join(os.getcwd(), 'resources/images/others/gameover.png'),
						'logo': os.path.join(os.getcwd(), 'resources/images/others/logo.png'),
						'mask': os.path.join(os.getcwd(), 'resources/images/others/mask.png'),
						'protect': os.path.join(os.getcwd(), 'resources/images/others/protect.png'),
						'tip': os.path.join(os.getcwd(), 'resources/images/others/tip.png'),
						'gamebar': os.path.join(os.getcwd(), 'resources/images/others/gamebar.png')
					}
'''声音'''
AUDIO_PATHS = {
				'add': os.path.join(os.getcwd(), 'resources/audios/add.wav'),
				'bang': os.path.join(os.getcwd(), 'resources/audios/bang.wav'),
				'blast': os.path.join(os.getcwd(), 'resources/audios/blast.wav'),
				'fire': os.path.join(os.getcwd(), 'resources/audios/fire.wav'),
				'Gunfire': os.path.join(os.getcwd(), 'resources/audios/Gunfire.wav'),
				'hit': os.path.join(os.getcwd(), 'resources/audios/hit.wav'),
				'start': os.path.join(os.getcwd(), 'resources/audios/start.wav')
			}
'''屏幕'''
WIDTH = 630
HEIGHT = 630
BORDER_LEN = 3
GRID_SIZE = 24
PANEL_WIDTH = 150
TITLE = '坦克大战'
'''关卡'''
LEVELFILEDIR = os.path.join(os.getcwd(), 'modules/levels')

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/431177.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024-03-05

作业要求: 使用write 和 read 实现 文件夹拷贝功能,不考虑递归拷贝使用循环fork的形式。创建一条进程链,链条上总共有100个进程 要求:程序不崩溃 作业1:使用write 和 read 实现 文件夹拷贝功能,不考虑递归拷…

从零学习Linux操作系统 第三十一部分 ansible常用模块介绍

一、ansible运行模块的两种方式 Ad-Hoc方式 ##利用ansible命令直接完成管理,主要用于临时命令使用场景 playbook方式 ##ansible脚本,主要用于大型项目场景,需要前期的规划,相当于shell当中的脚本 二、如何查看模块帮助 ansible…

Java方法重载

重载 概念 重载就是在一个类中,有相同的函数名,但形参不同的函数 规则 方法名称必须相同参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)方法的返回值类型可以相同也可以不同仅仅返回类型不同不足以成为方法的重载 实…

【论文精读】Mask R-CNN

摘要 基于Faster RCNN,做出如下改变: 添加了用于预测每个感兴趣区域(RoI)上的分割掩码分支,与用于分类和边界框回归的分支并行。mask分支是一个应用于每个RoI的FCN,以像素到像素的方式预测分割掩码,只增加了很小的计…

微信小程序云开发教程——墨刀原型工具入门(Axure导入)

引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

计算机网络实验一 网线制作

实验目的与要求: 实验目的 了解以太网网线(双绞线)和制作方法 实验内容 了解网线和水晶头 学习网线制作方法 实验环境和要求 网线 水晶头 压线钳 剥线钳 网线测试器 方法、步骤: 步骤一 准备工具和材料 步骤二 剥掉双绞线的外…

【排序】详解归并排序

一、思想 归并排序的核心思想是分治法,即将大问题分解成小问题来解决,然后再将解决后的小问题的结果合并以解决原来的大问题。具体包括以下几个步骤: 分解(Divide):将原始数组不断地二分成更小的子数组&a…

使用Redis入门Golang

Golang,也被称为Go,近年来由于其简单性、效率和并发支持而获得了显著的关注。另一方面,Redis是一个强大的内存数据存储,擅长于缓存、会话存储和实时分析。将这两种技术结合起来,可以为各种用例提供可扩展和高效的解决方…

通过Apple Configurator 2导出iOS ipa包

通过Apple Configurator 2导出iOS ipa包 安装Apple Configurator 2 从Mac AppStore安装Apple Configurator 2 下载ipa 准备工作: 1、 电脑已经安装了Apple Configurator 2 2、 手机已经安装了目标软件 3、 Apple 账号已经下载过目标软件 打开后连接设备&#xf…

人脸高清算法GFPGAN之TensorRT推理

1. 综述 最近由于做数字人项目,采用的是wav2lip GFPGAN进行人脸面部高清,但GFPGAN模型本身比较大,所以想着使用TensorRT来代替原始的pth推理看看能否提升运行速度,于是便开始了这趟windows10之下进行GFPGAN的trt推理的折腾之旅。…

漫画手绘视频教程分享

下载地址: 漫画手绘教程: https://url83.ctfile.com/d/45573183-60305653-039aed?p7526 (访问密码: 7526)

网络编程的学习

思维导图 多路复用代码练习 select完成TCP并发服务器 #include<myhead.h> #define SER_IP "192.168.125.73" //服务器IP #define SER_PORT 8888 //服务器端口号int main(int argc, const char *argv[]) {//1、创建用于监听的套接字int sfd -1;s…

DolphinScheduler——介绍及架构设计

目录 一、DolphinScheduler介绍 1.1 概述 1.2 特性 1.2.1 简单易用 1.2.2 丰富的使用场景 1.2.3 High Reliability 1.2.4 High Scalability 1.3 名词解释 1.3.1 名词解释 1.3.2 模块介绍 二、DolphinScheduler架构原理 2.1 系统架构图 2.2 架构说明 2.2.1 Maste…

【中国算力大会主办】2024算法、高性能计算与人工智能国际学术会议(AHPCAI 2024)

【中国算力大会主办】2024算法、高性能计算与人工智能国际学术会议&#xff08;AHPCAI 2024&#xff09; 2024 International Conference on Algorithms, High Performance Computing and Artificial Intelligence 2024算法、高性能计算与人工智能国际学术会议&#xff08;AH…

软考中级-软件设计师备考的一些信息

备考资源补充 去年分享了如何备考软考中级-软件设计师及分析题的解题技巧&#xff1a;软考中级–软件设计师毫无保留的备考分享 文章中包含备考思路、备考资源和**解题技巧&#xff0c;**需要的请从上面的链接自行获取。 但有很多小伙伴说&#xff0c;之前分享的备考刷的视频…

AWS 认证报名考试流程

AWS认证的考试包括&#xff0c;可以申请线上或者线下考试。 考试类型 线上&#xff1a; 优点&#xff1a;方便快捷无需通勤&#xff0c;随时约随时考&#xff0c;基本上每天都可以 缺点&#xff1a;对环境要求较高&#xff0c;屋子里只能有自己&#xff0c;而且不能有其他声音…

Python+更改镜像源下载库+PyCharm+汉化+第一个项目配置

文章目录 一、Python二、更改镜像源下载库三、PyCharm四、汉化五、第一个项目配置 2024年3月5日 操作环境&#xff1a; Win11-23H2 Python-3.12.2 PyCharm-2023.3.4 一、Python https://www.python.org/ 点击Download&#xff0c;查看对应的版本&#xff08; prerelease…

一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读!

一本书讲透ChatGPT&#xff0c;实现从理论到实践的跨越&#xff01;大模型技术工程师必读 个人简介前言内容简介作者简介专家推荐读者对象购买链接直播预告参与方式 个人简介 &#x1f3d8;️&#x1f3d8;️个人主页&#xff1a;以山河作礼。 &#x1f396;️&#x1f396;️:…

如何管理系统中的敏感数据?

如何管理系统中的敏感数据&#xff1f; 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 如何在系统中管理敏感数据&#xff1f;下图列出了一系列指导原则。 什么是敏感数据&#xff1f; 个人身份信息 (PII)、健康信息、知识产权、财务…

算法分析与设计

1.1.1什么是算法 算法是求解问题的一系列步骤&#xff0c;用来将输入数据转换成输出结果&#xff0c;如果每一个算法对其每一个输入实列都能输出正确的结果并停止&#xff0c;则称它是正确的。一个正确的算法解决了给定的求解问题&#xff0c;不正确的算法对于某些输入来说根本…