一、安装pygame
2、点击pypi,然后输入pygame
3、点击第一个pygame1.9.6,再点击download files
4、找到和自己python版本匹配的版本,点击下载,
5、因为这是whl的文件,下载完完后,打开控制台,进入下载目录下,使用pip命令运行
python -m pip install –user +文件名
6、pip list查看是否安装成功
7、然后cmd进入代码路径
8、输入python plane_main.py 回车
9、代码启动后效果
二、摘取关键代码实现说明
1、首先创建游戏相关事件及组件类,代码如下:pygame
plane_sprites CREATE_ENEMY_EVENT pygame.USEREVENT
HERO_FIRE_EVENT pygame.USEREVENT pygame.init.screen pygame.display.set_modeSCREEN_RECT.size.clock pygame.time.Clock.__create_spritesPlaneGame.__create_user_events.back_group pygame.sprite.GroupBackgroundBackground.hero Hero.hero_group pygame.sprite.Group.hero.enemy_group pygame.sprite.Group.destroy_group pygame.sprite.Grouppygame.time.set_timerCREATE_ENEMY_EVENTpygame.time.set_timerHERO_FIRE_EVENT.clock.tick.__event_handler.__update_sprites.__check_collidepygame.display.updateenemies pygame.sprite.groupcollide.enemy_group.hero.bullets.keysenemy enemiesenemy.life enemy.life enemy.add.destroy_groupenemy.remove.enemy_groupenemy.destroiedpygame.sprite.spritecollide.hero.enemy_group.hero.destroiedevent pygame.event.getevent.type pygame.QUITPlaneGame.__finished_gameevent.type HERO_FIRE_EVENT.hero.fireevent.type CREATE_ENEMY_EVENT.enemy_group.addEnemyevent.type pygame.KEYDOWN event.key pygame.K_benemy .enemy_group.spritesenemy.destroied.hero.can_destroiedPlaneGame.__finished_gamekeys_pressed pygame.key.get_presseddir keys_pressedpygame.K_RIGHTkeys_pressedpygame.K_LEFT.hero.speed dir
for group in [self.back_group, self.hero_group,
self.hero.bullets, self.enemy_group,
self.destroy_group]:
group.update()
group.draw(self.screen)
@staticmethod
def __finished_game():
“””退出游戏”””
print(“退出游戏”)
pygame.quit()
exit()
if name == ‘main‘:
PlaneGame().start_game()
2、游戏精灵,背景精灵,飞机精灵,英雄精灵,子弹精灵,敌机精灵相关类的实现,代码如下:
import random
import pygame
屏幕尺寸
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
class GameSprite(pygame.sprite.Sprite):
“””游戏精灵”””
def init(self, image_name, speed=1):
super().init()
self.image = pygame.image.load(image_name)
self.rect = self.image.get_rect()
self.speed = speed
def update(self, *args):
self.rect.top += self.speed
@staticmethod
def image_names(prefix, count):
names = []
for i in range(1, count + 1):
names.append(“./images/” + prefix + str(i) + “.png”)
return names
class Background(GameSprite):
“””背景精灵”””
def init(self, is_alt=False):
super().init(“./images/background.png”)
if is_alt:
self.rect.bottom = 0
def update(self, *args):
super().update(args)
if self.rect.top >= SCREEN_RECT.height:
self.rect.bottom = 0
class PlaneSprite(GameSprite):
“””飞机精灵,包括敌机和英雄”””
def init(self, image_names, destroy_names, life, speed):
image_name = image_names[0]
super().init(image_name, speed)
生命值
self.life = life
正常图像列表
self.__life_images = []
for file_name in image_names:
image = pygame.image.load(file_name)
self.__life_images.append(image)
被摧毁图像列表
self.__destroy_images = []
for file_name in destroy_names:
image = pygame.image.load(file_name)
self.__destroy_images.append(image)
默认播放生存图片
self.images = self.__life_images
显示图像索引
self.show_image_index = 0
是否循环播放
self.is_loop_show = True
是否可以被删除
self.can_destroied = False
def update(self, *args):
self.update_images()
super().update(args)
def update_images(self):
“””更新图像”””
pre_index = int(self.show_image_index)
self.show_image_index += 0.05
count = len(self.images)
判断是否循环播放
if self.is_loop_show:
self.show_image_index %= len(self.images)
elif self.show_image_index > count – 1:
self.show_image_index = count – 1
self.can_destroied = True
current_index = int(self.show_image_index)
if pre_index != current_index:
self.image = self.images[current_index]
def destroied(self):
“””飞机被摧毁”””
默认播放生存图片
self.images = self.__destroy_images
显示图像索引
self.show_image_index = 0
是否循环播放
self.is_loop_show = False
class Hero(PlaneSprite):
“””英雄精灵”””
def init(self):
image_names = GameSprite.image_names(“me”, 2)
destroy_names = GameSprite.image_names(“me_destroy_”, 4)
super().init(image_names, destroy_names, 0, 0)
设置初始位置
self.rect.centerx = SCREEN_RECT.centerx
self.rect.bottom = SCREEN_RECT.bottom – 120
创建子弹组
self.bullets = pygame.sprite.Group()
def update(self, *args):
self.update_images()
飞机水平移动
self.rect.left += self.speed
超出屏幕检测
if self.rect.left
self.rect.left = 0
if self.rect.right > SCREEN_RECT.right:
self.rect.right = SCREEN_RECT.right
def fire(self):
“””发射子弹”””
bullet_count = len(self.bullets.sprites())
print(“子弹数量 %d” % bullet_count)
for i in range(0, 3):
创建子弹精灵
bullet = Bullet()
设置子弹位置
bullet.rect.bottom = self.rect.top – i * 20
bullet.rect.centerx = self.rect.centerx
将子弹添加到精灵组
self.bullets.add(bullet)
class Bullet(GameSprite):
“””子弹精灵”””
def init(self):
image_name = “./images/bullet1.png”
super().init(image_name, -2)
def update(self, *args):
super().update(args)
判断是否超出屏幕
if self.rect.bottom
self.kill()
class Enemy(PlaneSprite):
“””敌机精灵”””
def init(self):
image_names = [“./images/enemy1.png”]
destroy_names = GameSprite.image_names(“enemy1_down”, 4)
super().init(image_names, destroy_names, 2, 1)
随机敌机出现位置
width = SCREEN_RECT.width – self.rect.width
self.rect.left = random.randint(0, width)
self.rect.bottom = 0
随机速度
self.speed = random.randint(1, 3)
def update(self, *args):
super().update(args)
判断敌机是否移出屏幕
if self.rect.top >= SCREEN_RECT.height:
将精灵从所有组中删除
self.kill()
判断敌机是否已经被销毁
if self.can_destroied:
self.kill()
三、其他补充
暂时没有
Original: https://blog.csdn.net/weixin_39607474/article/details/114466508
Author: weixin_39607474
Title: python轰炸敌机小游戏_python 经典游戏(飞机大战)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/783545/
转载文章受原作者版权保护。转载请注明原作者出处!