目录 

第一节 pygame基础... 3

一、pygame框架... 3

1、基本框架:... 3

2、导库... 3

3、初始化... 3

4、设置画布大小... 3

5、设置窗口名称... 4

6、填充颜色... 4

7、更新画布... 4

二、添加素材... 4

1、添加图片... 4

坐标系... 5

2、pygame加载图片... 5

3、pygame绘制图片... 5

4、pygame缩放图片的方法... 6

5、pygame显示图片的方法... 6

第二节 pygame中的事件... 7

事件:能够产生影响的操作叫做事件。... 7

一、鼠标事件... 7

1、MOUSEBUTTONDOWN事件... 7

2、MOUSEBUTTONDOWN事件使用方法... 7

3、MOUSEBUTTONUP事件... 7

4、MOUSEBUTTONUP事件使用方法... 8

二、键盘事件... 8

1、键盘事件KEYDOWN.. 8

2、KEYDOWN事件使用方法... 8

3、键盘事件KEYUP. 8

4、KEYUP事件使用方法... 9

5、精确的检测某个按键的方法... 9

三、退出事件QUIT. 10

1、QUIT事件语法如下:... 10

2、QUIT事件使用方法... 11

第三节 pygame中的图像... 12

一、加载图片... 12

二、缩放图片... 12

三、绘制图片... 12

四、rgb三原色... 12

五、图像拖拽... 12

1、矩形和点的碰撞检测... 13

2、获取鼠标点位置... 13

3、MOUSEMOTION事件... 13

4、MOUSEMOTION事件的使用方法... 13

5、选中图形跟随鼠标移动... 14

6、固定图形-MOUSEBUTTONUP事件... 14

7、MOUSEBUTTONUP事件使用方法... 14

8、完整代码展示... 15

第一节 pygame基础

一、pygame框架

1、基本框架:

import pygame                                   (导库)

pygame.init()                                    (初始化)

screen = pygame.display.set_mode((800,600))    (设置大小)

pygame.display.set_caption("可多的王国")            (设置窗口名称)

while True:                                        (主循环)

    king.quit()                                    (退出)

    screen.fill((255,255,255))                    (设置颜色)

    pygame.display.update()                        (更新画布)

2、导库

格式:import pygame,king

import表示导入、pygame表示游戏库、king是国王库

pygame是游戏库,会使用它做很多小游戏

king是国王使用的库

备注:库名之间用逗号隔开,当然也可以继续添加其他的库

3、初始化

格式:pygame.init()

打开游戏都有初始化的过程,相当于告诉电脑:"我要用pygame制作游戏啦!"

4、设置画布大小

格式:screen = pygame.display.set_mode((800,600))

第一个参数(800, 600)表示画布的大小,800表示画布的宽,600表示画布的高。注意是放在括号里。

变量screen代表设置的画布

注意是双扩号

画布大小的单位是像素

5、设置窗口名称

格式:pygame.display.set_caption("可多的王国")

注意:括号内是字符串,字符串需要使用双引号

6、填充颜色

格式:screen.fill((255,255,255))

这里使用的是变量screen,而不是pygame

(255,255,255)RGB颜色值,需要使用扩号

RGB颜色结构:

(num1,num2,num3)

num10-255的整数,代表Rred-红色),数字越大,颜色中红色成分越多

num20-255的整数,代表Ggreen-绿色),数字越大,颜色中绿色成分越多

num30-255的整数,代表Bblue-蓝色),数字越大,颜色中蓝色成分越多

7、更新画布

格式:pygame.display.update()
我们需要让画布一直显示,所以需要放进循环里

二、添加素材

1、添加图片

添加图片两步走:

1)加载图片 image = pygame.image.load("图片名.图片格式")

2)绘制图片 screen.blit(image,(100, 100))

这里的screenpygame的画布,使用screen.blit()方法就可以将画布绘制到画布上,其中image是加载的图片,(100,100)是绘制的位置。

坐标系

pygame的坐标系是以左上角为原点,坐标为(0,0)

横轴(X轴)向右坐标依次变大,纵轴(Y轴)向下坐标依次变大。

