练习题记录

开枪

#coding=utf-8


#子弹
class Zidan:

    def __init__(self,shashangli):
        self.shashangli = shashangli

    def gongjizhi(self):
        return self.shashangli


#弹夹
class Danjia:

    def __init__(self,rongliang):
        self.danjiarongliang = rongliang
        self.zidanliebiao = []

    def zhuangzidan(self,zidan):
        self.zidanliebiao.append(zidan)
        print("子弹+1....当前的子弹数是:%d"%len(self.zidanliebiao))

    def chuzidan(self):
        if len(self.zidanliebiao)>0:

            zidan = self.zidanliebiao[-1]

            shashangli = zidan.gongjizhi()

            self.zidanliebiao.pop()
            print("子弹-1....当前的子弹数是:%d"%len(self.zidanliebiao))
        else:
            shashangli = 0
        return shashangli


#枪
class Qiang:
    def __init__(self,name):
        self.name = name

    def huandanjia(self,danjia):
        self.danjia = danjia

    def fashe(self,mubiao):
        shashangli = self.danjia.chuzidan()
        mubiao.diaoxue(shashangli)

#人
class Ren:

    def __init__(self):
        self.shengmingzhi = 100

    def maiqiang(self,qiang):
        self.qiang = qiang
        print('买了一把枪')

    def yazidan(self,danjia,zidan):
        danjia.zhuangzidan(zidan)


    def zhuangdanjia(self,danjia):
        self.qiang.huandanjia(danjia)

    def kaiqiang(self,mubiao):
        self.qiang.fashe(mubiao)

    def diaoxue(self,shashangli):
        self.shengmingzhi -= shashangli
        print('剩余的生命值为:%d'%self.shengmingzhi)


#创建了小明
xiaoming = Ren()

#创建了一把枪
daju = Qiang('daju')

#把对象(daju)当做一个参数,赋值给了另外一个对象的属性
xiaoming.maiqiang(daju)

# 创建弹夹
danjia = Danjia(100)

# 创建一颗子弹
zidan = Zidan(5)

# 小明这个对象,把一颗子弹压到一个弹夹中
xiaoming.yazidan(danjia,zidan)

# 把弹夹安装到枪上,即把弹夹当做一个参数,传给给了枪
xiaoming.zhuangdanjia(danjia)

# 创建了一个人对象(老王)
laowang = Ren()


# 创建一颗子弹
zidan = Zidan(10)

# 小明这个对象,把一颗子弹压到一个弹夹中
xiaoming.yazidan(danjia,zidan)

# 创建一颗子弹
zidan = Zidan(11)

# 小明这个对象,把一颗子弹压到一个弹夹中
xiaoming.yazidan(danjia,zidan)


xiaoming.kaiqiang(laowang)
xiaoming.kaiqiang(laowang)
xiaoming.kaiqiang(laowang)

object

#coding=utf-8

class Wupin:

    def __init__(self,mianji):
        self.__zhanyongmianji = mianji

    def huoqumianji(self):
        return self.__zhanyongmianji

    def gengmianji(self,mianji):
        if mianji<10:
            self.__zhanyongmianji = mianji

class Chuang(Wupin):
    pass

class Chaji(Wupin):

    @classmethod
    def createNumChaji(cls, num):
        tempList = []
        tempList.append(Chaji(2))
        tempList.append(Chaji(2))
        tempList.append(Chaji(2))
        return tempList

class Home:
    def __init__(self,mianji):
        self.keyongmianji = mianji

    def rongna(self,wupin):

        if self.keyongmianji>wupin.huoqumianji():
            self.keyongmianji = self.keyongmianji - wupin.huoqumianji()
            print("可以安置好物品,,,,,,剩余面积为:%d"%self.keyongmianji)
        else:
            print("不能安置好物品,,,,,,剩余面积为:%d"%self.keyongmianji)


chajiList =  Chaji.createNumChaji(3)

print(len(chajiList))




# fangzi_bj = Home(120) # 创建一个房子

# chaji = Chaji(20) # 创建一个茶几

# fangzi_bj.rongna(chaji) # 把茶几放到房子中


# muchuang = Chuang(4)

# fangzi_bj.rongna(muchuang)

飞机

#coding=utf-8

import pygame
from pygame.locals import *
import random
from sys import exit
import time

# 定义导弹类
class Bullet:
    def __init__(self,planeName,x,y):

        print('Bullet----->>>')

        if planeName == 'enemy':
            imageName = './image/bullet-1.gif'
            self.directioin = 'down'
        elif planeName == 'hero':
            imageName = './image/bullet-3.gif'
            self.directioin = 'up'



        self.image = pygame.image.load(imageName).convert()
        self.x = x
        self.y = y

    def draw(self,screen):
        if self.directioin == 'down':
            self.y += 2
        elif self.directioin == 'up':
            self.y -= 2

        screen.blit(self.image, (self.x, self.y))

