目录

1、导入模块

2、窗口操作

3、事件操作

4、长按事件

5、添加游戏背景

6、添加英雄飞机

7、获取飞机的图片矩形

8、基本游戏窗口

9、添加游戏窗口图片

10、英雄飞机登场

11、英雄飞机装备子弹并发射

1、enemy_plane

2、game_main

3、game_map

4、game_score

5、hero_plane

6、plane_bullet


先安装一下pygame这个库

然后将素材烤入,一些飞机图片和背景

需要修改一下编辑器不然会找不到

草率了,貌似得再pycharm里下载

pip下载的它找不到

 我又重新下载了一下

再右面加号新建一个解释器

选择本地python.exe,把公开它的库选上终于好了

1、导入模块

#导入模块
import pygame
#对pygame 进行实例化, 叫做硬件准备
pygame.init()

2、窗口操作

#导入模块
import pygame#对pygame 进行实例化, 叫做硬件准备
pygame.init()#创立窗口  set_mode([400,400])pygame.display.set_mode([400,400])#设置游戏窗口的标题
pygame.display.set_caption("飞机大战")#加载本地资源图片
logo_image = pygame.image.load("res/app.ico")#设置游戏窗口logo
pygame.display.set_icon(logo_image)

3、事件操作

#导入模块
import pygame
import sys#对pygame 进行实例化, 叫做硬件准备
pygame.init()#创立窗口  set_mode([400,400])pygame.display.set_mode([400,400])#设置游戏窗口的标题
pygame.display.set_caption("飞机大战")#加载本地资源图片
logo_image = pygame.image.load("res/app.ico")#设置游戏窗口logo
pygame.display.set_icon(logo_image)
#死循环 在死循环中监听鼠标事件 与键盘事件while True:#获取所有游戏窗口内的事件监听 -> 列表event_list = pygame.event.get()#循环遍历所有事件for event in event_list:#判断鼠标点击了的操作if event.type == pygame.QUIT:#退出游戏pygame.quit()#退出程序sys.exit()#监听键盘上的操作if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:#退出游戏pygame.quit()# 退出程序sys.exit()

4、长按事件

#导入模块
import pygame
import sys#对pygame 进行实例化, 叫做硬件准备
pygame.init()#创立窗口  set_mode([400,400])pygame.display.set_mode([400,400])#设置游戏窗口的标题
pygame.display.set_caption("飞机大战")#加载本地资源图片
logo_image = pygame.image.load("res/app.ico")#设置游戏窗口logo
pygame.display.set_icon(logo_image)
#死循环 在死循环中监听鼠标事件 与键盘事件while True:#获取所有游戏窗口内的事件监听 -> 列表event_list = pygame.event.get()#循环遍历所有事件for event in event_list:#判断鼠标点击了的操作if event.type == pygame.QUIT:#退出游戏pygame.quit()#退出程序sys.exit()#监听键盘上的操作if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:#退出游戏pygame.quit()# 退出程序sys.exit()

5、添加游戏背景

#导入模块
import pygame
import sys#对pygame 进行实例化, 叫做硬件准备
pygame.init()#创立窗口  set_mode([400,400])window = pygame.display.set_mode([512,768])#设置游戏窗口的标题
pygame.display.set_caption("飞机大战")#加载本地资源图片
logo_image = pygame.image.load("res/app.ico")#设置游戏窗口logo
pygame.display.set_icon(logo_image)#游戏背景图
bg_image = pygame.image.load("res/img_bg_level_2.jpg")#添加到游戏里面
window.blit(bg_image,(0,0))
#刷新窗口pygame.display.update()#死循环 在死循环中监听鼠标事件 与键盘事件while True:#获取所有游戏窗口内的事件监听 -> 列表event_list = pygame.event.get()#循环遍历所有事件for event in event_list:#判断鼠标点击了的操作if event.type == pygame.QUIT:#退出游戏pygame.quit()#退出程序sys.exit()#监听键盘上的操作if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:#退出游戏pygame.quit()# 退出程序sys.exit()#监听键盘中的长按事件-> 元组(只有两种情况 0 或者 1)pressed_keys = pygame.key.get_pressed()#判断向上的按键是否在长按(1)if pressed_keys[pygame.K_UP] or pressed_keys[pygame.K_w]:print("向上")#判断向下按键是否在长按(1)if pressed_keys[pygame.K_DOWN] or pressed_keys[pygame.K_s]:print("向下")# 判断向左按键是否在长按(1)if pressed_keys[pygame.K_LEFT] or pressed_keys[pygame.K_a]:print("向左")# 判断向右按键是否在长按(1)if pressed_keys[pygame.K_RIGHT] or pressed_keys[pygame.K_d]:print("向右")

6、添加英雄飞机

