下列程序已实现功能:玩家飞机可全图移动,电脑飞机左右摇摆移动,玩家飞机按空格可发射子弹,电脑飞机随机发射子弹,双方子弹接触对方一刻,打中方爆炸,程序结束。
eg:
from pygame.locals import *
import pygame,os
import time,random
def getImage(image):
return os.path.join("D:\\下载课件\\讲义\\IT研究院-Python\\New_Stydy\\img",image)
class Biu(): #添加我方子弹类
def __init__(self,x,y,windowd):
self.x=x
self.y=y
self.windows=windows
self.image=pygame.image.load("D:\\下载课件\\讲义\\IT研究院-Python\\New_Stydy\\img\\bullet.png")
def draw(self):
self.windows.blit(self.image,(self.x,self.y))
self.move()
def move(self):
self.y-=5
class Biu1(): #添加敌方子弹类
def __init__(self,x,y,windowd):
self.x=x
self.y=y
self.windows=windows
self.image=pygame.image.load("D:\\下载课件\\讲义\\IT研究院-Python\\New_Stydy\\img\\bullet2.png")
def draw(self):
self.windows.blit(self.image,(self.x,self.y))
self.move()
def move(self):
self.y+=2
windows=pygame.display.set_mode((480,520),0,32) #在桌面上创建个窗口 窗口大小480*520 0,32是色谱之类的
backGround=pygame.image.load("D:\\下载课件\\讲义\\IT研究院-Python\\New_Stydy\\img\\background.png") #选择添加背景图
pygame.display.set_caption("飞机大战") #重新定义游戏名称
cap=pygame.image.load("D:\\下载课件\\讲义\\IT研究院-Python\\New_Stydy\\img\\icon72x72.png") #添加游戏名的头像
pygame.display.set_icon(cap)
pygame.key.set_repeat(30,30) #设置键盘的灵敏度,第一个30表示30毫秒后开始反应,第二个表示30毫秒没抬起,默认进行下一次按键
feiji=pygame.image.load("D:\\下载课件\\讲义\\IT研究院-Python\\New_Stydy\\img\\hero1.png")
feiji1=pygame.image.load("D:\\下载课件\\讲义\\IT研究院-Python\\New_Stydy\\img\\hero2.png")
djBombImageList=["enemy1_down1.png","enemy1_down2.png","enemy1_down3.png","enemy1_down4.png",]
fjBombImageList=["hero_blowup_n1.png","hero_blowup_n2.png","hero_blowup_n3.png","hero_blowup_n4.png",]
index_fj=0
index_dj=0
fjx=480//2-100//2 #我方飞机坐标
fjy=520-124
diji=pygame.image.load("D:\\下载课件\\讲义\\IT研究院-Python\\New_Stydy\\img\\enemy1.png")
djx=480//2-69//2 #敌方飞机坐标
djy=0
direct="左" #敌机默认先往左走
djIsBomb=False
fjIsBomb=False
djBombImageIndex=0
fjBombImageIndex=0
zdList=[] #定义一个空子弹列表,把用过的子弹放在里面
zd1List=[]
while True:
windows.blit(backGround,(0,0)) #把背景图从零坐标展开,(0,0)点为背景的左上角
if djIsBomb==False:
windows.blit(diji,(djx,djy))
else:
if djBombImageIndex==len(djBombImageList):
time.sleep(0.8)
exit(0)
image=pygame.image.load(getImage(djBombImageList[djBombImageIndex]))
windows.blit(image,(djx,djy))
djBombImageIndex+=1
time.sleep(0.5)
if fjIsBomb==False:
if index_fj == 0:
windows.blit(feiji, (fjx, fjy))
index_fj = 1
else: # 添加我方飞机特效,用if、else判断来回切换两张照片
windows.blit(feiji1, (fjx, fjy))
index_fj = 0
else:
if fjBombImageIndex==len(fjBombImageList):
time.sleep(0.8)
exit(0)
image=pygame.image.load(getImage(fjBombImageList[fjBombImageIndex]))
windows.blit(image,(fjx,fjy))
fjBombImageIndex+=1
time.sleep(0.5)
for zd in zdList: #子弹循环,无限子弹
zd.draw()
zdList.remove(zd) if zd.y<0 else None #判断,如果y<0 超过最上的边界 子弹删除 否则返回空值
for zd1 in zd1List: #子弹循环,无限子弹
zd1.draw()
zd1List.remove(zd1) if zd1.y>520 else None
if direct=="左": #如果向左走,横坐标就-2
djx-=2
djy+=1/5
if djx<=0: #如果坐标小于0了,就变换方向为右
direct="右"
elif direct=="右": #如果向右走,横坐标就+2
djx+=2
djy+=1/5
if djx>=480-69:
direct="左"
for event in pygame.event.get(): #遍历消息
if event.type==QUIT: #退出
exit(0)
elif event.type==KEYDOWN: #按键
# if event.key==K_LEFT and fjx>0:
# fjx-=5
# elif event.key==K_RIGHT and fjx<(480-100):
# fjx+=5
# elif event.key==K_DOWN and fjy<520-124:
# fjy+=5
# elif event.key == K_UP and fjy>0:
# fjy-=5
if event.key==K_LEFT:
fjx = fjx-5 if fjx >=5 else 0
if event.key==K_RIGHT:
fjx = fjx+5 if fjx<=(480-100-5) else 480-100
if event.key==K_UP:
fjy = fjy-5 if fjy>5 else 0
if event.key==K_DOWN:
fjy = fjy+5 if fjy<=(520-124-5) else 520-124
if event.key==K_SPACE: #按空格就放射子弹
zd=Biu(fjx+50-22/2,fjy-22,windows) #设置发射子弹的位置
zdList.append(zd) #把射出的子弹放在列表里面
pygame.display.update() #打开帘子
x = random.randint(0,100)
if x==3 or x==7:
zd1=Biu1(djx+69/2-9/2,djy+89-21,windows)
zd1List.append(zd1)
djRect=Rect(djx,djy,69,89)
for zd in zdList:
zdRect=Rect(zd.x,zd.y,22,22)
if zdRect.colliderect(djRect):
djIsBomb=True
fjRect = Rect(fjx, fjy,100,124)
for zd1 in zd1List:
zd1Rect = Rect(zd1.x, zd1.y, 9, 21)
if zd1Rect.colliderect(fjRect):
fjIsBomb = True
pass
效果浏览: