#简介:
#小白自学:飞机大战源码改造。(新手入门,学习总结。)
#从零开始:完全重写代码框架。(步步为营,完整代码。)
#简单就好:删除各种自定函数。(讨厌函数跳转,喜欢层次分明。)
#文本归一:方便编辑搜索调试。(讨厌多个文件,喜欢唯一文本。)
#目录:(代码末尾,编辑指令:Main3_13() 。#根据目录,运行游戏,不同版本,独立执行。)
#'程序版本0.01。'def Main0_1():#修改文本,增加时间控制模块time。
#'程序版本0.02。'def Main1_1():#纠正麻烦(如果无限循环,Python反应迟缓)。
#'程序版本0.03。'def Main2_1():#绘制静态背景。绘制静态英雄飞机。
#'程序版本0.04。'def Main2_2():#调试背景动画。背景初步运动起来。
#'程序版本0.05。'def Main2_3():#调试背景动画。背景协调运动起来。
#'程序版本0.06。'def Main3_1():#调试键盘反馈。英雄初步运动起来。观察鼠标键盘反馈。
#'程序版本0.07。'def Main3_2():#调试键盘反馈。英雄运动,响应键盘反馈。
#'程序版本0.08。'def Main3_3():#调试子弹发射。英雄静止,首发子弹射出。
#'程序版本0.09。'def Main3_4():#调试子弹发射。英雄静止,多发子弹循环射出。
#'程序版本0.10。'def Main3_5():#调试子弹发射。英雄运动,调整子弹射出坐标,跟随英雄。
#'程序版本0.11。'def Main3_6():#调试敌机。首架敌机飞过。
#'程序版本0.12。'def Main3_7():#可以移动英雄,击毁首架敌机。发现Bug,摧毁首架敌机之后,原地不能增加炮弹!
#'程序版本0.13。'def Main3_8():#调试敌机。击毁首架敌机。解决Bug。
#'程序版本0.14。'def Main3_9():#调试敌机。随机出现多个敌机。
#'程序版本0.15。'def Main3_10():#调试炮弹。可以摧毁敌机。英雄无敌。
#'程序版本0.16。'def Main3_11():#英雄取消无敌。首架敌机可以杀死英雄。
#'程序版本0.17。'def Main3_12():#改成无限循环,初步完工。
#'程序版本0.18。'def Main3_13():#精简代码。取消首架敌机。
#参考1:CSDN博客文章:《python实现飞机大战完整代码,可运行》。作者:垢浪_明珠。发布日期:2018-09-27 10:37:39。
#参考2:CSDN博客文章:《Python实现飞机大战游戏(后附完整代码文件和素材)》。作者:the best messi。发布日期: 2020-03-09 17:41:13。
def Main0_1():#修改文本。
import pygame
import time
pygame.init()#运行模块pygame。
print("Hello,World!")
print('程序版本0.01。')
print("准备编写游戏代码...")
for i in range(6):
time.sleep(0.5)
print(i,'延时等待:',0.5,'秒钟。')
pygame.quit()#退出模块pygame。
def Main1_1():#纠正麻烦。
import pygame
import time #导入模块time。
#pygame.init()
print("Hello,World!")
print('程序版本0.02。')
print("创建游戏窗口。")# 开始编写游戏代码。
pygame.display.set_mode((480, 700))# 创建游戏窗口。
time.sleep(2) #延时2秒钟,避免无限循环,Python程序(无反应)提示。
print('延时等待:',2,'秒钟。')
pygame.quit()
def Main2_1():#增加静态背景,静态英雄。延时依次显示。
import pygame
import time
print("Hello,World!")
print('程序版本0.03。')
print("增加静态背景,静态英雄飞机。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg = pygame.image.load("./images/background.png")# 加载背景图像。
screen.blit(bg, (0, 0))#绘制背景图像。
pygame.display.update()#更新屏幕显示。
time.sleep(2) #增加延时3秒钟,观察分布更新屏幕显示。
print('延时等待:',2,'秒钟。')
hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
screen.blit(hero, (180,500))#绘制英雄飞机图像。
pygame.display.update()#更新屏幕显示。
time.sleep(2)
print('再次等待:',2,'秒钟。')
pygame.quit()
def Main2_2():#调试背景动画。
import pygame
import time
print("Hello,World!")
print('程序版本0.04。')
print("背景初步运动起来(欠缺协调)。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
y=0
for i in range(180):
if i % 30 == 0:
print('30整数倍数:',i)
time.sleep(0.016)
screen.blit(bg1, (0, 0))#绘制背景图像。
screen.blit(bg2, (0, y))#绘制背景图像。
screen.blit(hero, (180,500))#绘制英雄飞机图像。
pygame.display.update()#更新屏幕显示。
y+=1
pygame.quit()
def Main2_3():#调试背景动画。
import pygame
import time
print("Hello,World!")
print('程序版本0.05。')
print("背景协调运动起来。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
y1=-700;y2=0
for i in range(180):
time.sleep(0.016)
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, (180,500))#绘制英雄飞机图像。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_1():#调试键盘反馈。
import pygame
import time
print("Hello,World!")
print('程序版本0.06。')
print("英雄飞机初步自动运动起来。观察鼠标键盘反馈。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)#英雄飞机位置、尺寸。
y1=-700;y2=0
for i in range(300):
time.sleep(0.016)
event_list = pygame.event.get()# 监听事件。
if len(event_list) > 0:
print(event_list)
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 480
hero_rect.x -= 1# 2.修改英雄位置。
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_2():#调试键盘反馈。
import pygame
import time
print("Hello,World!")
print('程序版本0.07。')
print("调试英雄飞机,响应键盘反馈。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)#英雄飞机位置、尺寸。
y1=-700;y2=0
for i in range(180):
time.sleep(0.016)
event_list = pygame.event.get()# 监听事件。
if len(event_list) > 0:
print(event_list)
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
print(hero_rect)
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_3():#调试子弹发射。
import pygame
import time
print("Hello,World!")
print('程序版本0.08。')
print("英雄飞机静止,首发子弹射出。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)#英雄飞机位置、尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)# 次发炮弹。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 次发炮弹。
y1=-700;y2=0#背景初始坐标。
for i in range(180):
time.sleep(0.016)
event_list = pygame.event.get()# 监听事件。
if len(event_list) > 0:
print(event_list)
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
print(hero_rect)
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
screen.blit(bullet0, bullet0_rect)#绘制英雄飞机图像。
bullet1_speed = -2
bullet1_rect.x = hero_rect.x + 46
bullet1_rect.y += bullet1_speed
screen.blit(bullet0, bullet1_rect)
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_4():#调试子弹发射。
import pygame
import time
print("Hello,World!")
print('程序版本0.09。')
print("英雄飞机静止,多发子弹循环射出。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)#英雄飞机位置、尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)#库存炮弹。
bullet1_rect = pygame.Rect(196, 640, 11, 18)#首发炮弹。
bullet_rect=[1,196,640]
List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 次发炮弹。
y1=-700;y2=0#背景初始坐标。
for j in range(180):
time.sleep(0.016)
for event in pygame.event.get():
if event.type == pygame.QUIT:# 判断是否退出游戏。
print("游戏结束")
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
screen.blit(bullet0, bullet0_rect)#绘制炮弹。
bullet1_speed = -2
bullet1_rect.x = hero_rect.x + 46
bullet1_rect.y += bullet1_speed
if j % 30 == 0:#判断是否30倍数。0.016*30=~0.5秒钟。
bullet_rect=[1,196,640]
List_bullet.append(bullet_rect) #英雄发射一枚子弹。
#print(j,List_bullet)
for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
if List_bullet[i][2] < 0:
List_bullet[i][0] = 0
for bullet in List_bullet:
if bullet[0]==0: #根据状态,销毁炮弹。
List_bullet.remove(bullet)
for i in range(len(List_bullet)):#循环显示所有炮弹。
bullet1_rect[0] = List_bullet[i][1]
List_bullet[i][2] -= 2
bullet1_rect[1] = List_bullet[i][2]
screen.blit(bullet0, bullet1_rect)#绘制炮弹。
screen.blit(bullet0, bullet1_rect)
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_5():#调试子弹发射。
import pygame
import time
print("Hello,World!")
print('程序版本0.10。')
print("控制英雄飞机运动,子弹射出坐标跟随改变位置。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)#英雄飞机位置、尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)#库存炮弹。
bullet1_rect = pygame.Rect(196, 640, 11, 18)#首发炮弹。
bullet_rect=[1,196,640]
List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 次发炮弹。
y1=-700;y2=0#背景初始坐标。
for j in range(180):
time.sleep(0.016)
for event in pygame.event.get():
if event.type == pygame.QUIT:# 判断是否退出游戏。
print("游戏结束")
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
bullet0_rect.x = hero_rect.x + 46
screen.blit(bullet0, bullet0_rect)#绘制炮弹。
if j % 30 == 0:#0.016*30=~0.5秒钟。
bullet_rect=[1,hero_rect.x + 46,640]
List_bullet.append(bullet_rect) #英雄发射一枚子弹。
#print(j,List_bullet)
for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
if List_bullet[i][2] < 0:
List_bullet[i][0] = 0
for bullet in List_bullet:
if bullet[0]==0: #根据状态,销毁炮弹。
List_bullet.remove(bullet)
for i in range(len(List_bullet)):#循环显示所有炮弹。
bullet1_rect[0] = List_bullet[i][1]
List_bullet[i][2] -= 2
bullet1_rect[1] = List_bullet[i][2]
screen.blit(bullet0, bullet1_rect)#绘制炮弹。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_6():#调试敌机。
import pygame
import time
print("Hello,World!")
print('程序版本0.11。')
print("首架敌机飞过。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
bullet_rect=[1,196,640]
enemy = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
enemy_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。
List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
y1=-700;y2=0#背景初始坐标。
for j in range(180):
time.sleep(0.016)
for event in pygame.event.get():
if event.type == pygame.QUIT:# 判断是否退出游戏。
print("游戏结束")
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
enemy_rect.y += 4
if enemy_rect.y >= 6660:
enemy_rect.y = 700
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
screen.blit(enemy, enemy_rect)#绘制敌机。
bullet0_rect.x = hero_rect.x + 46
screen.blit(bullet0, bullet0_rect)#绘制炮弹。
if j % 30 == 0:#0.016*30=~0.5秒钟。
bullet_rect=[1,hero_rect.x + 46,640]
List_bullet.append(bullet_rect) #英雄发射一枚子弹。
for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
if List_bullet[i][2] < 0:
List_bullet[i][0] = 0
for bullet in List_bullet:
if bullet[0]==0: #根据状态,销毁炮弹。
List_bullet.remove(bullet)
for i in range(len(List_bullet)):#循环显示所有炮弹。
bullet1_rect[0] = List_bullet[i][1]
List_bullet[i][2] -= 2
bullet1_rect[1] = List_bullet[i][2]
screen.blit(bullet0, bullet1_rect)#绘制炮弹。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_7():#调试敌机。
import pygame
import time
print("Hello,World!")
print('程序版本0.12。')
print("可以移动英雄,击毁首架敌机。发现Bug,摧毁之后,炮弹暂停!")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
bullet_rect=[1,196,640]
enemy = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
enemy_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。
List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
y1=-700;y2=0#背景初始坐标。
for j in range(300):
time.sleep(0.016)
for event in pygame.event.get():
if event.type == pygame.QUIT:# 判断是否退出游戏。
print("游戏结束")
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
enemy_rect.y += 4
if enemy_rect.y >= 6660:
enemy_rect.y = 700
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
screen.blit(enemy, enemy_rect)#绘制敌机。
bullet0_rect.x = hero_rect.x + 46
screen.blit(bullet0, bullet0_rect)#绘制炮弹。
if j % 30 == 0:#0.016*30=~0.5秒钟。
bullet_rect=[1,hero_rect.x + 46,640]
List_bullet.append(bullet_rect) #英雄发射一枚子弹。
#print(j,List_bullet)
for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
if List_bullet[i][2] < 0:
List_bullet[i][0] = 0
for bullet in List_bullet:
if bullet[0]==0: #根据状态,销毁炮弹。
List_bullet.remove(bullet)
if bullet[1] > enemy_rect.x - 9 and bullet[1] < enemy_rect.x + 56:
if bullet[2] < enemy_rect.y + 48:
List_bullet.remove(bullet) #销毁炮弹。
enemy_rect.y = 700 #隐藏敌机,等同销毁。
for i in range(len(List_bullet)):#循环显示所有炮弹。
bullet1_rect[0] = List_bullet[i][1]
List_bullet[i][2] -= 2
bullet1_rect[1] = List_bullet[i][2]
screen.blit(bullet0, bullet1_rect)#绘制炮弹。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_8():#调试敌机。
import pygame
import time
import random
print("Hello,World!")
print('程序版本0.13。')
print("击毁首架敌机。解决Bug。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
bullet_rect=[1,196,640]
enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
enemy0_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。
List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
y1=-700;y2=0#背景初始坐标。
for j in range(180):
time.sleep(0.016)
for event in pygame.event.get():
if event.type == pygame.QUIT:# 判断是否退出游戏。
print("游戏结束")
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
enemy0_rect.y += 2
if enemy0_rect.y >= 666: #如果首架敌机超出游戏显示范围,隐藏。
enemy0_rect.y = 700
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
screen.blit(enemy0, enemy0_rect)#绘制首架敌机。
bullet0_rect.x = hero_rect.x + 46
screen.blit(bullet0, bullet0_rect)#绘制炮弹。
if j % 30 == 0:#0.016*30=~0.5秒钟。
bullet_rect=[1,hero_rect.x + 46,640]
print(j,bullet_rect)
List_bullet.append(bullet_rect) #英雄发射一枚子弹。
print(j,List_bullet)
for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
if List_bullet[i][2] < 0:
List_bullet[i][0] = 0
for bullet in List_bullet:
if bullet[0]==0: #根据状态,销毁炮弹。
List_bullet.remove(bullet)
if bullet[1] > enemy0_rect.x - 9 and bullet[1] < enemy0_rect.x + 56:
if bullet[2] < enemy0_rect.y + 48:
List_bullet.remove(bullet) #销毁炮弹。
enemy0_rect.x = -100
enemy0_rect.y = -100 #隐藏敌机,等同销毁。
print('摧毁一架敌机!')
for i in range(len(List_bullet)):#循环显示所有炮弹。
bullet1_rect[0] = List_bullet[i][1]
List_bullet[i][2] -= 2
bullet1_rect[1] = List_bullet[i][2]
screen.blit(bullet0, bullet1_rect)#绘制炮弹。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_9():#调试敌机。
import pygame
import time
import random
print("Hello,World!");print('程序版本0.14。')
print("随机出现多个敌机。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
bullet_rect=[1,196,640]
enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
enemy0_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。
List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
List_enemy=[]#敌机列表。[[1,100,100,2]]。[状态,横标,纵标,速度]。
enemy_rect = pygame.Rect(100, 100, 58, 48)# 次生敌机初始位置,尺寸。
y1=-700;y2=0#背景初始坐标。
for j in range(180):
time.sleep(0.016)
for event in pygame.event.get():
if event.type == pygame.QUIT:# 判断是否退出游戏。
print("游戏结束")
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
enemy0_rect.y += 2
if enemy0_rect.y >= 666:
enemy0_rect.y = 700
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
screen.blit(enemy0, enemy0_rect)#绘制首架敌机。
if j % 60 == 0:#60倍数。0.016*60=~1秒钟。
enemy_num=[1,random.randint(0,420),0,random.randint(1,3)]
print(j,enemy_num)
List_enemy.append(enemy_num)
for i in range(len(List_enemy)):#超出游戏范围,销毁敌机。
if List_enemy[i][2] >= 666:
List_enemy[i][0] = 0
for enemy in List_enemy:
if enemy[0]==0: #根据状态,销毁炮弹。
List_enemy.remove(enemy)
for i in range(len(List_enemy)):#循环显示所有敌机。
enemy_rect[0] = List_enemy[i][1]
List_enemy[i][2] += List_enemy[i][3]
enemy_rect[1] = List_enemy[i][2]
screen.blit(enemy0, enemy_rect)#绘制敌机。
bullet0_rect.x = hero_rect.x + 46
screen.blit(bullet0, bullet0_rect)#绘制炮弹。
if j % 30 == 0:#0.016*30=~0.5秒钟。
bullet_rect=[1,hero_rect.x + 46,640]
List_bullet.append(bullet_rect) #英雄发射一枚子弹。
for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
if List_bullet[i][2] < 0:
List_bullet[i][0] = 0
for bullet in List_bullet:
if bullet[0]==0: #根据状态,销毁炮弹。
List_bullet.remove(bullet)
if bullet[1] > enemy0_rect.x - 9 and bullet[1] < enemy0_rect.x + 56:
if bullet[2] < enemy0_rect.y + 48:
List_bullet.remove(bullet) #销毁炮弹。
enemy0_rect.x = -100
enemy0_rect.y = -100 #隐藏敌机,等同销毁。
print('摧毁一架敌机!')
for i in range(len(List_bullet)):#循环显示所有炮弹。
bullet1_rect[0] = List_bullet[i][1]
List_bullet[i][2] -= 2
bullet1_rect[1] = List_bullet[i][2]
screen.blit(bullet0, bullet1_rect)#绘制炮弹。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_10():#调试炮弹。
import pygame
import time
import random
print("Hello,World!");print('程序版本0.15。')
print("可以摧毁敌机。英雄飞机无敌。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
bullet_rect=[1,196,640]
enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
enemy0_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。
List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
List_enemy=[]#敌机列表。[[1,100,100,2]]。[状态,横标,纵标,速度]。
enemy_rect = pygame.Rect(100, 100, 58, 48)# 次生敌机初始位置,尺寸。
y1=-700;y2=0#背景初始坐标。
for j in range(180):
time.sleep(0.016)
for event in pygame.event.get():
if event.type == pygame.QUIT:# 判断是否退出游戏。
print("游戏结束")
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
enemy0_rect.y += 2
if enemy0_rect.y >= 666:
enemy0_rect.y = 700
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
screen.blit(enemy0, enemy0_rect)#绘制首架敌机。
if j % 60 == 0:#60倍数。0.016*60=~1秒钟。
enemy_num=[1,random.randint(0,420),0,random.randint(1,3)]
print(j,enemy_num)
List_enemy.append(enemy_num)
for i in range(len(List_enemy)):#超出游戏范围,销毁敌机。
if List_enemy[i][2] >= 666:
List_enemy[i][0] = 0
for enemy in List_enemy:
if enemy[0]==0: #根据状态,销毁炮弹。
List_enemy.remove(enemy)
for i in range(len(List_enemy)):#循环显示所有敌机。
enemy_rect[0] = List_enemy[i][1]
List_enemy[i][2] += List_enemy[i][3]
enemy_rect[1] = List_enemy[i][2]
screen.blit(enemy0, enemy_rect)#绘制敌机。
bullet0_rect.x = hero_rect.x + 46
screen.blit(bullet0, bullet0_rect)#绘制炮弹。
if j % 30 == 0:#0.016*30=~0.5秒钟。
bullet_rect=[1,hero_rect.x + 46,640]
List_bullet.append(bullet_rect) #英雄发射一枚子弹。
for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
if List_bullet[i][2] < 0:
List_bullet[i][0] = 0
for bullet in List_bullet:
if bullet[0]==0: #根据状态,销毁炮弹。
List_bullet.remove(bullet)
if bullet[1] > enemy0_rect.x - 9 and bullet[1] < enemy0_rect.x + 56:
if bullet[2] < enemy0_rect.y + 48:
List_bullet.remove(bullet) #销毁炮弹。
enemy0_rect.x = -100
enemy0_rect.y = -100 #隐藏敌机,等同销毁。
print('摧毁一架敌机!First blood!')
for enemy in List_enemy:
if bullet[1] > enemy[1] - 9 and bullet[1] < enemy[1] + 56:
if bullet[2] > enemy[2] and bullet[2] < enemy[2] + 48:
List_bullet.remove(bullet) #销毁一发炮弹。
List_enemy.remove(enemy) #销毁一架敌机。
print('再次摧毁一架敌机!One more!')
for i in range(len(List_bullet)):#循环显示所有炮弹。
bullet1_rect[0] = List_bullet[i][1]
List_bullet[i][2] -= 2
bullet1_rect[1] = List_bullet[i][2]
screen.blit(bullet0, bullet1_rect)#绘制炮弹。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_11():#调试战斗。
import pygame
import time
import random
print("Hello,World!");print('程序版本0.16。')
print("英雄取消无敌。首架敌机可以杀死英雄。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
bullet_rect=[1,196,640]
enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
enemy0_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。
List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
List_enemy=[]#敌机列表。[[1,100,100,2]]。[状态,横标,纵标,速度]。
enemy_rect = pygame.Rect(100, 100, 58, 48)# 次生敌机初始位置,尺寸。
y1=-700;y2=0#背景初始坐标。
for j in range(180):
time.sleep(0.016)
for event in pygame.event.get():
if event.type == pygame.QUIT:# 判断是否退出游戏。
print("游戏结束")
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
enemy0_rect.y += 2
if enemy0_rect.y >= 666:
enemy0_rect.y = 700
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
screen.blit(enemy0, enemy0_rect)#绘制首架敌机。
if j % 60 == 0:#60倍数。0.016*60=~1秒钟。
enemy_num=[1,random.randint(0,420),0,random.randint(1,3)]
print(j,enemy_num)
List_enemy.append(enemy_num)
for i in range(len(List_enemy)):#超出游戏范围,销毁敌机。
if List_enemy[i][2] >= 666:
List_enemy[i][0] = 0
for enemy in List_enemy:
if enemy[0]==0: #根据状态,销毁炮弹。
List_enemy.remove(enemy)
for i in range(len(List_enemy)):#循环显示所有敌机。
enemy_rect[0] = List_enemy[i][1]
List_enemy[i][2] += List_enemy[i][3]
enemy_rect[1] = List_enemy[i][2]
screen.blit(enemy0, enemy_rect)#绘制敌机。
bullet0_rect.x = hero_rect.x + 46
screen.blit(bullet0, bullet0_rect)#绘制炮弹。
if j % 30 == 0:#0.016*30=~0.5秒钟。
bullet_rect=[1,hero_rect.x + 46,640]
List_bullet.append(bullet_rect) #英雄发射一枚子弹。
for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
if List_bullet[i][2] < 0:
List_bullet[i][0] = 0
for bullet in List_bullet:
if bullet[0]==0: #根据状态,销毁炮弹。
List_bullet.remove(bullet)
if bullet[1] > enemy0_rect.x - 9 and bullet[1] < enemy0_rect.x + 56:
if bullet[2] < enemy0_rect.y + 48:
List_bullet.remove(bullet) #销毁炮弹。
enemy0_rect.x = -100
enemy0_rect.y = -100 #隐藏敌机,等同销毁。
print('摧毁一架敌机!First blood!')
if enemy0_rect.x > hero_rect.x - 59 and enemy0_rect.x < hero_rect.x + 99:
if enemy0_rect.y > hero_rect.y - 55:
enemy0_rect.x = -100
enemy0_rect.y = -100
hero_rect.x = -200
hero_rect.y = -200
print("英雄牺牲!游戏结束。")
pygame.quit()# 结束游戏
exit()
for enemy in List_enemy:
if bullet[1] > enemy[1] - 9 and bullet[1] < enemy[1] + 56:
if bullet[2] > enemy[2] and bullet[2] < enemy[2] + 48:
List_bullet.remove(bullet) #销毁一发炮弹。
List_enemy.remove(enemy) #销毁一架敌机。
print('再次摧毁一架敌机!One more!')
if enemy[1] > hero_rect.x - 59 and enemy[1] < hero_rect.x + 99:
if enemy[2] > hero_rect.y - 55:
List_enemy.remove(enemy) #敌机碰撞消失。
hero_rect.x = -200
hero_rect.y = -200
print("英雄牺牲!游戏结束。")
pygame.quit()# 结束游戏
exit()
for i in range(len(List_bullet)):#循环显示所有炮弹。
bullet1_rect[0] = List_bullet[i][1]
List_bullet[i][2] -= 2
bullet1_rect[1] = List_bullet[i][2]
screen.blit(bullet0, bullet1_rect)#绘制炮弹。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
pygame.quit()
def Main3_12():#取消游戏时间控制。
import pygame
import time
import random
print("Hello,World!");print('程序版本0.17。')
print("无限循环。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
bullet_rect=[1,196,640]
enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
enemy0_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。
enemy_rect = pygame.Rect(100, 100, 58, 48)# 次生敌机初始位置,尺寸。
List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
List_enemy=[]#敌机列表。[[1,100,100,2]]。[状态,横标,纵标,速度]。
y1=-700;y2=0#背景初始坐标。
j=0
while True:
time.sleep(0.016)
for event in pygame.event.get():
if event.type == pygame.QUIT:# 判断是否退出游戏。
print("游戏结束")
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
enemy0_rect.y += 2 #首架敌机。
if enemy0_rect.y >= 666: #如果首架敌机超出游戏显示范围,隐藏。
enemy0_rect.y = 700
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
screen.blit(enemy0, enemy0_rect)#绘制首架敌机。
if j % 60 == 0:#判断60倍数。0.016*60=~1秒钟。产生敌机。
enemy_num=[1,random.randint(0,420),0,random.randint(1,3)]
List_enemy.append(enemy_num)
for i in range(len(List_enemy)):#超出游戏范围,销毁敌机。
if List_enemy[i][2] >= 666:
List_enemy[i][0] = 0
for enemy in List_enemy:
if enemy[0]==0: #根据状态,销毁炮弹。
List_enemy.remove(enemy)
for i in range(len(List_enemy)):#循环显示所有敌机。
enemy_rect[0] = List_enemy[i][1]
List_enemy[i][2] += List_enemy[i][3]
enemy_rect[1] = List_enemy[i][2]
screen.blit(enemy0, enemy_rect)#绘制敌机。
bullet0_rect.x = hero_rect.x + 46 #机舱炮弹。
screen.blit(bullet0, bullet0_rect)#绘制炮弹。
if j % 30 == 0:#判断60倍数。0.016*30=~0.5秒钟。产生炮弹。
bullet_rect=[1,hero_rect.x + 46,640]
List_bullet.append(bullet_rect) #英雄发射一枚子弹。
for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
if List_bullet[i][2] < 0:
List_bullet[i][0] = 0
for bullet in List_bullet:
if bullet[0]==0: #根据状态,销毁炮弹。
List_bullet.remove(bullet)
if bullet[1] > enemy0_rect.x - 9 and bullet[1] < enemy0_rect.x + 56:
if bullet[2] < enemy0_rect.y + 48:
List_bullet.remove(bullet) #销毁炮弹。
enemy0_rect.x = -100
enemy0_rect.y = -100 #隐藏首架敌机,等同销毁。
print('摧毁一架敌机!First blood!')
if enemy0_rect.x > hero_rect.x - 59 and enemy0_rect.x < hero_rect.x + 99:
if enemy0_rect.y > hero_rect.y - 55:
enemy0_rect.x = -100
enemy0_rect.y = -100
hero_rect.x = -200
hero_rect.y = -200
print("英雄牺牲!游戏结束。")
pygame.quit()# 结束游戏。
exit()
for enemy in List_enemy:
if bullet[1] > enemy[1] - 9 and bullet[1] < enemy[1] + 56:
if bullet[2] > enemy[2] and bullet[2] < enemy[2] + 48:
List_bullet.remove(bullet) #销毁一发炮弹。
List_enemy.remove(enemy) #销毁一架敌机。
print('再次摧毁一架敌机!One more!')
if enemy[1] > hero_rect.x - 55 and enemy[1] < hero_rect.x + 99:
if enemy[2] > hero_rect.y - 55:
List_enemy.remove(enemy) #敌机碰撞消失。
hero_rect.x = -200
hero_rect.y = -200
print("英雄牺牲!游戏结束。")
pygame.quit()# 结束游戏
exit()
for i in range(len(List_bullet)):#循环显示所有炮弹。
bullet1_rect[0] = List_bullet[i][1]
List_bullet[i][2] -= 2
bullet1_rect[1] = List_bullet[i][2]
screen.blit(bullet0, bullet1_rect)#绘制炮弹。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
j+=1
pygame.quit()
def Main3_13():#精简代码,初步完工。取消首架敌机。
import pygame;import time;import random
print("Hello,World!");print('程序版本0.18。')
print("飞机大战游戏开始。")
screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
bullet_rect=[1,196,640]
enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
enemy_rect = pygame.Rect(100, 100, 58, 48)# 次生敌机初始位置,尺寸。
List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
List_enemy=[]#敌机列表。[[1,100,100,2]]。[状态,横标,纵标,速度]。
y1=-700;y2=0#两个背景图像,刷新初始纵向坐标。
j=0
while True:
time.sleep(0.016)
for event in pygame.event.get():
if event.type == pygame.QUIT:# 判断是否退出游戏。
print("游戏结束")
pygame.quit()
exit()
keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
hero_speed = 4
elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
hero_speed = -4
else:
hero_speed = 0
hero_rect.x += hero_speed
if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 380
if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
hero_rect.x = 0
screen.blit(bg1, (0, y1))#绘制背景图像。
screen.blit(bg2, (0, y2))#绘制背景图像。
screen.blit(hero, hero_rect)#绘制英雄飞机图像。
if j % 60 == 0:#判断60倍数。0.016*60=~1秒钟。产生敌机。
enemy_num=[1,random.randint(0,420),0,random.randint(1,3)]
List_enemy.append(enemy_num)
for i in range(len(List_enemy)):#超出游戏范围,销毁敌机。
if List_enemy[i][2] >= 666:
List_enemy[i][0] = 0
for enemy in List_enemy:
if enemy[0]==0: #根据状态,销毁敌机。
List_enemy.remove(enemy)
for i in range(len(List_enemy)):#循环显示所有敌机。
enemy_rect[0] = List_enemy[i][1]
List_enemy[i][2] += List_enemy[i][3]
enemy_rect[1] = List_enemy[i][2]
screen.blit(enemy0, enemy_rect)#绘制敌机。
bullet0_rect.x = hero_rect.x + 46 #机舱炮弹。
screen.blit(bullet0, bullet0_rect)#绘制炮弹。
if j % 30 == 0:#判断60倍数。0.016*30=~0.5秒钟。产生炮弹。
bullet_rect=[1,hero_rect.x + 46,640]
List_bullet.append(bullet_rect) #英雄发射一枚子弹。
for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
if List_bullet[i][2] < 0:
List_bullet[i][0] = 0
for bullet in List_bullet:
if bullet[0]==0: #根据状态,销毁炮弹。
List_bullet.remove(bullet)
for enemy in List_enemy:
if bullet[1] > enemy[1] - 9 and bullet[1] < enemy[1] + 56:
if bullet[2] > enemy[2] and bullet[2] < enemy[2] + 48:
List_bullet.remove(bullet) #销毁一发炮弹。
List_enemy.remove(enemy) #销毁一架敌机。
print('摧毁一架敌机!Good job!')
if enemy[1] > hero_rect.x - 55 and enemy[1] < hero_rect.x + 99:
if enemy[2] > hero_rect.y - 55:
List_enemy.remove(enemy) #敌机碰撞消失。
hero_rect.x = -200
hero_rect.y = -200
print("英雄牺牲!游戏结束。Game Over")
pygame.quit()# 结束游戏
exit()
for i in range(len(List_bullet)):#循环显示所有炮弹。
bullet1_rect[0] = List_bullet[i][1]
List_bullet[i][2] -= 2
bullet1_rect[1] = List_bullet[i][2]
screen.blit(bullet0, bullet1_rect)#绘制炮弹。
pygame.display.update()#更新屏幕显示。
y1+=1;y2+=1
if y1==700:
y1=-700
if y2==700:
y2=-700
j+=1
pygame.quit()
Main3_13() #根据目录,运行游戏,不同版本,独立执行。
游戏素材:
me1.png
bullet1.png
enemy1.png
background.png