基于pygame的射击小游戏制作(一)让飞船动起来

一.文件结构

  1. alien_invasion.py 是整个系统的主文件,用来创建游戏中的一系列对象,ai_settings存储设置、screen存储显示相关和屏幕刷新、包含游戏的主循环,通过检查事件响应来实现飞船左移右移。仅需运行此文件就可以将其他的相关.py文件间接地导入到这个文件中。
  2. settings.py 该文件包含Settings类,此类的方法__init__()用来初始化游戏外观和飞船速度的属性。
  3. game_functions.py 该文件包含一系列函数,该游戏的大部分工作都在这里完成。check_events()检测按键按下和松开。和update_screen(),用于在每次执行主循环时都会重绘屏幕。
  4. ship.py 该文件包含Ship类,用来描述一个飞船实例,包含设置飞船的初始位置,储存飞船的center属性,移动标志和update类,该类用于更新飞船的center值,而不是rect。

二、源代码

alien_invasion.py

import sys    #退出游戏
import pygame #包含开发所需功能
from settings import Settings
from ship import Ship
import game_functions as gf
def run_game():# 初始化背景设置pygame.init()ai_settings = Settings()# 创建游戏窗口screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))pygame.display.set_caption("Alien Invasion")"""创建一艘飞船"""ship = Ship(ai_settings, screen)"""设置背景色"""bg_color = (230,230,230)"""游戏主循环"""while True:"""监视键鼠事件"""gf.check_events(ship)ship.update()gf.update_screen(ai_settings, screen, ship)
run_game()

game_functions.py

import sys
import pygame
def check_events(ship):#键鼠响应for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:check_keydown_events(event, ship)elif event.type == pygame.KEYUP:check_keyup_events(event, ship)
def check_keydown_events(event, ship):"""响应按键"""if event.key == pygame.K_RIGHT:# 向右移动飞船ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Truedef check_keyup_events(event, ship):if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = Falsedef update_screen(ai_settings, screen, ship):#更新屏幕图像# 每次循环时都重绘屏幕screen.fill(ai_settings.bg_color)ship.blitme()# 让最近绘制的屏幕可见pygame.display.flip()  # 不断更新屏幕

ship.py

import pygame
class Ship():def __init__(self, ai_settings, screen):"""初始化飞船并设置其初始位置"""self.screen = screenself.ai_settings = ai_settings"""加在飞船图像并获取其外接矩形"""self.image = pygame.image.load('images/ship.bmp')self.rect = self.image.get_rect()self.screen_rect = screen.get_rect()"""将每艘新飞船放在屏幕底部中央"""self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottom"""在飞船的属性center中存储最小数值"""self.center = float(self.rect.centerx)"""#移动标志"""self.moving_right = Falseself.moving_left = Falsedef update(self):"""根据移动标志调整飞船的位置"""#更新飞船的center值,而不是rectif self.moving_right and self.rect.right < self.screen_rect.right:self.center += self.ai_settings.ship_speed_factorif self.moving_left and self.rect.left > 0:self.center -= self.ai_settings.ship_speed_factor#根据self.center更新rect对象self.rect.centerx = self.centerdef blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image, self.rect)

settings.py

class Settings():#用于存储该项目设置的所有的类def __init__(self):#初始化设置#屏幕设置self.screen_width = 1200self.screen_height = 800self.bg_color = (230,230,230)#飞船设置self.ship_speed_factor = 1.5

三、执行效果



