基于Excel的视觉小说轻量引擎(Gal♥Py) — 基础语法篇

目录:

Gal♥Py引擎的项目地址:

前言:

基础语法篇:

        变量与基本类型:

        常量与库:

        运算符: 

        控制结构:

        函数与模块:

        类与对象:

        初识PyScreen对象screen :

        再识PyScreen对象screen:

        实践PyScreen对象screen:

        了解TkWindow对象window:


Gal♥Py引擎的项目地址:

https://github.com/Rosysuki/Gal-Py.giticon-default.png?t=O83Ahttps://github.com/Rosysuki/Gal-Py.git

前言:

        现在Gal♥Py的语法已经较为完善了,能进行简单的操作包括制作小游戏了,适合有python基础的人使用。本文将介绍Gal♥Py的基本语法。当然,现版本的Gal♥Py支持Python中的所有语法

        Gal♥Py现在可能有非常多的缺点,请大家包容包容,口下留情,毕竟当初这个项目的起源,仅仅是为了好玩。如果发现有语法错误,不用担心,最近因为网络问题没有及时在git上更新,请稍等等。

        Gal♥Py有两个模式,一个是“普通模式”,另一个是“进程模式”,取决于文件第一行是否有声明。以下是用“普通模式”进行的。

基础语法篇:

        请先建立一个新文件(新建文件,不是新建项目)(注:REM 是注释)

      变量与基本类型

# -*- coding: utf-8 -*-
# -*- file: 变量与基本类型.Gal♥Py -*-

REM 整形
let a:int -> 123
REM 浮点型
let b:float -> 3.1415
REM 字符串
let c:str -> "你好"
REM 布尔值
let d:bool -> True
REM 空值
let e:None -> None
REM 获得函数返回值,以最大值函数为例
let f:Any -> max CALL arg1 ,arg2 ,... OVER

REM ⭐新增赋值:表达式赋值符&
REM 就类似于:
REM C语言: if ((value = 123) >= num):
REM Python: if (value := 123) >= num:
REM Gal♥Py: if (let value& -> 123) greater than num then

       常量与库:

# -*- coding: utf-8 -*-
# -*- file: 常量.Gal♥Py -*-

REM 用预处理来处理常量,现有9个预处理指令
REM 用$为首,常量名建议全大写,常量名与常量值不设限制

# -*- -*- -*- -*- # # -*- -*- -*- -*- #
REM 1.define,一对多定义
$define ABC 123
$define HELLO "Hello ,World!"
$define √ True
$define ALL *

# -*- -*- -*- -*- # # -*- -*- -*- -*- #
REM 2.rdefine-END,多对多定义
REM 例一:将 常量值"Hello ,World!" 赋给 常量THIS IS HELLO WORLD
$rdefine THIS IS HELLO WORLD END "Hello ,World!"

REM 例二:将 常量值60 赋给 常量ONE MINUTE
$rdefine ONE MINUTE END 60

# -*- -*- -*- -*- # # -*- -*- -*- -*- #
REM 3.include,导入Gal♥Py自带库常量
REM 例一:单个导入库
$include GalPy.embody
$include GalPy.locals

REM 例二:全部导入库
$include *

REM 例三:导入自己写的库 (暂未开发)

# -*- -*- -*- -*- # # -*- -*- -*- -*- #
REM 4.undefine,取消常量
REM 当你对一些自带库常量不满意时,可以取消之
REM 例一:$define red color("red")
$undefine red

REM 例二:$define PAUSE time.sleep
$undefine PAUSE

# -*- -*- -*- -*- # # -*- -*- -*- -*- #
REM 5.register,注册函数
REM 后面跟一个函数名,把它变成注册函数
REM 注册函数就是无需CALLOVER,直接通过函数名+(参数)调用的函数
REM 例一:
$register print
$register list
print "12345"
print list "12345"

REM 例二:
$register print
$register MAX
function DECLARE
MAX CALL a:int ,b:int OVER RES int then
    return a if a greater equal than b else b

print MAX 100 ,200

# -*- -*- -*- -*- # # -*- -*- -*- -*- #
REM 6.unregister,解除注册函数
REM 例一:若已经有$register print
$unregister print
print CALL ... OVER

