小学生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(x _y-1):
i = random.randint(0, x_y-1) # 第一个小拼图块的序号
j = random.randint(0, xy-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):在生成的

2、pygamezero知识点

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

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

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

代码:

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 拼满游戏界面

效果:

小学生python游戏编程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  # 设置窗口的高度

**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 拼正确,把小图利用代码贴完整

效果:

小学生python游戏编程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) # 将当前拼图加入到列表中

def draw():  # 绘制模块,每帧重复执行
    screen.clear()  # 每帧清除屏幕,便于重新绘制
    for fk in grid:
        fk.draw()  # 绘制小拼图块

pgzrun.go()  # 开始执行游戏

2.4 两小方块互换位置

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

小学生python游戏编程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 = tempPos

def 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].pos
    grid[a].pos = grid[b].pos
    grid[b].pos = tempPos

jiaohuanFk(0,12)

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

效果:

小学生python游戏编程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) # 将当前拼图加入到列表中

以下函数实现两个小拼图块位置的交换
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(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次。
可以 关注我, 点赞我、 评论我、 收藏我啦。

Original: https://blog.csdn.net/fqfq123456/article/details/127177781
Author: 信息化未来
Title: 小学生python游戏编程4—-拼图游戏

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/779103/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python图形可视化基础一

    定义图表类型—&#…

    Python 2023年9月6日
    073
  • 今天面了个阿里拿 38K 出来的,让我见识到了基础的天花板

    前言 人人都有大厂梦,对于程序员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀…

    Python 2023年9月16日
    045
  • 今天学弟问我pip如何永久换源?

    pip如何永久换源 临时使用 我们在使用Python开发的时候,经常要下载第三方模块,最常用的方式就是直接 pip install 模块…

    Python 2023年6月10日
    089
  • 深大数据库系统实验3——DATABASE SOFTWARE练习实验

    目录 一、前言 二、我的实验小变动 三、实验工程 1、板块介绍 2、实验代码 (1)init.py (2)forms.py (3)index2.py (4)qa.py (5)use…

    Python 2023年8月9日
    0109
  • 音频基础说明

    现实生活中,音频(Audio)主要用在两大场景中,包括语音(Voice)和音乐(Music)。语音主要用于沟通,如打电话等。目前由于语音识别技术的发展,人机语音交互也是语音的一个应…

    Python 2023年11月6日
    032
  • 【设计模式】Java设计模式 – 命令模式

    Java设计模式 – 命令模式 😄生命不息,写作不止🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆 一个有梦有戏的人 @怒放吧德德🌝分享学习心得,…

    Python 2023年10月20日
    037
  • Django中封装分页组件

    Django中封装分页组件 (1) 定义Paginator类 from django.utils.safestring import mark_safe class Paginat…

    Python 2023年5月23日
    078
  • (C++) 从stl算法的谓词 分析lambda表达式的本质

    lambda表达式是C++11增加的一个新特性,深受各位开发者的喜爱。 而探究lambda表达式的本质是什么,就是本文的主要内容。 这个网站可以根据源码生成中间代码,辅助学习者学习…

    Python 2023年11月6日
    040
  • Python工具箱系列(八)

    前面我们提到过,有以下工具都可以开发Python代码: 直接使用Python解释器。运行Python就可以得到一个交互式命令行界面,可以简单的测试代码。作为Python入门,写代码…

    Python 2023年10月31日
    051
  • 给python安装matplotlib模块以及遇到的问题

    matplotlib是python中强大的画图模块。最近需要import matplotlib,操作了一波之后,一直报错。最后安装成功,还好没放弃。下面是我的安装历程,向大家分享三…

    Python 2023年9月2日
    056
  • 上手Pandas,带你玩转数据(4)– 数据清洗

    文章目录 * – 描述性方法 – + 注: – 汇总数据 – pandas处理文本数据 – 检查缺失值 – …

    Python 2023年8月17日
    057
  • VMware与Centos系统安装

    今日任务 1.Linux发行版的选择 2.vmware创建一个虚拟机(centos) 3.安装配置centos7 4.xshell配置连接虚拟机(centos) 选择性 pc可以选…

    Python 2023年6月3日
    065
  • 因子分析——python

    目录 一、起源 二、基本思想 三、算法用途 四、因子分析步骤 五、factor_analyzer库 四、实例详解 1.导入库 2.读取数据 3.充分性检测 3.1 Bartlett…

    Python 2023年8月1日
    063
  • 【Python基础】函数

    函数 封装功能,提高应用的模块性和代码重用率 1. 定义函数 1.1 函数内的第一条语句是字符串时,该字符串就是文档字符串(docstring) def my_fun(): ”’…

    Python 2023年5月23日
    063
  • python播放器模块_如何在单独的模块中调用播放器

    我最近实施了一个敌人,该敌人会定期在屏幕上的指定点射击。但是,在尝试使玩家适应这一点时,它拒绝工作。由于敌人类别是在房间模块中定义的,然后在主游戏模块中定义的,因此我不确定如何在敌…

    Python 2023年9月24日
    036
  • Python之列表、字典、元组、集合

    Python有4种数据结构,分别是:列表、字典、元组、集合。 列表 列表基本概念 列表由一系列按特定顺序排列的元素组成; 列表是有序集合,也就是说每一个元素都有一个位置,要访问、修…

    Python 2023年9月24日
    037
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球