吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3099|回复: 28
收起左侧

[其他原创] 【aardio】《我是大富翁》文字小游戏,新手练习编程之作

[复制链接]
代码搬运工 发表于 2024-2-29 22:07
本帖最后由 代码搬运工 于 2024-3-1 20:21 编辑

偶然接触到aardio,发现它写小程序确实方便,便写点东西练练手。只是兴趣爱好,写的很菜。

登录界面
import win.ui;
import win.inputBox;
import fsys.table;
import 游戏数据;
import 游戏存档;
/*DSG{{*/
var winform = win.form(text="我是大富翁";right=399;bottom=247;max=false;min=false)
winform.add(
button={cls="button";text="开始游戏";left=128;top=112;right=274;bottom=145;z=2};
button2={cls="button";text="重新开始";left=128;top=160;right=274;bottom=193;z=4};
static={cls="static";text="我是大富翁";left=0;top=30;right=400;bottom=104;align="center";center=1;font=LOGFONT(h=-48);transparent=1;z=1};
static2={cls="static";text="提示:认真工作,健康生活!!!";left=16;top=224;right=386;bottom=240;transparent=1;z=3}
)
/*}}*/

// 检测存档
if(io.exist("/存档.txt")){
        winform.button.text = "继续游戏";        
}
else {
        winform.button.text = "开始游戏";
}

// 游戏按钮
winform.button.oncommand = function(id,event){
        if(winform.button.text = "开始游戏"){
                // 角色名输入
                var 输入窗口 = win.inputBox(winform.hwnd)
                输入窗口.text = "我是大富翁"
                输入窗口.info.text = "请在下面输入您的名字:"
                var 姓名 = 输入窗口.doModal();

                // 角色名验证
                if(姓名 = "" or 姓名 = null){
                        winform.msgboxErr("未输入姓名!!!")
                        return ;
                }

                // 保存初始信息
                var 存档函数 = 游戏存档.存档("\存档.txt","topsflo")

                var 存档 = {}
                存档.姓名 = 姓名;
                存档.金钱 = 游戏数据.初始金钱
                存档.仓库容量 = 游戏数据.初始仓库容量
                存档.当前容量 = 游戏数据.初始仓库容量
                存档.仓库商品 = {}
                存档.市场信息 = 游戏数据.商品信息
                存档.年 = 1;
                存档.月 = 1;
                存档.日 = 1;
                存档.借款 =0;

                存档函数.存档(存档)

        }
        游戏数据.结束判断 = false
        winform.close()
}

winform.button2.oncommand = function(id,event){
        io.remove("\存档.txt")
        winform.button.text = "开始游戏"
        winform.button.oncommand()
}

winform.show();
win.loopMessage();
return winform;


主界面
import win.ui;
import win.ui.grid;
import win.ui.menu;
import 游戏数据;
import 游戏存档;
/*DSG{{*/
mainForm = win.form(text="我是大富翁";right=757;bottom=467;max=false;min=false)
mainForm.add(
button={cls="button";text="刷新日期";left=64;top=416;right=176;bottom=448;z=3};
button2={cls="button";text="仓库购买";left=237;top=416;right=349;bottom=448;z=10};
button3={cls="button";text="银行借款";left=411;top=416;right=523;bottom=448;z=11};
groupbox={cls="groupbox";text="市场商品";left=64;top=56;right=344;bottom=304;edge=1;z=1};
仓库列表={cls="listview";left=424;top=80;right=688;bottom=296;edge=1;z=5};
仓库显示={cls="groupbox";text="我的仓库  容量:20";left=416;top=56;right=696;bottom=304;edge=1;z=4};
借款={cls="static";text="200";left=456;top=35;right=688;bottom=51;align="right";center=1;transparent=1;z=13};
姓名={cls="static";text="姓名:张三";left=72;top=16;right=328;bottom=32;transparent=1;z=7};
市场列表={cls="listview";left=72;top=80;right=336;bottom=296;edge=1;gridLines=1;msel=false;z=2};
日志={cls="edit";text="游戏信息:";left=64;top=312;right=696;bottom=400;edge=1;multiline=1;readonly=1;z=9};
日期={cls="static";text="2022年12月31日";left=336;top=16;right=432;bottom=32;align="center";center=1;transparent=1;z=6};
等级={cls="static";text="等级:";left=72;top=35;right=328;bottom=51;transparent=1;z=12};
金钱={cls="static";text="200";left=456;top=16;right=688;bottom=32;align="right";center=1;transparent=1;z=8}
)
/*}}*/

// 游戏登录
mainForm.loadForm("\dlg\登录窗口.aardio").doModal()
if(游戏数据.结束判断){
        mainForm.close()
}

// 市场列表
var grid = win.ui.grid(mainForm.市场列表);//创建数据视图
grid.setReadonlyColumns(1,2,3);//可选设置禁止编辑的列
grid.setColumns({"商品名称";"商品价格";"商品数量"}) //可选自定义显示列名

// 库存列表
var grid2 = win.ui.grid(mainForm.仓库列表);//创建数据视图
grid2.setReadonlyColumns(1,2,3);//可选设置禁止编辑的列
grid2.setColumns({"商品名称";"商品价格";"商品数量"}) //可选自定义显示列名

// 变量
var 存档操作 = 游戏存档.存档("\存档.txt","topsflo")
var 姓名;
var 等级;
var 金钱;
var 仓库容量;
var 当前容量;
var 仓库商品;
var 年;
var 月;
var 日;
var 借款;
var 商品信息;
var 市场商品;
var 商品品种 = 5
var 签名信息;

// 自定义函数
加载存档 = function(){
        var 存档 = 存档操作.读档()
        if(!存档){
                mainForm.msgboxErr("游戏数据损坏,请删档后重来!!!")
                mainForm.close()
        }

        姓名 = 存档.姓名
        金钱 = 存档.金钱
        仓库容量 = 存档.仓库容量
        当前容量 = 存档.当前容量
        仓库商品 = 存档.仓库商品
        商品信息 = 存档.市场信息
        年 = 存档.年
        月 = 存档.月
        日 = 存档.日
        借款 = 存档.借款     
}

