Python开发坦克大战
Python不仅能开发网站,爬虫数据分析等,他其实也可以写游戏,接下来就给大家分享下坦克大战的代码:
PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
import pygame
import time
import random
from pygame.sprite import Sprite
SCREEN_WIDTH=700
SCREEN_HEIGHT=500
BG_COLOR=pygame.Color(0, 0, 0)
TEXT_COLOR=pygame.Color(255, 0, 0)
class BaseItem(Sprite):
def __init__(self, color, width, height):
# Call the parent class (Sprite) constructor
pygame.sprite.Sprite.__init__(self)
class MainGame():
window = None
my_tank = None
#存储坦克列表
enemyTankList = []
enemyTankCount = 5
myBulletList = []
enemyBulietList = []
explodeList=[]
def __init__(self):
pass
def startGame(self):
print("start game")
pygame.display.init()
MainGame.window=pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT])
pygame.display.set_caption("坦克大战")
MainGame.my_tank = Tank(350, 250)
#初始化敌方坦克
self.CreateEnemyTank()
while True:
time.sleep(0.003)
#获取事件
MainGame.window.fill(BG_COLOR)
self.getEvent()
MainGame.window.blit(self.getTextSuface("敌方坦克数量%d"%len(MainGame.enemyTankList)),(10,10))
MainGame.my_tank.displayTank()
self.blitMyBullet()
self.blitEnemyTank()
self.blitEnemyBuliet()
self.blitExplode()
if not MainGame.my_tank.stop :
MainGame.my_tank.move()
pygame.display.update()
pygame.display.flip()
def CreateEnemyTank(self):
top = 100
for i in range(MainGame.enemyTankCount):
left = random.randint(0,600)
speed = 1
enemy= EnemyTank(left, top , speed)
MainGame.enemyTankList.append(enemy)
def blitEnemyTank(self):
for et in MainGame.enemyTankList:
if et.alive:
et.displayTank()
et.randMove()
eb = et.shot()
if eb :
MainGame.enemyBulietList.append(eb)
else:
MainGame.enemyTankList.remove(et)
def blitMyBullet(self):
for myBullet in MainGame.myBulletList:
if myBullet.alive:
myBullet.displayBullet()
myBullet.move()
myBullet.myBullet_hit_enemyTank()
else:
MainGame.myBulletList.remove(myBullet)
def blitEnemyBuliet(self):
for eb in MainGame.enemyBulietList:
if eb.alive:
eb.displayBullet()
eb.move()
else:
MainGame.enemyBulietList.remove(eb)
def blitExplode(self):
for explode in MainGame.explodeList:
if explode.live :
explode.displayExplode()
else:
MainGame.explodeList.remove(explode)
def endGame(self):
print("exit")
exit()
#左上角文字
def getTextSuface(self,text):
pygame.font.init()
#print(pygame.font.get_fonts())
font = pygame.font.SysFont('kaiti',18)
txt = font.render(text, True, TEXT_COLOR)
return txt
def getEvent(self):
#获取所有的事件
eventList= pygame.event.get()
for event in eventList:
if event.type == pygame.QUIT:
self.endGame()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
print("Key LEFT")
MainGame.my_tank.direction='L'
MainGame.my_tank.stop = False
#MainGame.my_tank.move()
elif event.key == pygame.K_RIGHT:
print("Key RIGHT")
MainGame.my_tank.direction = 'R'
MainGame.my_tank.stop = False
#MainGame.my_tank.move()
elif event.key == pygame.K_UP:
print("Key UP")
MainGame.my_tank.direction = 'U'
MainGame.my_tank.stop = False
#MainGame.my_tank.move()
elif event.key == pygame.K_DOWN:
print("Key DOWN")
MainGame.my_tank.direction = 'D'
MainGame.my_tank.stop = False
#MainGame.my_tank.move()
elif event.key == pygame.K_SPACE:
print("Fire")
myBullet = Bullet(MainGame.my_tank)
MainGame.myBulletList.append(myBullet)
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
MainGame.my_tank.stop = True
class Tank(BaseItem):
def __init__(self, left, top):
self.images = {
'U': pygame.image.load("imgs/p1tankU.gif"),
'D': pygame.image.load('imgs/p1tankD.gif'),
'L': pygame.image.load('imgs/p1tankL.gif'),
'R': pygame.image.load('imgs/p1tankR.gif')
}
self.direction = 'D'
self.image = self.images[self.direction]
self.rect = self.image.get_rect()
self.rect.left = left
self.rect.top = top
self.stop = True
self.speed = 1
def move(self):
if self.direction == 'L':
if self.rect.left >0 :
self.rect.left -= self.speed
elif self.direction == 'U':
if self.rect.top > 0:
self.rect.top -= self.speed
elif self.direction == 'D':
if self.rect.top +self.rect.height <SCREEN_HEIGHT :
self.rect.top += self.speed
elif self.direction == 'R':
if self.rect.left + self.rect.width < SCREEN_WIDTH:
self.rect.left += self.speed
def shot(self):
num = random.randint(1,1000)
if num < 7 :
return Bullet(self)
def displayTank(self):
self.image = self.images[self.direction]
MainGame.window.blit(self.image,self.rect)
class MyTank(Tank):
def __init__(self):
pass
class EnemyTank(Tank):
def __init__(self,left,top,speed):
self.images={
'U': pygame.image.load("imgs/enemy1U.gif"),
'D': pygame.image.load('imgs/enemy1D.gif'),
'L': pygame.image.load('imgs/enemy1L.gif'),
'R': pygame.image.load('imgs/enemy1R.gif')
}
self.direction = self.randDirection()
self.image=self.images[self.direction]
self.rect = self.image.get_rect()
self.rect.left = left
self.rect.top = top
self.speed = speed
self.flag = True
self.setp = 10
self.alive = True
def randDirection(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'
def randMove(self):
if self.setp <= 0:
self.direction = self.randDirection()
self.setp = random.randint(60,140)
else:
self.move()
self.setp -= 1
class Bullet(BaseItem):
def __init__(self,tank):
self.image = pygame.image.load("imgs/enemymissile.gif")
self.direction = tank.direction
self.rect = self.image.get_rect()
if self.direction == 'U':
self.rect.left = tank.rect.left + (tank.rect.width-self.rect.width)/2
self.rect.top = tank.rect.top - self.rect.height
elif self.direction == 'D':
self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2
self.rect.top = tank.rect.top + tank.rect.height
elif self.direction == 'L':
self.rect.left = tank.rect.left - self.rect.width / 2 - self.rect.width / 2
self.rect.top = tank.rect.top + tank.rect.width / 2 - self.rect.width / 2
elif self.direction == 'R':
self.rect.left = tank.rect.left + tank.rect.width
self.rect.top = tank.rect.top + tank.rect.width / 2 - self.rect.width / 2
self.speed = 2
self.alive = True
def move(self):
if self.direction == 'U':
if self.rect.top > 0:
self.rect.top -= self.speed
else:
self.alive=False
elif self.direction == 'R':
if self.rect.left + self.rect.width < SCREEN_WIDTH:
self.rect.left += self.speed
else:
self.alive=False
elif self.direction == 'D':
if self.rect.top + self.rect.height < SCREEN_HEIGHT:
self.rect.top += self.speed
else:
self.alive=False
elif self.direction == 'L':
if self.rect.left > 0:
self.rect.left -= self.speed
else:
self.alive=False
def displayBullet(self):
MainGame.window.blit(self.image,self.rect)
print(self.rect.left)
print(self.rect.top)
def myBullet_hit_enemyTank(self):
for enemyTank in MainGame.enemyTankList:
if pygame.sprite.collide_rect(enemyTank,self):
enemyTank.alive = False
self.alive = False
explode = Explode(enemyTank)
#displayExplode()
MainGame.explodeList.append(explode)
class Wall():
def __init__(self):
pass
def display(self):
pass
class Explode():
def __init__(self, tank):
self.rect= tank.rect
self.images=[
pygame.image.load("imgs/blast0.gif"),
pygame.image.load("imgs/blast1.gif"),
pygame.image.load("imgs/blast2.gif"),
pygame.image.load("imgs/blast3.gif"),
pygame.image.load("imgs/blast4.gif"),
]
self.step = 0
self.image = self.images[self.step]
self.live = True
def displayExplode(self):
if self.step < len(self.images):
self.image = self.images[self.step]
self.step += 1
MainGame.window.blit(self.image,self.rect)
else:
self.live = False
self.step = 0
class Music():
def __init__(self):
pass
def play(self):
pass
if __name__ == '__main__':
MainGame().startGame()
以上就是本次分享。另外很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF等】需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
Python开发坦克大战的更多相关文章
- 手把手教你用Python实现“坦克大战”,附详细代码!
小时候玩的“坦克大战”,你还记得吗? 满满的回忆 ! 今天,我们使用Python以及强大的第三方库来实现一个简单的坦克大战游戏. 整体效果 环境依赖 python3.7 pygame1.9.6 ...
- 【SIKIA计划】_07_Unity3D游戏开发-坦克大战笔记
[新增分类][AudioClips]音频剪辑[AudioMixers]音频混合器[Editor][Fonts]字体[Materials]材质[Models]模型[Standard Assets] [渲 ...
- 简易坦克大战python版
#! /usr/bin/env python # -*- coding:utf8 -*- ''' *author:wasua *purpose:学习python语言,其中的类以及pygame应用 ...
- Python之游戏开发-飞机大战
Python之游戏开发-飞机大战 想要代码文件,可以加我微信:nickchen121 #!/usr/bin/env python # coding: utf-8 import pygame impor ...
- 用 Python 写个坦克大战
坦克大战是一款策略类的平面射击游戏,于 1985 年由 Namco 游戏公司发布,尽管时至今日已经有了很多衍生类的游戏,但这款游戏仍然受到了相当一部分人的欢迎,本文我们看一下如何使用 Python 来 ...
- Python+Pygame开发太空大战/飞机大战完整游戏项目(附源代码)
项目名称:太空大战 开发环境:Python3.6.4 第三方库:Pygame1.9.6 代码编辑器:Sublime Text 先来看一下游戏画面吧! 游戏画面动态且丰富哦! 需求分析 利用Pyt ...
- [置顶] 小强的HTML5移动开发之路(9)——坦克大战游戏3
上一篇我们创建了敌人的坦克和自己的坦克,接下来就应该让坦克发子弹了,我们下面来看一下如何让我们的坦克发出子弹. 前面我们用面向对象的思想对Tank进行了封装,又利用对象冒充实现了我们的坦克和敌人的坦克 ...
- cocos2d-x游戏开发系列教程-坦克大战游戏启动界面的编写
用前面介绍的方法,创建一个cocos2d-x项目,可以看到新项目内容如下图:
- 小强的HTML5移动开发之路(8)——坦克大战游戏2
来自:http://blog.csdn.net/cai_xingyun/article/details/48629015 在上一篇文章中我们已经画出了自己的坦克,并且可以控制自己的坦克移动,我们继续接 ...
随机推荐
- PS切图工具
缓存设置: 编辑-首选项-暂存盘 改完除了C盘之外的其他盘 单位设置: 编辑-首选项-单位与标尺 将单位修改成像素 PS预设: 工具 (窗口-工具) 标尺 (视图-标尺) 图层 (窗口-图层 ...
- SWIG 3 中文手册——10. 参数处理
目录 10 参数处理 10.1 typemaps.i 库 10.1.1 引言 10.1.2 输入参数 10.1.3 输出参数 10.1.4 输入 / 输出参数 10.1.5 使用不同的名称 10.2 ...
- go 网络编程
网络编程 tcp 1.tcp客户端服务端实现 server/server.go package main import ( "fmt" "net" ) /* t ...
- maven 3.6.3 安装及配置
1.下载 下载地址:http://maven.apache.org/download.cgi 2.配置环境变量 解压压缩包到磁盘. 注意:各种系统配置环境变量位置不一样,已windows10为例. 我 ...
- 转载 selenium_对浏览器操作、鼠标操作等总结
https://www.jianshu.com/p/7a4414082ce2 查看环境conda info --env 激活环境conda activate machine 路径改成H:cd H:\p ...
- 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase微博案例
实验目的 熟悉hbase表格设计的方法 熟悉hbase的javaAPI 通过API理解掌握hbase的数据的逻辑视图 了解MVC的服务端设计方式 实验原理 上次我们已经初步设计了学生选课案例的,具体功 ...
- 如何使用GitHub中和别人合作开发一个项目
第一步:找到别人在GitHub的项目,点击Fork跳转到自己的GitHub 第二步:跳转到自己页面后进行克隆下载 第三步:在自己的idea中修改完毕后,进行推送将自己GitHub的项目进行修改 第四步 ...
- spring boot中通用应用程序属性
可以在application.properties文件内部application.yml,文件内部或命令行开关中指定各种属性.本附录提供了常见的Spring Boot属性列表以及对使用它们的基础类的引 ...
- 小白的java学习之路 “ 二重循环”
二重循环: 1.什么是二重循环: 一个循环体内又包含另一个完整的循环结构 语法: while(循环条件1) { //循环操作1 while(循环条件2) { //循环操作2 } } do { //循环 ...
- ZedGraph5.1.5源码分析去掉鼠标悬浮内容闪烁问题(附源码下载)
场景 在使用ZedGraph绘制曲线图时,将鼠标悬浮时内容闪烁,且频率很高. 找到其源码,发现不论鼠标移动的范围大小,甚至乎不论鼠标是否移动,都要刷新一次Tooltip. 注: 博客主页:https: ...