基于pygame的射击小游戏制作(一)让飞船动起来相关推荐

  1. 基于pygame的射击小游戏制作(二)射击子弹

    在本篇文章中,将学习如何创建子弹移动的元素,如何在屏幕中让子弹向上飞驰,如何删除超过屏幕边界的子弹. 1.编程思路 1.1 创建一个子弹 功能描述:玩家将按空格键时发射子弹,子弹在屏幕中向上穿行,抵达 ...

  2. 基于pygame的射击小游戏制作(四)击杀外星人

    在本篇文章中,主要学习射击子弹时外星人消失,达到击杀外星人的效果 一.编程思路 1.1击杀 我们需要在碰撞发生后让外星人立即消失,故在更新子弹的位置后检测碰撞.我们创建一个字典,这个字典的每一个键都是 ...

  3. 基于pygame的射击小游戏制作(五)绘制开始按钮

    在本篇文章中,主要学习如何在Pygame中绘制按钮,并点击按钮开始游 一.编程思路 1.1 修改游戏活动状态 在上篇文章中,我们通过game_active标志来控制游戏的进行与停止.我们需要在点击&q ...

  4. 基于pygame的射击小游戏制作(三)让外星人动起来

    在本篇文章中,将学习如何创建一群外星人,如何使用嵌套循环来创建元素网格,如何移动外星人 1.编程思路 1.1 创建外星人 创建Alien.py 文件,该文件配置与Ship.py类似,每个外星人最初都出 ...

  5. 基于Pygame的Python小游戏,《这是一场滑稽与阴险的较量》

    选用贴吧最火的表情包滑稽和阴险表情包,肯定都认得出吧,背景由胡大佬提供,添加了很多细节,一款射击闯关类小游戏,滑稽会不断逼近阴险,在这之前你必须把阴险全部击落,左上角是你的生命,被滑稽撞到则减少一生命 ...

  6. 基于pygame做的小游戏

    最近一边学习pygame模块一边做了个小游戏,完成功能如下: 鼠标右键控制移动 人物跟随鼠标方向转动 鼠标左键控制攻击 动画效果 血量计数效果 画面比较乱入,请自行过滤.直接上代码: # coding ...

  7. 基于pygame的滑雪小游戏

    import pygame import sys import random from pygame.locals import * class SkierClass(pygame.sprite.Sp ...

  8. 使用construct2制作射击小游戏

    使用construct2制作射击小游戏 简介 本次我们使用construct2制作一个HTML5 射击小游戏. 目的是player方向由鼠标操控,移动由键盘控制,同时拥有计分标志. 背景 建立好新空白 ...

  9. 基于html+JavaScript+css的飞机射击小游戏网页设计与实现

    资源下载地址:https://download.csdn.net/download/sheziqiong/86954471 资源下载地址:https://download.csdn.net/downl ...

最新文章

  1. spring事务(Transaction)的七种事务传播行为及五种隔离级别
  2. 数据库SQL优化大总结之 百万级数据库优化方案(转)
  3. 我常用的10个Python实用小Trick
  4. [vue] vue中是如何使用event对象的?
  5. 阿里云专家赵伟教你在CDN边缘节点上构建多层纵深防护体系
  6. seo模拟点击软件_百度快排软件原理分析
  7. Java之美[从菜鸟到高手演变]之设计模式二
  8. 【基础处理】基于matlab Fxlms算法有源噪声控制系统【含Matlab源码 1394期】
  9. 程序流程图、电商项目开发流程图模板
  10. java 栈的输出顺序,栈在Java类库中的顺序表示及实现——Stack
  11. 如何在NLP领域做成一件事by周明ACL计算语言学会候任主席(附PDF公号发“NLP做事”下载rar讲座PPT等10文件)...
  12. 第二类换元法倒代换专项训练
  13. c语言10个选手10个评委,C语言歌星大奖赛为参赛的选手打分.doc
  14. 基于Django框架的零食商城系统之Python毕设选题推荐
  15. 信号、传输介质、数制转换
  16. 十个著名的思想实验-黑客帝国思想原来是(Brain in a Vat)
  17. Combining Compositional Models and Deep Networks For Robust Object Classification under Occlusion阅读
  18. 接线 科思模块怎么和plc_plc控制系统输出模块与输出设备的连接方法图解
  19. LabVIEW自适应屏幕分辨率缩放
  20. 判断闰年:输出1990-2010年之间的闰年

热门文章

  1. Git复习(十二)之命令专场
  2. python中的break+while break+for
  3. 【学习笔记】【Design idea】一、Java异常的设计思想、性能相关、笔记
  4. python实现剑指offer删除链表中重复的节点
  5. Zookeeper与Paxos
  6. js处理url中的请求参数(编码/解码)
  7. 需求管理是CMM可重复级中的6个关键过程域之一,其主要目标是__________。A.客观地验证需求管理活动...
  8. 解决vs2005打开vs2008应用程序方法
  9. JQuery 网站换肤功能
  10. 项目发布后 Tomcat中只有web-INF文件夹