• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

带你用python利用小猪佩奇制作四个小游戏

python 搞java代码 3年前 (2022-05-21) 40次浏览 已收录 0个评论

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于腾讯云 作者:Python进阶者

( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )

本文说明

为什么要学习python?是因为不仅社会上很多工作需要用到python,同时我们可以利用python做很多好玩儿的事儿,

PS:我帮女朋友曾经做了个人的动态二维码和图片切分为九宫格,她就很开心呀!毕竟她是文科生,就会觉得你很牛逼!所以有趣的技术还是需要学习。

当然python还有很多用途,等待着我们去发现,相信它会给你的学习生活带来乐趣。

本文同样是利用小猪佩奇带着大家学习python的几个好玩儿的操作(大纲如下),俗话说:“兴趣是最好的老师”,我们只有喜欢上一门语言,才会有学好它的欲望。

  • 1.利用python绘制一个小猪佩奇;
  • 2.利用python给小猪佩奇换背景色;
  • 3.利用python将小猪佩奇切分为九宫格;
  • 4.利用python制作小猪佩奇动态二维码;

1.利用python绘制一个小猪佩奇

turtle库是一个很好的python图形绘制库,利用它我们可以绘制各种各样的图形、小动物。这个库其实并不难,实际你怎么绘制这个图形,对应的代码,就跟着你的实际绘制图形的方向走下去,即可。PS:当你有孩子了,是不是既可以利用turtle教他们绘制某些图案,还可以培养他们的编程兴趣,好处很多哦!

<span>from</span> turtle <span>import</span> *

<span>#</span><span> 绘制鼻子</span>
<span>def</span><span> nose(x,y):
    penup()
    goto(x,y)
    pendown()
    setheading(</span>-30<span>)
    begin_fill()
    a</span>=0.4
    <span>for</span> i <span>in</span> range(120<span>):
        </span><span>if</span> 0<=i<30 <span>or</span> 60<=i<90<span>:
            a</span>=a+0.08<span>
            left(</span>3<span>) 
            forward(a) 
        </span><span>else</span><span>:
            a</span>=a-0.08<span>
            left(</span>3<span>)
            forward(a)
        end_fill()
        
    penup()
    setheading(</span>90<span>)
    forward(</span>25<span>)
    setheading(0)
    forward(</span>10<span>)
    pendown()
    pencolor(</span>255,155,192<span>)
    setheading(</span>10<span>)
    begin_fill()
    circle(</span>5<span>)
    color(</span>160,82,45<span>)
    end_fill()
    penup()
    setheading(0)
    forward(</span>20<span>)
    pendown()
    pencolor(</span>255,155,192<span>)
    setheading(</span>10<span>)
    begin_fill()
    circle(</span>5<span>)
    color(</span>160,82,45<span>)
    end_fill()
</span><span>#</span><span> 绘制头部</span>
<span>def</span><span> head(x,y):
    color((</span>255,155,192),<span>"</span><span>pink</span><span>"</span><span>)
    penup()
    goto(x,y)
    setheading(0)
    pendown()
    begin_fill()
    setheading(</span>180<span>)
    circle(</span>300,-30<span>)
    circle(</span>100,-60<span>)
    circle(</span>80,-100<span>)
    circle(</span>150,-20<span>)
    circle(</span>60,-95<span>)
    setheading(</span>161<span>)
    circle(</span>-300,15<span>)
    penup()
    goto(</span>-100,100<span>)
    pendown()
    setheading(</span>-30<span>)
    a</span>=0.4
    <span>for</span> i <span>in</span> range(60<span>):
        </span><span>if</span> 0<=i<30 <span>or</span> 60<=i<90<span>:
            a</span>=a+0.08<span>
            left(</span>3<span>) 
            forward(a) 
        </span><span>else</span><span>:
            a</span>=a-0.08<span>
            left(</span>3<span>)
            forward(a)
    end_fill()
</span><span>#</span><span> 绘制耳朵</span>
<span>def</span><span> ears(x,y): 
    color((</span>255,155,192),<span>"</span><span>pink</span><span>"</span><span>)
    penup()
    goto(x,y)
    pendown()
    begin_fill()
    setheading(</span>100<span>)
    circle(</span>-50,50<span>)
    circle(</span>-10,120<span>)
    circle(</span>-50,54<span>)
    end_fill()
    penup()
    setheading(</span>90<span>)
    forward(</span>-12<span>)
    setheading(0)
    forward(</span>30<span>)
    pendown()
    begin_fill()
    setheading(</span>100<span>)
    circle(</span>-50,50<span>)
    circle(</span>-10,120<span>)
    circle(</span>-50,56<span>)
    end_fill()
