这个只是初步的坦克大战,只有一个坦克,进行刷新的动作。线程类的操作不是太懂。唯一知道的就是不能再主线程里面使用sleep ,这样子的话,主线程就进入休眠的状态,不能进行时间的监听。

import pygame, sys
from pygame.locals import *
import threading
import timefont = ("华文行楷", 15)
RedColor = pygame.Color(255, 0, 0)
blackColor = pygame.Color(0, 0, 0)
whiteColor = pygame.Color(255, 255, 255)
greyColor = pygame.Color(150, 150, 150)
lightColor = pygame.Color(220, 220, 220)screen = pygame.display.set_mode((660, 660), 0, 32)# 位置初始化
class pos:def __init__(self, x, y):self.x = xself.y = y# 坦克的类所属
class Tank(object):def __init__(self, Pos, Direction):self.pos = Posself.direction = Direction# 画画 ,打印坦克
def pr():global direction# 根据方向,然后修改坦克位置,加一if direction == "right":NowPos.x += 1for item in Position:item.x += 1elif direction == "up":NowPos.y -= 1for item in Position:item.y -= 1elif direction == "down":NowPos.y += 1for item in Position:item.y += 1else:NowPos.x -= 1for item in Position:item.x -= 1t1 = threading.Timer(0.3, pr)t1.start()if NowPos.x > 30 or NowPos.x < 0:t1.cancel()gameover(screen)if NowPos.y > 30 or NowPos.y < 0:t1.cancel()gameover(screen)# 定义四种坦克的位置
Position = [pos(0, 0), pos(0, 1), pos(1, 0), pos(1, 1), pos(0, 2), pos(1, 2), pos(2, 1)
]
# 像右跑
RightPos = [pos(1, 1), pos(0, 0), pos(0, 1), pos(0, 2), pos(1, 0), pos(1, 2), pos(2, 1)
]
# 向左跑
LeftPos = [pos(1, 1), pos(0, 1), pos(1, 0), pos(1, 2), pos(2, 0), pos(2, 2), pos(2, 1)
]
# 向上跑
UpPos = [pos(1, 1), pos(0, 1), pos(1, 0), pos(2, 1), pos(0, 2), pos(1, 2), pos(2, 2)
]
# 向下跑
DownPos = [pos(1, 1), pos(0, 0), pos(1, 0), pos(2, 0), pos(0, 1), pos(1, 2), pos(2, 1)
]# 坦克运动的方向
direction = "right"# 坦克的现在所属位置
NowPos = pos(0, 0)# 修改坦克的方向
def change():i = 0if direction == "right":for item in Position:Position[i].x = RightPos[i].x + NowPos.xPosition[i].y = RightPos[i].y + NowPos.yi += 1elif direction == "up":for item in Position:Position[i].x = UpPos[i].x + NowPos.xPosition[i].y = UpPos[i].y + NowPos.yi += 1elif direction == "down":for item in Position:Position[i].x = DownPos[i].x + NowPos.xPosition[i].y = DownPos[i].y + NowPos.yi += 1else:for item in Position:Position[i].x = LeftPos[i].x + NowPos.xPosition[i].y = LeftPos[i].y + NowPos.yi += 1#  子弹的布局
# 子弹类的所属
class Bullet(object):def __init__(self, Pos, Direction):self.pos = Posself.direction = Directiondef prbullet(self):if self.direction == "right":self.pos.x += 1elif self.direction == "up":self.pos.y -= 1elif self.direction == "down":self.pos.y += 1else:self.pos.x -= 1btn1 = threading.Timer(0.2, self.prbullet)btn1.start()# 当子弹已经超过边框范围时,线程就自动结束if self.pos.x > 32 or self.pos.x < 0:btn1.cancel()if self.pos.y > 32 or self.pos.y < 0:btn1.cancel()# 子弹的数组
bullet = []# 游戏结束的场景设置
def gameover(playSurface):screen.fill(blackColor)gameOverFont = pygame.font.SysFont('arial', 72)gameOverSurf = gameOverFont.render('Game Over', True, greyColor)gameOverRect = gameOverSurf.get_rect()gameOverRect.midtop = (320, 125)playSurface.blit(gameOverSurf, gameOverRect)pygame.display.flip()time.sleep(5)pygame.quit()sys.exit()# 调控帧数的
def update():print("大家好")screen.fill(blackColor)for item in Position:pygame.draw.rect(screen, RedColor, Rect(item.x * 20, item.y * 20, 20, 20))for item in bullet:pygame.draw.rect(screen, RedColor, Rect(item.pos.x * 20, item.pos.y * 20, 20, 20))pygame.display.flip()# 每 0.05秒刷新页面t = threading.Timer(0.005, update)t.start()# 当坦克超过范围时,就游戏结束if NowPos.x > 30 or NowPos.x < 0:t.cancel()gameover(screen)if NowPos.y > 30 or NowPos.y < 0:t.cancel()gameover(screen)# 窗口的初始化
def main():global directionpygame.init()pygame.display.set_caption("坦克大战")pygame.display.flip()# 刷新坦克的信息pr()update()while True:for event in pygame.event.get():# 事件类的判断if event.type == QUIT:pygame.quit()sys.exit()#     判断是否按下了方向键elif event.type == KEYDOWN:if event.key == K_w or event.key == K_UP:if direction != "down":direction = "up"print("按下了w键")elif event.key == K_a or event.key == K_LEFT:if direction != "right":direction = "left"print("按下了a键")elif event.key == K_s or event.key == K_DOWN:if direction != "up":direction = "down"print("按下了s键")elif event.key == K_d or event.key == K_RIGHT:if direction != "left":direction = "right"print("按下了d键")elif event.key == K_j:if direction == "right":b1 = Bullet(pos(NowPos.x + 2, NowPos.y + 1), direction)elif direction == "left":b1 = Bullet(pos(NowPos.x, NowPos.y + 1), direction)elif direction == "up":b1 = Bullet(pos(NowPos.x + 1, NowPos.y), direction)elif direction == "down":b1 = Bullet(pos(NowPos.x + 1, NowPos.y + 2), direction)b1.prbullet()bullet.append(b1)# 每次按键后,修改坦克的方向change()# 主函数入口
if __name__ == "__main__":main()

