前段时间学了pygame,这两天写一个星球大战小游戏,今天准备分享出来。
开发工具: python3.8、pycharm
代码注释超级详细,在这里就废话不多说了,请看代码!

# 导入相关模块及库
import pygame
import sys
import random
import math# 1.初始化界面
pygame.init()
# 设置窗口大小
size = width, height = 800, 600
screen = pygame.display.set_mode(size)
# 设置游戏名称
pygame.display.set_caption('星球大战')
# 游戏图标
icon = pygame.image.load('ufo.png')
pygame.display.set_icon(icon)# 3.游戏背景
bgImg = pygame.image.load('bg.png')# 4.玩家图片
playerImg = pygame.image.load('player.png')
playerX = 400  # X轴设为400
playerY = 530  # Y轴设为530
# 7.设置玩家移动速度
playerStep = 0def move_player():  # 玩家移动# 5.设置玩家移动速度global playerXplayerX += playerStep# 6.防止玩家出界if playerX > 736:playerX = 736if playerX < 0:playerX = 0# 8.敌人
# enemyImg = pygame.image.load('enemy.png')
# enemyX = random.randint(100,600)  # X轴随机出现在100~600
# enemyY = random.randint(30,150)   # Y轴随机出现在30~150
# enemyStep = 1  # 9.设置敌人移动速度# 11.添加多个敌人
number_of_enemies = 6  # 敌人总数class Enemy():  # 定义敌人类def __init__(self):self.img = pygame.image.load('enemy.png')self.x = random.randint(100, 500)self.y = random.randint(30, 200)self.step = random.randint(1, 4)  # 敌人移动的速度# 当敌人被击中时,恢复敌人位置def reset(self):self.x = random.randint(100, 500)self.y = random.randint(30, 200)enemies = []  # 建列表保存敌人
for i in range(number_of_enemies):enemies.append(Enemy())# 18.游戏结束
is_over = False
over_font = pygame.font.Font('freesansbold.ttf',32)def game_over():  # 显示游戏结束if is_over:text = 'Game Over!'render = over_font.render(text, True, (251,1,0))  # 渲染screen.blit(render,(300,251))  # 分数显示的位置def show_enemy():  # 显示敌人# global enemyX, enemyStep, enemyYglobal is_overfor e in enemies:screen.blit(e.img, (e.x, e.y))  # 敌人出现坐标e.x += e.step  # 移动if (e.x > 736 or e.x < 0):e.step *= -1e.y += 150  # 10.下沉150if e.y > 450:is_over =Trueprint('游戏结束!')enemies.clear()   # 游戏结束,清除所有敌人# 16.添加分数
score = 0# 12.添加子弹
class Bullet():  # 定义子弹类def __init__(self):self.img = pygame.image.load('bullet.png')self.x = playerX + 16  # 子弹发出去和玩家的正中间的坐标一致  (64-32)/2=16self.y = playerY + 8  # 子弹发出后在玩家Y轴的基础上+8的位置出现self.step = 11  # 子弹移动的速度# 击中def hit(self):global scorefor e in enemies:if (distance(self.x, self.y, e.x, e.y) < 30):  # 在30之内则击中hit_sound.play()  # 被击中时播放音效bullets.remove(self)  # 子弹消失e.reset()  # 敌人重置score += 1print(score)bullets = []  # 建列表保存现有的子弹def show_bullets():  # 显示子弹,并移动子弹for b in bullets:screen.blit(b.img, (b.x, b.y))b.hit()  # 查看敌人是否被击中b.y -= b.step  # 子弹移动if b.y < 0:  # 当子弹超出顶部时,子弹消失bullets.remove(b)  # 删除子弹# 欧几里得距离
# 13.两点之间的距离
def distance(bx, by, ex, ey):x = bx - exy = by - eyreturn math.sqrt(x * x + y * y)  # 开根号print(distance(1, 1, 4, 5))# 14.添加背景音乐
pygame.mixer.music.load('bg.wav')
pygame.mixer.music.play(-1)   # 单曲循环# 15.添加击中音效
hit_sound = pygame.mixer.Sound('exp.wav')# 17.显示分数
font = pygame.font.Font('freesansbold.ttf',32)def show_score():  # 显示分数text = f'Score:{score}'score_render = font.render(text, True, (0,255,125))  # 渲染screen.blit(score_render,(11,11))  # 分数显示的位置# 2.游戏主循环
while True:screen.blit(bgImg, (0, 0))  # 3.画背景,右上角坐标是(0,0),往右是X坐标轴,往下是Y坐标轴for event in pygame.event.get():  # 事件if event.type == pygame.QUIT:  # 退出pygame.quit()sys.exit()# 7.设置键盘控制飞机移动if event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT:  # 向右playerStep = 5elif event.key == pygame.K_LEFT:  # 向左playerStep = -5elif event.key == pygame.K_SPACE:  # 按空格发射子弹print('发射子弹...')# 创建子弹b = Bullet()bullets.append(b)if event.type == pygame.KEYUP:  # 向上停止不动playerStep = 0screen.blit(playerImg, (playerX, playerY))  # 4.设置玩家坐标move_player()  # 玩家移动show_enemy()  # 显示敌人show_bullets()  # 显示子弹show_score()  # 显示分数game_over()  # 游戏结束pygame.display.update()  # 更新