#导入模块
import pygame
import sys#对pygame 进行实例化, 叫做硬件准备
pygame.init()#创立窗口  set_mode([400,400])window = pygame.display.set_mode([512,768])#设置游戏窗口的标题
pygame.display.set_caption("飞机大战")#加载本地资源图片
logo_image = pygame.image.load("res/app.ico")#设置游戏窗口logo
pygame.display.set_icon(logo_image)#游戏背景图
bg_image = pygame.image.load("res/img_bg_level_2.jpg")#添加飞机背景
hero_image = pygame.image.load("res/hero2.png")#添加到游戏里面
window.blit(bg_image,(0,0))
window.blit(hero_image,(0,0))#刷新窗口pygame.display.update()#死循环 在死循环中监听鼠标事件 与键盘事件while True:#获取所有游戏窗口内的事件监听 -> 列表event_list = pygame.event.get()#循环遍历所有事件for event in event_list:#判断鼠标点击了的操作if event.type == pygame.QUIT:#退出游戏pygame.quit()#退出程序sys.exit()#监听键盘上的操作if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:#退出游戏pygame.quit()# 退出程序sys.exit()#监听键盘中的长按事件-> 元组(只有两种情况 0 或者 1)pressed_keys = pygame.key.get_pressed()#判断向上的按键是否在长按(1)if pressed_keys[pygame.K_UP] or pressed_keys[pygame.K_w]:print("向上")#判断向下按键是否在长按(1)if pressed_keys[pygame.K_DOWN] or pressed_keys[pygame.K_s]:print("向下")# 判断向左按键是否在长按(1)if pressed_keys[pygame.K_LEFT] or pressed_keys[pygame.K_a]:print("向左")# 判断向右按键是否在长按(1)if pressed_keys[pygame.K_RIGHT] or pressed_keys[pygame.K_d]:print("向右")

7、获取飞机的图片矩形

#导入模块
import pygame
import sys#对pygame 进行实例化, 叫做硬件准备
pygame.init()#创立窗口  set_mode([400,400])window = pygame.display.set_mode([512,768])#设置游戏窗口的标题
pygame.display.set_caption("飞机大战")#加载本地资源图片
logo_image = pygame.image.load("res/app.ico")#设置游戏窗口logo
pygame.display.set_icon(logo_image)#游戏背景图
bg_image = pygame.image.load("res/img_bg_level_2.jpg")#添加飞机背景
hero_image = pygame.image.load("res/hero2.png")#添加到游戏里面
window.blit(bg_image,(0,0))
window.blit(hero_image,(0,0))#刷新窗口pygame.display.update()#死循环 在死循环中监听鼠标事件 与键盘事件while True:#获取所有游戏窗口内的事件监听 -> 列表event_list = pygame.event.get()#循环遍历所有事件for event in event_list:#判断鼠标点击了的操作if event.type == pygame.QUIT:#退出游戏pygame.quit()#退出程序sys.exit()#监听键盘上的操作if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:#退出游戏pygame.quit()# 退出程序sys.exit()#监听键盘中的长按事件-> 元组(只有两种情况 0 或者 1)pressed_keys = pygame.key.get_pressed()#判断向上的按键是否在长按(1)if pressed_keys[pygame.K_UP] or pressed_keys[pygame.K_w]:print("向上")#判断向下按键是否在长按(1)if pressed_keys[pygame.K_DOWN] or pressed_keys[pygame.K_s]:print("向下")# 判断向左按键是否在长按(1)if pressed_keys[pygame.K_LEFT] or pressed_keys[pygame.K_a]:print("向左")# 判断向右按键是否在长按(1)if pressed_keys[pygame.K_RIGHT] or pressed_keys[pygame.K_d]:print("向右")

8、基本游戏窗口

import pygame, sys#自定义游戏窗口的管理类
class GameWindow(object):def __init__(self):# 对pygame 进行实例化, 叫做硬件准备pygame.init()# 创立窗口  set_mode([400,400])window = pygame.display.set_mode([512, 768])# 设置游戏窗口的标题pygame.display.set_caption("飞机大战")# 加载本地资源图片logo_image = pygame.image.load("res/app.ico")# 设置游戏窗口logopygame.display.set_icon(logo_image)#定义各种矩形的坐标移动def __action(self):pass#根据矩形的坐标, 重新对元素进行描绘def __draw(self):pass#处理窗口中的监听事件def __event(self):# 获取所有游戏窗口内的事件监听 -> 列表event_list = pygame.event.get()# 循环遍历所有事件for event in event_list:# 判断鼠标点击了的操作if event.type == pygame.QUIT:self.game_over()# 监听键盘上的操作if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:self.game_over()if event.key == pygame.K_SPACE:print("发射子弹")# 监听键盘中的长按事件-> 元组(只有两种情况 0 或者 1)pressed_keys = pygame.key.get_pressed()# 判断向上的按键是否在长按(1)if pressed_keys[pygame.K_UP] or pressed_keys[pygame.K_w]:print("向上")# 判断向下按键是否在长按(1)if pressed_keys[pygame.K_DOWN] or pressed_keys[pygame.K_s]:print("向下")# 判断向左按键是否在长按(1)if pressed_keys[pygame.K_LEFT] or pressed_keys[pygame.K_a]:print("向左")# 判断向右按键是否在长按(1)if pressed_keys[pygame.K_RIGHT] or pressed_keys[pygame.K_d]:print("向右")def __update(self):passdef game_over(self):# 退出游戏pygame.quit()# 退出程序sys.exit()def run(self):while True:self.__action()self.__draw()self.__event()self.__update()#主函数
def main():game_window = GameWindow()game_window.run()if __name__ == '__main__':main()