保存存档 = function(){
        var 存档 = {}

        存档.姓名 = 姓名
        存档.金钱 = 金钱
        存档.仓库容量 = 仓库容量
        存档.当前容量 = 当前容量
        存档.仓库商品 = 仓库商品
        存档.市场信息 = 商品信息
        存档.年 = 年
        存档.月 = 月
        存档.日 = 日
        存档.借款 = 借款

        存档操作.存档(存档)

}

游戏信息 = function(内容,状态){
        if(状态 = "初始"){
                mainForm.日志.text = 内容 + '\r\n'
        }
        else {
                mainForm.日志.log( 内容,'\r\n' )
        }       
}

生成商品 = function(){
        市场商品 = {fields={"商品名称";"商品价格";"商品数量"}}
        var 随机数组 = {}

        // 随机生产序号
        while(true){
                var 商品等级 = 5 + 等级
                if(商品等级 > #商品信息){ 商品等级 = #商品信息 }

                var 随机数 = math.random(1,商品等级)
                if(table.find(随机数组,随机数)=null){ 随机数组[#随机数组+1] = 随机数 }

                if(#随机数组 = 商品等级){ break }
        }

        // 生成商品信息

                // 随机时间
        var 随机事件 = math.random(1,20)
        var 随机序号 = math.random(1,商品品种)

        for(i=1;商品品种;1){
                var 商品名称 = 商品信息[随机数组[i]][1]

                var 最小值_下限 = 商品信息[随机数组[i]][2] * 90
                var 最小值_上限 = 商品信息[随机数组[i]][2] * 95

                var 最大值_下限 = 商品信息[随机数组[i]][2] * 110
                var 最大值_上限 = 商品信息[随机数组[i]][2] * 115

                var 最小值 = math.floor(math.random(最小值_下限,最小值_上限)/100)
                var 最大值 = math.floor(math.random(最大值_下限,最大值_上限)/100)

                var 商品价格 = 0;

                var 涨跌随机 = math.random(1,2)

                //import console;
                //console.dump(最小值,最大值,涨跌随机)

                if(涨跌随机 = 1){        //跌
                        商品价格 =         最小值
                }
                else {
                        商品价格 =         最大值
                }

                var 商品数量 = math.random(10,30)

                商品信息[随机数组[i]][2] = 商品价格

                if(i = 随机序号 and 随机事件 = 1){
                        商品价格 = math.floor(商品价格*0.5)
                        游戏信息("受不可控影响["+商品名称+"]价格大幅下降!!!")
                }
                elseif(i = 随机序号 and 随机事件 = 2){
                        商品价格 = math.floor(商品价格*1.5)
                        游戏信息("受不可控影响["+商品名称+"]价格大幅上升!!!")
                }

                if(商品价格 < 20 ){ 商品价格 = math.floor(math.random(20,25)) }

                市场商品[#市场商品+1] = {商品名称 = 商品名称,商品价格 = 商品价格,商品数量 = 商品数量}

        }
        //console.log('\n')
        grid.setTable( 市场商品 )

}

显示数据 = function(){
        等级 = math.floor(仓库容量/10)
        mainForm.姓名.text = "姓名:"+姓名
        mainForm.等级.text = "等级: "+等级
        mainForm.日期.text = 年+"年"+月+"月"+日+"日"
        mainForm.金钱.text = "现金: "+金钱
        mainForm.借款.text = "借款: " +借款
        mainForm.仓库显示.text = "我的仓库  容量:" + 当前容量+"/"+仓库容量

        var 仓库显示 = {fields={"商品名称";"商品价格";"商品数量"}}
        for(i=1;#仓库商品;1){
                仓库显示[i] = 仓库商品[i]
        }

        grid2.setTable( 仓库显示 )
}

破产判断 = function(){
        if(金钱 <= 0 and #仓库商品 = 0){
                        var 结果 = mainForm.msgboxTest("很遗憾,你破产了.是否重来?")
                        if(结果){
                                io.remove("\存档.txt")
                                mainForm.show(false)
                                mainForm.loadForm("\dlg\登录窗口.aardio").doModal()
                                mainForm.show(true)
                                main()
                        }
                        else {
                                mainForm.close()
                        }       
                }
}

更新日期 = function(){
        日 += 1
        if(日 > 30 ){
                日 = 1
                月 += 1

                if(月>12){
                        月 = 1
                        年 += 1
                }
        }

        // 收取银行利息
        if(借款 > 0){
                var 利息 = math.ceil(借款*0.01)
                金钱 -= 利息
                游戏信息("银行向你收取了["+利息+"]利息!!!")
                破产判断()
        }

        // 收取月租费用及归还银行借款
        if(日 = 30){
                var 费用 = 年*月*100
                金钱 -= 费用
                游戏信息("月底了,向你征收了["+费用+"]月租!!!")

                if(借款 >0 ){
                        金钱 -= 借款
                        游戏信息("月底了,银行收走了["+借款+"]借款!!!")
                        借款 = 0
                }

                破产判断()
        }

        显示数据()
}

// 弹出菜单
mainForm.popmenu = win.ui.popmenu(mainForm);
mainForm.popmenu.add('购买商品',function(id){

        var 行号 = mainForm.市场列表.selIndex
    var 商品名称 = mainForm.市场列表.getItemText(行号,1)
    var 商品价格 = mainForm.市场列表.getItemText(行号,2)
    var 商品数量 = mainForm.市场列表.getItemText(行号,3)

    var inputbox = win.inputBox(mainForm.hwnd)
    inputbox.text = "当前购买商品<" + 商品名称 + ">  商店价格<" + 商品价格 + ">  商店数量<" + 商品数量 + ">"
    inputbox.info.text = "购买数量:"
    inputbox.input.text = ""        

    var 购买数量 = tonumber(inputbox.doModal());                     
    select(购买数量) {

        case 1;tonumber(商品数量){
            购买数量 = math.floor(购买数量)

            if(购买数量 > tonumber(当前容量)){
                            游戏信息("玩家仓库容量不足,请调整购买数量!!!")
                    }
                    elseif(tonumber(金钱) < 购买数量 * tonumber(商品价格)){
                            游戏信息("玩家金钱不足,请调整购买数量!!!")
                    }
                    else {
                        var 花费 = 购买数量 * tonumber(商品价格)
                            金钱 -= 花费
                            当前容量 -= 购买数量

                            // 判断当前商品是否拥有库存
                            var 库存行号 = mainForm.仓库列表.findItem(商品名称)
                            if(库存行号 != 0){
                                    var 库存价格 = mainForm.仓库列表.getItemText(库存行号,2)
                                    var 库存数量 = mainForm.仓库列表.getItemText(库存行号,3)

                                    商品价格 = (花费 + tonumber(库存价格)*tonumber(库存数量))/(tonumber(库存数量)+购买数量)
                                    var 总数量 = 购买数量 + tonumber(库存数量)
                                    仓库商品[库存行号] = {商品名称 = 商品名称,商品价格 = 商品价格,商品数量 = 总数量}
                            }
                            else {
                                    仓库商品[#仓库商品+1] = {商品名称 = 商品名称,商品价格 = 商品价格,商品数量 = 购买数量}
                            }

                            // 更新信息
                            游戏信息("玩家购买了["+商品名称+"]*"+购买数量+",花费了"+花费)
                            var 剩余数量 = tonumber(商品数量) - 购买数量
                            mainForm.市场列表.setItemText(剩余数量,行号,3)
                            显示数据()
                    }

        };

        case null,"" { // 未输入或取消
        };
        else {//输入错误或当前库存不足
                游戏信息("输入错误!!!")
        };     
    }       
} )
mainForm.popmenu.add('出售商品',function(id){

        // 商店内容
        var 行号 = mainForm.市场列表.selIndex
    var 商品名称 = mainForm.市场列表.getItemText(行号,1)
    var 商品价格 = mainForm.市场列表.getItemText(行号,2)
    var 商品数量 = mainForm.市场列表.getItemText(行号,3)

    // 库存内容
    var 库存行号 = mainForm.仓库列表.findItem(商品名称)
    var 库存价格 = mainForm.仓库列表.getItemText(库存行号,2)
    var 库存数量 = mainForm.仓库列表.getItemText(库存行号,3)

    var inputbox = win.inputBox(mainForm.hwnd)
    inputbox.text = "当前出售商品<" + 商品名称 + ">  拥有数量<" + 库存数量 + ">"
    inputbox.info.text = "出售数量:"
    inputbox.input.text = 库存数量        

    var 出售数量 = tonumber(inputbox.doModal());                     
    select(出售数量) {

        case 1;tonumber(库存数量){
            出售数量 = math.floor(出售数量)

            if(出售数量 > tonumber(库存数量)){
                            游戏信息("玩家拥有商品数量不足,请调整购买数量!!!")
                    }
                    else {
                        var 收入 = 出售数量 * tonumber(商品价格)
                        var 税收 = math.floor(收入 * 0.03)
                            金钱 += 收入
                            金钱 -= 税收
                            当前容量 += 出售数量

                            if(出售数量 = tonumber(库存数量)){

                                    // 刷新库存商品缓存
                                    if(库存行号 = #仓库商品){
                                        仓库商品[库存行号] = null
                                    }
                                    else {
                                        var 索引 = 0;
                                        仓库商品 = {}
                                            for itemIndex in mainForm.仓库列表.each(){
                                                    var 行号 = itemIndex
                                                    if(行号 != 库存行号){
                                                            索引 += 1

                                                            var 仓库名称 = mainForm.仓库列表.getItemText(行号,1)
                                                            var 仓库价格 = mainForm.仓库列表.getItemText(行号,2)
                                                            var 仓库数量 = mainForm.仓库列表.getItemText(行号,3)

                                                            仓库商品[索引] = {商品名称 = 仓库名称,商品价格 = 仓库价格,商品数量 = 仓库数量}

                                                    }

                                            }

                                    }

                            }
                            else {
                                库存数量 = tonumber(库存数量) - 出售数量
                                    仓库商品[库存行号] = {商品名称 = 商品名称,商品价格 = 库存价格,商品数量 = 库存数量}       
                            }

                            // 更新信息
                            游戏信息("玩家出售了["+商品名称+"]*"+出售数量+",获得收入"+收入)
                            游戏信息("系统向你征收了3%商业税,你向系统支付了["+税收+"]")
                            显示数据()
                            var 剩余数量 = tonumber(商品数量) + 出售数量
                            mainForm.市场列表.setItemText(剩余数量,行号,3)
                    }

        };

        case null,"" { // 未输入或取消
        };
        else {//输入错误或当前库存不足
                游戏信息("输入错误!!!")
        };     
    }

} )

// 刷新日期
mainForm.button.oncommand = function(id,event){
        游戏信息("今日信息:","初始")
        生成商品()
        更新日期()
        保存存档()
}

// 仓库购买
mainForm.button2.oncommand = function(id,event){
        var 购买价格 = math.ceil(仓库容量/10)*1000
        var inputbox = win.inputBox(mainForm.hwnd)
    inputbox.text = "当前仓库容量:" + 仓库容量 + "  仓库价格:"+购买价格+"X1"
    inputbox.info.text = "购买数量(请输入1-10):"
    inputbox.input.text = ""        

    var 购买数量 = tonumber(inputbox.doModal());
    select(购买数量) {
            case 1; 10{
                购买数量 = math.floor(购买数量)

                    var 花费 = 购买数量 * 购买价格
                    if (金钱 < 花费){游戏信息("当前金额不足!!!")}
                    金钱 -= 花费
                    仓库容量 += 购买数量
                    当前容量 += 购买数量

                    // 更新信息
                    游戏信息("玩家购买了[仓库容量]*"+购买数量+",花费了"+花费)
                    显示数据()       
            };

            case null,"" { // 未输入或取消
            };
            else {//输入错误或当前库存不足
                    游戏信息("输入错误!!!")
            };
    };
}

// 银行借款
mainForm.button3.oncommand = function(id,event){
        if(借款 != 0){
                 // 存在未归还借款不能再借,月底自动还款
                 游戏信息("当前存在未归还借款,请下月再来!!!")
                return ;
        }

        var inputbox = win.inputBox(mainForm.hwnd)
    inputbox.text = "当前银行借款:" + 借款 + "  银行日利息:1%,月底自动收回欠款."
    inputbox.info.text = "借款金钱(最大金额 年X10000):"
    inputbox.input.text = 年*10000        

    var 借款金额 = tonumber(inputbox.doModal());
    select(借款金额) {
            case 1; tonumber(年)*10000{
                借款金额 = math.floor(借款金额)
                    金钱 += 借款金额
                    借款 += 借款金额

                    // 更新信息
                    游戏信息("玩家向银行借了["+借款金额+"],每日扣息5%,月底自动归还本金!!!")
                    显示数据()       
            };

            case null,"" { // 未输入或取消
            };
            else {//输入错误或当前库存不足
            };
    };
}

// 弹出菜单
mainForm.市场列表.onnotify = function(id,code,ptr){

    select(code) {
            case 0xFFFFFFFB/*_NM_RCLICK*/  {
                var 行号 = mainForm.市场列表.selIndex
                var 名称 = mainForm.市场列表.getItemText(行号,1)
                if(行号 != 0){
                    mainForm.市场列表.setSelected(行号)

                    // 禁用出售未拥有的商品
                    var 结果 = mainForm.仓库列表.findItem(名称)
                        if(结果 = 0){
                                mainForm.popmenu.enable(2,false)       
                        }
                    else {
                            mainForm.popmenu.enable(2,true)
                    }

                        mainForm.popmenu.popup();//弹出菜单

                }

            }
    }
}

// 初始运行
main = function(){
        加载存档()
        显示数据()
        生成商品()
        if(mainForm.日期.text = "1年1月1日"){
                游戏信息("欢迎富翁["+姓名+"]进入游戏"+'\r\n'+"友情提示:刷新日期后自动保存存档.","初始")
        }
        else {
                游戏信息("欢迎富翁["+姓名+"]进入游戏,祝你生活愉快,家庭幸福!!!"+'\r\n'+"友情提示:刷新日期后自动保存存档.","初始")
        }

}

main()
mainForm.show();
return win.loopMessage();


【库】游戏存档
import crypt.bin;
import crypt.aes;
import web.json;
import util.table;

namespace 游戏存档;

class 存档{

        ctor(存档路径,存档密码){
                this.路径 = 存档路径
                this.密码 = 存档密码
        };

        读档 = function(){
                if(!..io.exist(this.路径)){        // 若不存在返回空值
                        return null;
                }

                // 文件读取
                var 编码内容 = ..string.load(this.路径)

                // 编码解密
                var 加密内容 = ..crypt.bin.decodeBase64(编码内容)

                // AES解密
                var 加密容器 = ..crypt.aes()
                加密容器.setPassword(this.密码)        // 设置秘密
                var 解密内容 = 加密容器.decrypt(加密内容)
                if(!解密内容){        // 解密失败返回空值
                        return null;
                }

                // type.table
                var 表 = ..web.json.tryParse(解密内容)
                if(!表){
                        var 数据 = ..web.json.stringify(eval(解密内容))
                        表 = ..web.json.tryParse(数据)
                }
                return 表;
        }

        存档 = function(存档){
                if(!..io.exist(this.路径)){        // 判断文件是否存在
                        // 创建文件
                        var 文件 = ..io.open(this.路径,"w")
                        // 关闭文件
                        文件.close()
                }

                // AES加密
                var 加密容器 = ..crypt.aes()
                加密容器.setPassword(this.密码)        // 设置秘密
                var 加密内容 = 加密容器.encrypt(..util.table.stringify(存档))

                // Base64编码
                var 编码内容 = ..crypt.bin.encodeBase64(加密内容)

                // 文件保存
                ..string.save(this.路径,编码内容)        //若append=true,则追加到文件末尾

                }

}

/*intellisense()
游戏存档 = 游戏存档的加密读取与保存
游戏存档.存档("文件路径","加密密码") = 设置存档的路径与密码

游戏存档.存档()= !存档.
!存档.读档() = 返回存档内容,若读取失败返回空;
!存档.存档(存档) = 保存存档,存档格式为表;
end intellisense*/


【库】游戏数据
namespace 游戏数据{
        结束判断 = true;

        存档 = {}
        初始金钱 = 500;
        初始仓库容量 = 10;

        商品信息 = {
        {"奶油草莓",50},
        {"湖西槟榔";80},
        {"黄米手环";320},
        {"狗熊冰箱";1300},
        {"葡萄手机";5200},
        {"哈喽摩托";20000},
        {"婚嫁五金";80000},
        {"平民汽车";160000},
        {"中产汽车";640000},
        {"土豪汽车";2540000},
        {"平价飞机";10000000},
        {"豪华游轮";40000000},
        {"土豪手表";160000000},
        {"世界名画";640000000}
        }

}

/**intellisense(游戏数据)
游戏数据 = 游戏一些内置常量数据
游戏数据.结束判断 = 是否关闭登录窗口
游戏数据.初始金钱 = 初始金钱
游戏数据.初始仓库容量 = 初始容量
游戏数据.商品信息 = 商品信息
end intellisense**/



免费评分

参与人数 5威望 +1 吾爱币 +24 热心值 +5 收起 理由
苏紫方璇 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
passingtravelle + 1 + 1 我很赞同!
zhx79 + 1 + 1 我很赞同!
fengshengshou + 1 + 1 谢谢@Thanks!
888studio + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

免票的破船 发表于 2024-3-1 11:00
不错,我也经常用这个软件写些小东西
微信图片_20240301105912.png
vethenc 发表于 2024-2-29 23:11
修正一下格式
import win.ui;
import win.inputBox;
import fsys.table;
import 游戏数据;
import 游戏存档;
/*DSG{{*/
var winform = win.form(text="我是大富翁";right=399;bottom=247;max=false;min=false)
winform.add(
button={cls="button";text="开始游戏";left=128;top=112;right=274;bottom=145;z=2};
button2={cls="button";text="重新开始";left=128;top=160;right=274;bottom=193;z=4};
static={cls="static";text="我是大富翁";left=0;top=30;right=400;bottom=104;align="center";center=1;font=LOGFONT(h=-48);transparent=1;z=1};
static2={cls="static";text="提示:认真工作,健康生活!!!";left=16;top=224;right=386;bottom=240;transparent=1;z=3}
)
/*}}*/

// 检测存档
if(io.exist("/存档.txt")){
    winform.button.text = "继续游戏";   
}
else {
    winform.button.text = "开始游戏";
}

// 游戏按钮
winform.button.oncommand = function(id,event){
    if(winform.button.text = "开始游戏"){
        // 角色名输入
        var 输入窗口 = win.inputBox(winform.hwnd)
        输入窗口.text = "我是大富翁"
        输入窗口.info.text = "请在下面输入您的名字:"
        var 姓名 = 输入窗口.doModal();

        // 角色名验证
        if(姓名 = "" or 姓名 = null){
            winform.msgboxErr("未输入姓名!!!")
            return ;
        }

        // 保存初始信息
        var 存档函数 = 游戏存档.存档("\存档.txt","topsflo")

        var 存档 = {}
        存档.姓名 = 姓名;
        存档.金钱 = 游戏数据.初始金钱
        存档.仓库容量 = 游戏数据.初始仓库容量
        存档.当前容量 = 游戏数据.初始仓库容量
        存档.仓库商品 = {}
        存档.市场信息 = 游戏数据.商品信息
        存档.年 = 1;
        存档.月 = 1;
        存档.日 = 1;
        存档.借款 =0;

        存档函数.存档(存档)

    }
    游戏数据.结束判断 = false
    winform.close()
}

winform.button2.oncommand = function(id,event){
    io.remove("\存档.txt")
    winform.button.text = "开始游戏"
    winform.button.oncommand()
}

winform.show();
win.loopMessage();
return winform;
主界面
import win.ui;
import win.ui.grid;
import win.ui.menu;
import 游戏数据;
import 游戏存档;
/*DSG{{*/
mainForm = win.form(text="我是大富翁";right=757;bottom=467;max=false;min=false)
mainForm.add(
button={cls="button";text="刷新日期";left=64;top=416;right=176;bottom=448;z=3};
button2={cls="button";text="仓库购买";left=237;top=416;right=349;bottom=448;z=10};
button3={cls="button";text="银行借款";left=411;top=416;right=523;bottom=448;z=11};
groupbox={cls="groupbox";text="市场商品";left=64;top=56;right=344;bottom=304;edge=1;z=1};
仓库列表={cls="listview";left=424;top=80;right=688;bottom=296;edge=1;z=5};
仓库显示={cls="groupbox";text="我的仓库  容量:20";left=416;top=56;right=696;bottom=304;edge=1;z=4};
借款={cls="static";text="200";left=456;top=35;right=688;bottom=51;align="right";center=1;transparent=1;z=13};
姓名={cls="static";text="姓名:张三";left=72;top=16;right=328;bottom=32;transparent=1;z=7};
市场列表={cls="listview";left=72;top=80;right=336;bottom=296;edge=1;gridLines=1;msel=false;z=2};
日志={cls="edit";text="游戏信息:";left=64;top=312;right=696;bottom=400;edge=1;multiline=1;readonly=1;z=9};
日期={cls="static";text="2022年12月31日";left=336;top=16;right=432;bottom=32;align="center";center=1;transparent=1;z=6};
等级={cls="static";text="等级:";left=72;top=35;right=328;bottom=51;transparent=1;z=12};
金钱={cls="static";text="200";left=456;top=16;right=688;bottom=32;align="right";center=1;transparent=1;z=8}
)
/*}}*/

// 游戏登录
mainForm.loadForm("\dlg\登录窗口.aardio").doModal()
if(游戏数据.结束判断){
    mainForm.close()
}

// 市场列表
var grid = win.ui.grid(mainForm.市场列表);//创建数据视图
grid.setReadonlyColumns(1,2,3);//可选设置禁止编辑的列
grid.setColumns({"商品名称";"商品价格";"商品数量"}) //可选自定义显示列名

// 库存列表
var grid2 = win.ui.grid(mainForm.仓库列表);//创建数据视图
grid2.setReadonlyColumns(1,2,3);//可选设置禁止编辑的列
grid2.setColumns({"商品名称";"商品价格";"商品数量"}) //可选自定义显示列名

// 变量
var 存档操作 = 游戏存档.存档("\存档.txt","topsflo")
var 姓名;
var 等级;
var 金钱;
var 仓库容量;
var 当前容量;
var 仓库商品;
var 年;
var 月;
var 日;
var 借款;
var 商品信息;
var 市场商品;
var 商品品种 = 5
var 签名信息;

// 自定义函数
加载存档 = function(){
    var 存档 = 存档操作.读档()
    if(!存档){
        mainForm.msgboxErr("游戏数据损坏,请删档后重来!!!")
        mainForm.close()
    }

    姓名 = 存档.姓名
    金钱 = 存档.金钱
    仓库容量 = 存档.仓库容量
    当前容量 = 存档.当前容量
    仓库商品 = 存档.仓库商品
    商品信息 = 存档.市场信息
    年 = 存档.年
    月 = 存档.月
    日 = 存档.日
    借款 = 存档.借款

}

保存存档 = function(){
    var 存档 = {}

    存档.姓名 = 姓名
    存档.金钱 = 金钱
    存档.仓库容量 = 仓库容量
    存档.当前容量 = 当前容量
    存档.仓库商品 = 仓库商品
    存档.市场信息 = 商品信息
    存档.年 = 年
    存档.月 = 月
    存档.日 = 日
    存档.借款 = 借款

    存档操作.存档(存档)

}

游戏信息 = function(内容,状态){
    if(状态 = "初始"){
        mainForm.日志.text = 内容 + '\r\n'
    }
    else {
        mainForm.日志.log( 内容,'\r\n' )
    }   
}

生成商品 = function(){
    市场商品 = {fields={"商品名称";"商品价格";"商品数量"}}
    var 随机数组 = {}

    // 随机生产序号
    while(true){
        var 商品等级 = 5 + 等级
        if(商品等级 > #商品信息){ 商品等级 = #商品信息 }

        var 随机数 = math.random(1,商品等级)
        if(table.find(随机数组,随机数)=null){ 随机数组[#随机数组+1] = 随机数 }

        if(#随机数组 = 商品等级){ break }
    }

    // 生成商品信息

        // 随机时间
    var 随机事件 = math.random(1,20)
    var 随机序号 = math.random(1,商品品种)

    for(i=1;商品品种;1){
        var 商品名称 = 商品信息[随机数组][1]

        var 最小值_下限 = 商品信息[随机数组][2] * 90
        var 最小值_上限 = 商品信息[随机数组][2] * 95

        var 最大值_下限 = 商品信息[随机数组][2] * 110
        var 最大值_上限 = 商品信息[随机数组][2] * 115

        var 最小值 = math.floor(math.random(最小值_下限,最小值_上限)/100)
        var 最大值 = math.floor(math.random(最大值_下限,最大值_上限)/100)

        var 商品价格 = 0;

        var 涨跌随机 = math.random(1,2)

        //import console;
        //console.dump(最小值,最大值,涨跌随机)

        if(涨跌随机 = 1){   //跌
            商品价格 =  最小值
        }
        else {
            商品价格 =  最大值
        }

        var 商品数量 = math.random(10,30)

        商品信息[随机数组][2] = 商品价格

        if(i = 随机序号 and 随机事件 = 1){
            商品价格 = math.floor(商品价格*0.5)
            游戏信息("受不可控影响["+商品名称+"]价格大幅下降!!!")
        }
        elseif(i = 随机序号 and 随机事件 = 2){
            商品价格 = math.floor(商品价格*1.5)
            游戏信息("受不可控影响["+商品名称+"]价格大幅上升!!!")
        }

        if(商品价格 < 20 ){ 商品价格 = math.floor(math.random(20,25)) }

        市场商品[#市场商品+1] = {商品名称 = 商品名称,商品价格 = 商品价格,商品数量 = 商品数量}

    }
    //console.log('\n')
    grid.setTable( 市场商品 )

}

显示数据 = function(){
    等级 = math.floor(仓库容量/10)
    mainForm.姓名.text = "姓名:"+姓名
    mainForm.等级.text = "等级: "+等级
    mainForm.日期.text = 年+"年"+月+"月"+日+"日"
    mainForm.金钱.text = "现金: "+金钱
    mainForm.借款.text = "借款: " +借款
    mainForm.仓库显示.text = "我的仓库  容量:" + 当前容量+"/"+仓库容量

    var 仓库显示 = {fields={"商品名称";"商品价格";"商品数量"}}
    for(i=1;#仓库商品;1){
        仓库显示 = 仓库商品
    }

    grid2.setTable( 仓库显示 )
}

破产判断 = function(){
    if(金钱 <= 0 and #仓库商品 = 0){
            var 结果 = mainForm.msgboxTest("很遗憾,你破产了.是否重来?")
            if(结果){
                io.remove("\存档.txt")
                mainForm.show(false)
                mainForm.loadForm("\dlg\登录窗口.aardio").doModal()
                mainForm.show(true)
                main()
            }
            else {
                mainForm.close()
            }   
        }
}

更新日期 = function(){
    日 += 1
    if(日 > 30 ){
        日 = 1
        月 += 1

        if(月>12){
            月 = 1
            年 += 1
        }
    }

    // 收取银行利息
    if(借款 > 0){
        var 利息 = math.ceil(借款*0.01)
        金钱 -= 利息
        游戏信息("银行向你收取了["+利息+"]利息!!!")
        破产判断()
    }

    // 收取月租费用及归还银行借款
    if(日 = 30){
        var 费用 = 年*月*100
        金钱 -= 费用
        游戏信息("月底了,向你征收了["+费用+"]月租!!!")

        if(借款 >0 ){
            金钱 -= 借款
            游戏信息("月底了,银行收走了["+借款+"]借款!!!")
            借款 = 0
        }

        破产判断()
    }

    显示数据()
}

// 弹出菜单
mainForm.popmenu = win.ui.popmenu(mainForm);
mainForm.popmenu.add('购买商品',function(id){

    var 行号 = mainForm.市场列表.selIndex
    var 商品名称 = mainForm.市场列表.getItemText(行号,1)
    var 商品价格 = mainForm.市场列表.getItemText(行号,2)
    var 商品数量 = mainForm.市场列表.getItemText(行号,3)

    var inputbox = win.inputBox(mainForm.hwnd)
    inputbox.text = "当前购买商品<" + 商品名称 + ">  商店价格<" + 商品价格 + ">  商店数量<" + 商品数量 + ">"
    inputbox.info.text = "购买数量:"
    inputbox.input.text = ""        

    var 购买数量 = tonumber(inputbox.doModal());                     
    select(购买数量) {

        case 1;tonumber(商品数量){
            购买数量 = math.floor(购买数量)

            if(购买数量 > tonumber(当前容量)){
                游戏信息("玩家仓库容量不足,请调整购买数量!!!")
            }
            elseif(tonumber(金钱) < 购买数量 * tonumber(商品价格)){
                游戏信息("玩家金钱不足,请调整购买数量!!!")
            }
            else {
                var 花费 = 购买数量 * tonumber(商品价格)
                金钱 -= 花费
                当前容量 -= 购买数量

                // 判断当前商品是否拥有库存
                var 库存行号 = mainForm.仓库列表.findItem(商品名称)
                if(库存行号 != 0){
                    var 库存价格 = mainForm.仓库列表.getItemText(库存行号,2)
                    var 库存数量 = mainForm.仓库列表.getItemText(库存行号,3)

                    商品价格 = (花费 + tonumber(库存价格)*tonumber(库存数量))/(tonumber(库存数量)+购买数量)
                    var 总数量 = 购买数量 + tonumber(库存数量)
                    仓库商品[库存行号] = {商品名称 = 商品名称,商品价格 = 商品价格,商品数量 = 总数量}
                }
                else {
                    仓库商品[#仓库商品+1] = {商品名称 = 商品名称,商品价格 = 商品价格,商品数量 = 购买数量}
                }

                // 更新信息
                游戏信息("玩家购买了["+商品名称+"]*"+购买数量+",花费了"+花费)
                var 剩余数量 = tonumber(商品数量) - 购买数量
                mainForm.市场列表.setItemText(剩余数量,行号,3)
                显示数据()
            }

        };

        case null,"" { // 未输入或取消
        };
        else {//输入错误或当前库存不足
            游戏信息("输入错误!!!")
        };     
    }   
} )
mainForm.popmenu.add('出售商品',function(id){

    // 商店内容
    var 行号 = mainForm.市场列表.selIndex
    var 商品名称 = mainForm.市场列表.getItemText(行号,1)
    var 商品价格 = mainForm.市场列表.getItemText(行号,2)
    var 商品数量 = mainForm.市场列表.getItemText(行号,3)

    // 库存内容
    var 库存行号 = mainForm.仓库列表.findItem(商品名称)
    var 库存价格 = mainForm.仓库列表.getItemText(库存行号,2)
    var 库存数量 = mainForm.仓库列表.getItemText(库存行号,3)

    var inputbox = win.inputBox(mainForm.hwnd)
    inputbox.text = "当前出售商品<" + 商品名称 + ">  拥有数量<" + 库存数量 + ">"
    inputbox.info.text = "出售数量:"
    inputbox.input.text = 库存数量        

    var 出售数量 = tonumber(inputbox.doModal());                     
    select(出售数量) {

        case 1;tonumber(库存数量){
            出售数量 = math.floor(出售数量)

            if(出售数量 > tonumber(库存数量)){
                游戏信息("玩家拥有商品数量不足,请调整购买数量!!!")
            }
            else {
                var 收入 = 出售数量 * tonumber(商品价格)
                var 税收 = math.floor(收入 * 0.03)
                金钱 += 收入
                金钱 -= 税收
                当前容量 += 出售数量

                if(出售数量 = tonumber(库存数量)){

                    // 刷新库存商品缓存
                    if(库存行号 = #仓库商品){
                        仓库商品[库存行号] = null
                    }
                    else {
                        var 索引 = 0;
                        仓库商品 = {}
                        for itemIndex in mainForm.仓库列表.each(){
                            var 行号 = itemIndex
                            if(行号 != 库存行号){
                                索引 += 1

                                var 仓库名称 = mainForm.仓库列表.getItemText(行号,1)
                                var 仓库价格 = mainForm.仓库列表.getItemText(行号,2)
                                var 仓库数量 = mainForm.仓库列表.getItemText(行号,3)

                                仓库商品[索引] = {商品名称 = 仓库名称,商品价格 = 仓库价格,商品数量 = 仓库数量}

                            }

                        }

                    }

                }
                else {
                    库存数量 = tonumber(库存数量) - 出售数量
                    仓库商品[库存行号] = {商品名称 = 商品名称,商品价格 = 库存价格,商品数量 = 库存数量}  
                }

                // 更新信息
                游戏信息("玩家出售了["+商品名称+"]*"+出售数量+",获得收入"+收入)
                游戏信息("系统向你征收了3%商业税,你向系统支付了["+税收+"]")
                显示数据()
                var 剩余数量 = tonumber(商品数量) + 出售数量
                mainForm.市场列表.setItemText(剩余数量,行号,3)
            }

        };

        case null,"" { // 未输入或取消
        };
        else {//输入错误或当前库存不足
            游戏信息("输入错误!!!")
        };     
    }

} )

// 刷新日期
mainForm.button.oncommand = function(id,event){
    游戏信息("今日信息:","初始")
    生成商品()
    更新日期()
    保存存档()
}

// 仓库购买
mainForm.button2.oncommand = function(id,event){
    var 购买价格 = math.ceil(仓库容量/10)*1000
    var inputbox = win.inputBox(mainForm.hwnd)
    inputbox.text = "当前仓库容量:" + 仓库容量 + "  仓库价格:"+购买价格+"X1"
    inputbox.info.text = "购买数量(请输入1-10):"
    inputbox.input.text = ""        

    var 购买数量 = tonumber(inputbox.doModal());
    select(购买数量) {
        case 1; 10{
            购买数量 = math.floor(购买数量)

            var 花费 = 购买数量 * 购买价格
            if (金钱 < 花费){游戏信息("当前金额不足!!!")}
            金钱 -= 花费
            仓库容量 += 购买数量
            当前容量 += 购买数量

            // 更新信息
            游戏信息("玩家购买了[仓库容量]*"+购买数量+",花费了"+花费)
            显示数据()  
        };

        case null,"" { // 未输入或取消
        };
        else {//输入错误或当前库存不足
            游戏信息("输入错误!!!")
        };
    };
}

// 银行借款
mainForm.button3.oncommand = function(id,event){
    if(借款 != 0){
        // 存在未归还借款不能再借,月底自动还款
        游戏信息("当前存在未归还借款,请下月再来!!!")
        return ;
    }

    var inputbox = win.inputBox(mainForm.hwnd)
    inputbox.text = "当前银行借款:" + 借款 + "  银行日利息:1%,月底自动收回欠款."
    inputbox.info.text = "借款金钱(最大金额 年X10000):"
    inputbox.input.text = 年*10000        

    var 借款金额 = tonumber(inputbox.doModal());
    select(借款金额) {
        case 1; tonumber(年)*10000{
            借款金额 = math.floor(借款金额)
            金钱 += 借款金额
            借款 += 借款金额

            // 更新信息
            游戏信息("玩家向银行借了["+借款金额+"],每日扣息5%,月底自动归还本金!!!")
            显示数据()  
        };

        case null,"" { // 未输入或取消
        };
        else {//输入错误或当前库存不足
        };
    };
}

// 弹出菜单
mainForm.市场列表.onnotify = function(id,code,ptr){

    select(code) {
            case 0xFFFFFFFB/*_NM_RCLICK*/  {
                var 行号 = mainForm.市场列表.selIndex
                var 名称 = mainForm.市场列表.getItemText(行号,1)
                if(行号 != 0){
                    mainForm.市场列表.setSelected(行号)

                    // 禁用出售未拥有的商品
                    var 结果 = mainForm.仓库列表.findItem(名称)
                    if(结果 = 0){
                        mainForm.popmenu.enable(2,false)   
                    }
                    else {
                        mainForm.popmenu.enable(2,true)
                    }

                    mainForm.popmenu.popup();//弹出菜单

                }

            }
    }
}

// 初始运行
main = function(){
    加载存档()
    显示数据()
    生成商品()
    if(mainForm.日期.text = "1年1月1日"){
        游戏信息("欢迎富翁["+姓名+"]进入游戏"+'\r\n'+"友情提示:刷新日期后自动保存存档.","初始")
    }
    else {
        游戏信息("欢迎富翁["+姓名+"]进入游戏,祝你生活愉快,家庭幸福!!!"+'\r\n'+"友情提示:刷新日期后自动保存存档.","初始")
    }   
}

main()
mainForm.show();
return win.loopMessage();
【库】游戏存档
import crypt.bin;
import crypt.aes;
import web.json;
import util.table;

namespace 游戏存档;

class 存档{

    ctor(存档路径,存档密码){
        this.路径 = 存档路径
        this.密码 = 存档密码
    };

    读档 = function(){
        if(!..io.exist(this.路径)){   // 若不存在返回空值
            return null;
        }

        // 文件读取
        var 编码内容 = ..string.load(this.路径)

        // 编码解密
        var 加密内容 = ..crypt.bin.decodeBase64(编码内容)

        // AES解密
        var 加密容器 = ..crypt.aes()
        加密容器.setPassword(this.密码)   // 设置秘密
        var 解密内容 = 加密容器.decrypt(加密内容)
        if(!解密内容){  // 解密失败返回空值
            return null;
        }

        // type.table
        var 表 = ..web.json.tryParse(解密内容)
        if(!表){
            var 数据 = ..web.json.stringify(eval(解密内容))
            表 = ..web.json.tryParse(数据)
        }
        return 表;
    }

    存档 = function(存档){
        if(!..io.exist(this.路径)){   // 判断文件是否存在
            // 创建文件
            var 文件 = ..io.open(this.路径,"w")
            // 关闭文件
            文件.close()
        }

        // AES加密
        var 加密容器 = ..crypt.aes()
        加密容器.setPassword(this.密码)   // 设置秘密
        var 加密内容 = 加密容器.encrypt(..util.table.stringify(存档))

        // Base64编码
        var 编码内容 = ..crypt.bin.encodeBase64(加密内容)

        // 文件保存
        ..string.save(this.路径,编码内容) //若append=true,则追加到文件末尾

        }

}

/*intellisense()
游戏存档 = 游戏存档的加密读取与保存
游戏存档.存档("文件路径","加密密码") = 设置存档的路径与密码

游戏存档.存档()= !存档.
!存档.读档() = 返回存档内容,若读取失败返回空;
!存档.存档(存档) = 保存存档,存档格式为表;
end intellisense*/
【库】游戏数据
设置游戏初始数据
namespace 游戏数据{
    结束判断 = true;

    存档 = {}
    初始金钱 = 500;
    初始仓库容量 = 10;

    商品信息 = {
    {"奶油草莓",50},
    {"湖西槟榔";80},
    {"黄米手环";320},
    {"狗熊冰箱";1300},
    {"葡萄手机";5200},
    {"哈喽摩托";20000},
    {"婚嫁五金";80000},
    {"平民汽车";160000},
    {"中产汽车";640000},
    {"土豪汽车";2540000},
    {"平价飞机";10000000},
    {"豪华游轮";40000000},
    {"土豪手表";160000000},
    {"世界名画";640000000}
    }

}

/**intellisense(游戏数据)
游戏数据 = 游戏一些内置常量数据
游戏数据.结束判断 = 是否关闭登录窗口
游戏数据.初始金钱 = 初始金钱
游戏数据.初始仓库容量 = 初始容量
游戏数据.商品信息 = 商品信息

end intellisense**/

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
苏紫方璇 + 1 + 1 我很赞同!
代码搬运工 + 1 谢谢@Thanks!

查看全部评分

爱飞的猫 发表于 2024-2-29 22:23
本帖最后由 爱飞的猫 于 2024-3-1 03:43 编辑

推荐使用代码框展示代码哦!

语言可以选择语法相似的 JavaScript

参考:

免费评分

参与人数 1吾爱币 +1 收起 理由
代码搬运工 + 1 谢谢,第一次发帖感谢帮助!

查看全部评分

caochunyuan 发表于 2024-3-1 00:09
可以做成EXE文件吗?谢谢
jk46jk57 发表于 2024-3-1 00:11
大佬啊,不明觉厉
zkq970413 发表于 2024-3-1 00:37
看样子没少玩大富翁
kebibisajuan 发表于 2024-3-1 02:26
很厉害,学习了!
aisht 发表于 2024-3-1 06:39
点赞.  aa的确是个好东西. 我很佩服作者.
说真的.
但是aa有点麻烦的地方就是... 多线程下居然要额外import . 我x
虽然无所谓.但..我就是想吐槽.

aa很棒. 我用aa做过不少方便的东西. 特别是小功能的东西上.真的完胜其他.
而且它的机制很特别.能快速的调用其他dll.以及语言.
Corgibro 发表于 2024-3-1 07:15
很厉害的样子,谢谢技术分享
a517753728 发表于 2024-3-1 07:55
谢谢分享   看了帖子才知道还有这个语言  突然想接触学习一下 感觉好像能上手  楼主加油
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 11:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表