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 在上一篇文章中我们已经画出了自己的坦克,并且可以控制自己的坦克移动,我们继续接 ...
随机推荐
- SSH-Secure-Shell 3.2.9 build283版本,创建直接打开文件传输的快捷方式的方法
2019-12-31 16:21:23 版本信息: 在安装目录下新建快捷方式 目标填写:"D:\SSH-Secure-Shell\SshClient.exe" /f 图标选择,系统 ...
- P4392 [BOI2007]Sound 静音问题
---------------------- 链接:Miku ----------------------- 这道题本质上还是个st表,只要两个st表,然后对于每一个点,查询他开始的 长度为m的去年的 ...
- Visual Studio 2019新建Web项目
选择创建新项目 选择ASP.NET Web 应用程序,下一步 填好相关信息,位置是保存项目的位置,点击创建 创建你需要的项目项,我们这里选择空项目,点击创建 添加文件 右击项目名 -> 添加 - ...
- springboot打成war包并携带第三方jar包
1.修改打包方式为war <packaging>war</packaging> 2.添加第三方依赖的jar到pom 我的第三方jar包在resoueces目录下 ...
- 2018 IEEE极限编程大赛 题解
去年742,今年72,也算一种小小的进步. 明年前30(笑 1. Drawing Rooted Binary Trees 给定一个树的中序和前序的遍历,要求输出这棵树(包括空格的) #include ...
- 最新Idea激活码,持续更新
更新时间2020-01-10,亲测可用. 激活码老是失效,太麻烦,选择永久激活的方法,此方法,只针对Idea2019.2.1以及之前版本的. 附上链接: https://www.cnblogs.com ...
- linux命令su,sudo 使用和区别
1- sudo 与 su 两个命令的最大区别是: sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码.另外一个区别是其默认行为.sudo 命令只允许使用提升的权限运行单个命 ...
- 剑指offer-面试题28-对称的二叉树-二叉树递归
/* 题目: 判断给定的二叉树是否对称. */ /* 思路: 1.递归法. 2.基础条件:两棵树均为空为true:一棵树为空,一棵树不为空,为false:两棵树的根节点值不同,为false. 3.其它 ...
- nohup npm start &启动之后关闭终端程序没有后台运行
感谢:https://blog.csdn.net/nsj820/article/details/5862231 “在当shell中提示了nohup成功后,还需要按终端上键盘任意键退回到shell输入命 ...
- Selenium3+python自动化016-Selenium Grid
一.Selenium Grid介绍 1.概念 Selenium Grid组件专门用于远程分布式测试或并发测试,通过并发执行测试用例的方式可以提高测试用例的执行速度和效率,解决界面自动化测试执行速度过慢 ...