9、添加游戏窗口图片

import pygame, sys ,random# 定义常量WINDOW_WIDTH, WINDOW_HEIGHT = 512, 768
#自定义地图类
class GameMap(object):#定义地图初始化def __init__(self):# 定义1到5的随机数self.num = str(random.randint(1,5))#图片self.img_1 = pygame.image.load("res/img_bg_level_"+ self.num +".jpg")self.img_2 = pygame.image.load("res/img_bg_level_" + self.num + ".jpg")#设置和记录图片的Y轴self.img_1_y = -WINDOW_HEIGHTself.img_2_y = 0#速度self.speed = 2#向下移动def move_down(self):#重置地图Y轴if self.img_1_y >= 0:self.img_1_y = - WINDOW_HEIGHTself.img_2_y = 0self.img_1_y += self.speedself.img_2_y += self.speed#自定义游戏窗口的管理类
class GameWindow(object):def __init__(self):# 对pygame 进行实例化, 叫做硬件准备pygame.init()# 创立窗口  set_mode([400,400])self.window = pygame.display.set_mode([WINDOW_WIDTH,WINDOW_HEIGHT ])# 设置游戏窗口的标题pygame.display.set_caption("飞机大战")# 加载本地资源图片logo_image = pygame.image.load("res/app.ico")# 设置游戏窗口logopygame.display.set_icon(logo_image)#地图对象self.map = GameMap()#定义各种矩形的坐标移动def __action(self):self.map.move_down()#根据矩形的坐标, 重新对元素进行描绘def __draw(self):self.window.blit(self.map.img_1,(0,self.map.img_1_y))self.window.blit(self.map.img_2,(0,self.map.img_2_y))#处理窗口中的监听事件def __event(self):# 获取所有游戏窗口内的事件监听 -> 列表event_list = pygame.event.get()# 循环遍历所有事件for event in event_list:# 判断鼠标点击了的操作if event.type == pygame.QUIT:self.game_over()# 监听键盘上的操作if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:self.game_over()if event.key == pygame.K_SPACE:print("发射子弹")# 监听键盘中的长按事件-> 元组(只有两种情况 0 或者 1)pressed_keys = pygame.key.get_pressed()# 判断向上的按键是否在长按(1)if pressed_keys[pygame.K_UP] or pressed_keys[pygame.K_w]:print("向上")# 判断向下按键是否在长按(1)if pressed_keys[pygame.K_DOWN] or pressed_keys[pygame.K_s]:print("向下")# 判断向左按键是否在长按(1)if pressed_keys[pygame.K_LEFT] or pressed_keys[pygame.K_a]:print("向左")# 判断向右按键是否在长按(1)if pressed_keys[pygame.K_RIGHT] or pressed_keys[pygame.K_d]:print("向右")def __update(self):pygame.display.update()def game_over(self):# 退出游戏pygame.quit()# 退出程序sys.exit()def run(self):while True:self.__action()self.__draw()self.__event()self.__update()#主函数
def main():game_window = GameWindow()game_window.run()if __name__ == '__main__':main()

10、英雄飞机登场

