Lisp
文章平均质量分 82
OnRoadZy
真正的人生在路上。
爱好编程,喜欢Racket!
展开
-
用Racket做一个拼图游戏——33 知识点
拼图游戏知识点。原创 2024-07-16 10:30:06 · 911 阅读 · 0 评论 -
用Racket做一个拼图游戏——32 创建可执行程序
主程序完成,接下来就可以感受游戏带来的乐趣了。原创 2024-07-16 10:28:05 · 539 阅读 · 0 评论 -
用Racket做一个拼图游戏——31 创建主程序
主程序是指一个计算机程序中的核心代码,通常是整个程序的最高层次,换句话说就是主函数或入口函数。进程启动后首先会运行主程序,在主程序中做一些初始化操作等,然后再根据需要调用其它模块、函数或子程序。原创 2024-07-16 10:25:59 · 268 阅读 · 0 评论 -
用Racket做一个拼图游戏——30 拼图画布类
拼图画布类(puzzle-canvas%)在之前做过简单介绍,也创建出基本框架,接下来对其进行扩展。原创 2024-07-16 10:24:08 · 694 阅读 · 0 评论 -
用Racket做一个拼图游戏——29 主框架视图控制器
在这一节里,将进入成果享受型编程模式,一方面是因为主要工作就是为了完善视图(V)部分的相应函数,另一方面是因为基本上都是使用之前模型(M)部分编程的成果来搭建。原创 2024-07-16 10:22:08 · 542 阅读 · 0 评论 -
用Racket做一个拼图游戏——28 创建右侧布局
这里新创建的类puzzle-canvas%的基类为canvas%,在创建类的时候同时用(super-new)初始化基类。这样就创建了一个新的类,其功能现在与canvas%一致,后边可以通过进一步添加类字段或成员函数来对其进行扩展。原创 2024-07-16 10:20:21 · 857 阅读 · 0 评论 -
用Racket做一个拼图游戏——27 创建状态显示区
信息控件message%用来显示基本的状态信息。原创 2024-07-16 10:18:10 · 255 阅读 · 0 评论 -
用Racket做一个拼图游戏——26 创建拼图命令按钮组
这里在定义组框里的构件时,采用了和之前完全不同的方式。原创 2024-07-16 10:16:22 · 534 阅读 · 0 评论 -
用Racket做一个拼图游戏——25 创建行列设置组
这里使用了一种新的面板类——group-box-panel%——组框面板,它将其子窗口排在单列中,并且在面板的顶部绘制一个可选的标签,并在面板内容周围绘制一个边框,这样就创建了一个标题为label的组窗格,将指定的多个构件框起来形成一个明确的分组。与大多数面板类不同,组框面板的水平和垂直边距默认为 2 (像素)。原创 2024-07-16 10:14:24 · 873 阅读 · 0 评论 -
用Racket做一个拼图游戏——24 创建命令功能区
这里同样使用了竖向面板。除了利用两个函数建立两个视图区外,最后还定义了一个按钮类button%对象。原创 2024-07-16 10:12:28 · 896 阅读 · 0 评论 -
用Racket做一个拼图游戏——23 创建左侧布局
由以上代码可以看出,左侧布局创建了一个竖向面板vertical-panel%的实例,并以此为父级创建了三个对象:一个画布实例canvas/target、一个命令区、一个状态显示区,它们三者是并列关系,形成竖向排列。原创 2024-07-16 10:10:19 · 609 阅读 · 0 评论 -
用Racket做一个拼图游戏——22 创建窗口布局
创建窗口布局原创 2024-07-15 10:12:25 · 404 阅读 · 0 评论 -
用Racket做一个拼图游戏——21 创建主窗口
根据上边介绍,把之前定义的main-frame代码进行扩展。原创 2024-07-15 10:10:35 · 249 阅读 · 0 评论 -
用Racket做一个拼图游戏——20 规划布局
在实际应用中,不一定采用上边的方式创建GUI程序。为了方便程序的控制,可能会将创建和定义分开,即将控件的实例值标识在程序模块开始的时候集中进行定义(值暂时设置为void),在后边分别分级创建空间实例并设置给对应值标识。这样就可以只定义需要执行操作的控件标识(如按钮、画布、字段框等),而不进行操作的控件则不用专门定义标识(如窗格、面板、信息框等),程序逻辑性更强,代码更简洁,也方便按控件之间的逻辑关系进行并列、嵌套创建(后边可以看到)。原创 2024-07-15 10:06:50 · 667 阅读 · 0 评论 -
用Racket做一个拼图游戏——19 定义主视图框架
之前基本上完成了拼图的数据准备工作,已经可以通过程序对拼图切块并自由拼合。接下来做一些人机交互的界面,以方便客户使用。Racket提供了专供人机交互编程的racket/gui语言工具箱来完成图形界面程序。原创 2024-07-15 10:03:52 · 474 阅读 · 0 评论 -
用Racket做一个拼图游戏——18 汇总提供标识
有一个问题是,模块外部最好是直接调用所提供标识的模块内的提供值,而不管其实现方式,否则每次就要将模块内代码阅读明白,显然这是不现实的。因此,Racket提供了合约对提供设置进行限制说明。原创 2024-07-15 10:01:40 · 938 阅读 · 0 评论 -
用Racket做一个拼图游戏——15 初始化拼图数据、16 恢复拼图初始状态、17 判断是否成功完成拼图
前面各节将拼图会用到的图形操作的各个方面都设计完了。还需要为用户设置一个默认的初始环境,以避免用户打开软件后面对空白的界面懵圈。原创 2024-07-15 09:57:04 · 657 阅读 · 0 评论 -
用Racket做一个拼图游戏——14 操作id
谈到互动操作,往往都绕不过一个话题,就是对象,而每个对象要进行区分,必然需要一个标识,对于有规律的对象,往往采用编号来做标识,这就是id(identification,身份,身份象征等)。原创 2024-07-15 09:53:42 · 705 阅读 · 0 评论 -
用Racket做一个拼图游戏——12 混合单元格
为了混合单元格,需要能够将表中的任意两个单元格进行调换。原创 2024-07-15 09:01:57 · 918 阅读 · 0 评论 -
用Racket做一个拼图游戏——11 将单元格列表转换为散列表
考虑到后续可能出现单元格混合、内容修改等,为了方便,实际使用的时候采用散列表来存储分割的单元格数据,这样就可以分别修改它的键或值来改变单元格属性(如当前位置)了。原创 2024-07-15 08:59:43 · 420 阅读 · 0 评论 -
用Racket做一个拼图游戏——10 分割图片到单元格列表
一个列表是一个序对的组合,它创建一个链表。更确切地说,一个列表要么是空列表null,要么是个序对。是序对时,其第一个值是一个列表元素,第二个值是一个列表。一个序对是两个任意值的有序组合。原创 2024-07-15 08:57:35 · 700 阅读 · 0 评论 -
用Racket做一个拼图游戏——9 生成单元格数据
现在可以把分割出的图片作为数据进行整理,以便后边使用。考虑到拼图存在混合单元格的操作,需要记录初始时的单元格位置,同时也需要记录混合后的单元格位置,另外还要考虑记录当前操作的单元格位置。原创 2024-07-15 08:55:39 · 641 阅读 · 0 评论 -
用Racket做一个拼图游戏——8 按行列分割图片
这一节,我们把调整好尺寸的图片分割成指定的rows行,columns列,每个行列单元格都存储一张分割后的小图片,需要的时候直接取出来使用即可。原创 2024-07-15 08:53:13 · 706 阅读 · 0 评论 -
用Racket做一个拼图游戏——7 调整显示图片大小
前面我们取得了我们需要的源图片,也取得了我们调整的图片大小,接下来我们就将源图片调整到我们需要的大小。原创 2024-07-15 08:51:18 · 531 阅读 · 0 评论 -
用Racket做一个拼图游戏——6 设置图片尺寸
前面小节我们把图片读入了计算机内存中。但是,我们读取的图片并不一定是我们需要的大小。"set-picture-size!"将源图片调整到给定的大小,这样无论是进行统一规范的处理或者是在屏幕上显示都是定尺寸的、可控的。因此,我们首先要让程序获得图片需要的大小。原创 2024-07-15 08:48:48 · 872 阅读 · 0 评论 -
用Racket做一个拼图游戏——5 取得源图片
它也不是其它语言里所说的变量,因为Racket的标识只是对值的绑定,并不是随时可变的符号(当然,上边用副作用函数set!如上一节所述,从本节开始,后边写的有关操作图片的函数都属于模型的内容,把它们都写道一个文件里,文件名命名为“puzzle-model.rkt”。计算机中图片是以二进制格式的文件存储的。是标识,从上边的描述可以看出,函数也是采用标识的(非匿名函数),因此函数是可以作为函数的参数进行传递的。首先,我们要拼的图片是保存在计算机的存储介质中的(比如硬盘等),要操作图片,首先得把图片读入内存中。原创 2024-07-15 08:43:33 · 922 阅读 · 0 评论 -
用Racket做一个拼图游戏——4 实现工具
Racket作为Lisp语言的一个分支,拥有强大的编程逻辑构建能力,其强大的宏构建能力更是让他成为了创建语言的语言。Racket在原Scheme简洁的基础上得到更广泛的发展,在系统编程、图形界面编程、网络编程等均有不俗的表现。经常遇到一些朋友提问说能用Racket做什么?如何用Racket做桌面GUI应用程序?本文通过一个拼图游戏的构建,展示如何从0开始用Racket完成一个桌面GUI游戏程序,其间涵盖了Racket做桌面应用的主要功能,同时也可以作为Racket入门的读物。原创 2024-07-10 15:20:16 · 932 阅读 · 0 评论 -
用Racket语言生成全球唯一标志(GUID)
用Racket语言来实现GUID的程序。原创 2023-04-12 23:56:11 · 532 阅读 · 0 评论 -
Racket编程指南——4 表达式和定义(八)
https://docs.racket-lang.org/guide/scheme-forms.html翻译 2022-11-16 21:37:07 · 266 阅读 · 0 评论 -
Racket编程指南——4 表达式和定义(七)
本指南适用于新接触Racket的程序员或部分了解Racket的程序员。本指南假定你是有编程经验的。翻译 2022-11-16 21:30:49 · 149 阅读 · 0 评论 -
Racket编程指南——4 表达式和定义(六)
本指南适用于新接触Racket的程序员或部分了解Racket的程序员。本指南假定你是有编程经验的。翻译 2022-11-16 21:27:42 · 187 阅读 · 0 评论 -
Racket编程指南——4 表达式和定义(四)
本指南适用于新接触Racket的程序员或部分了解Racket的程序员。本指南假定你是有编程经验的。翻译 2022-11-16 21:23:10 · 231 阅读 · 0 评论 -
Racket编程指南——4 表达式和定义(三)
本指南适用于新接触Racket的程序员或部分了解Racket的程序员。本指南假定你是有编程经验的。翻译 2022-11-16 21:21:49 · 292 阅读 · 0 评论 -
Racket编程指南——4 表达式和定义(二)
本指南适用于新接触Racket的程序员或部分了解Racket的程序员。本指南假定你是有编程经验的。翻译 2022-11-16 21:13:17 · 256 阅读 · 0 评论 -
Racket编程指南——4 表达式和定义(五)
本指南适用于新接触Racket的程序员或部分了解Racket的程序员。本指南假定你是有编程经验的。翻译 2022-11-16 21:00:30 · 354 阅读 · 0 评论 -
Racket指南
本指南适用于新接触Racket的程序员或部分了解Racket的程序员。本指南假定你是有编程经验的。翻译 2022-11-15 20:30:53 · 465 阅读 · 0 评论 -
用Racket做一个拼图游戏——1 前言、2 设计目标、3 设计思路
经常遇到一些朋友提问说能用Racket做什么?如何用Racket做桌面GUI应用程序?本文通过一个拼图游戏的构建,展示如何从0开始用Racket完成一个桌面GUI游戏程序,其间涵盖了Racket做桌面应用的主要功能,同时也可以作为Racket入门的读物。原创 2022-10-07 10:18:36 · 1231 阅读 · 0 评论 -
三点定圆的Racket实现
一、数学解释 如何通过三个点确定一个圆? 这是一个有趣的几何问题,同时也是计算机图形学要处理的问题。 这里给出一个求解办法: 给出三个点:(spx,spy),(mpx,mpy),(epx,epy) 求解圆。 根据圆半径(r)、圆心(cpx,cpy)、圆上的一点(x,y)的关系:(x - cpx)^2 + (y - cpy)^2 = r^2得出三个等式:...原创 2019-03-29 18:58:29 · 731 阅读 · 0 评论 -
Racket编程指南——9 正则表达式
本指南适用于新接触Racket的程序员或部分了解Racket的程序员。本指南假定你是有编程经验的。本章是[Sitaram05]的一个修改版本。一个正则表达式(regexp)值封装一个被一个字符串或字节字符串(bytestring)描述的模式。当你调用像regexp-match那样的函数时,正则表达式匹配器尝试对(一部分)其它的字符串或字节字符串匹配这个模式,我们将其称为文本字符串(text string)。文本字符串被视为原始文本,而不会视为一个模式。 ...翻译 2018-02-17 10:16:13 · 849 阅读 · 0 评论 -
一个用Racket写的矩阵计算程序
前言在平时的工作中,常常要用到线性代数的问题。特别是在计算机图形学中更是频繁使用。很多程序库里自带的矩阵计算程序不方便使用,这里我自己做了一个采用行消除法来计算矩阵的程序,给大家共享。基本思路求解过程分为三步:采用向前行消除法求解矩阵;进行行化简;采用向后消除法求解线性值。其中第2步及第3步合并为一起处理,先进行行化简,同时以该行为起点向上进行向后行消除,得到线性值。主要函数...原创 2019-06-11 23:04:00 · 500 阅读 · 0 评论