# 定义一个飞机基类
class Plane:

    def __init__(self):
        #导弹的发射时间间隔(单位为:s)
        self.bulletSleepTime = 1
        self.lastShootTime = time.time()
        #存储导弹列表
        self.bulletList = []

    def draw(self,screen):
        screen.blit(self.planeImage, (self.x, self.y))

    # 发射导弹
    def shoot(self):
        if time.time()-self.lastShootTime>self.bulletSleepTime:
            if random.randint(1,6)>=3:
                self.bulletList.append(Bullet(self.planeName,self.x,self.y))
                self.lastShootTime = time.time()


# 定义一个玩家的飞机类
class Hero(Plane):

    def __init__(self):

        Plane.__init__(self)

        planeImageName = './image/hero.gif'

        self.planeImage = pygame.image.load(planeImageName).convert()

        self.x = 230
        self.y = 600

        self.speed = 5

        self.planeName = 'hero'

    def keyHandle(self,keyValue):
        if keyValue=='left':
            self.x -= 20
        elif keyValue == 'right':
            self.x += 20
        elif keyValue == 'space':
            self.bulletList.append(Bullet('hero',self.x+40,self.y))

# 定义敌人飞机类
class Enemy(Plane):

    def __init__(self):

        Plane.__init__(self)

        randomImageNum = random.randint(1,3)

        planeImageName = './image/enemy-' + str(randomImageNum) + '.gif'

        self.planeImage = pygame.image.load(planeImageName).convert()

        self.x = 0
        self.y = 0
        self.directioin = 1 # 1表示向右  0表示向左

        self.speed = random.randint(1,5)

        self.planeName = 'enemy'

    def move(self):

        if self.directioin == 1:
            self.x += self.speed
        elif self.directioin == 0:
            self.x -= self.speed

        if self.x>480:
            self.directioin = 0
        elif self.x<0:
            self.directioin = 1


class GameInit:

    # 类属性
    # 默认为 简单
    gameLevel = 1

    g_enemyList = []

    hero = object

    # 显示等级提示
    @classmethod
    def showMenu(cls):
        # 提示用户选择,游戏难度等级
        print('='*40)
        print('      python 飞机大战\n\n')
        print('难度等级:1: 简单 2: 中等 3: 困难')
        print('='*40)

    @classmethod
    def getMenuNum(cls):
        cls.gameLevel = input("请输入要难度等级的序号:")


    @classmethod
    def createEnemys(cls):

        # 将创建出来的敌人对象添加到列表中
        for i in range(cls.gameLevel):
            cls.g_enemyList.append(Enemy())

    @classmethod
    def createHero(cls):
        cls.hero = Hero()

    # 更新飞机的位置
    @classmethod
    def setXY(cls):

        # 更新位置
        for i in cls.g_enemyList:
            i.move()

    @classmethod
    def draw(cls,screen):

        # 更新位置
        for i in cls.g_enemyList:
            i.draw(screen)

            delBulletList = []

            k = 0
            for j in i.bulletList:
                j.draw(screen)

                # 记录已经移动到屏幕外边的子弹下标
                if j.y>890:
                    delBulletList.append(k)
                k+=1

            # 以下代码,把已经移动到屏幕外边的子弹给删除掉
            for m in delBulletList:
                del i.bulletList[m]

        cls.hero.draw(screen)
        k = 0
        delBulletList = []
        for j in cls.hero.bulletList:
            j.draw(screen)
            if j.y<0:
                delBulletList.append(k)
            k+=1
        # 以下代码,把已经移动到屏幕外边的子弹给删除掉
        for m in delBulletList:
            del cls.hero.bulletList[m]


    @classmethod
    def gameInit(cls):
        cls.showMenu()
        cls.getMenuNum()
        cls.createEnemys()
        cls.createHero()

    @classmethod
    def heroPlaneKey(cls, keyValue):
        cls.hero.keyHandle(keyValue)

    @classmethod
    def shoot(cls):
        for i in cls.g_enemyList:
            i.shoot()


if __name__ == '__main__':


    pygame.init()

    screen = pygame.display.set_mode((480,890),0,32)

    bgImageFile = './image/background.png'

    background = pygame.image.load(bgImageFile).convert()

    pygame.display.update()


    # 1. 初始化飞机
    GameInit.gameInit()


    while True:

        screen.blit(background,(0,0))

        #判断是否是点击了退出按钮
        for event in pygame.event.get():
            # print(event.type)
            if event.type == QUIT:
                exit()
            elif event.type == KEYDOWN:
                if event.key == K_a or event.key == K_LEFT:
                    print('left')
                    GameInit.heroPlaneKey('left')

                elif event.key == K_d or event.key == K_RIGHT:
                    print('right')
                    GameInit.heroPlaneKey('right')

                elif event.key == K_SPACE:
                    print('space')
                    GameInit.heroPlaneKey('space')


        #敌人发射导弹
        GameInit.shoot()

        #更新敌人的位置
        GameInit.setXY()
        GameInit.draw(screen)

        #把修改位置后的图片,重新更新
        pygame.display.update()


        # time.sleep(0.05)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值