import pygame, sys ,random# 定义常量WINDOW_WIDTH, WINDOW_HEIGHT = 512, 768#自定义飞机类
class HeroPlane(object):#初始化飞机类def __init__(self):#加载主飞机图片self.img = pygame.image.load("res/hero2.png")# 获取飞机矩阵self.img_rect = self.img.get_rect()#设置飞机的初始位置self.img_rect.move_ip((WINDOW_WIDTH - self.img_rect[2])/2,WINDOW_HEIGHT - self.img_rect[3]- 50)#设置飞机的速度self.speed = 3# 向上def move_up(self):#边缘检测if self.img_rect[1] >= 0:self.img_rect.move_ip(0, -self.speed)# 向下def move_domw(self):# 边缘检测if self.img_rect[1] <= WINDOW_HEIGHT -self.img_rect[3]:self.img_rect.move_ip(0, self.speed)#向左def move_left(self):# 边缘检测if self.img_rect[0] >=0:self.img_rect.move_ip(-self.speed, 0 )#向右def move_right(self):if self.img_rect[0] <= WINDOW_WIDTH - self.img_rect[2]:self.img_rect.move_ip(self.speed, 0)def shot(self):print("发射子弹")#自定义地图类
class GameMap(object):#定义地图初始化def __init__(self):# 定义1到5的随机数self.num = str(random.randint(1,5))#图片self.img_1 = pygame.image.load("res/img_bg_level_"+ self.num +".jpg")self.img_2 = pygame.image.load("res/img_bg_level_" + self.num + ".jpg")#设置和记录图片的Y轴self.img_1_y = -WINDOW_HEIGHTself.img_2_y = 0#速度self.speed = 2#向下移动def move_down(self):#重置地图Y轴if self.img_1_y >= 0:self.img_1_y = - WINDOW_HEIGHTself.img_2_y = 0self.img_1_y += self.speedself.img_2_y += self.speed#自定义游戏窗口的管理类
class GameWindow(object):def __init__(self):# 对pygame 进行实例化, 叫做硬件准备pygame.init()# 创立窗口  set_mode([400,400])self.window = pygame.display.set_mode([WINDOW_WIDTH,WINDOW_HEIGHT ])# 设置游戏窗口的标题pygame.display.set_caption("飞机大战")# 加载本地资源图片logo_image = pygame.image.load("res/app.ico")# 设置游戏窗口logopygame.display.set_icon(logo_image)#地图对象self.map = GameMap()#英雄飞机的对象self.hero_plane = HeroPlane()#定义各种矩形的坐标移动def __action(self):self.map.move_down()#根据矩形的坐标, 重新对元素进行描绘def __draw(self):#添加背景图片self.window.blit(self.map.img_1,(0,self.map.img_1_y))self.window.blit(self.map.img_2,(0,self.map.img_2_y))#添加飞机图片self.window.blit(self.hero_plane.img,(self.hero_plane.img_rect[0],self.hero_plane.img_rect[1]))#处理窗口中的监听事件def __event(self):# 获取所有游戏窗口内的事件监听 -> 列表event_list = pygame.event.get()# 循环遍历所有事件for event in event_list:# 判断鼠标点击了的操作if event.type == pygame.QUIT:self.game_over()# 监听键盘上的操作if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:self.game_over()if event.key == pygame.K_SPACE:print("发射子弹")# 监听键盘中的长按事件-> 元组(只有两种情况 0 或者 1)pressed_keys = pygame.key.get_pressed()# 判断向上的按键是否在长按(1)if pressed_keys[pygame.K_UP] or pressed_keys[pygame.K_w]:print("向上")# 判断向下按键是否在长按(1)if pressed_keys[pygame.K_DOWN] or pressed_keys[pygame.K_s]:print("向下")# 判断向左按键是否在长按(1)if pressed_keys[pygame.K_LEFT] or pressed_keys[pygame.K_a]:print("向左")# 判断向右按键是否在长按(1)if pressed_keys[pygame.K_RIGHT] or pressed_keys[pygame.K_d]:print("向右")def __update(self):pygame.display.update()def game_over(self):# 退出游戏pygame.quit()# 退出程序sys.exit()def run(self):while True:self.__action()self.__draw()self.__event()self.__update()#主函数
def main():game_window = GameWindow()game_window.run()if __name__ == '__main__':main()

11、英雄飞机装备子弹并发射