坐标系图:

 

2、pygame加载图片

格式:变量名=pygame.image.load("图片名称.图片格式")

图片名称需要用字符串的形式,而且需要带上图片的格式

3、pygame绘制图片

格式:画布名称.blit(绘制对象,(坐标x,坐标y))

注意:坐标需要用括号括起来

绘制图片语句要放在程序主循环pygame.display.update()之前

绘制多张图片时,先绘制的对象在下面,后绘制的对象在上面。如果坐标重合,后绘制的对象遮挡先绘制的对象

4、pygame缩放图片的方法

格式:变量名=pygame.transform.scale(缩放对象,(宽度,高度))

参数宽度和高度表示缩放后的宽度和高度,需要用括号括起来

这里的缩放对象是指通过pygame.image.load()方法加载过图片的对象

5、pygame显示图片的方法

缩放根据需要选择是否缩放,不是必要步骤

img1=pygame.image.load("图片名称.图片格式")

img2=pygame.transform.scale(img1,(宽度,高度))

screen.blit(img2,(坐标x,坐标y))

pygame.display.update()

第二节 pygame中的事件

事件:能够产生影响的操作叫做事件。

一、鼠标事件

概念:用鼠标控制的事件,我们称之为鼠标事件

1、MOUSEBUTTONDOWN事件

检测鼠标按键按下:

event.type == pygame.MOUSEBUTTONDOWN

鼠标事件通常通常作为if条件语句中的条件。

MOUSEBUTTONDOWN全部都是大写。

2、MOUSEBUTTONDOWN事件使用方法

#导库

import pygame,sys

......

while True:

    for event in pygame.event.get():               #循环检测

        if event.type == pygame.KEYDOWN:          #检测键盘按键按下

            print("这是键盘事件")

        elif event.type == pygame.MOUSEBUTTONDOWN:  #检测鼠标按下

            print("这是鼠标事件")         #执行语句

3、MOUSEBUTTONUP事件

检测鼠标按键按下:

event.type == pygame.MOUSEBUTTONUP

鼠标事件通常通常作为if条件语句中的条件。

MOUSEBUTTONUP全部都是大写。

4、MOUSEBUTTONUP事件使用方法

#导库

import pygame,sys

......

while True:

    for event in pygame.event.get():               #循环检测

        if event.type == pygame.KEYDOWN:          #检测键盘按键按下

            print("这是键盘事件")

        elif event.type == pygame.MOUSEBUTTONUP:  #检测鼠标抬起

            print("这是鼠标事件")         #执行语句

二、键盘事件

概念:用键盘控制角色移动,我们称之为键盘事件

1、键盘事件KEYDOWN

KEYDOWN事件语法如下:

event.type == pygame.KEYDOWN

用途:检测按键是否被按下。

pygame.KEYDOWNKEYDOWN需要大写。

2、KEYDOWN事件使用方法

#导库

import pygame,sys

......

while True:

    for event in pygame.event.get():               #循环检测

        if event.type == pygame.QUIT:          #退出事件判断

            pygame.quit()                  #窗口退出

            sys.exit()                  #系统退出

        elif event.type == pygame.KEYDOWN:  #检测按键按下

            print("已经按下按键")         #执行语句

检测键盘按下作为if语句的条件,按下键盘后的程序作为条件语句的执行语句。

3、键盘事件KEYUP

KEYUP事件语法如下:

event.type == pygame.KEYUP

用途:检测按键是否被抬起。

pygame.KEYUPKEYUP需要大写。

4、KEYUP事件使用方法

#导库

import pygame,sys

......

while True:

    for event in pygame.event.get():               #循环检测

        if event.type == pygame.QUIT:          #退出事件判断

            pygame.quit()                  #窗口退出

            sys.exit()                  #系统退出

        elif event.type == pygame.KEYUP:  #检测按键抬起

            print("已经释放了按键")         #执行语句

检测键盘抬起作为if语句的条件,抬起键盘后的程序作为条件语句的执行语句。

5、精确的检测某个按键的方法

