从零开始撸python
开始挑战30天从零开始--------->python全栈工程师
Day2:飞机大战小程序
花了点时间Debug总体效果还行,有一点点进步,下一步异常检测
#飞机大战小游戏 import time import pygame from pygame.locals import * import sys import random #玩家类 #属性:显示窗口、位置、图片、子弹列表、移动状态 #方法:显示、移动、开火 class Player(): def __init__(self,screen): self.screen=screen#将一个窗口对象作为了属性值,表示玩家对象显示的窗口 self.x=150 self.y=500 self.img=pygame.image.load(r"C:\Users\************************************************\feiji\hero1.png") self.bulletList=[]#子弹列表 self.moveLeftState=0#0--不移动 1--移动 self.moveRightState=0 self.moveUpstate=0 self.moveDownstate=0 def display(self): self.screen.blit(self.img,(self.x,self.y)) for b in self.bulletList: #便利每一个子弹对象,并显示 b.display() b.move() if b.y<0: #子弹移动到边缘时被清除 self.bulletList.remove(b) def move(self): if self.moveLeftState==1 and self.x>-50: self.x-=5 if self.moveRightState==1 and self.x<250: self.x+=5 if self.moveUpstate==1 and self.y>-50: self.y-=5 if self.moveDownstate==1 and self.y<550: self.y+=5 def fire(self): b=PlayerBullet(self.screen,self.x,self.y) self.bulletList.append(b) #玩家子弹类: #属性:显示窗口、位置、图片 #方法:显示、移动 class PlayerBullet(): def __init__(self,screen,x,y): self.screen=screen#将一个窗口对象作为了属性值,表示玩家对象显示的窗口 self.x=x+40 #子弹初始位置,需要跟随飞机✈ self.y=y-20 self.img=pygame.image.load(r"C:\Users\****************************************\feiji\bullet.png") self.bulletList=[]#子弹列表 self.moveLeftState=0#0--不移动 1--移动 self.moveRightState=0 def display(self): self.screen.blit(self.img,(self.x,self.y)) def move(self): self.y-=20 #敌机类 #属性:显示窗口、位置、图片、子弹列表、移动状态、被击中次数 #方法:显示、移动、开火 class Enemy(): def __init__(self,screen): self.screen=screen#将一个窗口对象作为了属性值,表示玩家对象显示的窗口 self.x=0 self.y=0 self.img=pygame.image.load(r"C:\Users\**************************\feiji\enemy0.png") self.bulletList=[]#子弹列表 self.moveState=1#0--左移 1--右移 def display(self): self.screen.blit(self.img,(self.x,self.y)) #显示所有子弹 for b in self.bulletList: #便利每一个子弹对象,并显示 b.display() b.move() if b.y>=600: #子弹移动到边缘时被清除 self.bulletList.remove(b) def move(self): if self.moveState==1: self.x+=5#向右移动5个像素 elif self.moveState==0: self.x-=5#向左移动5个像素 if self.x<0: self.moveState=1 elif self.x>250: self.moveState=0 def fire(self):#在子弹列表中增加一个子弹对象 b=EnemyBullet(self.screen,self.x,self.y) self.bulletList.append(b) #敌机子弹类 #属性:显示窗口、位置、图片、子弹列表、移动状态、被击中次数 #方法:显示、移动、开火 class EnemyBullet(): def __init__(self,screen,x,y): self.screen=screen#将一个窗口对象作为了属性值,表示玩家对象显示的窗口 self.x=x+20 self.y=y+30 self.img=pygame.image.load(r"C:\Users\************************************************\feiji\bullet2.png") self.bulletList=[]#子弹列表 self.moveLeftState=0#0--不移动 1--移动 self.moveRightState=0 def display(self): self.screen.blit(self.img,(self.x,self.y)) def move(self): self.y+=20 #键盘监控 def Key_control(player): for event in pygame.event.get(): if event.type==QUIT: print("正在退出!") sys.exit(0)#强制退出 elif event.type==KEYDOWN:#键盘键入 if event.key==K_LEFT: print("玩家向左!") player.moveLeftState=1 # player.moveRightState=0 # # player.x-=10 if event.key==K_RIGHT: # player.x+=10 print("玩家向右!") player.moveRightState=1 # player.moveLeftState=0 if event.key==K_UP: print("玩家向上!") player.moveUpstate=1 if event.key==K_DOWN: print("玩家向下!") player.moveDownstate=1 if event.key==K_SPACE:#捕捉空格键 print("玩家开火!") player.fire() elif event.type==KEYUP:#键盘释放 if event.key==K_LEFT:#释放左键 print("停止向左...") player.moveLeftState=0 if event.key==K_RIGHT:#释放右键 print("停止向右...") player.moveRightState=0 if event.key==K_UP: print("玩家向上!") player.moveUpstate=0 if event.key==K_DOWN: print("玩家向下!") player.moveDownstate=0 #main()方法 def main(): screen=pygame.display.set_mode((300,600))#创建窗口对象 #获取背景 background=pygame.image.load(r"C:\Users\**************************************************\feiji\background.png") #创建玩家对象,并传入显示窗口 player=Player(screen) #创建敌机对象,并传入显示窗口 enemy=Enemy(screen) #在循环中显示所有对象并刷新 while 1==1: screen.blit(background,(0,0))#显示背景 player.display()#显示玩家 enemy.display()#显示敌机 enemy.move()#敌机移动 player.move() r=random.randint(1,15) if r==1: enemy.fire()#敌机开火 Key_control(player)#捕获用户操作 pygame.display.update()#刷新窗口 time.sleep(0.05) #------------------------------------------------------------------- if __name__=='__main__': main()
本文来自博客园,作者:Alex-CTO,转载请注明原文链接:https://www.cnblogs.com/AC-Mirabelle/p/16783196.html