
编程语言
文章平均质量分 78
南锋1
个人博客:https://lengmo714.top
优快云上所有文章在个人博客中都是免费公开的,欢迎大家访问个人博客
展开
-
cocos 2dx_Lua ProgressTimer创建扇形进度条
我们在开发游戏的时候经常会用到扇形进度条。比如:技能CD下面直接上代码吧function skillCD() local loading = cc.Sprite:create('skill.png') -- 先创建一个精灵 local progress = cc.ProgressTimer:create(loading) progress:setMidpoint(cc.p(0.5, 0.5)) progress:setType(cc.PROGRESS_TIMER_TYPE_RA原创 2021-11-11 16:43:52 · 3051 阅读 · 0 评论 -
用python画一只可爱的布朗熊
代码:from turtle import *ht()setup(400,800,0,0)seth(0)pensize(3)pencolor("black")pu() #penup()goto(0,100)pd() #pendown()fillcolor("brown")begin_fill()circle(100)end_fill()pu()goto(0,150)pd()fillcolor("white")begin_fill()pe原创 2021-06-29 22:02:54 · 5623 阅读 · 0 评论 -
用python检测微信好友是否删除自己
我们在平时生活中使用微信发现微信中有很多已经将自己删除了的好友,如何在不打扰别人的情况下知道哪些好友删除了自己了?下面我们就用python程序来实现。开发环境:python2源码:#!/usr/bin/env python# coding=utf-8import osimport urllib, urllib2import reimport cookielibimport timeimport xml.dom.minidomimport jsonimport sysimport原创 2021-04-06 21:14:12 · 1491 阅读 · 10 评论 -
线程和状态
文章目录多线程Lua状态 Lua语言不支持真正的多线程,即不支持共享内存的抢占式线程。原因有两个,其一是IOS C没有提供这样的功能,因此也没有可移植的方法能在Lua中实现这种机制:其二,也是更重要的原因,在于我们认为在Lua中引入多线程不是一个好主意。 多线程一般用于底层编程。像信号量和监视器这样的同步机制一般都是操作系统上下文提供的,而非应用程序提供。要查找和纠正多线程相关的bug是很困难的,其中有些Bug还会导致安全隐患。此外,程序中的一些需要同步的临界区还可能由于同步而导致性能问题。 多原创 2020-07-23 20:36:53 · 815 阅读 · 0 评论 -
Lua管理资源
因此,为了确保DIR的实例能被正确释放,需要把该实例的地址存入一个用户数据中,并且用这个用户数据的远方__gc来释放该结构体。首先,我们需要函数dir.open,该函数是一个工厂函数,Lua调用该函数来创建迭代器;其次,我们需要迭代函数。然而,Lua程序时无法访问这个函数的:该函数被保存在目录的元表中,而用户数据又被保存为迭代函数的上值,因此Lua代码无法访问这些目录。这三个函数的代码结构类似,它们都会检查回调函数表是否为指定的事情定义了Lua处理函数,如果是,则准备好参数并调用这个处理函数。原创 2020-07-22 00:52:38 · 321 阅读 · 0 评论 -
C语言中的用户自定义类型
文章目录用户数据元表面向对象访问数组访问 下面这个示例实现了一种很简单的类型,即布尔类型。选用这个示例的只要动机在于它不涉及复杂的算法,便于我们专注于API的问题。不过尽管如此,这个示例本身还是很有用的。当然,我们可以在Lua中用来表示实现布尔数组。但是,在C语言实现中,可以将每个布尔值存储在一个比特中,所使用的内存量不到使用表方法的3%。 这个示例需要以下定义:#include <limits.h>#define BITS_PER_WORD (CHAR_BIT * sizeof(u原创 2020-07-16 23:01:47 · 1221 阅读 · 0 评论 -
编写C函数的技巧
文章目录数组操作字符串操作在C函数中保存状态注册表上值共享的上值数组操作 Lua中的“数组”就是姨特殊方式使用的表。像lua-settable和lua-gettable这种用来操作表的通用函数,也可用于操作数组。不过,CAPI为使用整数索引的表的访问和封信提供了专门的函数。void lua_geti (lua_State *L, int index, int key);void lua_seti (lua_State *L, int index, int key);Lua5.3之前的版本只提供原创 2020-07-09 22:45:28 · 464 阅读 · 0 评论 -
在Lua中调用C语言
文章目录C函数延续C模块 我们说用Lua可以调用C语言函数,但这并不意味着Lua可以调用所有的C函数。当C语言调用Lua函数时,该函数必须遵循一个简单的规则来传递参数和获取结果。同样,当Lua调用C函数时,这个C函数也必须遵循某种规则来获取参数和返回结果。此外,当Lua调用C函数时,我们必须注册该函数,即必须以一种恰当的方式为Lua提供该C函数的地址。 Lua调用C函数时,也使用一个与C语言调用Lua函数时相同类型的栈,C函数从栈中获取参数,并将结果压入栈中。 此处的重点在于,这个栈不是一个全局原创 2020-06-28 01:00:51 · 2585 阅读 · 0 评论 -
C语言API总览
文章目录第一个示例栈压入元素查询元素其他栈操作使用CAPI进行错误处理处理应用代码中的错误处理库代码中的错误内存分配 Lua是一种嵌入式语言,这就意味着Lua并不是一个独立运行的应用,而是一个库,它可以链接到其他应用程序,将Lua的功能融入这些应用。 因为能够当作库来扩展某个应用程序,所以Lua是一种嵌入式语言。同时,使用了Lua语言的程序也可以在Lua环境中注册新的函数,比如用C语言实现函数,从而增加一些无法直接用Lua语言编写的功能。因此Lua也是一种可扩展的语言。 上述两种对L原创 2020-06-26 23:21:06 · 2539 阅读 · 0 评论 -
Lua使用协程实现多线程
文章目录 协程能够实现一种协作式多线程。每个协程都等价于一个线程。一对yield-resume可以将执行权在不同线程之间切换。不过,与普通的多线程的不同,协程是非抢占的。当一个协程正在运作时,是无法从外部停止它的。只有当协程显式地要求时它才会挂起执行。对于有些应用而言,这并没有问题,而对于另外一些应用则不行。当不存在抢占时,编程简单得多。由于在程序中所有的线程间同步都是显式的,所以我们无须为线程同步问题抓狂,只需要确保一个协程只在它的临界区之外调用yield即可。 不过,对于非抢占式多线程来原创 2020-06-07 17:35:20 · 2468 阅读 · 0 评论 -
Lua cjson安装及部署
在安装lua-cjson时在网上查找了很多文章,关于具体的安装方法众说纷纭,主要原因是因为lua-cjson在安装时需要进行配置的更改,以下是经过实操得到的具体安装步骤。wget http://www.kyne.com.au/~mark/software/download/lua-cjson-2.1.0.tar.gz 下载安装包tar zxvf lua-cjson-2.1.0.tar.gzcd lua-cjson-2.1.0/修改配置文件修改lua版本,默认版本为5.1 (我的当前版本为5.3,可原创 2020-05-26 17:46:24 · 1583 阅读 · 0 评论 -
Lua反射
文章目录自省机制 反射是程序用来检查和修改其自身某些部分的能力。像Lua语言这样的动态语言支持几种反射机制:环境允许运行时观察全局变量;诸如type和pairs这样的函数允许运行时检查和遍历未知数据结构;诸如load和require这样的函数允许程序在自身中追加代码或更新代码。不过,还有很多方面仍然是缺失的:程序不能检查局部变量,开发人员不能跟踪代码的执行,函数也不知道是被谁调用的,等等。调试库填补了上述缺陷。 调试库是由两类函数组成:自省函数和钩子。自省函数允许我们检查一个正在运行中的程序的几个方原创 2020-05-26 15:17:09 · 2408 阅读 · 0 评论 -
Lua协程
文章目录协程基础哪个协程占据主循环将协程用作迭代器事件驱动式编程 协程可以颠倒调用者和被调用者的关系,而且这种灵活性解决了软件架构中被称为“谁是老大”或者”谁拥有主循环“的问题。这正是对诸如事件驱动编程、通过构造器构建迭代器和协作式多线程等几个看上去并不相关的问题的泛化,而协程以简单和高效的方式解决了这些问题。 从多线程的角度看,协程与线程类似:协程是一系列的可执行语句,拥有自己的栈、局部变量和指令指针,同时协程又与其他协程共享了全局变量和其他几乎一切资源。线程与协程的主要区别在于,一个多线原创 2020-05-17 14:22:53 · 457 阅读 · 0 评论 -
lua垃圾收集
文章目录弱引用表记忆函数 Lua语言使用自动内存管理。程序可以创建对象,但却没有函数来删除对象。Lua语言通过垃圾收集自动删除称为垃圾的对象,从而将程序员从内存管理的绝大部分负担中解放出来。更重要的是,将程序员从与内存管理相关的大多数Bug中解放出来。例如无效指针和内存泄露等问题。 在一个理想的环境中,垃圾收集器对程序员来说是不可见的,就像一个好的清洁工不会和其他工人打交道一样。不过,有时即使是智能的垃圾收集器也会需要我们的辅助。在某些关键的性能阶段,我们可能需要将其停止,或者让只在特定的时原创 2020-05-15 23:17:59 · 466 阅读 · 0 评论 -
lua中的环境(Environment)
文章目录具有动态名称的全局变量全局变量的声明非全局环境 全局变量在大多数变成语言中是让人爱恨交织又不可或缺的。一方面,使用管全局变量会明显地使无关的代码部分纠缠在一起,容易导致代码复杂。另一方面,谨慎地使用全局变量又能更好地表达程序中真正的全局概念;此外,虽然全局常量看似无害,但像Lua语言这样的动态语言是无法区分常量和变量的。像Lua这样的嵌入式语言更复杂:虽然全局变量时再整个程序中均可见的变量,但由于Lua语言是由宿主应用调用代码段的,因此“程序”的概念不明确。 Lua语言通过不使用全局原创 2020-05-10 15:17:38 · 899 阅读 · 0 评论 -
Lua打乱数组排序
打乱有序数组,生成随机数组local function randomTable(_table, _num) local _result = {} local _index = 1 local _num = _num or #_table while #_table ~= 0 do local ran = math.random(0, #_tabl...原创 2020-04-27 14:59:49 · 1831 阅读 · 0 评论 -
Lua面向对象编程
文章目录类(class)继承(Inheritance)多重继承(Multiple Lnheritance) 从很多意义上讲,Lua语言中的一张表就是一个对象。首先,表与对象一样,可以拥有状态。其次,表与对象一样,拥有一个与其无关的标识(self);特别地,两个具有相同值的对象(表)是两个不同的对象,而一个对象可以具有多个不同的值;最后,表与对象一样,具有创建者和被创建位置无关的声明周期。...原创 2020-04-24 22:49:17 · 489 阅读 · 1 评论 -
Lua元表和元方法
文章目录算术运算相关的元方法关系运算相关的元方法库定义相关的元方法表相关的元方法__index元方法__newindex元方法具有默认值的表跟踪对表的访问只读的表 通常,Lua语言中的每种类型的值都有一套可预见的操作集合。例如,我们可以将数字相加,可以连接字符,还可以在表中插入键值对等。但是,我们无法将两个表相加,无法对函数做比较,也琺调用一个字符串,除非使用元表。 元表可以修改一...原创 2020-04-24 14:23:09 · 1017 阅读 · 0 评论 -
Lua实现马儿可夫链算法
文章目录 马尔可夫链算法根据哪个单词能出现在基础文本中由n个前序列单词组成的序列之后,来生成伪随机文本。这里我们假设n为2。 程序的第一部分读取原始文本并创建一个表,该表的键为每两个单词组成的前缀,值为紧跟这个前缀的单词所组成的列表。当这个表构建好后,程序就利用它来生成随机文本,随机文本中每个单词所组成的列表。当这个表构建好后,程序就利用它来生成随机文本,随机文本中每个单词出现在它...原创 2020-04-23 23:00:17 · 299 阅读 · 0 评论 -
python画素描画
废话不多说,直接上代码from PIL import Image, ImageFilter, ImageOpsimg = Image.open('/Users/demo/Desktop/b.png') # 原图路径def dodge(a,b,alpha): return min(int(a*255/(256-b*alpha)),255)def draw(img,blur=25,alph...原创 2020-04-23 16:05:55 · 1292 阅读 · 1 评论 -
Lua迭代器和泛型for
文章目录迭代器和闭包泛型for的语法迭代器和闭包 迭代器是一种可以让我们遍历一个集合中所有元素的代码结构。在Lua语言中,通常使用函数表示迭代器:每一次调用函数时,函数会返回集合中的”下一个“元素。一个典型的例子是io.read,每次调用该函数时它都会返回标准输入中的下一行,在没有读取的行时返回nil。 所有的迭代器都需要在连续的调用之间保存一些状态,这样才能知道当前迭代所处的位...原创 2020-04-22 22:00:46 · 389 阅读 · 0 评论 -
Lua中模块和包
文章目录函数 require 通常,Lua语言不会设置规则。相反,Lua语言提供的是足够强大的机制供不同的开发者实现最适合自己的规则。然而,这种方法对于模块而言并不是特别适用。模块系统的主要目标之一就是允许不同的人共享代码,缺乏公共规则就无法实现这样的分享。 Lua语言从5.1版本开始为模块和包定义了一系列的规则。这些规则不需要从语言中引入额外的功能,程序猿可以使用目前为止我们学习...原创 2020-04-21 20:41:58 · 730 阅读 · 0 评论 -
Lua编译、执行和错误
文章目录编译预编译的代码错误 虽然我们把Lua语言成为解释型语言,但Lua语言总是在运行代码前先预编译源码为中间代码(这没什么大不了的,很多解释型语言也这样做)。编译阶段的存在听上去超出了解释型语言的范畴,但解释型语言的区分并不在与源码是否被编译,而在于是否有能力(且轻易地)执行动态生成的代码。可以认为,正是由于诸如dofile这样函数的的存在,才使得Lua语言能够被称为解释型语言。编译...原创 2020-04-20 17:26:38 · 838 阅读 · 0 评论 -
Lua数据文件和序列化
文章目录数据文件序列化保存不带循环的表保存带有循环的表 在处理数据文件时,写数据通常比读数据简单很多。当向一个文件中写时,我们拥有绝对的控制权;但是,当从一个文件中读时,我们并不知道会读什么东西。一个健壮的程序除了能够处理一个合法文件中所包含的所有类型的数据外,还应该能够优雅地处理错误的文件。因此,编写一个健壮的处理输入的程序总是比较困难的。 Lua语言自1993年发布以来,其主要...原创 2020-04-18 23:56:16 · 934 阅读 · 0 评论 -
Lua数据结构
文章目录数组矩阵及多维数组链表队列及双端队列反向表集合与包字符串缓冲区图形 Lua语言中的表并不是一种数据结构,它们是其他数据结构的基础。我们可以用Lua语言中的表来实现其他语言提供的数据结构,如数组、记录、列表、队列、集合等。而且,用Lua语言中的表实现这些数据结构还很高效。 在像C和Pascal这样更加传统的语言中,通常使用数组和列表来实现大多数数据结构。虽然在Lua语言中也可...原创 2020-04-18 18:44:36 · 653 阅读 · 0 评论 -
Lua位和字节
文章目录位运算无符号整型数 Lua语言处理二进制数据的方式与处理文本的方式类似。Lua语言中的字符串可以包含热议字节,并且几乎所有能够处理字符串的库函数也能处理任意字节。我们甚至可以对二进制数据进行模式匹配。以此为基础,Lua5.3中引入了用于操作二进制数据的额外机制:除了整型数外,该版本还引入了位操作及用于打包/解包二进制数据的函数。位运算 Lua语言从5.3版本开始提供了针对...原创 2020-04-18 11:51:18 · 4574 阅读 · 0 评论 -
Lua日期和时间
文章目录函数os.time函数os.date Lua语言的标准库提供了两个用于操作日期和时间的函数,这两个函数在C语言标准库中也存在,提供的是同样的功能。虽然这两个函数看上去很简单,但依旧可以基于这些简单的功能完成很多复杂的工作。 Lua语言针对日期和时间使用两种表示方式。第1中表示方式是一个数字,这个数字通常是一个整型数。尽管并非IOS C所必需的,但在大多数系统中这个数字时自一...原创 2020-04-17 20:12:47 · 3248 阅读 · 0 评论 -
Lua写一个出现频率最高的单词程序
文章目录 在本章中,我们要开发一个读取并输出一段文本中出现频率最高的程序。像之前的小插曲一眼个,本章的程序也十分简单,但是也使用了诸如迭代器和匿名函数这样的高级特行。 该程序的主要数据结构是一个记录文本中出现的每一个单词及其出现次数之间关系的表。使用这个数据结构,该程序可以完成3个主要任务。读取文本并计算每一个单词的出现次数按照出现次数的降序对单词列表进行排序输出有序列表中...原创 2020-04-17 11:03:36 · 248 阅读 · 0 评论 -
Lua模式匹配
与其他几种脚本语言不通,Lua语言既没有使用POSIX正则表达式,也没有使用Perl正则表达式来进行模式匹配。之所以这样做的主要原因在于大小问题:一个典型的POSIX正则表达式实现需要超过4000行代码,这比所有Lua语言标准库总大小的一半还大。相比之下,Lua语言模式匹配的实现代码只有不到600行。尽管Lua语言的欧式匹配做不到完整POSIX实现的所有功能,但是Lua语言的模式匹配仍然非...原创 2020-04-15 14:15:06 · 1898 阅读 · 0 评论 -
Lua闭包详解
文章目录函数是第一类值 在Lua语言中,函数是严格遵循词法定界的第一类值。 “第一类值”以为这Lua语言中的函数与其他常见类型的值具有同等权限:一个程序可以将某个函数保存到变量中或表中,也可以将某个函数作为参数传递给其他函数,还可以将某个函数作为其他函数的返回值返回。 “词法定界”意味着Lua语言中的函数可以访问包含其自身的外部函数中的变量。 上述两个特行联合起来为...原创 2020-04-14 11:28:38 · 733 阅读 · 0 评论 -
break、return和goto
break、return 和 goto break和return语句用于从当前的循环结构中跳出,goto语句则允许跳转到函数中的几乎任何地方。 我们可以使用break语句结束循环,该语句会中断包含它的内层循环;该语句不能在循环外使用。break中断后,程序会紧接着被中断的循环继续执行。 return语句用于返回函数的执行结果或简单地结束函数的运行。所有函数的最后都有一个隐含...原创 2020-04-13 21:28:42 · 443 阅读 · 0 评论 -
Lua的控制结构
控制结构 Lua语言提供了一组精简且常用的控制结构,包括用于条件执行的if以及用户循环的while、repeat和for。所有的控制结构语法上都有一个显示的终结符:end用于终结if、for及while结构,until用于终结repeat结构。 控制结构的条件表达式的结果可以是任何值。Lua语言将所有不是false和nil的值当做真。if then else if 语句先...原创 2020-04-13 21:02:21 · 261 阅读 · 0 评论 -
Lua局部变量和代码块
局部变量和代码块 Lua语言中的变量在默认情况下是全局变量,所有的局部变量在使用前必须声明。与全局变量不同,局部变量的生效范围仅限于声明它的代码块。一个代码块是一个控制结构的主体,或是一个函数的主体,或是一个代码段:x = 10 local i = 1 -- 对于代码段来说是局部的while i <= x do local x = i * 2 --对于循环来说是局部的 p...原创 2020-04-13 13:15:27 · 569 阅读 · 0 评论 -
Lua输入输出
由于Lua语言强调可移植性和嵌入性,所以Lua语言本身并没有提供太多与外部交互的机制。在真实的Lua程序中,从图形、数据库到网络的网络的访问等大多数I/O操作,要么游宿主程序实现,要么通过不包括在发行版中的外部库实现。单就Lua语言而言,只提供IOS C语言标准支持的功能,即基本的文件操作等。简单I/O模型 对于文件操作来说,I/O库提供了两种不同的模型。简单模型虚拟了一个当前输...原创 2020-04-12 21:18:32 · 3494 阅读 · 0 评论 -
Lua中函数的使用
文章目录 在Lua语言中,函数是对语句和表达式进行抽象的主要方式。函数既可以用于完成某种特定任务,也可以只是进行一些计算然后返回计算结果。在前一种情况下,我们将一句函数调用视为一条语句;而在后一种情况下,我们则将函数调用视为表达式:print(8*9 , 9/8)a = math.sin(3) + math.cos(10)print(os.date())无论哪种情况,函数调用时都...原创 2020-04-10 22:21:53 · 938 阅读 · 0 评论 -
Lua中表的使用
文章目录表索引表构造器数组、列表和序列遍历表安全访问表标准库 表是Lua中最主要和强大的数据结果。使用表,Lua语言可以以一种简单、统一且高效的方式表示数组、集合、记录和其他很多数据结果。Lua语言也使用表来表示包和其他对象。当调用函数math.sin时,我们可能认为是“调用了math库中函数sin”;而对于Lua语言来说,其实际含义是“以字符串sin”为键检索表math。 Lua...原创 2020-04-10 01:12:41 · 1437 阅读 · 0 评论 -
Lua字符串
字符串用于文本。Lua语言中的字符串即可以表示单个字符,也可以表示一整本书籍。在Lua语言中,操作100K或者1M个字母组成的字符串的程序也很常见。 Lua语言中的字符串是不可变值。我们不能像在C语言中那样直接改变某个字符串中的某个字符,但是我们可以通过创建一个新的字符串的方式来达到修改的目的。例如:a = "one string"b = string.gsub(a,"one"...原创 2020-04-08 00:42:19 · 674 阅读 · 0 评论 -
Lua中的数值
文章目录数值常量算术运算关系运算数学库随机数发生器取证函数表示范围数值常量 我们可以使用科学计数法(一个可选的十进制部分外加一个可选的十进制指数部分)书写数值常量,例如:> 4 --4> 0.4 --0.4> 4.57e-3 --0.00457> 0.3e12 --3.0000000000.0> 5E+20 --...原创 2020-04-06 23:56:01 · 3626 阅读 · 0 评论 -
用lua解决八皇后问题
文章目录 要解决八皇后问题,首先必须认识到每一行中只能有一个皇后。因此,可以用一个由8个数字组成的简单数组来表示可能的解决方案。例如,数组{3,7,2,1,8,6,5,4}表示皇后在棋盘中的位置分别是(1,3)、(2,7)、(3,2)、(4,1)、(5,8)、(6,4)、(7,5)和(8,4)。当然,这个示例并不是一个正确的解,例如(3,2)中的皇后就可以攻击(4,1)中的皇后。此外,我们...原创 2020-04-01 23:16:27 · 345 阅读 · 0 评论 -
Lua语言入门
遵照惯例,我们的第一个Lua程序时通过标准输出打印字符串"Hello World":print("Hello World") 如果读者使用的是Lua语言独立解释器(stand-alone interpreter),要运行这第一个程序的话,直接调用解释器运行包含程序代码的文本文件就可以了。例如,如果把上述代码保存为名hello.lua的文件,那么可以通过以下命令运行:% lua ...原创 2020-04-01 00:22:31 · 739 阅读 · 0 评论