zoukankan      html  css  js  c++  java
  • Python-pygame[学习笔记]

    记录一下最近学pygame的小知识,pygame是python专门做游戏的一个模块,专为我这种好奇心人士而设

    #会动的矩形 (这个也是我在某站看到之后,照着写了一遍,然后开始思考,有了一些自己的注释)

    2020/06/01 python-pygame笔记
    
    
    1.复习 “会动的圆形/矩形”pygame小游戏,重点
        #要搞清楚pygame写游戏的逻辑,就不会出错。插入模块-->模块初始化-->初始化窗口、标题-->建立事件循环-->(那么在这个事件循环里面要干什么?)-->要动?->怎么动?-->动就是位置改变一次--->
        定义速度变量-->让循环中的初始位置每次得到变化,那么循环多次即可产生会动的影像--->所有代码按照顺序来按照逻辑来写
        
        插入pygame模块
        #import pygame
        
        #python 必有的事件循环所需要的模块
        import sys
        
        #QUIT是pygame的常量,将所有的 Pygame 常量导入。
        from pygame.locals import * 
        
        #初始化pygame
        pygame.init()
        
        #定义位置变量
        pos_x = 300
        pos_y = 150
        
        #定义速度变量
        spd_x = 2
        spd_y = 1
        
        #初始化窗口、标题--
        screen = pygame.display.set_mode((600,600))
        pygame.display.set_caption('TEST')
        
        #建立事件循环
        #while True 代表死循环,遍历获取pygame的所有事件,如果,这个事件的类型是退出,那么窗口关闭,否则一直循环下去--理解!!就很简单
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                        sys.exit()
                    
            #要动起来,则要先知道初始位置在哪,我们画的是矩形,则定义位置变量,位置变量一开始就设定所以不必在循环里面写所以在上面即可
            #同理,定义速度变量让初始位置改变的时候,速度变量也是不会在循环里面改变的,所以在上面即可进行设置
            
            #假装现在开始循环,让位置开始发生改变,即!
            pos_x += spd_x
            pos_y += spd_y
            
            #问题就来了!发生改变之后,位置发生改变,万一超出所定义的窗口大小呢? 我们可以让他反弹!一直在窗口里面动,涉及两问题
            #1.怎么检测到位置改变 到 已经在窗口边缘或者说(刚好与一边与窗口重叠)?
            #2.怎么反弹
            
            #第一个很容易想到,用if语句进行位置的检测,x,y各自检测到位置已经达到上下左右窗口的边缘即可(所以你这时候就要想你即将要画的对象到达窗口边缘的时候的位置关系)
            #第二个反弹即-->最简单的就是让速度反向变化-->那我们把速度变为相反数即可
            
            #我们清楚知道我们要画的是边长为50的矩形(特殊的矩形,正方形)(极限情况:4种情况的组合上:上边缘,下边缘,左边缘,右边缘)
            if pos_x > 550 or pos_x < 0:
                spd_x = -spd_x
            if pos_y > 550 or pos_y < 0:
                spd_y = -spd_y
            
            
            #按逻辑来!我们现在只是定好了“规则”,就是让他在什么位置可以开始画矩形,从而形成动的画面,位置有了,但是还没有画,所以写做一下画之前的准备
            #搞个好背景,定义颜色
            black = 0,0,0
            #既然都定义颜色了,就顺便定义等一下矩形的那个颜色
            white = 255,255,255
            #来铺背景!
            screen.fill(black)
            
            #然后就可以开始画了
            #这时候为了方便可以提前定义要画的矩形的参数变量
            rect = pos_x,pos_y,50,50
            #width 表示绘制图像的线的宽度,0就代表实心(颜色充满图像) 
            width = 0
            pygame.draw.rect(screen,white,rect,width)
            
            #一定要显示更新才能看到
            pygame.display.update()
            
            #大功告成
        
    2.一些小思考
    对于width 的思考
        width = 0 的时候是实心,所以惯性思维在想,线条越来越大,如果开始大于0的时候,当等于边长(或者半径)的时候,岂不是又是和width = 0 一样又变成实心?????
        基于产生矛盾的想法,实验了代码
        
        原来圆的确是这样,但是矩形却不是,矩形当width越来越大的时候会变成这样
            
            

    分别为width = 1,10,30,50,100的情况,circle为什么就是width越大就越趋向于实心,而rect却变了形

    很明显看出,我觉得(只是鄙人觉得),两者画的“机制不一样”

    circle:“向内延伸”,所以画的线越粗(也就是绘制的线的宽度越大),往内延伸越多,不知道读者们能不能理解这个向内延伸,我截个图给读者们看看

     如图红色箭头指向就是我说的“向内延伸”,所以这就可以解释画圆的时候,当width = 半径的时候,就是实心的,同时,当width = 0的时候也是是新的

    而画矩形的时候,当长和宽是以更大的width画的时候,你试想着你是一笔笔画的这个矩形你就会发现用很大的宽度去画矩形的时候,整个图形就不是个矩形了

    新人驾到,多多指教!我肯定也有不完美,有错误的地方欢迎大家来指点

    12:05:45

  • 相关阅读:
    android 上传文件到百度云
    android 学习参考
    利用SSH在本机和远程服务器之间传输文件或文件夹
    指定GPU运行python程序
    ubuntu18.04调整终端字体大小
    ubuntu18.04安装搜狗输入法
    pip install .whl文件时is not a supported wheel on this platform.解决方法
    jmeter实现mysql的增删改查
    jmeter实现天气webservice请求
    常见算法 python实现
  • 原文地址:https://www.cnblogs.com/Yx-MAN/p/13030420.html
Copyright © 2011-2022 走看看