</span><span>#</span><span> 绘制眼睛</span>
<span>def</span><span> eyes(x,y):
    color((</span>255,155,192),<span>"</span><span>white</span><span>"</span><span>)
    penup()
    setheading(</span>90<span>)
    forward(</span>-20<span>)
    setheading(0)
    forward(</span>-95<span>)
    pendown()
    begin_fill()
    circle(</span>15<span>)
    end_fill()
    color(</span><span>"</span><span>black</span><span>"</span><span>)
    penup()
    setheading(</span>90<span>)
    forward(</span>12<span>)
    setheading(0)
    forward(</span>-3<span>)
    pendown()
    begin_fill()
    circle(</span>3<span>)
    end_fill()
    color((</span>255,155,192),<span>"</span><span>white</span><span>"</span><span>)
    penup()
    setheading(</span>90<span>)
    forward(</span>-25<span>)
    setheading(0)
    forward(</span>40<span>)
    pendown()
    begin_fill()
    circle(</span>15<span>)
    end_fill()
    color(</span><span>"</span><span>black</span><span>"</span><span>)
    penup()
    setheading(</span>90<span>)
    forward(</span>12<span>)
    setheading(0)
    forward(</span>-3<span>)
    pendown()
    begin_fill()
    circle(</span>3<span>)
    end_fill()
</span><span>#</span><span> 绘制腮帮</span>
<span>def</span><span> cheek(x,y):
    color((</span>255,155,192<span>))
    penup()
    goto(x,y)
    pendown()
    setheading(0)
    begin_fill()
    circle(</span>30<span>)
    end_fill()
</span><span>#</span><span> 绘制嘴巴</span>
<span>def</span><span> mouth(x,y): 
    color(</span>239,69,19<span>)
    penup()
    goto(x,y)
    pendown()
    setheading(</span>-80<span>)
    circle(</span>30,40<span>)
    circle(</span>40,80<span>)
</span><span>#</span><span> 绘制身体</span>
<span>def</span><span> body(x,y):
    color(</span><span>"</span><span>red</span><span>"</span>,(255,99,71<span>))
    penup()
    goto(x,y)
    pendown()
    begin_fill()
    setheading(</span>-130<span>)
    circle(</span>100,10<span>)
    circle(</span>300,30<span>)
    setheading(0)
    forward(</span>230<span>)
    setheading(</span>90<span>)
    circle(</span>300,30<span>)
    circle(</span>100,3<span>)
    color((</span>255,155,192),(255,100,100<span>))
    setheading(</span>-135<span>)
    circle(</span>-80,63<span>)
    circle(</span>-150,24<span>)
    end_fill()
</span><span>#</span><span> 绘制手</span>
<span>def</span><span> hands(x,y):
    color((</span>255,155,192<span>))
    penup()
    goto(x,y)
    pendown()
    setheading(</span>-160<span>)
    circle(</span>300,15<span>)
    penup()
    setheading(</span>90<span>)
    forward(</span>15<span>)
    setheading(0)
    forward(0)
    pendown()
    setheading(</span>-10<span>)
    circle(</span>-20,90<span>)
    penup()
    setheading(</span>90<span>)
    forward(</span>30<span>)
    setheading(0)
    forward(</span>237<span>)
    pendown()
    setheading(</span>-20<span>)
    circle(</span>-300,15<span>)
    penup()
    setheading(</span>90<span>)
    forward(</span>20<span>)
    setheading(0)
    forward(0)
    pendown()
    setheading(</span>-170<span>)
    circle(</span>20,90<span>)
</span><span>#</span><span> 绘制脚</span>
<span>def</span><span> foot(x,y):
    pensize(</span>10<span>)
    color((</span>240,128,128<span>))
    penup()
    goto(x,y)
    pendown()
    setheading(</span>-90<span>)
    forward(</span>40<span>)
    setheading(</span>-180<span>)
    color(</span><span>"</span><span>black</span><span>"</span><span>)
    pensize(</span>15<span>)
    forward(</span>20<span>)
    pensize(</span>10<span>)
    color((</span>240,128,128<span>))
    penup()
    setheading(</span>90<span>)
    forward(</span>40<span>)
    setheading(0)
    forward(</span>90<span>)
    pendown()
    setheading(</span>-90<span>)
    forward(</span>40<span>)
    setheading(</span>-180<span>)
    color(</span><span>"</span><span>black</span><span>"</span><span>)
    pensize(</span>15<span>)
    forward(</span>20<span>)
</span><span>#</span><span> 绘制尾巴</span>
<span>def</span><span> tail(x,y):
    pensize(</span>4<span>)
    color((</span>255,155,192<span>))
    penup()
    goto(x,y)
    pendown()
    setheading(0)
    circle(</span>70,20<span>)
    circle(</span>10,330<span>)
    circle(</span>70,30<span>)
