吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 30|回复: 0
上一主题 下一主题
收起左侧

[其他转载] AI编写aardio版"圈住小猫"的经典智力游戏

[复制链接]
跳转到指定楼层
楼主
popdes 发表于 2026-1-16 11:01 回帖奖励
话说现在AI是真的好用,  Gemini对aardio是真的友好,  今天测试了下, 让AI帮忙编写了一个"圈小猫"游戏的aardio版 , 一次成功
有时候不得不正视下目前的AI , 早几年前的时候,  我测试AI感觉就像个玩具或者是个搜索引擎, 比去百度更省力点而已,  现在看AI已经进化到这地步了, 厉害

源码和exe下载:
通过网盘分享的文件:圈住小猫
链接: https://pan.baidu.com/s/11j0Ta96cpTJSRNGA3fYafg?pwd=52pj 提取码: 52pj



[AAuto] 纯文本查看 复制代码
import win.ui;
import gdip;
/*DSG{{*/
winform = win.form(text="圈住小猫 (Catch the Cat) - aardio版";right=738;bottom=643)
winform.add(
plus={cls="plus";left=1;top=-14;right=735;bottom=640;bgcolor=0xFFFFFF;notify=1;z=1}
)
/*}}*/

// ==========================================
// 1. 游戏地图初始化
// ==========================================
var gridSize = 15; // 11x11 网格
var map = {};      // 0:空地, 1:障碍物
var catPos = { r = 7, c = 7 }; // 小猫初始位置 (行, 列)

// 初始化地图
var initMap = function(){
    map = {};
    for(r=0; gridSize-1; 1){
        map[r] = {};
        for(c=0; gridSize-1; 1){
            map[r][c] = (..math.random(1, 100) < 15) ? 1 : 0; // 15% 几率随机障碍
        }
    }
    map[catPos.r][catPos.c] = 0; // 小猫位置不能有障碍
}
initMap();

// ==========================================
// 2. 小猫 AI (寻路算法)
// ==========================================
// 获取相邻坐标 (六边形网格逻辑)
var getNeighbors = function(r, c){
    var neighbors = {};
    // 六边形网格:偶数行和奇数行的偏移不同
    var offset = (r % 2 == 0) ? {{-1, -1}, {-1, 0}, {0, -1}, {0, 1}, {1, -1}, {1, 0}} 
                              : {{-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, 0}, {1, 1}};
    for(i=1; #offset){
        var nr, nc = r + offset[i][1], c + offset[i][2];
        if(nr >= 0 && nr < gridSize && nc >= 0 && nc < gridSize){
            ..table.push(neighbors, {r=nr, c=nc});
        }
    }
    return neighbors;
}

// 寻找逃跑路径 (BFS)
var findPath = function(start){
    var queue = {{r=start.r, c=start.c, path={}}};
    var visited = {};
    visited[start.r + "_" + start.c] = true;
    
    while(#queue > 0){
        var curr = ..table.remove(queue, 1);
        
        // 如果到达边缘,返回路径的第一步
        if(curr.r == 0 || curr.r == gridSize-1 || curr.c == 0 || curr.c == gridSize-1){
            return curr.path[1] || curr; 
        }
        
        var neighbors = getNeighbors(curr.r, curr.c);
        for(i=1; #neighbors){
            var n = neighbors[i];
            var key = n.r + "_" + n.c;
            if(!visited[key] && map[n.r][n.c] == 0){
                visited[key] = true;
                var newPath = ..table.clone(curr.path);
                ..table.push(newPath, n);
                ..table.push(queue, {r=n.r, c=n.c, path=newPath});
            }
        }
    }
    return null; // 无路可逃
}

// ==========================================
// 3. 绘图与逻辑交互
// ==========================================
var cellSize = 40;
var offsetX = 50;
var offsetY = 80;

winform.plus.onDrawForegroundEnd = function(graphics, rc){
    graphics.smoothingMode = 4;
    
    for(r=0; gridSize-1; 1){
        for(c=0; gridSize-1; 1){
            // 计算六边形布局的 X 偏移
            var x = c * cellSize + ( (r % 2 == 1) ? cellSize/2 : 0 ) + offsetX;
            var y = r * cellSize * 0.85 + offsetY;
            
            var brush;
            if(r == catPos.r && c == catPos.c){
                brush = gdip.solidBrush(0xFF000000); // 小猫是黑色
            } elseif(map[r][c] == 1){
                brush = gdip.solidBrush(0xFFFF6600); // 障碍物是橙色
            } else {
                brush = gdip.solidBrush(0xFFB0C4DE); // 空地是浅蓝色
            }
            
            graphics.fillEllipse(brush, x, y, cellSize-5, cellSize-5);
            brush.delete();
        }
    }
    
    var font = gdip.font("微软雅黑", 14);
    graphics.drawString("目标:圈住黑色小猫!别让它逃出边界。", font, ::RECTF(50, 20, 500, 50), , gdip.solidBrush(0xFF333333));
}

winform.plus.onMouseDown = function(wParam, lParam){
    var mx, my = win.getMessagePos(lParam);
    
    // 简单的碰撞检测:反推点击了哪个圆
    for(r=0; gridSize-1; 1){
        for(c=0; gridSize-1; 1){
            var x = c * cellSize + ( (r % 2 == 1) ? cellSize/2 : 0 ) + offsetX;
            var y = r * cellSize * 0.85 + offsetY;
            
            // 判断点击是否在圆内
            var dist = ..math.sqrt((mx - (x + cellSize/2))**2 + (my - (y + cellSize/2))**2);
            if(dist < cellSize/2){
                if(map[r][c] == 0 && !(r == catPos.r && c == catPos.c)){
                    map[r][c] = 1; // 放置障碍
                    
                    // 小猫移动
                    var nextStep = findPath(catPos);
                    if(nextStep){
                        catPos.r, catPos.c = nextStep.r, nextStep.c;
                        // 判断失败
                        if(catPos.r == 0 || catPos.r == gridSize-1 || catPos.c == 0 || catPos.c == gridSize-1){
                            win.msgbox("小猫逃走了!游戏结束。");
                            initMap(); catPos = {r=5, c=5};
                        }
                    } else {
                        win.msgbox("太棒了!你成功圈住了小猫!");
                        initMap(); catPos = {r=5, c=5};
                    }
                    winform.plus.redraw();
                }
                return;
            }
        }
    }
}

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


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

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-1-16 11:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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