好友
阅读权限10
听众
最后登录1970-1-1
|
话说现在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();
|
|