哈喽哈喽!下午好~我是木木子。
前面介绍了Python制作的足球比赛、滑雪、魂斗罗、超级玛丽等几十款游戏,效果都还不错,
反响挺热烈。果然还是游戏比较吸引大家的眼球吖!
粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。
于是今天大家继续来一起学习使用Python制作一款非常好玩有趣科技感十足的游戏:宇宙激战
太空游戏。既有趣味儿性,又能学习编程,主要是孩子们肯定会喜欢滴~
游戏玩家将驾驶一艘星际飞船,穿梭于绚丽而斑驳的宇宙之中,面对各种任务与挑战,它能完
成这次任务嘛?我们不妨来猜猜看或者你能自己试试嘛?!👇让我们进入今天的主题叭!
💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮
首先游戏的背景,大家可以看到,有几个需要实现的地方:
第一是背景,因为游戏的背景是一直在变化的,所以必须是动态的背景;
第二个是音乐,有子弹击中的音乐,导弹击中和撞击的爆炸音乐;
第三个是飞船,包括我方主舰、敌方飞船等,另外还有大boss的导弹攻击,我方主舰可以发射
子弹攻击敌方飞船(击毁一艘敌机三分),也可以撞击敌方飞船,我方主舰一旦被击中或者撞
击,将扣除一次生命值(这里设置的只有一次可调试),生命值减为0,则Game Over!
主要有这么几个角色,飞船(包括我方主舰、敌方飞船等不同造型)、子弹、导弹等道具(不同造
型)。
主要为两块儿py下面都给大家贴出来了哈👇
- from mySprite import *
-
- # 初始化
- def init():
- pygame.init()
- global isRun
- isRun = True
- global text_font, over_font, over_render, restar_render, star
- text_font = pygame.font.SysFont('arial', 20)
- over_font = pygame.font.SysFont('arial', 40)
- over_render = over_font.render('Game Over', 1, (255, 20, 20), None)
- restar_render = text_font.render('Press R key for restart game', 1, (80, 209, 80), None)
- star = pygame.image.load('./img/star.png')
- bg0 = Background()
- bg1 = Background(True)
- global back_group, fly, fly_group, score_render, enemy_group, boom_group
- back_group = sprite.Group(bg0, bg1)
- fly = Fly()
- fly_group = sprite.Group(fly)
- score_render = text_font.render(str(fly.score), 1, (172, 209, 204), None)
- enemy_group = sprite.Group()
- boom_group = sprite.Group()
- pygame.time.set_timer(10, 1000)
- pygame.time.set_timer(15, 500)
-
- # 处理事件
- def dealEvent():
- GAMECLOCK.tick(70)
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- exit()
- if isRun:
- if event.type == 10:
- enemy = Enemy()
- enemy_group.add(enemy)
- elif event.type == 15:
- fly.fire()
- keys_pressed = pygame.key.get_pressed()
- if keys_pressed[pygame.K_r]:
- main_game()
- if keys_pressed[pygame.K_RIGHT]:
- fly.speed = 2
- elif keys_pressed[pygame.K_LEFT]:
- fly.speed = -2
- else:
- fly.speed = 0
-
-
- # 碰撞检测-精灵组之间的-精灵与精灵组之间的
- def checkCollide():
- bullet_shot_enemy = pygame.sprite.groupcollide(fly.bullets, enemy_group, True, True)
- if bullet_shot_enemy:
- pygame.mixer.init()
- for bullet in bullet_shot_enemy:
- rect = bullet.rect
- boom = Boom(rect.centerx, rect.centery)
- boom_group.add(boom)
- pygame.mixer.music.load('./img/bao.mp3')
- pygame.mixer.music.play(1)
- fly.score += 3
- global score_render
- score_render = text_font.render(str(fly.score), 1, (172, 209, 204), None)
- enemies = pygame.sprite.spritecollide(fly, enemy_group, True)
- if enemies:
- global isRun
- isRun = False
- SCREEN.blit(over_render,
- ((WINDOW.width - over_render.get_width()) / 2,
- (WINDOW.height - over_render.get_height()) / 2 - 10))
- SCREEN.blit(restar_render, ((WINDOW.width - restar_render.get_width()) / 2,
- (WINDOW.height - restar_render.get_height()) / 2 + over_render.get_height()))
- pygame.display.update()
-
- # 精灵绘制更新
- def update():
- if isRun:
- back_group.draw(SCREEN)
- back_group.update()
- fly_group.draw(SCREEN)
- fly_group.update()
- fly.bullets.draw(SCREEN)
- fly.bullets.update()
- enemy_group.draw(SCREEN)
- enemy_group.update()
- boom_group.draw(SCREEN)
- boom_group.update()
- boom_group.empty()
- SCREEN.blit(score_render, (WINDOW.width - 60, 20))
- SCREEN.blit(star, (WINDOW.width - 85, 20))
- pygame.display.update()
-
- # 主函数
- def main_game():
- init()
- while True:
- dealEvent()
- checkCollide()
- update()
-
- main_game()
- import pygame
- from pygame import sprite
- import random
- WINDOW = pygame.Rect(0, 0, 466, 700)
- SCREEN = pygame.display.set_mode(WINDOW.size)
- pygame.display.set_caption('FlyFight')
- GAMECLOCK = pygame.time.Clock() # 游戏时钟
-
- #我的精灵
- class MySprite(sprite.Sprite):
- def __init__(self, img_name, speed=1):
- super().__init__()
- self.image = pygame.image.load(img_name)
- self.rect = self.image.get_rect()
- self.speed = speed
-
- def update(self):
- self.rect.y += self.speed
-
-
- #背景精灵
- class Background(MySprite):
- def __init__(self, next=False):
- super().__init__('./img/background.png')
- if next:
- self.rect.y = -self.rect.height
-
- def update(self):
- super().update()
- if self.rect.y >= 700:
- self.rect.y = -self.rect.height
-
- # 子弹精灵
- class Bullet(MySprite):
- def __init__(self):
- super().__init__('./img/bullet.png', -2)
-
- def update(self):
- super().update()
- if self.rect.bottom < 0:
- self.kill()
-
- # 侦察机精灵
- class Fly(MySprite):
- def __init__(self):
- super().__init__('./img/fly.png', 0)
- # 设定侦察机的初始位置
- self.rect.centerx = WINDOW.centerx
- self.rect.bottom = WINDOW.bottom-10
- # 定义子弹精灵组
- self.bullets = pygame.sprite.Group()
- self.score = 0
-
- def update(self):
- self.rect.x += self.speed
- if self.rect.right > WINDOW.width:
- self.rect.right = WINDOW.width
- elif self.rect.x < 0:
- self.rect.x = 0
-
- def fire(self):
- bullet = Bullet()
- # 设定子弹的初始位置
- bullet.rect.centerx = self.rect.centerx
- bullet.rect.bottom = self.rect.y
- self.bullets.add(bullet)
-
-
- # 敌机精灵
- class Enemy(MySprite):
- def __init__(self):
- super().__init__('./img/enemy.png')
- # 分身秘术,设定速度和位置
- self.speed = random.randint(2, 3)
- self.rect.bottom = 0
- x = WINDOW.width - self.rect.width
- self.rect.x = random.randint(0, x)
-
- def update(self):
- super().update()
- if self.rect.y >= WINDOW.height:
- self.kill()
-
- # 爆炸效果精灵
- class Boom(MySprite):
- def __init__(self, x, y):
- super().__init__('./img/boom.png')
- # 设定爆炸效果的位置
- self.rect.centerx = x
- self.rect.centery = y
游戏规则:方向键左右即可移动,R重玩。
💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮💮
游戏倒计时三秒内上线的消息,我知道🤭栗子知道🤭木子知道🤭梨子知道🤭
顾木子知道🤭你是在等以上人员全部进场完毕,你才知道你才进的吗?🐷🐷🐷
【元宇宙星际宇宙激战小游戏正式开服】…………万倍启航(宣)💮💮💮
智行易经暗合道,所言非虚皆应验。实话实说我不懂,就是无我误入道。
赶紧找我拿素材源码试试叭!我在十万火急处等你啦👇👇👇👇👇👇
项目1.0 超级玛丽
程序员自制游戏:超级玛丽100%真实版,能把你玩哭了~【附源码】
项目1.1 扫雷
Pygame实战:据说这是史上最难扫雷游戏,没有之一,你们感受下......
项目1.3 太空机甲游戏
Pygame实战:牛,几千行代码实现《机甲闯关冒险游戏》,太牛了(保存起来慢慢学)
项目1.4 水果忍者
【Pygame实战】风靡全球的切水果游戏升级版“水果忍者”上线啦,你敢来PK嘛?
项目2.0 联网、人机一体五子棋游戏
项目1.0 Python—2021 |已有文章汇总 | 持续更新,直接看这篇就够了
(更多内容+源码都在文章汇总哦!!欢迎阅读~)