python小游戏经典坦克大战-实验设计

一. 游戏流程概述

游戏基本规则:

  1. 按上下左右键移动我方坦克,按空格键进行发射子弹,击中坦克,坦克爆炸消失。若我方坦克被子弹击中或撞上,我方坦克死亡按ESC键可以重生。
  2. 敌方坦克功能:白色敌方坦克为一般坦克。白色较小敌方坦克速度快,射击子弹频繁。黄色坦克被击中后会随机生成白色小坦克。
  3. 地图:白色“铁”地图:子弹不能穿过此地图,坦克不能穿过此地图。蓝色“水地图”子弹和坦克均可以穿过此地图。

游戏流程图基本流程如下:

  1. 运行:run “TankGame.py”,进入初始化界面
  2. 初始化:显示窗口大小及内容、加载图片和背景音乐,开始游戏。
  3. 游戏控件:玩家可以通过键盘和空格键来完成移动坦克,射击子弹。还可通过按ESC键重生
  4. 游戏结束:关闭窗口

二.各功能模块

1.MainGame主类
初始化窗口,窗口标题;标题初始化我方坦克,敌方坦克;初始化墙壁;

#主类
class MainGame():
    window=None
    my_tank=None
    #存储敌方坦克的列表
    enemyTankList=[]
    enemyTankList2=[]
    enemyTankList3=[]
    #定义敌方坦克数量
    enemyTankCount=4
    enemyTankCount2=2
    enemyTankCount3=2
    #存储我方子弹列表
    myBulletList=[]
    #存储敌方子弹的列表
    enemyBulletList=[]
    enemyBulletList2=[]
    enemyBulletList3=[]
    #存储爆炸效果的列表
    explodeList=[]
    explodeList2=[]
    explodeList3=[]
    #存储墙壁的列表
    wallList=[]
    wallList2=[]



    def __init__(self):
        pass

    #开始游戏
    def startGame(self):
        #加载主窗口
        #初始化窗口
        pygame.display.init
        #设置窗口的大小及显示
        MainGame.window=pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HIGHt])
        # 初始化我方坦克
        self.createMyTank()
        #初始化敌方坦克,并将敌方坦克添加到列表中
        self.creatEnemyTank()
        #初始化墙壁
        self.createWall()
        #设置窗口标题
        pygame.display.set_caption('坦克大战1.0')
        #窗口一直进行显示
        while True:
            #使坦克的移动速度慢一点
            time.sleep(0.02)
            #给窗口填充颜色
            MainGame.window.fill(BG_COLOR)
            #获取事件
            self.getEvent()
            #绘制文字-在窗口这个表面继续叠加绘制
            MainGame.window.blit(self.getTextSurface("敌方坦克剩余数量%d"%(len(MainGame.enemyTankList)+len(MainGame.enemyTankList2)+len(MainGame.enemyTankList3))),(10,10))
            #调用坦克显示的方法
            #判断我方坦克是否存活
            if MainGame.my_tank and MainGame.my_tank.live:
                MainGame.my_tank.displayTank()
            else:
                #删除我方坦克
                del MainGame.my_tank
                MainGame.my_tank=None

            #循环遍历敌方坦克列表,展示敌方坦克
            self.blitEnemyTank()
            #循环遍历显示我方坦克子弹
            self.blitMyBullet()
            #循环遍历敌方子弹列表,展示敌方子弹
            self.blitEnemyBullet()
            #循环遍历爆炸列表,展示爆炸效果
            self.blitExplode()
            #循环遍历墙壁列表,展示墙壁
            self.blitWall()
            #调用移动方法
            #如果坦克的开关时开启,才可以移动
            if MainGame.my_tank and MainGame.my_tank.live:
                if not MainGame.my_tank.stop:
                    MainGame.my_tank.move()
                    #检测我方坦克是否与墙壁发生碰撞
                    MainGame.my_tank.hitWall()
            #持续展示窗口
            pygame.display.update()

    #循环遍历墙壁列表,展示墙壁
    def blitWall(self):
        for wall in MainGame.wallList:
            #调用墙壁的显示方法
            wall.displayWall()

        #循环遍历水图
        for wall in MainGame.wallList2:
            wall.displayWall()

    #初始化墙壁
    def createWall(self):
        #增加铁图
        wall5=Wall(440,50)
        wall1=Wall(500,50)
        wall2=Wall(560,50)
        wall3=Wall(620,50)
        wall4=Wall(680,50)
        wall10=Wall(740,50)
        MainGame.wallList.append(wall1)
        MainGame.wallList.append(wall2)
        MainGame.wallList.append(wall3)
        MainGame.wallList.append(wall4)
        MainGame.wallList.append(wall5)
        MainGame.wallList.append(wall10)
        i=1
        sum=50
        while i<=10:
            i+=1
            sum+=60
            wall=Wall(440,sum)
            MainGame.wallList.append(wall)
        wall6=Wall(500,650)
        wall7=Wall(560,650)
        wall8=Wall(620,650)
        wall9=Wall(680,650)
        wall11=Wall(740,650)
        MainGame.wallList.append(wall6)
        MainGame.wallList.append(wall7)
        MainGame.wallList.append(wall8)
        MainGame.wallList.append(wall9)
        MainGame.wallList.append(wall11)

        wall12=Wall(500,410)
        wall13=Wall(560,410)
        wall14=Wall(620,410)
        wall15=Wall(680,410)
        wall16=Wall(740,410)
        MainGame.wallList.append(wall12)
        MainGame.wallList.append(wall13)
        MainGame.wallList.append(wall14)
        MainGame.wallList.append(wall15)
        MainGame.wallList.append(wall16)

        wall17=Wall(740,410)
        wall18=Wall(740,470)
        wall19=Wall(740,530)
        wall20=Wall(740,590)
        MainGame.wallList.append(wall17)
        MainGame.wallList.append(wall18)
        MainGame.wallList.append(wall19)
        MainGame.wallList.append(wall20)

        
        #循环遍历增加水图
        #for i in range(6):
            #初始化墙壁
            #wall=Wall2(i*200,100)
            #将墙壁添加到列表中
           # MainGame.wallList2.append(wall)

         #循环遍历增加水图
            #初始化墙壁
        walla=Wall2(200,100)
        wallb=Wall2(360,600)
        wallb1=Wall2(300,600)
        wallb2=Wall2(2400,600)
        wallb3=Wall2(180,600)
        wallc=Wall2(800,200)
        walld=Wall2(900,500)
        walle=Wall2(1000,100)
        wallf=Wall2(1100,720)
        #将墙壁添加到列表中
        MainGame.wallList2.append(walla)
        MainGame.wallList2.append(wallb)
        MainGame.wallList2.append(wallc)
        MainGame.wallList2.append(walld)
        MainGame.wallList2.append(walle)
        MainGame.wallList2.append(wallf)
        MainGame.wallList2.append(wallb1)
        MainGame.wallList2.append(wallb2)
        MainGame.wallList2.append(wallb3)


    #创建我方坦克的方法、
    def createMyTank(self):
        MainGame.my_tank=Tank(600,720)
        #创建music对象

你可能感兴趣的:(python,游戏)