import pygame, sys, random# 定义一个常量(赋值后不能修改)常量一般使用大写字母
WINDOW_WIDTH, WINDOW_HEIGHT = 512, 768
# python中 崇尚的是一切靠自觉# 自定义一个英雄飞机子弹类
class PlaneBullet(object):def __init__(self):# 图片self.img = pygame.image.load("res/bullet_10.png")# 获取子弹的图片矩形self.img_rect = self.img.get_rect()# 子弹的状态self.is_shot = False# 速度self.speed = 4# 向上移动def move_up(self):self.img_rect.move_ip(0, -self.speed)# 注意改变子弹的状态if self.img_rect[1] <= -self.img_rect[3]:# 设置为未发射状态self.is_shot = False# 自定义一个英雄飞机类
class HeroPlane(object):def __init__(self):# 赋值self.img = pygame.image.load("res/hero2.png")# 获取图片矩形self.img_rect = self.img.get_rect()# 设置飞机的初始位置self.img_rect.move_ip((WINDOW_WIDTH - self.img_rect[2])/2, WINDOW_HEIGHT - self.img_rect[3] - 50)# 飞机速度self.speed = 3# 子弹弹夹self.bullet_list = [PlaneBullet() for i in range(6)]# 向上def move_up(self):# 边缘检测if self.img_rect[1] >= 0:self.img_rect.move_ip(0, -self.speed)# 向下def move_down(self):# 边缘检测if self.img_rect[1] <= WINDOW_HEIGHT - self.img_rect[3]:self.img_rect.move_ip(0, self.speed)# 向左def move_left(self):# 边缘检测if self.img_rect[0] >= 0:self.img_rect.move_ip(-self.speed, 0)# 向右def move_right(self):# 边缘检测if self.img_rect[0] <= WINDOW_WIDTH - self.img_rect[2]:self.img_rect.move_ip(self.speed, 0)# 发射子弹def shot(self):# 遍历所有的子弹for bullet in self.bullet_list:# 判断未发射的if not bullet.is_shot:# 设置子弹的位置bullet.img_rect[0] = self.img_rect[0] + (self.img_rect[2] - bullet.img_rect[2])/2bullet.img_rect[1] = self.img_rect[1] - bullet.img_rect[3]# 设置为发射状态bullet.is_shot = True# 一次只能发射一颗子弹break# 自定义一个地图类
class GameMap(object):def __init__(self):self.num = str(random.randint(1, 5))# 图片self.img_1 = pygame.image.load("res/img_bg_level_" + self.num + ".jpg")self.img_2 = pygame.image.load("res/img_bg_level_" + self.num + ".jpg")# 设置和记录图片的y轴self.img1_y = -WINDOW_HEIGHTself.img2_y = 0# 速度self.speed = 2# 向下移动def move_down(self):# 地图的y轴重置if self.img1_y >= 0:self.img1_y = -WINDOW_HEIGHTself.img2_y = 0self.img1_y += self.speedself.img2_y += self.speed# 自定义一个游戏窗口管理类
class GameWindow(object):# 构造方法def __init__(self):# pygame进行实例化pygame.init()# 创建游戏窗口-> 返回一个游戏窗口对象self.window = pygame.display.set_mode([WINDOW_WIDTH, WINDOW_HEIGHT])# 设置游戏窗口的标题pygame.display.set_caption("飞机大战")# 加载本地资源图片 返回一个图片对象logo_image = pygame.image.load("res/app.ico")# 设置游戏窗口的logopygame.display.set_icon(logo_image)# 地图对象self.map = GameMap()# 英雄飞机对象self.hero_plane = HeroPlane()# 运行游戏程序def run(self):while True:self.__action()self.__draw()self.__event()self.__update()# 1.处理各种矩形坐标移动def __action(self):# 地图动画self.map.move_down()# 遍历子弹 叫子弹飞一会for bullet in self.hero_plane.bullet_list:# 判断如果已经发射if bullet.is_shot:bullet.move_up()# 2.根据矩形坐标,重新对元素进行绘制def __draw(self):# 添加地图图片self.window.blit(self.map.img_1, (0, self.map.img1_y))self.window.blit(self.map.img_2, (0, self.map.img2_y))# 飞机图片self.window.blit(self.hero_plane.img, (self.hero_plane.img_rect[0], self.hero_plane.img_rect[1]))# 添加子弹for bullet in self.hero_plane.bullet_list:# 判断如果已经发射的子弹if bullet.is_shot:self.window.blit(bullet.img, (bullet.img_rect[0], bullet.img_rect[1]))# 3.处理窗口中的监听事件def __event(self):# 获取所有游戏窗口的中的事件监听-> 列表event_list = pygame.event.get()# 遍历所有的事件for event in event_list:# 判断如果是鼠标点击了if event.type == pygame.QUIT:self.game_over()# 监听esc键按下if event.type == pygame.KEYDOWN:# 判断是否按得是escif event.key == pygame.K_ESCAPE:self.game_over()# 判断是否按得是空格if event.key == pygame.K_SPACE:self.hero_plane.shot()# 监听键盘中的按键长按-> 元组(只有两种情况 0 或者 1) -> ASCIIpressed_keys = pygame.key.get_pressed()# 判断向上的按键是否在长按(1)if pressed_keys[pygame.K_UP] or pressed_keys[pygame.K_w]:self.hero_plane.move_up()# 判断向下的按键是否在长按(1)if pressed_keys[pygame.K_DOWN] or pressed_keys[pygame.K_s]:self.hero_plane.move_down()# 判断向左的按键是否在长按(1)if pressed_keys[pygame.K_LEFT] or pressed_keys[pygame.K_a]:self.hero_plane.move_left()# 判断向右的按键是否在长按(1)if pressed_keys[pygame.K_RIGHT] or pressed_keys[pygame.K_d]:self.hero_plane.move_right()# 4.刷新窗口def __update(self):pygame.display.update()# 结束游戏def game_over(self):# 退出游戏# 停止pygame 游戏引擎pygame.quit()# 退出程序sys.exit()# 主函数
def main():# 创建一个游戏窗口对象game_window = GameWindow()# 执行游戏game_window.run()if __name__ == '__main__':main()

所有的东西都在一起太多了,模块化一下

1、enemy_plane