# -*- -*- -*- -*- # # -*- -*- -*- -*- #
REM 7.ifdefine,类比C语言的ifdef
REM 后面跟常量,若此常量被定义过了,那么执行$enddefine前的代码
REM 例一:(会正常运行)
$define NAME "我"
$ifdefine NAME
$define AGE 19
$enddefine

echo f"我的名字是{NAME} ,年龄是{AGE}" 

REM 例二:(会报错)
$ifdefine OK
$define AGE 100
$enddefine

echo AGE

# -*- -*- -*- -*- # # -*- -*- -*- -*- #
REM 8.ifndefine,类比C语言的ifndef
REM 后面跟常量,若此常量没有被定义过了,那么执行$enddefine前的代码
REM 例一:(会正常运行)
$ifndefine NAME
$define AGE 19
$enddefine

echo f"我的年龄是{AGE}" 

REM 例二:(会报错)
$define OK 1
$ifndefine OK
$define AGE 100
$enddefine

echo AGE

# -*- -*- -*- -*- # # -*- -*- -*- -*- #
REM 9.enddefine,请见7、8,此处不多举例子

        运算符: 

# -*- coding: utf-8 -*-
# -*- file: 运算符.Gal♥Py -*-

REM 算术运算符:
REM 加法(plus)、减法(minus)、乘法(multi)、除法(div)、取余(mod)等。

REM 逻辑运算符:
REM 与(and)、或(or)、非(not)等。

REM 比较运算符:
REM 等于(equal with)、不等于(not equal with)、
REM 大于(greater than)、小于(less than)、
REM 大于等于(greater equal than)、小于等于(less equal than)等。

        控制结构:

# -*- coding: utf-8 -*-
# -*- file: 控制结构.Gal♥Py -*-

REM 以下是简单的例子

$include GalPy.embody
$define VALID_AGE 18
$register eval
$register input

let age:str -> input "你多大了:"
age:int = eval age


REM if选择
if age greater equal than VALID_AGE then
    echo "你成年了!" 
else then
    echo "你未成年!"


REM match选择
match age then
    case 18 then 
        echo "你刚成年!" 
    case DEFAULT then 
        echo "没事了!" 


REM for循环
for i in range CALL 3 OVER then
    age:int = age minus i


REM while循环
let num:int -> 3
while age less than 100 then
    age:int = age plus num
    num:int = num + 1

        函数与模块:
 

# -*- coding: utf-8 -*-
# -*- file: 函数与模块.Gal♥Py -*-

$include GalPy.embody

REM 定义一个函数
function Add CALL x:Any ,y:Any OVER RES Any then
    return x plus y

REM 或者为了好看(原理是 $define DECLARE \)
function DECLARE
Add CALL x:Any ,y:Any OVER RES Any then
    return x plus y

REM 调用函数
echo f"3 + 4 = {Add CALL 3 ,4 OVER}" 

# -*- -*- -*- -*- #
REM 导入模块函数,变量

REM 1.导入Python模块,用模块名调用
import math
echo math::sqrt CALL 4 OVER

REM 2.直接导入Python模块函数
from math import sqrt
echo sqrt CALL 4 OVER 

REM 3.一键导入一个Python模块的函数
from math import *

REM 4.导入的东西可以改名
from math import sqrt as math_sqrt
import math as MyMath

REM ⭐5.在“进程模式”下,可以一键导入所有要用的GalPy模块
from * import *

        类与对象:

# -*- coding: utf-8 -*-
# -*- file: 类与对象.Gal♥Py -*-

$include GalPy.embody

class DECLARE
Person CALL object OVER then

    function DECLARE
    __init__ CALL self:Self ,name:str OVER RES NoReturn then
        let self::name:str -> name

    function DECLARE
    say CALL self:Self OVER RES NoReturn then
        echo f"My name is {self::name}" 

let person:Person -> Person CALL "Gal♥Py" OVER

REM 无参函数可以这么调用
person::say CALLOVER

        初识PyScreen对象screen :

# -*- coding: utf-8 -*-
# -*- file: screen.Gal♥Py -*-
REM screen是游戏的屏幕,使用的是pygame
REM 使用前要设置长宽[名字可选],然后初始化
REM 下面是示例:打开screen,三秒钟后关闭

$include GalPy.embody