精确的检测某个按键的语法如下:

event.key == pygame.K_按键名 event.type == ord("字符")

例如:检测按键1:event.type == pygame.K_1

检测按键a:event.type == ord("a")

注意:按键名前加大写的K_ord()函数表示取得字符对应的ASCII码。下面三种写法是相等的。

if event.type == pygame.K_a:

if event.type == ord("a"):

if event.type == 97:

ASCII码表如下:

字母

a

b

c

...

x

y

z

ASCII

97

98

99

...

120

121

122

要检测其他的按键,只需要修改下划线后的按键名。常见按键名如下:

 

pygame中的方向键:

方向

方向键代码

K_UP

K_DOWN

K_LEFT

K_RIGHT

#导库

import pygame,sys

......

while True:

    for event in pygame.event.get():               #循环检测

        if event.type == pygame.QUIT:          #退出事件判断

            pygame.quit()                  #窗口退出

            sys.exit()                  #系统退出

        elif event.type == pygame.KEYDOWN:  #检测按键按下

            if event.key == pygame.K_RIGHT: #判断按下右键

                print("按下了向右的方向键")

精确的检测某个键时,需要先判断事件的类型,按下还是抬起,然后再检测按下的键是什么。

三、退出事件QUIT

1、QUIT事件语法如下:

event.type == pygame.QUIT

用途:判断程序是否需要退出。

在程序中,我们要一直判断退出事件是否触发,然后做出相应,所以退出事件通常需要配合循环语句和条件语句使用。

pygame.QUITQUIT需要大写。

2、QUIT事件使用方法

#导库

import pygame,sys

......

while True:

    for event in pygame.event.get():       #循环检测

        if event.type == pygame.QUIT:  #退出事件判断

            pygame.quit()          #窗口退出

            sys.exit()             #系统退出

窗口退出:就好比我们关闭了音乐软件的界面,但音乐还在播放。

系统退出:我们退出了音乐软件。

第三节 pygame中的图像

一、加载图片

格式:变量名=pygame.image.load("图片名称.图片格式")

图片名称需要用字符串的形式,而且需要带上图片的格式

二、缩放图片

格式:变量名=pygame.transform.scale(缩放对象,(宽度,高度))

参数宽度和高度表示缩放后的宽度和高度,需要用括号括起来

这里的缩放对象是指通过pygame.image.load()方法加载过图片的对象

三、绘制图片

格式:画布名称.blit(绘制对象,(坐标x,坐标y))

注意:坐标需要用括号括起来

绘制图片语句要放在程序主循环pygame.display.update()之前

绘制多张图片时,先绘制的对象在下面,后绘制的对象在上面。如果坐标重合,后绘制的对象遮挡先绘制的对象

四、rgb三原色

RGB颜色结构:

(num1,num2,num3)

num10-255的整数,代表Rred-红色),数字越大,颜色中红色成分越多

num20-255的整数,代表Ggreen-绿色),数字越大,颜色中绿色成分越多

num30-255的整数,代表Bblue-蓝色),数字越大,颜色中蓝色成分越多

五、图像拖拽

步骤:

鼠标动作

图形动作

矩形动作

1、鼠标按下

选中图形

选中图形对应的矩形对象

2、鼠标移动

移动图形

将矩形对象的坐标设置为鼠标坐标

3、鼠标松开

固定图形

取消选中图形的矩形对象

1、矩形和点的碰撞检测

格式:矩形.collidepoint(点的坐标)

例如:判断矩形rect1和点(520,233)是否碰撞:

if rect1.collidepoint(520,233):

    print("矩形和点碰到了")

2、获取鼠标点位置

获取鼠标的坐标:event.pos

获取鼠标的x坐标:event.pos[0]

获取鼠标的y坐标:event.pos[1]

3、MOUSEMOTION事件

检测鼠标移动:

event.type == pygame.MOUSEMOTION

鼠标事件通常作为if条件语句中的条件。

4、MOUSEMOTION事件的使用方法

#导库

import pygame,sys

......