import pygame, random# 定义一个常量(赋值后不能修改)常量一般使用大写字母
WINDOW_WIDTH, WINDOW_HEIGHT = 512, 768
# python中 崇尚的是一切靠自觉
# 自定义敌机类
class EnemyPlane(object):def __init__(self):self.num = str(random.randint(1, 7))# 图片self.img = pygame.image.load("res/img-plane_" + self.num + ".png")# 获取敌机的图片矩形self.img_rect = self.img.get_rect()self.reset()# 设置敌机的位置和速度def reset(self):# 设置敌机的位置和速度self.img_rect[0] = random.randint(0, WINDOW_WIDTH - self.img_rect[2])self.img_rect[1] = -self.img_rect[3]# 速度self.speed = random.randint(3, 5)# 向下移动def move_down(self):self.img_rect.move_ip(0, self.speed)# 判断如果在屏幕消失后 位置重置if self.img_rect[1] >= WINDOW_HEIGHT:self.reset()

2、game_main

# coding=utf-8
import pygame, sys, game_map, hero_plane, enemy_plane, game_score# 定义一个常量(赋值后不能修改)常量一般使用大写字母
WINDOW_WIDTH, WINDOW_HEIGHT = 512, 768
# python中 崇尚的是一切靠自觉# 自定义一个游戏窗口管理类
class GameWindow(object):# 构造方法def __init__(self):# pygame进行实例化pygame.init()# 加载背景音乐# pygame.mixer.music.load("./res/bg2.ogg")# # 循环播放背景音乐# pygame.mixer.music.play(-1)# 加载音效self.boom_sound = pygame.mixer.Sound("./res/baozha.ogg")# 创建游戏窗口-> 返回一个游戏窗口对象self.window = pygame.display.set_mode([WINDOW_WIDTH, WINDOW_HEIGHT])# 设置游戏窗口的标题pygame.display.set_caption("飞机大战")# 加载本地资源图片 返回一个图片对象logo_image = pygame.image.load("res/app.ico")# 设置游戏窗口的logopygame.display.set_icon(logo_image)# 地图对象self.map = game_map.GameMap()# 英雄飞机对象self.hero_plane = hero_plane.HeroPlane()# 多架敌机self.enemy_list = [enemy_plane.EnemyPlane() for i in range(6)]# 游戏分数self.game_score = game_score.GameScore(35)# 运行游戏程序def run(self):while True:self.__action()self.__draw()self.__event()self.__update()self.__bullet_hit_enemy()# 1.处理各种矩形坐标移动def __action(self):# 地图动画self.map.move_down()# 遍历子弹 叫子弹飞一会for bullet in self.hero_plane.bullet_list:# 判断如果已经发射if bullet.is_shot:bullet.move_up()# 敌机自由落体for enemy in self.enemy_list:enemy.move_down()# 2.根据矩形坐标,重新对元素进行绘制def __draw(self):# 添加地图图片self.window.blit(self.map.img_1, (0, self.map.img1_y))self.window.blit(self.map.img_2, (0, self.map.img2_y))# 飞机图片self.window.blit(self.hero_plane.img, (self.hero_plane.img_rect[0], self.hero_plane.img_rect[1]))# 添加子弹for bullet in self.hero_plane.bullet_list:# 判断如果已经发射的子弹if bullet.is_shot:self.window.blit(bullet.img, (bullet.img_rect[0], bullet.img_rect[1]))# 添加敌机for enemy in self.enemy_list:self.window.blit(enemy.img, (enemy.img_rect[0], enemy.img_rect[1]))# 添加文字self.window.blit(self.game_score.text_obj, (10, 10))# 3.处理窗口中的监听事件def __event(self):# 获取所有游戏窗口的中的事件监听-> 列表event_list = pygame.event.get()# 遍历所有的事件for event in event_list:# 判断如果是鼠标点击了if event.type == pygame.QUIT:self.game_over()# 监听esc键按下if event.type == pygame.KEYDOWN:# 判断是否按得是escif event.key == pygame.K_ESCAPE:self.game_over()# 判断是否按得是空格if event.key == pygame.K_SPACE:self.hero_plane.shot()# 监听键盘中的按键长按-> 元组(只有两种情况 0 或者 1) -> ASCIIpressed_keys = pygame.key.get_pressed()# 判断向上的按键是否在长按(1)if pressed_keys[pygame.K_UP] or pressed_keys[pygame.K_w]:self.hero_plane.move_up()# 判断向下的按键是否在长按(1)if pressed_keys[pygame.K_DOWN] or pressed_keys[pygame.K_s]:self.hero_plane.move_down()# 判断向左的按键是否在长按(1)if pressed_keys[pygame.K_LEFT] or pressed_keys[pygame.K_a]:self.hero_plane.move_left()# 判断向右的按键是否在长按(1)if pressed_keys[pygame.K_RIGHT] or pressed_keys[pygame.K_d]:self.hero_plane.move_right()# 4.刷新窗口def __update(self):pygame.display.update()# 5.结束游戏def game_over(self):# 停止音效self.boom_sound.stop()# 停止背景音乐# pygame.mixer.music.stop()# 退出游戏# 停止pygame 游戏引擎pygame.quit()# 退出程序sys.exit()# 6.碰撞检测(子弹和敌机碰撞)def __bullet_hit_enemy(self):# 判断# 遍历子弹for bullet in self.hero_plane.bullet_list:# 判断子弹发射if bullet.is_shot:# 遍历敌机for enemy in self.enemy_list:# 判断两个矩形是否相交,相交返回True,否则返回Falseflag = pygame.Rect.colliderect(bullet.img_rect, enemy.img_rect)if flag:# 子弹bullet.is_shot = False# 敌机enemy.reset()# 播放音效self.boom_sound.play()# 设置分数self.game_score.set_text_obj()# 主函数
def main():# 创建一个游戏窗口对象game_window = GameWindow()# 执行游戏game_window.run()if __name__ == '__main__':main()

