小学生python游戏编程4----拼图游戏

小学生python游戏编程4----拼图游戏

    • 主要设计
    • 应用知识点
      • 1、python知识点
        • 1.1 函数定义与使用
        • 1.2 random
      • 2、pygamezero知识点
        • 2.1 基本框架,取上节中讲到的分隔的一个小方块
      • 2.1 拼满游戏界面
      • 2.3 拼正确,把小图利用代码贴完整
        • 2.4 两小方块互换位置
        • 2.5 把互换方块的代码转成函数
        • 2.6 随机多次打乱,成我们常见拼图状
    • 总结
    • 源码获取

主要设计

主要内容是设计开发一个趣味拼图游戏,其功能是对加载的图片进行分割(如分割5×5矩阵或其他类型矩阵),上篇文章讲了,具体可看小学生python游戏编程3----拼图游戏-准备(https://blog.csdn.net/fqfq123456/article/details/127173684),把分隔的图片加载到游戏界面,随机打乱顺序,用户使用鼠标点击图片框中的图片,两次点击的图片进行位置互换进行拼图,系统能够自动判别拼图是否成功并进行提示。

应用知识点

1、python知识点

1.1 函数定义与使用

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
定义一个函数,你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

现在学习以下函数,实现两个小拼图块位置的交换
def jiaohuanFk(a, b):
# i,j为要交换的两个小拼图块的序号
# 以下利用tempPos中间变量,实现两个小拼图块位置的交换
tempPos = grid[a].pos
grid[a].pos = grid[b].pos
grid[b].pos = tempPos
在随机打乱图片时多次调用,重复随机交换多次小拼图的位置
import random
for k in range(xy-1):
i = random.randint(0, x
y-1) # 第一个小拼图块的序号
j = random.randint(0, x*y-1) # 第二个小拼图块的序号
jiaohuanFk(i, j) # 调用函数交换两个小拼图块的位置

1.2 random

在Python中可以用于随机数生成的有两种主要途径,一是random模块,另一个是numpy库中random函数。在我们日常使用中,如果是为了得到随机的单个数,多考虑random模块;
random模块中约7个函数都是可以用来生成随机数的:
1、random.random():随机生成一个 [0,1) 的浮点数
2、random.uniform(a,b):随机生成一个 [a,b) 的浮点数
3、random.randint(a,b):随机生成一个 [a,b] 的整数,本练习中主要用此函数
4、random.choice(sequence):从列表,元组,字符串(可用于for循环的数据类型)中随机选择一个元素
5、random.randrange(a,b,step):在生成的<以a为始,每step递增,以b为终>这样的一个整数序列中随机选择一个数
6、random.shuffle(a):打乱一个列表的元素顺序
7、random.sample(self, population, k):从序列population中随机取出k个数;population的类型可以是列表、元组、集合、字符串

2、pygamezero知识点

2.1 基本框架,取上节中讲到的分隔的一个小方块

通过此基本框架,开启我们拼图游戏的第一步
效果:

在这里插入图片描述

代码:

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
screen: Screen  # 类型标注fangkuai_SIZE_w = 124  # 小图块的宽
fangkuai_SIZE_h = 87  # 小图块的高
WIDTH = 5*fangkuai_SIZE_w  # 设置窗口的宽度
HEIGHT = 5*fangkuai_SIZE_h  # 设置窗口的高度fangkuai = Actor('fenge\\df-10')  # 导入拼图方块图片
fangkuai.x = WIDTH/2   # 拼图方块图片的x坐标
fangkuai.y = HEIGHT/2  # 拼图方块图片的y坐标def draw():  # 绘制模块,每帧重复执行screen.clear()  # 每帧清除屏幕,便于重新绘制fangkuai.draw()  # 绘制小拼图块pgzrun.go()  # 开始执行游戏

2.1 拼满游戏界面

效果:
在这里插入图片描述

代码:

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
screen: Screen  # 类型标注TILE_SIZE_w = 124  # 小图块的宽
TILE_SIZE_h = 87  # 小图块的高
x = 5  # 横向方块数
y = 5  # 纵向方块数
WIDTH = x*TILE_SIZE_w  # 设置窗口的宽度
HEIGHT = y*TILE_SIZE_h  # 设置窗口的高度**grid = [] # 列表,用来存放最终所有拼图信息
for i in range(x): # 对行循环for j in range(y): # 对列循环fangkuai = Actor('fenge\\df-10')  # 导入拼图方块图片fangkuai.left = j * TILE_SIZE_w # 拼图方块图片最左边的x坐标fangkuai.top = i * TILE_SIZE_h  # 拼图方块图片最顶部的y坐标grid.append(fangkuai) # 将当前拼图加入到列表中**def draw():  # 绘制模块,每帧重复执行screen.clear()  # 每帧清除屏幕,便于重新绘制for fk in grid:fk.draw()  # 绘制小拼图块pgzrun.go()  # 开始执行游戏

2.3 拼正确,把小图利用代码贴完整

效果:
在这里插入图片描述

代码:

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
screen: Screen  # 类型标注TILE_SIZE_w = 124  # 根据小图块的宽设置
TILE_SIZE_h = 87  #  根据小图块的高设置
x = 5  # 横向方块数
y = 5  # 纵向方块数
WIDTH = x*TILE_SIZE_w  # 设置窗口的宽度
HEIGHT = y*TILE_SIZE_h  # 设置窗口的高度
TITLE = '拼图小游戏'**fk_list =[]
for i in range(1,x*y+1):fk_list.append(Actor('fenge\\df-'+str(i)))**grid = [] # 列表,用来存放最终所有拼图信息
for i in range(x): # 对行循环for j in range(y): # 对列循环print(i*x+j)fangkuai = fk_list[i*x+j] # 导入拼图方块图片fangkuai.left = j * TILE_SIZE_w # 拼图方块图片最左边的x坐标fangkuai.top = i * TILE_SIZE_h  # 拼图方块图片最顶部的y坐标grid.append(fangkuai) # 将当前拼图加入到列表中def draw():  # 绘制模块,每帧重复执行screen.clear()  # 每帧清除屏幕,便于重新绘制for fk in grid:fk.draw()  # 绘制小拼图块pgzrun.go()  # 开始执行游戏

2.4 两小方块互换位置

效果:你可以先想想如何实现,看看效果后结合上一节自己先试着改改,多改也是一种好的学习践方法
在这里插入图片描述

代码:

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
screen: Screen  # 类型标注TILE_SIZE_w = 124  # 根据小图块的宽设置
TILE_SIZE_h = 87  #  根据小图块的高设置
x = 5  # 横向方块数
y = 5  # 纵向方块数
WIDTH = x*TILE_SIZE_w  # 设置窗口的宽度
HEIGHT = y*TILE_SIZE_h  # 设置窗口的高度
TITLE = '拼图小游戏'fk_list =[]
for i in range(1,x*y+1):fk_list.append(Actor('fenge\\df-'+str(i)))grid = [] # 列表,用来存放最终所有拼图信息
for i in range(x): # 对行循环for j in range(y): # 对列循环print(i*x+j)fangkuai = fk_list[i*x+j] # 导入拼图方块图片fangkuai.left = j * TILE_SIZE_w # 拼图方块图片最左边的x坐标fangkuai.top = i * TILE_SIZE_h  # 拼图方块图片最顶部的y坐标grid.append(fangkuai) # 将当前拼图加入到列表中# 以下实现两个小拼图块位置的交换
a = 0   # 第一个小拼图块的序号
b = 12   # 第二个小拼图块的序号
# 以下利用tempPos中间变量,实现两个小拼图块位置的交换
tempPos = grid[a].pos
grid[a].pos = grid[b].pos
grid[b].pos = tempPosdef draw():  # 绘制模块,每帧重复执行screen.clear()  # 每帧清除屏幕,便于重新绘制for fk in grid:fk.draw()  # 绘制小拼图块pgzrun.go()  # 开始执行游戏

2.5 把互换方块的代码转成函数

# 以下实现两个小拼图块位置的交换
a = 0   # 第一个小拼图块的序号
b = 12   # 第二个小拼图块的序号
# 以下利用tempPos中间变量,实现两个小拼图块位置的交换
tempPos = grid[a].pos
grid[a].pos = grid[b].pos
grid[b].pos = tempPos

上面的代码换成下面的代码,为以后的随机打乱做好准备,此处想想为什么要定义个交换方块的函数?
运行效果如2.4没变

# 以下函数实现两个小拼图块位置的交换
def jiaohuanFk(a, b):# i,j为要交换的两个小拼图块的序号# 以下利用tempPos中间变量,实现两个小拼图块位置的交换tempPos = grid[a].posgrid[a].pos = grid[b].posgrid[b].pos = tempPosjiaohuanFk(0,12)

2.6 随机多次打乱,成我们常见拼图状

效果:
在这里插入图片描述

代码:

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
screen: Screen  # 类型标注TILE_SIZE_w = 124  # 根据小图块的宽设置
TILE_SIZE_h = 87  #  根据小图块的高设置
x = 5  # 横向方块数
y = 5  # 纵向方块数
WIDTH = x*TILE_SIZE_w  # 设置窗口的宽度
HEIGHT = y*TILE_SIZE_h  # 设置窗口的高度
TITLE = '拼图小游戏'fk_list =[]
for i in range(1,x*y+1):fk_list.append(Actor('fenge\\df-'+str(i)))grid = [] # 列表,用来存放最终所有拼图信息
for i in range(x): # 对行循环for j in range(y): # 对列循环# print(i*x+j)fangkuai = fk_list[i*x+j] # 导入拼图方块图片fangkuai.left = j * TILE_SIZE_w # 拼图方块图片最左边的x坐标fangkuai.top = i * TILE_SIZE_h  # 拼图方块图片最顶部的y坐标grid.append(fangkuai) # 将当前拼图加入到列表中# 以下函数实现两个小拼图块位置的交换
def jiaohuanFk(a, b):# i,j为要交换的两个小拼图块的序号# 以下利用tempPos中间变量,实现两个小拼图块位置的交换tempPos = grid[a].posgrid[a].pos = grid[b].posgrid[b].pos = tempPosimport random
# 重复随机交换多次小拼图的位置
for k in range(x*y-1):i = random.randint(0, x*y-1)  # 第一个小拼图块的序号j = random.randint(0, x*y-1)  # 第二个小拼图块的序号jiaohuanFk(i, j) # 调用函数交换两个小拼图块的位置def draw():  # 绘制模块,每帧重复执行screen.clear()  # 每帧清除屏幕,便于重新绘制for fk in grid:fk.draw()  # 绘制小拼图块pgzrun.go()  # 开始执行游戏

未完,下次接着分析,输赢及得分问题

总结

通过此次的《拼图小游戏》游戏实现,让我对pgzero处理图片的相关知识有了进一步的了解,对函数比以前更深刻的认识。

源码获取

关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主

今天是以此模板持续更新此育儿专栏的第 4 /50次。
可以关注我,点赞我、评论我、收藏我啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20021.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【赠书活动】同构:编程中的数学

写在前面 近年来随着人工智能、大规模分布式计算、多核CPU和异构计算等的发展&#xff0c;计算机中的各种编程技术在编程语言、软件架构、编译器、硬件体系结构、集成电路设计等方面都有着剧烈的变化。编程语言方面&#xff0c;越来越多的主流语言引入函数式编程的概念。软件架…

小学数学动画 android,小学数学课堂app下载-小学数学课堂 安卓版v2.2.0-PC6安卓网...

小学数学课堂app是一款小学数学在线教育平台&#xff0c;小学数学课堂app1-6年级数学知识全覆盖&#xff0c;随时随地开始在线练习&#xff0c;小学数学课堂app内有海量题库&#xff0c;生动教学精品课程&#xff0c;了解一下&#xff01; 软件介绍 小学数学课堂app是上亿小学生…

GeoGebra数学教学网站

GeoGebra 网站是数学教学的好助手&#xff0c; 简称GGB&#xff0c; 可以直接使用网站功能&#xff0c;也可以通过下载软件使用。 网址&#xff1a; https://www.geogebra.org/ 从该网站终于知道了数学的几个主要分支&#xff1a;

信奥中的数学之入门组(面向小学四年级至六年级以及初一学生)

NOI大纲正式发布 NOI大纲正式发布 NOI大纲 CSP初赛篇知识大纲 CSP-入门级-NOI大纲 NOI大纲 CSP初赛篇知识大纲 CSP-入门级-NOI大纲_dllglvzhenfeng的博客-CSDN博客_csp考试大纲 CSP-J入门组的相关的数学推荐国家中小学智慧教育平台 1、国家中小学网络云平台 国家中小学网络云…

(转)春招两次腾讯面试都挂二面了,分享下我失败+傻傻的面试经历

这个春招估计也要介绍了吧&#xff0c;自己投的公司也不多吧&#xff0c;投简历的时候&#xff0c;如果你提前批和正常网申都投的话&#xff0c;可能会获得两次笔试/面试的机会&#xff0c;我投了两次腾讯&#xff0c;不过&#xff0c;两次都在二面挂了&#xff0c;特别是第二次…

面试通过,背调凉了?

一谈起背调&#xff0c;很多朋友的第一反应就是——“好烦哦&#xff01;” 在某种意义上&#xff0c;背调的确可以检验求职者简历中的内容是否属实&#xff0c;也是企业规避风险的重要手段之一。 每个公司对背调的态度也是各不相同&#xff0c;有的是简单了解基本情况&#…

【面试记录】英威腾一面

公司&岗位 英威腾-软件工程师 面试过程 一对一&#xff0c;腾讯会议。 自我介绍项目介绍项目中最难的地方硕士项目期间收获最大的。如何自学python力扣就业方向深圳能否接受项目追问

面试通过,背调凉了。。

关于背调 大家好&#xff0c;我是二哥呀。昨天在朋友汪哥那里看到一篇文章&#xff0c;说某求职者得能力很强&#xff0c;一面、二面、三面都过了&#xff0c;准备发 offer 了&#xff0c;却被 HR 在背调中发现候选人学历有问题。 背调主要会核实哪些内容呢&#xff1f;大的问…

读破万卷,神交古人,突破ChatGPT4096的Token限制,建立自己的垂直领域资料人工智能助理

ChatGPT的泛用性极高&#xff0c;上知天文&#xff0c;下通地理&#xff0c;参考古今&#xff0c;博稽中外&#xff0c;几乎无所不知&#xff0c;无所不晓。但如果涉及垂直领域的专业知识点&#xff0c;ChatGPT难免也会有语焉不详&#xff0c;闪烁其词的毛病&#xff0c;本次我…

Chat2DB:阿里巴巴开源的聊天数据管理工具--实践

Chat2DB&#xff1a;阿里巴巴开源的聊天数据管理工具–实践 简介 ​ Chat2DB 是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了…

「ChatGPT之母」:她35岁,OpenAI神秘CTO

作者 | 椎名 编辑 | 梓 首图来源&#xff1a;SFGATE 谁是现在风头最劲的AI公司&#xff1f;相信很多人的答案都是OpenAI&#xff0c;尤其是在通用人工智能的&#xff08;AGI&#xff09;领域。 然而&#xff0c;很少有人知道&#xff0c;在OpenAI最初踏入AGI之旅时&#xff0c;…

马云回国,首谈ChatGPT:AI将取代大部分标准化的工作!

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 马云突然回国&#xff0c;并出席云谷座谈会&#xff0c;引起了媒体许多猜想。马云谈了教育、科技等话题。并且在公开场合首次谈到对ChatGPT的看法&#xff0c;马云表示&#xff1a;ChatGPT只是AI时代的…

这家公司用了ChatGPT,逆势扩招40%程序员...

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 陆奇在最近的分享中提出一个观点&#xff1a;“生成式AI&#xff0c;不会抢程序员的饭碗&#xff0c;相反会增加程序员的岗位。” 理由很简单&#xff0c;AI大幅提升程序员的工作效率&#xff0c;同样…

陆奇演讲刷屏:ChatGPT的成功,是AI新范式的成功!将带来3个大的机会

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 这几天&#xff0c;被陆奇的最新演讲刷屏了。 陆奇是前百度总裁兼COO&#xff0c;之前是微软副总裁、雅虎副总裁&#xff0c;被称为“硅谷最有权势的华人高管”&#xff0c;每离开一家公司都会造成股价…

ChatGPT - 如何高效的调教ChatGPT (指令建构模型-LACES问题模型)

文章目录 定义1. Limitation&#xff08;限定条件&#xff09;2. Assignment&#xff08;分配角色&#xff09;3. Context&#xff08;背景或上下文&#xff09;4. Example&#xff08;示例&#xff09;5. Step by Step&#xff08;拆分任务&#xff09; 小Demo 定义 LACES问题…

LLM 系列 | 05:ChatGPT Prompt的迭代优化

简介 梅子留酸软齿牙&#xff0c;芭蕉分绿与窗纱。日长睡起无情思&#xff0c;闲看儿童捉柳花。小伙伴们好&#xff0c;我是微信公众号 《小窗幽记机器学习》 的小编&#xff1a;卖冰棍的小男孩。 更多、更新文章欢迎关注微信公众号&#xff1a;小窗幽记机器学习。后续会持续…

与ChatGpt聊天,学习golang标签的反射机制

与ChatGpt聊天&#xff0c;学习golang标签的反射机制 引 ChatGPT火了以后&#xff0c;本拐先是恐惧&#xff0c;之后是拥抱。 最近很多编程知识的学习&#xff0c;都是通过 chatgpt来搞定。 众所周知&#xff0c;本拐就是一个啥技术都半斤八两的程序员&#xff0c;这次&#xf…

苹果Message应用图标被指抄袭微信、HipChat图标

苹果发布的新版桌面系统os x mountain lion预览版中&#xff0c;message程序可谓是大家最为关心的功能之一&#xff0c;这款程序的图标也引起不少争议。目前所有的mac用户都可以安装这款小程序测试&#xff0c;无限制的与ios设备间发送短信和图片。 这两年微信成为了时尚一族必…

iPhone 图标设置

-- 2012-03-23 让你的应用支持新iPad的Retina显示屏 一、应用图片 标准iOS控件里的图片资源&#xff0c;苹果已经做了相应的升级&#xff0c;我们需要操心的是应用自己的图片资源。就像当初为了支持iPhone 4而制作的2x高分辨率版本&#xff08;译者&#xff1a;以下简称高分&…

IOS App 的图标和启动图的烦恼

前言&#xff1a; 好多iOS App的开发者都会面临的一个问题&#xff0c;那就是 App 的图标&#xff08;icon&#xff09; 和启动图&#xff08;launch images&#xff09; 。 一些没有经验&#xff08;指的是没做过App审计的&#xff09;的UI设计师&#xff0c;不知道该怎么做。…