当前位置:   article > 正文

【pygame入门】pygame游戏实例入门级教程,如有不懂欢迎随时补充留言。_pygame csdn

pygame csdn

开发环境

pycharm+anconda3;
第三方库: pygame;(从标题看这句略显多余)

第三方库安装

方法一:直接在pycharm里面安装。

files->seting->project->python Interpreter
在左侧界面的最左侧边栏上面有个加号,点击后在弹出页面搜索需要的第三方库,然后直接安装。

方法二:pip安装。

因为用的是anconda所以需要在终端里面将目录切换至anconda3/Scripts后再安装。
命令:pip installs pygame

在这里插入图片描述

任务介绍
本任务是开发一个猴子接香蕉的小游戏,通过键盘控制猴子运动,接住随机掉落的香蕉。读者需要自行准备背景图片,猴子图片,香蕉图片三张,当然,如果不喜欢猴子或香蕉也可以选择其它物品的图片作为素材。
在这里插入图片描述

大概实现思路

我们需要编写两个类:猴子类,和香蕉类

两个类都需要有图片路径,运动速度,初始位置等属性。还需要有让他们运动的方法。其中,香蕉只需要编写从上至下运动,猴子类需要让猴子可以在上下左右不同方向运动。
主函数里面需要用键盘来控制猴子运动,随机生成香蕉从上到下运动,并且检测猴子是否碰到香蕉

具体实现流程

游戏背景界面
首先是做一个[游戏]的背景界面,这里面需要引入背景图片,并且实现手动开关游戏界面。
主函数:
import pygame
import sys


def main():
    pygame.init()#初始化pygame
    size = width, height = 450, 560#界面尺寸
    screen = pygame.display.set_mode(size)#设置界面尺寸
    bg = pygame.image.load('background.jpg')#加载背景图片
    pygame.display.set_caption("游戏")#设置标题
    while True:
        #检测事件发生
        for event in pygame.event.get():
            if event.type == pygame.QUIT:#发生的事件类型为关闭时
                sys.exit()                #退出
        screen.blit(bg, bg.get_rect())  #显示图片
        pygame.display.update()            #更新
        pygame.time.Clock().tick(60)    #设置游戏频率为60


if __name__ == '__main__':
    main()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
猴子类
猴子类编写
界面的坐标是左上角为(0,0),猴子的起始位置为右下角,所以坐标是(界面宽度-猴子宽度,界面高度-猴子高度)
class Monkey(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        position = 400, 510
        self.speed = [0, 0]
        self.img = pygame.image.load('monkey.png')
        self.rect = self.img.get_rect()
        self.rect.center = position
        self.image = self.img

    def move_left(self):
        self.speed = [-5, 0]
        if self.rect.left < 0:
            self.rect.left = 0
        else:
            self.rect = self.rect.move(self.speed)

    def move_right(self):
        self.speed = [5, 0]
        if self.rect.right > 450:
            self.rect.right = 450
        else:
            self.rect = self.rect.move(self.speed)

    def move_up(self):
        self.speed = [0, -5]
        if self.rect.top < 0:
            self.rect.top = 0
        else:
            self.rect = self.rect.move(self.speed)

    def move_down(self):
        self.speed = [0, 5]
        if self.rect.bottom > 560:
            self.rect.bottom = 560
        else:
            self.rect = self.rect.move(self.speed)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
猴子类运行
猴子类运行时需要根据键盘所按下的键来判断猴子运动状态,需要在前面加一句 from pygame.locals import
import pygame
import sys
from pygame.locals import *

def main():
    pygame.init()#初始化pygame
    size = width, height = 450, 560#界面尺寸
    screen = pygame.display.set_mode(size)#设置界面尺寸
    bg = pygame.image.load('background.jpg')#加载背景图片
    pygame.display.set_caption("游戏")#设置标题
    mk = Monkey() #实例化猴子类
    while True:
        #检测事件发生
        for event in pygame.event.get():
            if event.type == pygame.QUIT:#发生的事件类型为关闭时
                sys.exit()                #退出
           #实例化按键类型 
          key = pygame.key.get_pressed()
          # 根据 按键类型判断运动方向
        if key[K_LEFT]:
            mk.move_left()
        if key[K_RIGHT]:
            mk.move_right()
        if key[K_UP]:
            mk.move_up()
        if key[K_DOWN]:
            mk.move_down()
        screen.blit(bg, bg.get_rect())  #显示图片
        screen.blit(mk.image, mk.rect)#显示猴子,必须放在背景图片之后
        pygame.display.update()            #更新
        pygame.time.Clock().tick(60)    #设置游戏频率为60

if __name__ == '__main__':
    main()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
香蕉类
香蕉类编写
class Banana(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        x = randint(20, 430)
        position = [x, 20]
        speed = [0, 3]
        self.img = pygame.image.load('banana.png')
        self.rect = self.img.get_rect()
        self.rect.center = position
        self.image = self.img
        self.speed = speed

    def move(self):
        self.rect = self.rect.move(self.speed)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
香蕉类运行
香蕉类要求随机生成香蕉在屏幕中自上而下运动,因此需要实例化精灵组,将实例化的香蕉类放入精灵组中,在达到一定条件时控制精灵组中的香蕉运动并显示在屏幕中。
import pygame
import sys
from pygame.locals import *

def main():
    pygame.init()
    size = width, height = 450, 560
    screen = pygame.display.set_mode(size)
    bg = pygame.image.load('background.jpg')
    pygame.display.set_caption("游戏")
    group = pygame.sprite.Group() #实例化精灵组
    i = 0 #作为条件判断的变量
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        screen.blit(bg, bg.get_rect())
        i = i + 1
        if i % 30 == 0: #条件成立时
            ba = Banana() #实例化类
            group.add(ba) #添加到精灵组
        for b in group.sprites(): #从精灵组中循环
            b.move()
            screen.blit(b.img, b.rect)
        pygame.display.update()
        pygame.time.Clock().tick(60)


if __name__ == '__main__':
    main()


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
综合编写及碰撞检测
下面把上述内容放在一起运行,并进行碰撞检测,让猴子撞到香蕉时在终端里面显示出来。
使用pygame.sprite.collide_mask()函数检测碰撞,当两个传入的参数碰撞时,返回true.
def main():
    pygame.init()
    size = width, height = 450, 560
    screen = pygame.display.set_mode(size)
    bg = pygame.image.load('background.jpg')
    pygame.display.set_caption("游戏")
    mk = Monkey()
    group = pygame.sprite.Group()
    i = 0
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_ESCAPE:
                    sys.exit()
        key = pygame.key.get_pressed()
        if key[K_LEFT]:
            mk.move_left()
        if key[K_RIGHT]:
            mk.move_right()
        if key[K_UP]:
            mk.move_up()
        if key[K_DOWN]:
            mk.move_down()
        screen.blit(bg, bg.get_rect())
        screen.blit(mk.image, mk.rect)
        i = i + 1
        if i % 30 == 0:
            ba = Banana()
            group.add(ba)
        for b in group.sprites():
            b.move()
            screen.blit(b.img, b.rect)
            if pygame.sprite.collide_mask(mk, b):#碰撞检测
                print("撞到")
        pygame.display.update()
        pygame.time.Clock().tick(60)


if __name__ == '__main__':
    main()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

总结

最后,编程资料、学习路线图、源代码、软件安装包等!都可以【[点击这里]】领取!码文不易,求各位看官动动小手给个关注吧~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/937544
推荐阅读
相关标签
  

闽ICP备14008679号