3、game_map

import pygame, random# 定义一个常量(赋值后不能修改)常量一般使用大写字母
WINDOW_WIDTH, WINDOW_HEIGHT = 512, 768
# python中 崇尚的是一切靠自觉# 自定义一个地图类
class GameMap(object):def __init__(self):self.num = str(random.randint(1, 5))# 图片self.img_1 = pygame.image.load("res/img_bg_level_" + self.num + ".jpg")self.img_2 = pygame.image.load("res/img_bg_level_" + self.num + ".jpg")# 设置和记录图片的y轴self.img1_y = -WINDOW_HEIGHTself.img2_y = 0# 速度self.speed = 2# 向下移动def move_down(self):# 地图的y轴重置if self.img1_y >= 0:self.img1_y = -WINDOW_HEIGHTself.img2_y = 0self.img1_y += self.speedself.img2_y += self.speed

4、game_score


import pygame, random# 自定义文字管理类
class GameScore(object):# 记录分数__cls_score = 0def __init__(self, font_size):# 设置字体和大小self.font = pygame.font.SysFont("SimHei", font_size)# render(text(文本内容), antialias(抗锯齿), color(RGB)),返回文字对象self.text_obj = self.font.render("分数:0", 1, (255, 255, 255))# 设置显示的文字和字体颜色def set_text_obj(self):# 加5分GameScore.__cls_score += 5# 随机颜色值r = random.randint(0, 255)g = random.randint(0, 255)b = random.randint(0, 255)# 重新赋值self.text_obj = self.font.render("分数:%d" % GameScore.__cls_score, 1, (r, g, b))

5、hero_plane

import pygame, plane_bullet# 定义一个常量(赋值后不能修改)常量一般使用大写字母
WINDOW_WIDTH, WINDOW_HEIGHT = 512, 768
# python中 崇尚的是一切靠自觉# 自定义一个英雄飞机类
class HeroPlane(object):def __init__(self):# 赋值self.img = pygame.image.load("res/hero2.png")# 获取图片矩形self.img_rect = self.img.get_rect()# 设置飞机的初始位置self.img_rect.move_ip((WINDOW_WIDTH - self.img_rect[2])/2, WINDOW_HEIGHT - self.img_rect[3] - 50)# 飞机速度self.speed = 3# 子弹弹夹self.bullet_list = [plane_bullet.PlaneBullet() for i in range(6)]# 向上def move_up(self):# 边缘检测if self.img_rect[1] >= 0:self.img_rect.move_ip(0, -self.speed)# 向下def move_down(self):# 边缘检测if self.img_rect[1] <= WINDOW_HEIGHT - self.img_rect[3]:self.img_rect.move_ip(0, self.speed)# 向左def move_left(self):# 边缘检测if self.img_rect[0] >= 0:self.img_rect.move_ip(-self.speed, 0)# 向右def move_right(self):# 边缘检测if self.img_rect[0] <= WINDOW_WIDTH - self.img_rect[2]:self.img_rect.move_ip(self.speed, 0)# 发射子弹def shot(self):# 遍历所有的子弹for bullet in self.bullet_list:# 判断未发射的if not bullet.is_shot:# 设置子弹的位置bullet.img_rect[0] = self.img_rect[0] + (self.img_rect[2] - bullet.img_rect[2])/2bullet.img_rect[1] = self.img_rect[1] - bullet.img_rect[3]# 设置为发射状态bullet.is_shot = True# 一次只能发射一颗子弹break

6、plane_bullet

import pygame# 自定义一个英雄飞机子弹类
class PlaneBullet(object):def __init__(self):# 图片self.img = pygame.image.load("res/bullet_10.png")# 获取子弹的图片矩形self.img_rect = self.img.get_rect()# 子弹的状态self.is_shot = False# 速度self.speed = 4# 向上移动def move_up(self):self.img_rect.move_ip(0, -self.speed)# 注意改变子弹的状态if self.img_rect[1] <= -self.img_rect[3]:# 设置为未发射状态self.is_shot = False

