import pygame #导入pygame库
import time #导入时间库
import random #导入随机数库
from pygame.locals import *
from sys import exit
#设置游戏窗口,加载背景图片
pygame.init()
sc = pygame.display.set_mode((480,800))
pygame.display.set_caption('飞机大战')
bg = pygame.image.load('背景.png')
bg = pygame.transform.scale(bg,(480,800))
#加载主飞机图片
hero_1 = pygame.image.load('我方飞机1.png')
hero_2 = pygame.image.load('我方飞机2.png')
hero_down = pygame.image.load('我方飞机爆炸.png')
#给图片设置大小
hero_1 = pygame.transform.scale(hero_1,(80,80))
hero_2 = pygame.transform.scale(hero_2,(80,80))
hero_down = pygame.transform.scale(hero_down,(80,80))
#坐标
hero_x = 200
hero_y = 500
num = 0 #计数器
#加载普通敌机图片
enemy1=pygame.image.load('小飞机.png')
enemy1=pygame.transform.scale(enemy1,(42,36))
enemy1_down1=pygame.image.load('小飞机爆炸1.png')
enemy1_down1=pygame.transform.scale(enemy1_down1,(42,36))
enemy1_down2=pygame.image.load('小飞机爆炸2.png')
enemy1_down2=pygame.transform.scale(enemy1_down2,(42,36))
enemy1_down3=pygame.image.load('小飞机爆炸3.png')
enemy1_down3=pygame.transform.scale(enemy1_down3,(42,36))
enemy1_x=[] #创建普通敌机的X坐标列表
enemy1_y=[] #创建普通敌机的Y坐标列表
#加载子弹图片
bullet=pygame.image.load('子弹.png')
bullet=pygame.transform.scale(bullet,(8,17))
bulletX=[] #创建空的子弹X坐标列表
bulletY=[] #创建空的子弹Y坐标列表
#游戏结束的准备
isgameover=0 #是否游戏结束的标记,当isgameover为0时,游戏不结束;当isgameover为1时,游戏结束
gameover=pygame.image.load('gameover.png') #加载游戏结束图片
gameover=pygame.transform.scale(gameover,(480,800))
#准备分数
font=pygame.font.Font('simsun.ttc',20) #创建一种字体
text=font.render('得分:',True,(255,0,0)) #创建文本
score=0 #分数初始化为0
#游戏主循环
while True:
sc.blit(bg,(0,0))
sc.blit(text,(10,10))
text_score=font.render(str(score),True,(255,0,0))
sc.blit(text_score,(70,10)) #将分数贴到窗口中
if isgameover==0:
#让玩家飞机有动画效果
if num % 2 == 0:
sc.blit(hero_1,(hero_x,hero_y))
if num % 2 != 0:
sc.blit(hero_2,(hero_x,hero_y))
num += 1
time.sleep(0.01)
pos = pygame.mouse.get_pos()
hero_x = pos[0]-hero_1.get_width()/2
hero_y = pos[1]-hero_1.get_height()/2
#---------普通敌机的功能
#每隔30个计数num往普通敌机坐标列表里添加一个坐标
if num%30==0:
enemy1_x.append(random.randint(0,480-enemy1.get_width()))
enemy1_y.append(0)
#贴所有普通敌机的方法
for i in range(len(enemy1_x)):
sc.blit(enemy1,(enemy1_x[i],enemy1_y[i]))
#下落
for i in range(len(enemy1_x)):
enemy1_y[i]=enemy1_y[i]+2
if enemy1_y[i]>800:
del enemy1_y[i] #del==>delete删除
del enemy1_x[i]
break
#每隔10个计数出现一颗子弹
if num%10==0:
bulletX.append(hero_x+hero_1.get_width()/2-bullet.get_width()/2)
bulletY.append(hero_y-bullet.get_height())
#实现贴所有子弹的方法
for i in range(len(bulletX)):
sc.blit(bullet,(bulletX[i],bulletY[i]))
#让子弹飞
for i in range(len(bulletX)):
bulletY[i]=bulletY[i]-10
if bulletY[i]<0:
del bulletX[i]
del bulletY[i]
break
#---------------普通敌机被打死
for i in range(len(bulletX)): #遍历每一颗子弹
for j in range(len(enemy1_x)): #遍历每一个普通敌机
#判断子弹是否打中普通敌机
#先判断子弹的X坐标是否在打中敌机的范围内
if bulletX[i]>enemy1_x[j]-bullet.get_width() and bulletX[i]<enemy1_x[j]+enemy1.get_width():
#判断子弹的Y坐标是否在打中敌机的范围内
if bulletY[i]>enemy1_y[j]-bullet.get_height() and bulletY[i]<enemy1_y[j]+enemy1.get_height():
score=score+1
#显示爆炸的效果
sc.blit(enemy1_down1,(enemy1_x[j],enemy1_y[j]))
pygame.display.update()
sc.blit(enemy1_down2,(enemy1_x[j],enemy1_y[j]))
pygame.display.update()
sc.blit(enemy1_down3,(enemy1_x[j],enemy1_y[j]))
pygame.display.update()
#删除普通敌机
del enemy1_x[j]
del enemy1_y[j]
break
#英雄机被撞死的方法
#撞上普通敌机
for i in range(len(enemy1_x)):
if enemy1_x[i]>hero_x-enemy1.get_width() and enemy1_x[i]<hero_x+hero_1.get_width():
if enemy1_y[i]>hero_y-enemy1.get_height() and enemy1_y[i]<hero_y+hero_1.get_height():
isgameover=1
#出现爆炸的图片
sc.blit(hero_down,(hero_x,hero_y))
elif isgameover==1:
sc.blit(gameover,(0,0))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
评论1
最新资源