从零开始撸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

空山新雨后,天气晚来秋
浙公网安备 33010602011771号