$rdefine THIS IS WIDTH END 1000
$rdefine THIS IS HEIGHT END 800
$rdefine THIS IS NAME END "这是测试"

let screen::width:int -> THIS IS WIDTH
let screen::height:int -> THIS IS HEIGHT
let screen::name:str -> THIS IS NAME

screen::init CALLOVER

PAUSE CALL 3 OVER

screen::quit CALLOVER

        再识PyScreen对象screen:

# -*- coding: utf-8 -*-
# -*- file: screen.Gal♥Py -*-

REM screen有非常多的属性与方法
REM 以下介绍一下常用的属性与方法

$include GalPy.embody

$rdefine THIS IS WIDTH END 1000
$rdefine THIS IS HEIGHT END 800
$rdefine THIS IS NAME END "这是测试"

let screen::width:int -> THIS IS WIDTH
let screen::height:int -> THIS IS HEIGHT
let screen::name:str -> THIS IS NAME

screen::init CALLOVER

# -*- -*- -*- -*- #

$define BACK_PHOTO_PATH ... REM 这里填背景图片路径
$define MAIN_PHOTO_PATH ... REM 这里填人物图片路径
$define TEXT_HERE ...       REM 这里填文字

REM x与y 是图片或文字左上角的xy坐标,自由发挥
let x:int -> 0
let y:int -> 0

REM 背景图片放置
screen::BACK CALL BACK_PHOTO_PATH ,x ,y OVER
REM 人物图片放置
screen::MAIN CALL MAIN_PHOTO_PATH OVER

REM 动态文字
screen::TEXT CALL TEXT_HERE ,x ,y OVER
REM 静态文字,color以元组的形式,size以整形的形式
screen::simple_say CALL TEXT_HERE ,x ,y ,color ,size OVER

REM 背景颜色,color以元组的形式
screen::fill CALL color OVER

REM 刷新屏幕
screen::flash CALLOVER

REM 关闭屏幕
screen::quit CALLOVER

REM 还有一些你可以用partial函数再包装的函数,参数更多,但更自由多样

# -*- -*- -*- -*- #

PAUSE CALL 3 OVER

screen::quit CALLOVER

        实践PyScreen对象screen:

# -*- coding: utf-8 -*-
# -*- file: 实践.Gal♥Py -*-
REM 就举一个“获取名字”的例子

$include *

$register screen::init
$register screen::quit
$register PAUSE

$define WIDTH 1000
$define HEIGHT 800
$define NAME "获取你的名字"

let screen::width:int -> WIDTH
let screen::height:int -> HEIGHT
let screen::name:str -> NAME
screen::init

let keys -> KEYS CALLOVER
let Run:bool -> True
let List:list -> []

while Run then

    screen::fill CALL daisy OVER
    screen::simple_say CALL "你的名字是:" ,WIDTH div 3 ,HEIGHT div 3 size=46 OVER
    screen::simple_say CALL ''.join(List) ,WIDTH div 2 ,HEIGHT div 2 ,size=46 OVER
    screen::flash CALLOVER

    for event in EVENTS CALLOVER then
        match event::type then

            case KEYDOWN then
                
                if keys[K_OK] then
                    let Run:bool -> False
                    break

                try:
                    List::append CALL chr CALL event::key OVER OVER
                except Exception as Error:
                    ...

            case DEFAULT then
                pass

PAUSE 3

screen::quit

        了解TkWindow对象window:

# -*- coding: utf-8 -*-
# -*- file: window.Gal♥Py -*-

REM window就是我们编码时使用的UI界面,使用的是tkinter
REM 可以通过调用里面的函数来对界面进行操作
REM 或者进行一系列配置操作
REM 若有这部分需求,推荐使用ini.Gal♥Py来进行代码的测试与保存

REM 一般这里的需求很少,我就简单的列举几个例子吧

REM 1.改变界面名字
window::title CALL ... OVER

REM 2.改变界面图标
window::wm_iconbitmap CALL ... OVER

REM 还可以手动创建或打开项目
REM 手动创建或打开文件
REM ... 更多的请查看TkWindow.py源码

结束语:

        以上都是用“普通模式”进行的。

        对于“进程模式”下的情况,下回再讲。

24/8/9

JUST FOR FUN!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值