12总 pygame知识

复习:

1.json数据
标准格式:a.只能是一个数据 b.数据必须是json支持的数据类型
数据类型:对象(字典),数组(列表),字符串(双引号),数字,布尔(true,false),null
json数据和python之间的转换关系
python模块中的方法:load,loads, dump,dumps

2.异常捕获
try-except-finally

3.第三方库的导入

1.pygame的基本操作:

import pygame

if __name__ =='__main__':
    1.初始化游戏模块
    pygame.init()

    2.创建游戏窗口
   
    display.set_mode(窗口大小):创建一个窗口并且返回
    窗口大小:是一个元祖,并且元祖中需要两个值分别表示宽度和高度(单位是像素)

    window = pygame.display.set_mode((400,600))

    3.让游戏一直运行,直到点关系按钮才结束
    while True:
        获取游戏过程中产生的所有事件
        for event in pygame.event.get():
             if event.type == pygame.QUIT:#type来判断事件的类型
                exit()#退出程序

2.显示图片:

import pygame

if __name__ == '__main__':
    #1.初始化游戏模块
    pygame.init()

    2.创建窗口
    window = pygame.display.set_mode((600,400))


    给窗口填充颜色
   
    fill(颜色)
    颜色:计算机三原色(红、绿、蓝),每个颜色对应值的范围是0~255.通过改变三原色的值可以调配不同的颜色
    颜色值:是一个元祖,元祖中三元素,分别代表红绿蓝(rgb)
    (255,0,0)--->红色
    (0,255,0)---->绿色
    (0,0,255)---->黑色
    (255,255,255) ---> 白色
    

    window.fill((255,255,255))
    a.获取图片,创建图片对象

    image.load(图片路径):获取本地的一张图片,返回图片对象
      image = pygame.image.load('./files/jiaoyu.jpg')


    get_size():获取大小,返回值是一个元祖,有两个元素,分别是宽和高
    
    """
    image_width,image_height = image.get_size()


    b.渲染图片(将图片画在纸上)
    """
    blit(渲染对象,位置)
    位置:坐标(x,y),值的类型是元祖,元祖有两个元素分别对应x坐标和y坐标
    
    """
    window.blit(image,(0,100))
    window.blit(image,((600-image_width,400-image_height)))


    c.展示内容(将纸贴画在画框上)

    pygame.display.flip()


    3.游戏循环
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

3.型变:

import pygame

if __name__ == '__main__':
    初始化和创建窗口
    pygame.init()
    window = pygame.display.set_mode((400,600))
    window.fill((255,255,255))#填充窗口的颜色

    图片相关
    1.加载图片(选图)
    image = pygame.image.load('./files/jiaoyu.jpg')


    a.缩放(指定大小)
    transform.scale(缩放对象,目标大小):将指定的对象缩放到指定的大小,会返回缩放后的对象



   b.旋转缩放(指定缩放比例)
    rotozoom(Surface,angle,scale)
    Surface:旋转缩放对象
    angle:旋转的角度(0~360)
    scale:缩放比例,大于1放大,小于1缩小

    new_image = pygame.transform.rotozoom(image,45,0.8)

    c.旋转
    rotate(Surface,angle)
    Surface:旋转对象
    angle:旋转角度

    new_image = pygame.transform.rotate(image,270)

    2.渲染图片
    window.blit(new_image,(0,0))

    3.展示内容

    pygame.display.flip()




    游戏循环
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

4.显示文字:

import pygame

if name =='main':
初始化游戏和创建窗口
pygame.init()
window = pygame.display.set_mode((400,600))
window.fill((255,255,255))

显示文字
1.创建字体对象

a.创建系统的文字对象
SysFont(name,size,bold=False,italic=False)
name:字体名(系统支持的字体名)
size:字体大小
bold:是否加粗
italic:是否倾斜

b.创建自定义的字体对象
Font(字体文件路径,字体大小)
字体文件路径:ttf文件

a.创建系统文字
b.创建自定义字体

    font = pygame.font.Font('./files/aa.ttf',30)
2.根据字体取创建文字对象


render(text,antialias,color,background=None)
text:需要显示的文字(字符串)
antialisas:是否平滑(布尔)
color:颜色
background:背景颜色
    text = font.render('你好,pygame',True,(0,0,255),(255,255,0))

    print(text.get_size())

3.渲染文件

window.blit(text,(50,50))

`4.展示内容

    pygame.display.flip()
游戏结束
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

5.显示图形:

import pygame
from math import pi
if __name__ == '__main__':

初始化,创建窗口

 pygame.init()
 window =pygame.display.set_mode((400,600))
 window.fill((255,255,255))

1.画线段
def line(Surface,color,start_pos,end_pos,width=1)
Surface:画在哪儿
color:线的颜色
start_pos:起点
end_pos:终点
width:线宽

画一条水平线

   pygame.draw.line(window,(255,0,0),(50,100),(200,100))

画一条垂直线

    pygame.draw.line(window,(0,255,0),(50,100),(50,200),2)

2.画线段(折线)
def lines(Suface,color,closed,pointlist,width=1)
Surface:画在哪儿
color:线的颜色
closed:是否闭合(是否连接起点和终点)
pointlist:点对应的列表

 pygame.draw.lines(window,(0,0,255),True,[(100,200),(150,120),(140,300)])

3.画圆
def circle(Surface,color,pos,radius,width=0)
Surface:画在哪儿
color:颜色
pos:圆心坐标
redius:半径
width:线宽,0->填充

    pygame.draw.circle(window,(255,255,0),(200,300),100,0)

4.画矩形:
def rect(Surface,color,Rect,width=0)
Surface:画在哪儿
color:颜色
Rect:范围(元祖,元祖中有四个元素,分别是x,y,width,height)

    pygame.draw.rect(window,(0,255,0),(10,100,50,100))

5.画多边型

polygon(Surface,color,Rect,width=0)


        pygame.draw.polygon(window,(0,255,255),[(300,50),(250,40),(100,50),(200,150)])

6.画椭圆
def ellipse(Surface,color,Rect,width=0)

    pygame.draw.ellipse(window,(123,200,210),(10,200,150,60))

7.画弧线
def arc(Surface,color,Rect,start_angle,stop_angle,width=1)
start_angle:0~2pi
stop_angle:
pi---180度 1度----pi/180
59度 = pi/180*59

    pygame.draw.arc(window,(255,0,0),(200,400,100,100),pi/4+pi,pi*3/4+pi,3)

展示内容:

    pygame.display.flip()

游戏结束

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

6.事件:

import pygame
from random import randint

if __name__ =='__main__':

游戏初始化

    pygame.init()
    window = pygame.display.set_mode((400,600))
    window.fill((255,255,255))

游戏循环

    while True:

所有的事件处理的入口就是这个for循环
for 循环中的代码只有游戏事件发生后才会执行

a.事件的type---决定发生的是什么事件
QUIT:关闭按钮被点击的事件

鼠标事件:
MOUSEBUTTONDOWN:鼠标按下事件
MOUSEBUTTONUP:鼠标按下松开时对应的事件
MOUSEOTION:鼠标移动事件

键盘事件:
KEYBOWN:键盘按下
KEYUP:键盘弹起
b.事件的pos----鼠标事件发生的位置(坐标)

c.事件的key----键盘事件被按的键对应的编码值

        for event in pygame.event.get():
        不同事件发生后,对应的type值不一样
            if event.type == pygame.QUIT:
                print('点击关闭按钮')
                exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
            # 鼠标按下要做的事情就写在这儿
                print(event.pos)
                print('鼠标按下')
            #鼠标按下一次画一个球
            #pygame.draw.circle(window,(randint(0,255),randint(0,255),\
            # randint(0,255)),event.pos,randint(20,50))
            elif event.type == pygame.MOUSEBUTTONUP:
                print('鼠标弹起',event.pos)
            elif event.type == pygame.MOUSEMOTION:
            # 鼠标按下一次画一个球
                pygame.draw.circle(window,(randint(0,255),randint(0,255),\
                                       randint(0,255)),event.pos,20)
                pygame.display.flip()
            # print('鼠标正在移动',event.pos)

            elif event.type == pygame.KEYDOWN:
                print('键盘按下',event.key,chr(event.key))
            elif event.type == pygame.KEYUP:
                print('键盘弹起)

8.动画原理:

import pygame

if __name__ == '__main__':
    \\初始化
    pygame.init()
    window = pygame .display.set_mode((400,600))
    window.fill((255,255,255))
    pygame.display.flip()
   \\ 球心圆的坐标
    x = 100
    y = 100
    r = 50
    add = 4
    y_speed = 2
   \\ 游戏循环
    while True:
        \\ 延迟
       \\ pygame,time,delay(10)
        \\将之前纸上的内容给覆盖
        window.fill((255,255,255))
       \\ 不断的画圆
        pygame.draw.circle(window,(255,0,0),(x,y),r)
        pygame.display.update()
        \\改变y值让圆在垂直方向移动
        y += y_speed
       \\ r += add
       \\if r >=120 or r <=20:
       \\ add *= -1
     \\边界检测
        if y > 600-r:
            y = 600-r
            y_speed = -2
        elif y < 50:
            y = 50
            y_speed = 2
        \\时间检测
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

9.按住不放原理:

import pygame

if __name__ == '__main__':
   \\游戏初始化
    pygame.init()
    window = pygame.display.set_mode((400,600))
    window.fill((255,255,255))
   \\ pygame.display.flip

  \\1.显示一张照片
    image =pygame.image.load('./files/luffy4.jpg')
  \\缩放
    image = pygame.transform.rotozoom(image,0,0.5)
    window.blit(image,(100,100))
   \\获取图片的宽度和高度
    image_w,image_h = image.get_size()

    pygame.display.flip()
   \\用来储存图片是否移动
    flag = False

   \\保存图片的坐标
    image_x,image_y = 100,100

   \\游戏循环
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

           \\按下鼠标
            if event.type == pygame.MOUSEBUTTONDOWN:
               \\ 判断按下的位置是否在图片上
                m_x,m_y = event.pos
                if image_x <= m_x <= image_x+image_w and image_y <= m_y <= image_y+image_h:
                    flag = False
            elif event.type == pygame.MOUSEBUTTONUP:
                flag = False
            \\鼠标移动事件
            \\鼠标在移动并且flag是True)
            if event.type == pygame.MOUSEMOTION and flag:
               \\填充背景色覆盖原来的内容
                window.fill((255,255,255))
                \\在鼠标移动的位置渲染图片
                \\window.blit(image,event.pos)
                center_x,center_y = event.pos
                image_x,image_y = center_x - image_w/2, center_y- image_h/2
                window.blit(image,(image_x,image_y))
                \\g更新屏幕的显示
                pygame.display.update()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pygame基础 导入模块import pygame 初始化游戏模块pygame.init() 创建游戏窗口win...
    rzlong阅读 378评论 0 1
  • 01-recode 1.json数据标准格式:a.只能是一个数据 b.数据必须是json支持的类型数据类型:对...
    Smilebest阅读 210评论 0 2
  • 窗口 载入pygame库 import pygame 1.初始化游戏模块 pygame.init() 2.创建游戏...
    Autumn_Hy7阅读 201评论 0 0
  • pygame图形接口 使用pygame.image模块,可以对图像进行读取和保存。 使用pygame.image....
    sssally92阅读 17,741评论 1 25
  • 一.pygame基本操作 注:每次都要先导入这些程序 二.显示图片 一共分为三个步骤:a.获取图片,创建图片对象b...
    葡萄柚子茶阅读 484评论 0 4