</span><span>#</span><span> 设置画布和画笔</span>
<span>def</span><span> setting(): 
    pensize(</span>4<span>)
    hideturtle()
    colormode(</span>255<span>)
    color((</span>255,155,192),<span>"</span><span>pink</span><span>"</span><span>)
    setup(</span>840,500<span>)
    speed(</span>10<span>)
</span><span>def</span><span> main():
    setting()         </span><span>#</span><span> 画布和画笔设置</span>
    nose(-100,100)    <span>#</span><span> 鼻子</span>
    head(-69,167)     <span>#</span><span> 头</span>
    ears(0,160)       <span>#</span><span> 耳朵</span>
    eyes(0,140)       <span>#</span><span> 眼睛</span>
    cheek(80,10)      <span>#</span><span> 腮帮</span>
    mouth(-20,30)     <span>#</span><span> 嘴巴</span>
    body(-32,-8)      <span>#</span><span> 身体</span>
    hands(-56,-45)    <span>#</span><span> 手</span>
    foot(2,-177)      <span>#</span><span> 脚</span>
    tail(148,-155)    <span>#</span><span> 尾巴</span>
    done()            <span>#</span><span> 结束</span>
<span>if</span> <span>__name__</span> == <span>"</span><span>__main__</span><span>"</span><span>:
    main()</span>

www#gaodaima.com来源gao!%daima.com搞$代*!码$网搞代码

 

结果如下:

2.利用python给小猪佩奇换背景色

我们在昨天已经讲述过怎么使用python库给证件照换底色,大家可以参考那篇文章学习一下。换背景色的原理:每一个图像都是由像素点构成的,我们想要替换他们的颜色,就是找到每个像素点对应的位置,然后用指定颜色,去替换它!一般证件照背景色并不是同一种蓝色像素点,无法完成像素点的定位,这就需要我们对图像进行【腐蚀】或【膨胀】,完成图片黑白话,这样白色的像素点是255,就可以很好的定位了。

<span>import</span><span> cv2
</span><span>import</span><span> numpy as np
</span><span>#</span><span> 读取照片</span>
img=cv2.imread(<span>"</span><span>zhu.jpg</span><span>"</span><span>)

</span><span>#</span><span> 图像缩放</span>
img = cv2.resize(img,None,fx=0.5,fy=0.5<span>)
rows,cols,channels </span>=<span> img.shape
</span><span>print</span><span>(rows,cols,channels)
cv2.imshow(</span><span>"</span><span>img</span><span>"</span><span>,img)

</span><span>#</span><span> 图片转换为灰度图</span>
hsv =<span> cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow(</span><span>"</span><span>hsv</span><span>"</span><span>,hsv)

</span><span>#</span><span> 图片的二值化处理</span>
lower_blue=np.array([90,70,70<span>])
upper_blue</span>=np.array([110,255,255<span>])
mask </span>=<span> cv2.inRange(hsv, lower_blue, upper_blue)


</span><span>#</span><span>腐蚀膨胀</span>
erode=cv2.erode(mask,None,iterations=1<span>)
cv2.imshow(</span><span>"</span><span>erode</span><span>"</span><span>,erode)

dilate</span>=cv2.dilate(erode,None,iterations=1<span>)
cv2.imshow(</span><span>"</span><span>dilate</span><span>"</span><span>,dilate)

</span><span>#</span><span>遍历替换</span>
<span>for</span> i <span>in</span><span> range(rows):
  </span><span>for</span> j <span>in</span><span> range(cols):
    </span><span>if</span> erode[i,j]==255: <span>#</span><span> 像素点为255表示的是白色,我们就是要将白色处的像素点,替换为红色</span>
      img[i,j]=(0,0,255)<span>#</span><span>此处替换颜色,为BGR通道</span>
cv2.imshow(<span>"</span><span>res</span><span>"</span><span>,img)

</span><span>#</span><span> 窗口等待的命令,0表示无限等待</span>
cv2.waitKey(0)

 

结果如下:

3.利用python将小猪佩奇切分为九宫格

将图片切分为九宫格的原理就是:找到图片对应位置的坐标,然后进行切割。由于是九宫格,我们切分的是3*3,然后利用双层循环遍历对应位置的坐标后,进行图片切割。