python——飞机大战小游戏相关推荐

  1. python 飞机大战小游戏

    飞机大战小游戏,这里需要下载pygame模块 这是需要的素材,需要的自取: 上代码: import time import pygame from pygame.locals import *#检测事 ...

  2. Python快速实现简易飞机大战小游戏

    参考:用python实现简单的飞机大战小游戏_化华桦的博客-CSDN博客_python飞机大战 敌机图片: 我方飞机: 子弹: 背景图: 主函数代码main.py: from PySide2 impo ...

  3. python飞机大战加背景音乐_python实现飞机大战小游戏 python飞机大战中的音频文件怎么改成MP3...

    怎么样用Python写飞机大战游戏 python开发飞机大战外星人游戏怎么弄双人模式新的一年,哪怕仍是一个人,也要活得像一支队伍,为自己的头脑和心灵招兵买马,不气馁,有召唤,爱自由. 主函数 impo ...

  4. python小游戏——飞机大战小游戏(附源码)

    写在前面的一些P话: 大家之前用python编写过飞机大战的部分代码, 只能够展示英雄飞机,背景,敌机和发射子弹, 今天把背景音乐,击毁敌机,爆炸特效,得分等等相关功能一并加入进来, 代码有点长,三百 ...

  5. 【python】飞机大战小游戏练习

    飞机大战小游戏练习 一.前提准备 二.制作步骤 1.库的导入与初始化 2.窗口操作 3.键盘按键监听相关操作 4.添加游戏背景 5.加载玩家飞机 6.获取玩家飞机矩阵 三.完整代码编写 游戏背景类编写 ...

  6. 飞机大战小游戏(超详细)

    偷学Python之最后的项目二:飞机大战小游戏(超详细) 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志.--苏轼 甜甜先说 这次用Python中的pygame模块来完成一个飞机大战的小游戏:基本思 ...

  7. 飞机大战小游戏源码---飞机大战初体验

    开发环境: Windows10,pycharm,python3 源码使用教程: 打开pycharm,创建一个新的项目,文件-->新建项目 项目命名:飞机大战初体验,基本解释器选择python3版 ...

  8. 体感游戏 | 手势识别玩飞机大战游戏(一) 用pygame实现飞机大战小游戏

    Color Space OpenCV与AI深度学习 后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能,它们分别是: 使用Pygame实现简易飞机大战小游戏 使用Python+OpenCV实现简 ...

  9. 点击list view中一行内容可以在combox中显示_java版飞机大战小游戏详细教程(零基础小白也可以分分钟学会!)...

    一:游戏展示 飞机大战小游戏我们都玩过,通过移动飞机来打敌机,这里给大家展示一下游戏成果:呜呜呜由于gif只能上传5M大小,所以就不能给大家展示操作了,如果大家有兴趣可以自己自己做出来再玩哟. 这里面 ...

最新文章

  1. R语言使用caret包的preProcess函数进行数据预处理:对所有的数据列进行expoTrans指数变换(Exponential transformation、可以处理负数)
  2. ExtJs window(一)使用API以及window常用属性和方法
  3. ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint
  4. 为什么大学的计算机老师技术那么厉害,却不愿意当程序员?
  5. [react] React的触摸事件有哪几种?
  6. 安全使用网上银行 享受在线购物时尚生活
  7. 利用Hook技术实现键盘监控
  8. HashMap Hashtable TreeMap的异同点
  9. 安卓学习笔记05:Activity概述
  10. 计算机组成原理 透明性,计算机组成原理试题
  11. Qt报错:C:\Program Files (x86)\SogouInput\Components\
  12. CSDN没有C币如何下载文章?
  13. SQLite实现在线电子词典
  14. 【图像分割】基于粒子群算法实现图像聚类分割附matlab代码
  15. 游狼html鼠标,《速评13》65g极轻FPS鼠标游狼SK
  16. 【图像隐藏】基于小波变换DWT实现数字水印嵌入提取含各类攻击附matlab代码
  17. Unity3D制作触屏手机滑动动效果
  18. 基于PHP的精品课程教学网站
  19. 第一单元测试问星卷计算机,【第一单元综合测试卷测量】第一单元综合测试卷答案...
  20. 用一个 while 循环计算1+3+5+7 + ……+99的值,并输出计算结果。

热门文章

  1. 银行本、异地,本、跨行存取款手续费大全
  2. linux MQ 比较全面的操作命令
  3. 使用mui制作一个web2app类型的app
  4. 工业相机的靶面尺寸怎么算
  5. [笑谈]上海人北京人性格区别
  6. 岭南师范学院计算机证书,2017年岭南师范学院全国计算机等级考试网上报考通知第48次报考程序...
  7. npm 启动报错 解决 events.js:174 throw er; // Unhandled 'error' event 的报错问题
  8. Flowable-6.6.0 工作流引擎(windows平台zip包)下载
  9. AIOps,未来正来
  10. 电邮地址_电子邮件| 电子邮件| 第三部分