博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
外星人入侵
阅读量:4922 次
发布时间:2019-06-11

本文共 4068 字,大约阅读时间需要 13 分钟。

今天是一个周末,宿舍的人全部都出去玩了,而我因为太懒一个人留在了宿舍,连床都不起,吃饭靠的是点外卖。

不过,为了好玩,我跟着书本学习打了一个2D小游戏,并加入了一点自己的东西。

一、游戏页面

        刚开始我把所有的游戏屏幕设置都放在了下面代码里,这使得代码看起来非常长,和杂乱, 所以为了使游戏方便扩展和整个代码逻辑更容易理解,我将整个游戏分为了几个文件。下面就是主程序文件

import sysimport pygamefrom settings import Settingsfrom ship import Shipimport game_functions as gfdef run_game():    #初始化游戏并创建一个屏幕对象    pygame.init()#初始化背景设置,让Pygame能够正长工作    # screen=pygame.display.set_mode((1200,800))#实参(1200,800)是一个元组,制定了游戏窗口的尺寸    ai_settings=Settings()    screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))    pygame.display.set_caption("外星人入侵")    #创建一艘新飞船    ship=Ship(screen)    #设置背景色    #bg_color=(230,250,250)    #开始游戏的主循环    while True:        #监视键盘和鼠标事件        # for event in pygame.event.get():        #     if event.type==pygame.QUIT:#如果用户点叉号,则退出        #         sys.exit()        gf.check_events(ship)        ship.update()        #每次循环时重绘屏幕        #screen.fill(bg_color)        # screen.fill(ai_settings.bg_color)        # ship.blitme()        #        # #让最近绘制的屏幕可见        # pygame.display.flip()        gf.update_screen(ai_settings,screen,ship)run_game()

二、屏幕设置类settings.py

class Settings(object):    '''存储这个游戏的所有设置类'''    def __init__(self):        '''初始化游戏设置'''        #屏幕设置        self.screen_width=450        self.screen_height=640        # self.bg_color=(230,250,250)        #self.ship_speed_factor=1.5

本身我跟随书本里做的时候,它提供的是背景颜色,但是我觉得背景颜色太难看了,所以就自己进行了修改,修改在下一部分里

三、创建ship类

在这个类里,我们将飞船显示在屏幕上,并进行屏幕的更新,在这基础上,我在这个类里给游戏加上了背景图片,记住一定要先绘制背景图片,在绘制飞船,不然会显示不出飞船

import pygameclass Ship(object):    def __init__(self,screen):        '''初始化飞船,并设定其初始位置'''        self.screen=screen        #加载飞船图像,并获取其外接矩形        self.image=pygame.image.load('images/img/plane_2.png')        self.screen_image=pygame.image.load('images/bg_2.jpg')        self.rect=self.image.get_rect()#获取飞船外接矩形        self.screen_rect=screen.get_rect()#获取表示屏幕的矩形        self.screen_image_rect=self.screen_image.get_rect()        #将每艘新飞船放在屏幕底部中央        self.screen_image_rect.centerx=self.screen_rect.centerx        self.screen_image_rect.bottom = self.screen_rect.bottom        self.rect.centerx=self.screen_rect.centerx        self.rect.bottom=self.screen_rect.bottom        #移动标示        self.moving_right=False        self.moving_left=False        self.moving_up = False        self.moving_down = False    def update(self):        ''' 根据移动标示移动飞船'''        if self.moving_right:            self.rect.centerx+=1        if self.moving_left:            self.rect.centerx-=1        if self.moving_up :            self.rect.bottom-=1        if self.moving_down :            self.rect.bottom+=1    def blitme(self):       '''在指定位置绘制飞船'''       self.screen.blit(self.screen_image, self.screen_image_rect)       self.screen.blit(self.image, self.rect)  # blitme(),根据self.rect将图片绘制到屏幕上。

四、游戏操作

既然是电脑游戏,则肯定是要通过键盘来控制飞船的移动,我们需要响应按键。每当用户按键时,都将在Pygame中注册一个事件。

import sysimport pygamedef check_events(ship):        for event in pygame.event.get():            if event.type == pygame.QUIT:  # 如果用户点叉号,则退出                sys.exit()            elif event.type==pygame.KEYDOWN:                if event.key==pygame.K_RIGHT:                    ship.moving_right=True                elif event.key == pygame.K_LEFT:                        ship.moving_left = True                elif event.key==pygame.K_UP:                    ship.moving_up = True                elif event.key==pygame.K_DOWN:                    ship.moving_down = True            elif event.type==pygame.KEYUP:                if event.key==pygame.K_RIGHT:                    ship.moving_right=False                elif event.key == pygame.K_LEFT:                    ship.moving_left = False                elif event.key == pygame.K_UP:                    ship.moving_up = False                elif event.key == pygame.K_DOWN:                    ship.moving_down = Falsedef update_screen(ai_settings,screen,ship):    # screen.fill(ai_settings.bg_color)    ship.blitme()    # 让最近绘制的屏幕可见    pygame.display.flip()

 

 

这就是我这一天所学习的,至于限制飞船不出屏幕,填装弹药以及外星人的创建,要等到下次了。

转载于:https://www.cnblogs.com/fromzore/p/8544440.html

你可能感兴趣的文章
安装jdk+tomcat
查看>>
Python 多进程
查看>>
.ctor,.cctor 以及 对象的构造过程
查看>>
WordPress用户注册无法发送密码邮件怎么回事?
查看>>
Texture(ASDK)、ComponentKit、LayoutKit、YogaKit
查看>>
Linux常用指令
查看>>
python 修改文件名1.0
查看>>
UWP:使用Composition实现类似安卓的水波纹Ripple效果
查看>>
Unable to convert MySQL date/time value to System.DateTime 错误的处理
查看>>
56度烟台社区
查看>>
Dockerfile命令整理
查看>>
BZOJ.4572.[SCOI2016]围棋(轮廓线DP)
查看>>
Mac笔记
查看>>
JDK目录介绍
查看>>
hdu 5246 乱搞
查看>>
linux Shell 脚本编写
查看>>
Xcode_7_GM_seed.dmg下载
查看>>
BZOJ2329: [HNOI2011]括号修复
查看>>
JVM内存管理------GC简介
查看>>
腾讯云搭建php环境
查看>>