<span>from</span> PIL <span>import</span><span> Image
</span><span>import</span><span> sys
</span><span>#</span><span>将图片填充为正方形</span>
<span>def</span><span> fill_image(image):
    width, height </span>=<span> image.size
    </span><span>#</span><span>选取长和宽中较大值作为新图片的,小的地方,用图片填充为等宽等高</span>
    new_image_length = width <span>if</span> width > height <span>else</span><span> height
    </span><span>#</span><span>生成新图片[白底]</span>
    new_image = Image.new(image.mode, (new_image_length, new_image_length), color=<span>"</span><span>white</span><span>"</span><span>)
    </span><span>#</span><span>将之前的图粘贴在新图上,居中</span>
    <span>if</span> width > height:<span>#</span><span>原图宽大于高,则填充图片的竖直维度</span>
        <span>#</span><span>(x,y)二元组表示粘贴上图相对下图的起始位置</span>
        new_image.paste(image, (0, int((new_image_length - height) / 2<span>)))
    </span><span>else</span><span>:
        new_image.paste(image, (int((new_image_length </span>- width) / 2<span>),0))
    </span><span>return</span><span> new_image
</span><span>#</span><span>切图</span>
<span>def</span><span> cut_image(image):
    width, height </span>=<span> image.size
    item_width </span>= int(width / 3<span>)
    item_height </span>= int(height / 3<span>)
    box_list </span>=<span> []
    </span><span>#</span><span>双重循环,生成9张图片基于原图的位置</span>
    <span>#</span><span> 注意:图片左上角是(0,0),右下角是(width,height)</span>
    <span>for</span> i <span>in</span> range(0,3<span>):
        </span><span>for</span> j <span>in</span> range(0,3<span>):
            </span><span>print</span>((j*item_width,i*item_height,(j+1)*item_width,(i+1)*<span>item_height))
            box </span>= (j*item_width,i*item_height,(j+1)*item_width,(i+1)*<span>item_height)
            box_list.append(box)
 
    image_list </span>= [image.crop(box) <span>for</span> box <span>in</span><span> box_list]
    </span><span>return</span><span> image_list
</span><span>#</span><span>保存</span>
<span>def</span><span> save_images(image_list):
    index </span>= 1
    <span>for</span> image <span>in</span><span> image_list:
        image.save(str(index) </span>+ <span>"</span><span>.jpg</span><span>"</span><span>)
        index </span>+= 1<span>
 
file_path </span>= <span>"</span><span>zhuzhu.jpg</span><span>"</span><span>
image </span>=<span> Image.open(file_path)
image </span>=<span> fill_image(image)
image_list </span>=<span> cut_image(image)
save_images(image_list)</span>

 

结果如下:

4.利用python制作小猪佩奇动态二维码

代码说明:如果我们利用的背景图是gif动态图,生成的就是动态二维码。如果利用的背景是静态图,生成的是静态二维码。

<span>from</span> MyQR <span>import</span><span> myqr
</span><span>import</span><span> matplotlib.pyplot as plt
</span><span>#</span><span> 生成的二维码最终在你电脑的存储位置</span><span>
#</span><span> 当你使用了动态图作为背景,这里可以写成".gif",保存出来的就是gif动态二维码!</span>
save_name = <span>"</span><span>傻逼1.gif</span><span>"</span><span>
myqr.run(
    </span><span>#</span><span> 该链接表示你想要生成二维码的链接。</span>
    words=<span>"</span><span>https://www.gaodaima.com/weixin_41261833</span><span>"</span><span>,
    version</span>=10,  <span>#</span><span> 容错率</span>
    level=<span>"</span><span>H</span><span>"</span>,  <span>#</span><span> 纠错水平,范围是L、M、Q、H,从左到右依次升高</span>
    colorized=True, <span>#</span><span> False为黑白</span>
    contrast=1.5,  <span>#</span><span> 用以调节图片的对比度,1.0 表示原始图片。</span>
    brightness=1.0,  <span>#</span><span> 用来调节图片的亮度。</span>
    save_name=save_name,<span>#</span><span>存储的文件名</span>
    <span>#</span><span> 背景图片的路径,你如果给的是".png/.jpg"等静态图片,最终生成的就是静态二维码!</span>
    <span>#</span><span> 背景图片的路径,你如果给的是".gif"等动态图片,最终只需要保存为".gif",生成的就是动态二维码!</span>
    picture=r<span>"</span><span>G:1Pycharm_Projectcsdn分享系列小猪佩奇的几个操作动态.gif</span><span>"</span><span>
    )
</span><span>#</span><span> 查看生成的二维码图片</span>
img = Image.open(save_name) <span>#</span><span> 读取所保存的图片展示二维码</span>
plt.figure(<span>"</span><span>Image</span><span>"</span>) <span>#</span><span> 图像窗口名称</span>
<span>plt.imshow(img)
plt.axis(</span><span>"</span><span>off</span><span>"</span>) <span>#</span><span> 关掉坐标轴为 off</span>
plt.show()

 

结果如下:


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:带你用python利用小猪佩奇制作四个小游戏

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址