• Fruits
    了解作者
  • Python
    开发工具
  • 806KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 4
    下载次数
  • 2018-12-31 13:59
    上传日期
通过编写简单的python语句,实现了简单的坦克小游戏,能够完成一定的功能
坦克大战.zip
  • 坦克大战
  • 封面设计.png
    804.5KB
  • 大作业4.py
    10.1KB
内容介绍
from turtle import * import math from random import randint def load_sound(): """加载声音与播放背景音乐""" sound_normal = True explode_sound= None shoot_sound = None try: import pygame pygame.mixer.init() pygame.mixer.music.load("音效/newgrounds.wav") pygame.mixer.music.play(-1,0) explode_sound = pygame.mixer.Sound("音效/Boom.wav") shoot_sound = pygame.mixer.Sound("音效/榴弹炮.wav") except: print("播放背景音乐或加载音频出现错误.") sound_normal = False """返回声音是否正常,爆炸声,射击声三个对象""" return sound_normal,explode_sound,shoot_sound def init_screen(): """初始化屏幕,注册坦克形状""" screen = Screen() screen.setup(width,height) p = ((0,0),(50,0),(50,80),(10,80),(10,150),(-10,150),(-10,80),(-50,80),(-50,0)) screen.addshape("tank",p)#注册tank形状 screen.bgcolor("blue")#屏幕背景色 screen.title(gametitle)#设定屏幕标题 screen.colormode(255)#设定颜色模式 screen.delay(0)#屏幕延时为0 screen.bgpic("封面设计.png")#封面加载 """添加爆炸造型图片列表到形状列表""" explosion_images = ["explosion-" + str(i) + ".gif"for i in range(17)] [screen.addshape(image) for image in explosion_images ]#注册爆炸造型到形状列表 return screen,explosion_images class Bullet(Turtle): """炮弹类,炮弹生成后会自己移动,直到碰到边缘。""" def __init__(self,x,y,h): Turtle.__init__(self,visible=False,shape="circle") self.dead = False self.goto(x,y) self.setheading(h) self.showturtle() self.move() def move(self): """炮弹移动,碰到边缘就‘死亡’""" self.fd(10) if self.bumpedge():self.dead = True if self.dead: self.hideturtle() del self else: screen.ontimer(self.move,10) def bumpedge(self): """碰到边缘返回True,否则False""" return abs(self.xcor())>width/2 or abs(self.ycor())>height/2 class NPCtank(Turtle): deadcount = 0#统计数量的类变量 def __init__(self,mytank,my_bullet): """敌方坦克的敌人就是mytank,my_bullet是我方炮弹列表""" Turtle.__init__(self,shape='tank',visible=False) self.shapesize(0.3,0.3) color1 = randint(0,255),randint(0,255),randint(0,255) self.color("black",color1) self.penup() self.setheading(randint(1,360)) self.fd(randint(200,height*0.4))#配合随机方向让npc随机移到一个地方     self.enemy = mytank self.enemy_bullet = my_bullet self.face_enemy()#一出生就面向mytank self.dead = False self.move() def move(self): """移动npc坦克,有时会面向mytank""" self.fd(1) self.shoot()# 设置一定的机率发射炮弹 self.bumpedge()# 碰到屏幕边缘就向后转 self.bumpenemy()# 碰到敌人(mytank)后会爆炸,mytank当然也会爆炸,游戏结束 self.bumpbullet()# 碰到我方炮弹就爆炸 if self.dead: self.hideturtle()#死了后,显示爆炸效果 bomb = Bomb(self.xcor(),self.ycor(),explosion_images) NPCtank.deadcount = NPCtank.deadcount + 1 info ="当前击毁敌方坦克数:" + str(NPCtank.deadcount) top_turtle.print(info) if NPCtank.deadcount == tanksamount: bottom_turtle.print("游戏成功结束,作者:李兴球") else: screen.ontimer(self.move,10) def bumpenemy(self): """碰到敌人就两方都死亡,npc的敌人就是mytank""" r = self.distance(self.enemy) if r<20 and not self.enemy.dead: self.hideturtle() self.dead = True self.enemy.hideturtle() self.enemy.dead = True #mytank爆炸,我方坦克阵亡,在死的位置上显示爆炸效果           x = self.enemy.xcor() y = self.enemy.ycor() Bomb(x,y,explosion_images) bottom_turtle.print("突围失败! 作者:李兴球") def bumpbullet(self): """碰到我方炮弹就死亡""" for b in self.enemy_bullet: r = self.distance(b) if r <20: self.hideturtle() self.dead = True break def bumpedge(self): """bumpedge就掉头""" faraway = abs(self.xcor())>width/2 or abs(self.ycor())>height/2 if faraway:self.right(180)#掉转头 def face_enemy(self): """面向敌人,NPC的敌人就是mytank,可以增加代码让转向更平滑""" self.setheading(self.towards(self.enemy.position())) def shoot(self): """敌坦克的发射方法,同时把‘死了’的炮弹移去""" if randint(0,100) == 1:#有时间会面向mytank self.face_enemy() if randint(0,20) ==1 : b = Bullet(self.xcor(),self.ycor(),self.heading())#生成炮弹 enemybullet.append(b)#添加到敌方炮弹列表 #移去dead为True的敌方炮弹 for b in enemybullet: if b.dead :enemybullet.remove(b) class Bomb(Turtle): """炸弹类,它实例化后,自己就会切换造型,从而“爆炸”""" def __init__(self,x,y,images): """x,y是爆炸的坐标,images是已注册到屏幕形状列表的造型图片""" Turtle.__init__(self,visible=False) self.penup() self.goto(x,y) self.index = 0#造型索引编号从0开始 self.amount = len(images)#造型数量 self.images = images#造型列表self.showturtle()#显示 if snd_normal: explode_sound.play() self.next_costume()#利用屏幕的定时器功能使之循环一定的次数 def next_costume(self): if self.index < self.amount:#小于总数量就换造型        self.shape(self.images[self.index])#从列表取指定索引的图片,设为海龟的形状 self.index = self.index + 1 screen.ontimer(self.next_costume,50) else: self.hideturtle() del self def make_mytank(): """生成我方坦克对象,并返回到主程序""" blue= Turtle(shape='tank',visible=False) blue.shapesize(0.2,0.2)#"亲生"的形状可以缩放 blue.penup() blue.pencolor("black") blue.fillcolor("blue") blue.pensize(2) blue.dead = False#增加额外的dead属性 return blue def mytank_wait_bump_enemybullet(): """我方坦克每隔10豪秒等待是否碰到敌方炮弹""" if not mytank.dead: for b in enemybullet:#对敌方阵营炮弹列表中的每颗炮弹进行检测 if b.distance(mytank)<20:#如果炮弹到mytank的距离小于20,认为碰到了炮弹               mytank.hideturtle()#隐藏 mytank.dead = True#标记为“死亡” Bomb(b.xcor(),b.ycor(),explosion_images)#显示爆炸效果 bottom_turtle.print("突围失败! 作者:李兴球") break screen.ontimer(mytank_wait_bump_enemybullet,10)#10毫秒检测一次 def follow_mouse(event): """本函数让小海龟面朝鼠标指针移动""" if not mytank.dead: x = event.x - width/2 #转换成海龟坐标系中的x坐标 y = height/2 - event.y #转换成海龟坐标系中的y坐标 dy = y - mytank.ycor() dx = x - mytank.xcor() angle = math.degrees(math.atan2(dy,dx)) mytank.setheading(angle)
评论
    相关推荐
    • 坦克大战.zip
      游戏,坦克大战python进行开发,实现基本的游戏界面和操作
    • 坦克大战.rar
      基于 Python 平台开发的一款坦克大战游戏,画面清晰,操纵灵活,小时候玩过的很经典的射击游戏,希望大家喜欢!
    • pygame 坦克游戏
      利用90坦克大战的图像声音资源重新组合的一款用python语言写的Pygame引擎小游戏·
    • python坦克大战
      python坦克大战
    • python开发小游戏
      python 中pygame模块开发的小游戏,包含:贪吃蛇,俄罗斯方块,坦克大战,推箱子等小游戏。源代码,源代码。
    • Python坦克大战代码.rar
      Python坦克大战的源代码,初学Python的小白练习和模仿,结构简单,明了,易懂。工程文件分开建造,测试阶段合理
    • 坦克大战python编写)
      python编写的坦克大战,主要用到的模块是pygame。代码有足够详细的注释,非常容易理解,喜欢的朋友支持支持~
    • 坦克大战游戏
      这是我们用python语言开发的一个名为坦克大战的小游戏,可以作为源码直接跑,也可以继续开发
    • python.pygame.坦克大战源代码
      这是我分享的著名的坦克大战python版,python游戏的进阶版。很好的游戏参考资源。 有兴趣的同学可以加群634295212 一起讨论学习。参考分享或改进代码请注明原作者信息。 及新作者信息
    • snowglobe-src-viewer-2.0.0-r0.tar.gz
      国外的开源游戏引擎,能够承载上千人,属于社交类的游戏