这是星球大战的简单版本,后期会陆续写新的版本并更新出来!
作者:吴常文
出处:https://blog.csdn.net/qq_41405475
本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

利用pygame写星球大战小游戏相关推荐

  1. python版小黄脸大战(Pygame写的小游戏)

    最近整理了一下我的u盘,发现了我大一python课写的期末大作业.是一个仿飞机大战的小游戏,挺有意思的.那个时候我每天晚上都在弄这个,写了两个多星期. 可执行程序下载 链接百度网盘下载链接 提取码:w ...

  2. 利用Pygame写游戏‘飞翔的小鸟’

    上次九叔发布了一个什么是Pygame的文章,今天我们就利用Pygame来写一个小游戏 我们先来写一个开始界面吧,让它看起来形象一点,效果图如下: 想要得到这个图很简单ܻ,关键点有三个: <1&g ...

  3. 利用html css javascript写翻翻乐小游戏

    利用html css javascript写翻翻乐小游戏 废话不多说,先看效果 代码放到文章末尾,不想看代码解释的可以直接跳过到后面直接下载 我写这个小游戏的过程 1.准备图片    我在觅元素上找了 ...

  4. python拼图_利用python制作拼图小游戏的全过程

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...

  5. 用python做一个简单的游戏,用python写一个小游戏

    大家好,本文将围绕如何用python做一个简单的小游戏展开说明,python编写的入门简单小游戏是一个很多人都想弄明白的事情,想搞清楚用python做一个简单的游戏需要先了解以下几个事情. 1.Pyt ...

  6. python能制作游戏吗_如何用python写一个小游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 引言最近python语言大火,除了在科学计算领域python有用武之地之外,在游 ...

  7. 利用python制作拼图_利用python制作拼图小游戏的全过程

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...

  8. python写游戏脚本-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  9. python编程小游戏-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  10. 使用python制作聊天框解谜游戏_使用Python写一个小游戏alien invasion!

    最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下其中的 ...

最新文章

  1. 北大高材生割美国韭菜被FBI通缉?本人回应予以否认
  2. ionic4 select 去掉确定取消按钮_word文档中的水印如何去掉,有三种方法,你最喜欢哪种?...
  3. 2(3).选择排序_快排(线性表)
  4. 如何正确使用Python临时文件
  5. stanford corenlp的TokensRegex
  6. 微软人工智能和对话平台--知识商城体验
  7. windows环境下ELK平台搭建
  8. Android 触摸手势基础 官方文档概览
  9. pdf exe如何提取pdf文件_python应用:如何用python提取pdf文件中的文字
  10. 文艺编程 Literate Programming (原文中英文对照)
  11. LeetCode(821)——字符的最短距离(JavaScript)
  12. Linux服务器authorized_keys添加公钥后登录仍需要密码
  13. android jersey 上传图片,图片上传--Jersey实现RESTful接口
  14. linux下proc目录部分说明
  15. PLC控制系统设计的基本内容
  16. 计算机考研百天,2021非全日制研究生备考即将进入百天倒计时的你还在坚持吗?...
  17. 用计算机怎么算异分母加减法,怎么正确算异分母分数加减法
  18. 该怎么复习安徽省考计算机专业课
  19. 游戏开发bug解决思路
  20. JavaSE方法(构造方法)与方法重载基础练习题

热门文章

  1. 每人都会遇到的三件事: 1.楼上传来弹珠的声,2.曾经的梦里出现过,3.马上就要睡着却突然感觉下坠...
  2. 哔哩哔哩我来了,see goodbye 马总!!!
  3. Matlab 黎卡提方程
  4. Android Beacon开发
  5. WTL自绘界面库(QsImageMgrCtrlBase)
  6. RK3066 实现LED闪烁的代码分析
  7. python爬虫GUI工具,tkinter网易云歌单歌曲下载器
  8. Enjoying Web Development with Tapestry下载
  9. 【高等数学笔记】多元向量值函数的导数与微分
  10. netty:Failed to initialize a channel. Closing