用pygame来制作你心中的那个游戏~可以进你的收藏夹吗

用pygame来制作你心中的那个游戏~可以进你的收藏夹吗

第一章 pygame基础使用操作
第二章 pygame创建人物显示(待更新)



pygame基础使用操作

有没有人像我一样学习编程就是为了去制作游戏,c++是游戏行业的主流发展,但是pygame却有着语法简单,逻辑简单的原因,适合做2d游戏开发,游戏的好坏与使用编写游戏的编程语言没有关系,我也只是想完成很久以前,一直想做的事情。


一、死亡使者

做了GIF的效果图,好像不是很好,唔~,见谅,见谅
请添加图片描述
在这里插入图片描述
总之要使用pygame实现死亡使者的攻击,移动,复活,静态动作等等,算是完成了主角的登场~~~~
什么敌人怎么办,那我去拿ps改一下颜色

二、如何用pygame显示窗口

pygame官方文档
最头疼的事情就是官方文档英文看不懂,翻译给我连代码一起翻译了
在这里插入图片描述

使用到的库

import pygame
from sys import exit
from pygame.locals import *

1.pygame是最主要的库。
2.pygame.locals 里面包括了pygame里面的一些定义,但是为了大家对于代码的理解,不打算使用这个库。
3.退出程序会使用到sys模块的退出函数,也可以直接exit退出。

显示窗口

pygame只需要简单几句代码就可以完成窗口的显示与事件的监听。
代码如下:

import pygame
import sys
pygame.display.init()
screen = pygame.display.set_mode([520, 520])
pygame.display.set_caption("死亡使者")
while True:
    screen.fill(pygame.Color(255,255,255))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    pygame.display.update()

这里会用到pygame的display方法,emmm,显示函数,主要作用那肯定就是显示窗口啦,已经不用我多说了吧。
在这里插入图片描述

显示

  1. 使用display需要对display进行初始化也就是pygame.display.init(),
  2. 要显示出一个窗口,肯定要先创建窗口对象 screen = pygame.display.set_mode([520, 520]),记住传进去的参数是数组,返回的是窗口对象,以后进行的所有操作,都围绕screen进行。
  3. pygame.display.set_caption(“死亡使者”),用来设置窗口名

pygame游戏实现原理就是通过对鼠标,键盘事件的处理,进行创建图片和图片的移动,这个过程肯定需要不断的刷新屏幕,也就是while True循环

  1. 设置好的screen目前先给他填充一个白色,screen.fill(pygame.Color(255,255,255)),创建一个pygame可以使用的颜色对象就需要使用pygame.Color这个类传进去的参数是rgb颜色体系
  2. pygame.display.updata()用来实现游戏的不断刷新,一般写在末尾。

事件

可以看到通过pygame.event.get()获取所有的事件,其中当然包括了,鼠标的移动,鼠标键是否按下,键盘的每个按键,如果不进行事件处理,会导致无法退出,没有任何操作性。
获取到的事件通过for循环遍历,当event的类型为退出的时候,关闭程序

for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

三、代码升级成面向对象

代码如下(示例):

import pygame


class PlayGame:
    def __init__(self):
        pygame.display.init()
        self.screen = pygame.display.set_mode([800, 520])
        self.clock = pygame.time.Clock()
        pygame.display.set_caption("死亡使者")
        self.map = pygame.image.load("./images/map/001map.png").convert()
        
    
    def star_game(self):
        while True:
            self.clock.tick(60)
            self.screen.blit(self.map, (0, 0))
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
            pygame.display.update()


if __name__ == '__main__':
    PlayGame().star_game()

if name == ‘main’: 这串代码是不是写起来很麻烦,这里悄悄告诉你们,敲main然后回车就可以了。相当于一个主程序的人口,然后只用创建主类就可以啦!

  1. python 执行while Ture的速度是很快的,我们常常用不到这么快的速度,所以可以通过self.clock = pygame.time.Clock()去创建一个时钟对象,然后在whileTure 循环第一句调用self.clock.tick(60)代码,相当于time.sleep(),那为什么不用time.sleep(),还不是这该死的优越感~~~~

  2. 面向对象总是不理解怎么办,写几个pygame小游戏,包你透彻!!那从这里开始就要用面向对象的思路去理解代码了。

  3. self.screen.blit(self.map, (0, 0))将图片贴到窗口
    在这里插入图片描述

  4. 悄悄的贴了一张背景,这样就不用写screen.fill()函数了
    创建地图对象: self.map=pygame.image.load("./images/map/001map.png").convert()
    在循环里面显示地图对象:坐标当然是图片左上角的位置
    self.screen.blit(self.map, (0, 0))请添加图片描述


面向对象的一些小思路

代码如下:

import pygame


class PlayGame:
	screen = None
    def __init__(self):
        pygame.display.init()
        PlayGame.screen = pygame.display.set_mode([800, 520])
        self.clock = pygame.time.Clock()
        pygame.display.set_caption("死亡使者")
        self.map = pygame.image.load("./images/map/001map.png").convert()
        
    
    def star_game(self):
        while True:
            self.clock.tick(60)
            PlayGame.screen.blit(self.map, (0, 0))
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
            pygame.display.update()


if __name__ == '__main__':
    PlayGame().star_game()
  1. 这里将窗口的对象screen由实例属性转换成类属性,好处当然是更容易调用,这样子想的话,后期多了人物等等重要的对象,都可以设置成类属性,这样子可以增加代码的可读性,当然不要想我一样,懒得写注释,注释的作用也是很重要的,只是当你熟练了这些基础的操作,像默写课文一样可以写出来的时候,注释可以省略了
  2. 如果再往大了考虑,总会出现,需要的数据需要各种传参来实现,为何不能未雨绸缪,将所有使用的数据放到data.py里面呢
    主函数代码如下:
import pygame
from data import *


class PlayGame:
    def __init__(self):
        pygame.display.init()
        Screen.screen = pygame.display.set_mode([Screen.ScreenWeight, Screen.ScreenHeight])
        Screen.clock = pygame.time.Clock()
        Map.map = pygame.image.load("./images/map/001map.png").convert()
        pygame.display.set_caption("死亡使者")

    @staticmethod
    def star_game():
        while True:
            Screen.clock.tick(60)
            Screen.screen.blit(Map.map, Map.Map_pos)
            EventGet.event_list = pygame.event.get()
            EventGet.mouse = pygame.mouse.get_pos()
            for event in EventGet.event_list:
                if event.type == pygame.QUIT:
                    pygame.quit()
                    exit()
            pygame.display.update()


if __name__ == '__main__':
    PlayGame().star_game()
  1. @staticmethod将实例方法转换成类方法,这样就不会报黄了
  2. pygame.mouse.get_pos()获取鼠标的位置赋值给data中EventGet.mouse
  3. pygame.quit()关闭pygame

data.py代码如下:

class Screen:
    ScreenWeight = 800
    ScreenHeight = 520
    clock = None
    screen = None


class Map:
    map = None
    Map_pos = (0, 0)


class EventGet:
    event_list = None
    mouse = None
  1. 保存了鼠标移动的坐标,键盘的按键操作等事件,保存窗口对象,大小以及图片对象,位置。

总结

很多想法都是自己编写游戏的时候,遇到的bug,写代码就像是建房子一样,前期考虑的多一点,也就可以走的更远吧,将一些公共资源保存到py文件的变量中,方便调用。很多是自己的想法,参考即可,毕竟,我也只是个小萌新
萌新

代码暂时没有写好,也就不发了,游戏的玩法以及操作希望得到大家的建议。~~~~ 持续秃头中 ~~~~
所有图片链接
提取码:57mk

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值