python 中的坦克大战0.1版本相关推荐

  1. 运用Python+Pygame开发坦克大战游戏_版本V1.01

    这里写目录标题 一.项目整体说明 二.pygame下载方式 三.项目文件 1.坦克大战_框架_1.py 2.坦克大战_开始游戏_窗口设置_2.py 3.坦克大战_事件检测_3.py 4.坦克大战_基本 ...

  2. Python小游戏-坦克大战(tank war)

    Python小游戏-坦克大战(tank war) 前言 这款游戏一直都是我很喜欢的游戏,很童年,太经典啦!也很好玩,所以我来做一做这款游戏. 开发工具 python版本:3.7.3 相关模块:pyga ...

  3. 用 Python 写个坦克大战

    坦克大战是一款策略类的平面射击游戏,于 1985 年由 Namco 游戏公司发布,尽管时至今日已经有了很多衍生类的游戏,但这款游戏仍然受到了相当一部分人的欢迎,本文我们看一下如何使用 Python 来 ...

  4. python 全解坦克大战 辅助类 附完整代码【雏形】

    我正在博客之星评选,欢迎投票给我 会从投票人中抽奖机械键盘+书,中了会私聊地址 投票连接是:https://bbs.csdn.net/topics/603955346 投票连接是:https://bb ...

  5. python趣味编程-坦克大战游戏

    在上一期我们用Python实现了一个简单的计算器的游戏,这一期我们继续使用Python实现一个简单的坦克大战游戏,让我们开始今天的旅程吧~ 简单 2D 游戏 Python 中的简单 2D 游戏是用Py ...

  6. 17 - python——简单的坦克大战(附源码)

    基于对面向对象编程的思想完成简单的坦克大战游戏.主要目的锻炼面相对象编程思想 同样的在使用python进行游戏编写时需要安装pygame模块 安装方法: pycharm安装方式:File --> ...

  7. 【项目实战】Python —— 一:坦克大战

    版权声明:本文为博主原创文章,未经博主允许不得转载. 文章目录 一.项目步骤 1.1 结构图 1.2 代码实现 1.2.1 01_坦克大战.py 1.2.2 02_炸弹爆炸.py 1.2.2.1 &l ...

  8. python中的模块_python3.0中重载模块

    在python中,每一个以 .py结尾的Python文件都是一个模块.其他的文件可以通过导入一个模块来读取该模块的内容.导入从本质上来讲,就是载入另一个文件,并能够读取那个文件的内容.一个模块的内容通 ...

  9. 【首届Google暑期大学生博客分享大赛——2010 Andriod篇】我理想中的坦克大战游戏

      在我们这些80后的儿时记忆里,肯定少不了坦克大战这个游戏. 我现在希望在Android手机上也能够有一款这样的游戏,但是它应该是多人互动的游戏,手机和电脑都可以互动的游戏. 具体功能: 1.多人通 ...

最新文章

  1. linux 文本处理 awk 几个特殊的内置变量
  2. sql 时间范围查询_Excel中使用SQL查询,单元格范围最多支持65536行?
  3. 三个打印函数printf()/sprintf()/snprintf()区别
  4. 复现经典:《统计学习方法》第13章 无监督学习概论
  5. linux新手入门必看
  6. Magicodes.IE基础教程之导出Pdf
  7. npm 引用子项目模块_Java / Web项目中的NPM模块Browser-Sync
  8. php 替换alt,PHP 实现自动添加或者替换 内容的IMG标签的 alt title 属性
  9. [hiho1160] 攻城略地
  10. 一区期刊影响因子 2018 2019
  11. 2021百度之星报名开启 特设“小星星”奖项鼓励少年AI人才
  12. 一阶惯性加纯滞后模型matlab代码,基于西门子工业软件的仿真系统设计-一阶惯性加纯滞后对象 - 百度(精)...
  13. mysql禁用ipv6_linux配置禁用启用IPv6
  14. (c++ 遗传算法解决TSP问题)不是吧,这就是遗传算法吗?爱了爱了
  15. 巨杉数据库5.0携手中信网科助推金融业创新发展
  16. 2023移动云大会 | “六大”服务承诺 全力做优“心级服务”
  17. new bing聊天机器人免翻命令行使用--大佬逆向工程api
  18. 达梦数据库企业管理器(DEM)搭建
  19. java正则中REGEX = [\u4e00-\u9fa5]+是什么意思
  20. 十进制到二进制的数制转换

热门文章

  1. Mac安装iproute2/dig/traceroute
  2. GPUimage 遇到的崩溃及问题
  3. PDF转换为其他格式的方法
  4. 微信公众号发送小程序卡片_微信公众号里怎么添加小程序-如何在微信[[公众号]]添加小程序卡片-微信关联小程序...
  5. ubuntu 安装 virt-manager 虚拟机
  6. gitee创建ssh公钥
  7. python封装sql脚本_pymysql的简单封装代码实例
  8. python读二进制文件博客园_python二进制读写文件
  9. python中的rt_TensorRT学习总结
  10. 10年老电脑如何提速_2020年10月和双十一轻薄本/轻薄型笔记本电脑如何挑选?内含轻薄本/轻薄型笔记本电脑推荐!...