练习题记录
2016-10-24 07:35
176 查看
开枪
#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)
相关文章推荐
- SQL学习-sqlzoo练习题记录(2)
- 【嵌入式系统学习记录】练习题:设计一个洗牌发牌的程序;(随机产生52个不同的数)
- XSS 练习题记录
- 数据库练习题(取出tb_send表中日期(SendTime字段)为当天的所有记录)
- SQL学习-sqlzoo练习题记录(1)
- 【练习题】每隔1秒向文件中写入一行记录
- [华为机试练习题]36.简单错误记录
- 【学习记录】练习题-二分查找
- 记录-数据结构第一章上机练习题
- 牛客网关于数组的练习题记录
- 【嵌入式系统学习记录】练习题:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位?
- [华为机试练习题]36.简单错误记录
- 【嵌入式系统学习记录】练习题:一个数如果恰好等于它的因子之和,这个数被成为”完数”,例如:6=1+2+3.请编程找出1000以内的完数。
- C# 泛性 学习记录
- CSS学习笔记录(1)
- wifi移植全过程记录
- 查询某一条记录的前一条记录和后一条记录
- ubuntu更新源,记录一下
- DelphiXE4 FireMonkey 试玩记录,开发IOS应用 还是移植
- 2013腾讯实时面试记录