Pygame实战之实现经典外星人游戏
作者:嗨!栗子同学 发布时间:2021-05-10 00:31:44
标签:Pygame,外星人,游戏
前言
说说外星人那些事儿....
你以为的外星人......他们都是乘坐UFO来地球的,长的嗯哼可能比较有特色。也许长这样
害!其实可能也或许不长这样。
图片的话借鉴的大众认知的这一款。当然你们还可以自己来!下面我们来做一款简单的《外星人入侵》小游戏吧!
安装环境
下载python3,或如Anaconda3(64 bit),导入pygame游戏包。
主要代码
1.外星人设置,alien.py,代码:
import pygame
from pygame.sprite import Sprite
class Alien(Sprite):
"""表示单个外星人的类"""
def __init__(self,ai_settings,screen):
"""初始化外星人并设置其他位置"""
super(Alien,self).__init__()
self.screen = screen
self.ai_settings = ai_settings
#加载外星人图像,并设置其rect属性
self.image = pygame.image.load('images/alien.bmp')
self.rect = self.image.get_rect()
#每个外星人最初都在屏幕左上角附近
self.rect.x = self.rect.width
self.rect.y = self.rect.height
#存储外星人的准确位置
self.x = float(self.rect.x)
def blitme(self):
"""在指定位置绘制外星人"""
self.screen.blit(self.image,self.rect)
def check_edges(self):
"""如果外星人位于屏幕边缘,就返回True"""
screen_rect = self.screen.get_rect()
if self.rect.right >= screen_rect.right:
return True
elif self.rect.left <= 0:
return True
def update(self):
"""向右移动外星人"""
self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction)
self.rect.x = self.x
2.游戏主程序,alien_invasion.py,代码:
import pygame
from settings import Settings
from game_stats import GameStats
from button import Button
from ship import Ship
from pygame.sprite import Group
import game_functions as gf
from scoreboard import Scoreboard
def run_game():
pygame.init() # 初始化背景设置
ai_settings = Settings() # 全局设置
screen = pygame.display.set_mode( # 创建screen显示窗口
(ai_settings.screen_width,ai_settings.screen_height)
)
pygame.display.set_caption('Alien Invasion') # 标题
#新建Play按钮
play_button = Button(ai_settings,screen,"Play")
#创建一个用于存储游戏统计信息的实例,并创建记分牌
stats = GameStats(ai_settings)
sb = Scoreboard(ai_settings, screen, stats)
# 创建飞船
ship = Ship(ai_settings,screen)
# 创建 * 编组
bullets = Group()
#创建一个外星人
aliens = Group()
#创建外星人群
gf.create_fleet(ai_settings,screen,ship,aliens)
# 开始游戏主循环
while True:
# 监视键盘和鼠标事件
gf.check_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets)
if stats.game_active:
# 移动飞船
gf.update_ship(ship)
# 更新 * 位置
gf.update_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets)
#更新外星人
gf.update_aliens(ai_settings,stats,screen,sb,ship,aliens,bullets)
# 更新屏幕
gf.update_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button)
run_game()
3.设置 * ,bullet.py,代码:
import pygame
from pygame.sprite import Sprite
import time
class Bullet(Sprite):
'''飞船 * 进行管理'''
def __init__(self,ai_settings,screen,ship):
super(Bullet,self).__init__()
self.screen = screen
# 创建 * 矩形初始位置(0,0,3,15)分别对应lef,top,宽,高
self.rect = pygame.Rect(0,0,
ai_settings.bullet_width, ai_settings.bullet_height)
self.rect.centerx = ship.rect.centerx # 设置中心点x轴坐标跟飞船一致
self.rect.top = ship.rect.top # 设置y轴坐标顶部跟飞船一致
# 设置成小数进行计算
self.top = float(self.rect.top)
self.color = ai_settings.bullet_color
self.speed_factor = ai_settings.bullet_speed_factor
def update(self):
self.top -=self.speed_factor
self.rect.top = self.top
print(self.rect.top)
def draw_bullet(self):
pygame.draw.rect(self.screen,self.color,self.rect)
#略.....................................
其实还有几页的源码量,代码很多,需要的话直接找我会比较好~
效果展示:
来源:https://blog.csdn.net/xy258009/article/details/122559039


猜你喜欢
- 浏览器的简单操作# 导入webdriver模块# 创建driver对象,指定Chrome浏览器driver = webdrive
- 前段时间看到letcode上的元音字母字符串反转的题目,今天来研究一下字符串反转的内容。主要有三种方法:1.切片法(最简洁的一种)#切片法d
- 详解python实现读取邮件数据并下载附件的实例实现结果图:实现代码:#!/usr/bin/python2.7# _*_ coding: u
- 前言在我们抓取网页内容的时候,通常是抓取一整个页面的内容,而我们仅仅只是需要该网页中的部分内容,那该如何去提取呢?本章就带你学习xpath插
- 表的创建CREATE TABLE `lee` (`id` int(10) NOT NULL AUTO_INCREMENT, `name` c
- 最近,需要对日志文件进行实时数据处理。一、简单的实时文件处理(单一文件)假设我们要实时读取的日志的路径为: /data/mongodb/sh
- 简介:Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Dj
- 本文简单介绍如何使用 Python 的 pyautogui 模块实现鼠标的自动移动以及键盘的自行输入. 该模块不是 Python 自带的,
- 说明:MySQL 为了数据库的安全性默认在链接中断或者错误时记录错误链接的ip 等信息(host_cache),有点像系统的错误日志的一种机
- 1.Series介绍Pandas模块的数据结构主要有两种:1.Series 2.DataFrameSeries 是一维数组,基于Numpy的
- 代码如下# -*- coding = utf-8 -*-# @time:2020/5/28/028 21:00# Author:cyx# @
- 在很多语言的学习中,“事件”都是一个比较难理解,但是又是一个很重要的概念。javascript中的事件处理也是一样,正因为有了事件处理,才会
- 本文实例讲述了Python实现的朴素贝叶斯算法。分享给大家供大家参考,具体如下:代码主要参考机器学习实战那本书,发现最近老外的书确实比中国人
- 什么是goroutine?Goroutine是建立在线程之上的轻量级的抽象。它允许我们以非常低的代价在同一个地址空间中并行地执行多个函数或者
- 但凡有些事情重复时,我就在想怎么可以用程序来自动化。这里想分享如何每天给女友定时微信发送”晚安“,如果只是晚安,就略显单调,于是爬取金山词霸
- 本文实例讲述了go语言实现一个最简单的http文件服务器的方法。分享给大家供大家参考。具体实现方法如下:package mainimport
- Spyder简介Spyder (前身是 Pydee) 是一个强大的交互式 Python 语言开发环境,提供高级的代码编辑、交互测试、调试等特
- 可能某次不小心改了配置文件,导致无法打开jupyter,找了很多方法,都没从根本上解决问题。倒是发现启动的默认目录被改了,怀疑是这个问题。然
- 关于如何区分艺术和设计的话题总是玄之又玄,并因此引发的争论也有很长一段时间。艺术家和设计师都基于相同的知识基础来创作视觉作品,但他们创作的理
- 1.11 – 添加缎带修饰网页局部模块中右上角的蓝色缎带修饰是这个网站界面设计中的一个亮点,只要合理的运用CSS、PNG透明图片和绝对定位属