while True:

    for event in pygame.event.get():               #循环检测

        if event.type == pygame.KEYDOWN:          #退出事件判断

            print("这是键盘事件")

        elif event.type == pygame.MOUSEBUTTONDOWN:  #检测鼠标按下

            print("这是鼠标事件")         #执行语句

        elif event.type == pygame.MOUSEMOTION:  #检测鼠标移动

            print("鼠标移动了")         #执行语句

5、选中图形跟随鼠标移动

moveRect = None   # 移动的对象

while True:

    for event in pygame.event.get():

        #退出事件

        if event.type == pygame.QUIT:

            pygame.quit()

            sys.exit()

        #鼠标事件

        elif event.type == pygame.MOUSEBUTTONDOWN:

            for n in rectList:

                if n.collidepoint(event.pos):

                    # print(event.pos)

                    moveRect = n         #设置变量为选中图形

        elif event.type == pygame.MOUSEMOTION:

            if moveRect != None:

                moveRect.center = event.pos   #设置选中图形跟随鼠标位置

6、固定图形-MOUSEBUTTONUP事件

检测鼠标按键按下:

event.type == pygame.MOUSEBUTTONUP

鼠标事件通常通常作为if条件语句中的条件。

MOUSEBUTTONUP全部都是大写。

7、MOUSEBUTTONUP事件使用方法

moveRect = None   # 移动的对象

while True:

    for event in pygame.event.get():

        #退出事件

        if event.type == pygame.QUIT:

            pygame.quit()

            sys.exit()

        #鼠标事件

        elif event.type == pygame.MOUSEBUTTONDOWN:

            for n in rectList:

                if n.collidepoint(event.pos):

                    # print(event.pos)

                    moveRect = n         #设置变量为选中图形

        elif event.type == pygame.MOUSEMOTION:

            if moveRect != None:

                moveRect.center = event.pos   #设置选中图形跟随鼠标位置

        elif event.type == pygame.MOUSEBUTTONUP:

            moveRect = None      #固定图形

8、完整代码展示

import pygame, sys, tangram

pygame.init()

screen = pygame.display.set_mode((700, 500))

pygame.display.set_caption("益智七巧板")

bg = pygame.image.load("bg.png")

sound = pygame.mixer.Sound("sound1.wav")

# 用列表imgNameList存储图片名

imgNameList = ["1.png", "2.png", "3.png", "4.png", "5.png", "6.png", "7.png"]

imgList = []  # 存储加载后的七巧板图片

#循环加载七巧板图片

for n in imgNameList:

    img1 = pygame.image.load(n)

    imgList.append(img1)

#为每一个七巧板创建Rect对象

rect1 = pygame.Rect(495, 118, 47, 93)

rect2 = pygame.Rect(478, 330, 69, 73)

rect3 = pygame.Rect(532, 184, 36, 73)

rect4 = pygame.Rect(569, 121, 52, 56)

rect5 = pygame.Rect(567, 273, 26, 50)

rect6 = pygame.Rect(517, 255, 26, 51)

rect7 = pygame.Rect(564, 365, 36, 47)

# 用列表rectList存储创建的Rect对象

rectList = [rect1, rect2, rect3, rect4, rect5, rect6, rect7]

moveRect = None   # 移动的对象

while True:

    for event in pygame.event.get():

        #退出事件

        if event.type == pygame.QUIT:

            pygame.quit()

            sys.exit()

        #鼠标事件

        elif event.type == pygame.MOUSEBUTTONDOWN:

            for n in rectList:

                if n.collidepoint(event.pos):

                    # print(event.pos)

                    moveRect = n

        elif event.type == pygame.MOUSEMOTION:

            if moveRect != None:

                moveRect.center = event.pos

        elif event.type == pygame.MOUSEBUTTONUP:

            moveRect = None

            sound.play()

    screen.fill((255, 255, 255))

    screen.blit(bg, (0, 0))

    #绘制七巧板

    for i in range(7):

        screen.blit(imgList[i], rectList[i])

    # 判断游戏是否完成

    tangram.win(rectList, screen)

    pygame.display.update()

运行效果初始状态截图:

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