为什么我的乒乓球AI如此紧张
Why is my pong AI jittering so much?
我正试图为我的乒乓球游戏制作一个人工智能,但人工智能控制的球拍在击球时会抖动很多。
这是我代码的AI部分:
function calculateAI() {
if (paddleA.AI) {
if (ball.x + (ball.width / 2) <= ctx.canvas.width * 0.4 && ball.directionX == -1) {
if (ball.y + (ball.height / 2) >= paddleA.y + (paddleA.height + paddleA.heightModifier * 0.75) && paddleA.y + paddleA.height + paddleA.heightModifier < ctx.canvas.height) {
paddleA.y += paddleA.speed + paddleA.speedModifier;
}
else if (ball.y + (ball.height / 2) <= paddleA.y + (paddleA.height + paddleA.heightModifier * 0.25) && paddleA.y > 0) {
paddleA.y -= paddleA.speed + paddleA.speedModifier;
}
}
else {
if (paddleA.y + ((paddleA.height + paddleA.heightModifier) / 2) <= (ctx.canvas.height / 2) - 50 && paddleA.y + paddleA.height + paddleA.heightModifier < ctx.canvas.height) {
paddleA.y += paddleA.speed + paddleA.speedModifier;
}
else if (paddleA.y + ((paddleA.height + paddleA.heightModifier) / 2) >= (ctx.canvas.height / 2) + 50 && paddleA.y > 0) {
paddleA.y -= paddleA.speed + paddleA.speedModifier;
}
}
}
}
你可以在这里找到完整代码的.zip:http://dl.dropbox.com/u/23225581/Pong.zip
我的问题是,我如何重组它,使人工智能不会抖动那么多?如果有人对人工智能有其他建议,我很乐意听取。
我假设你想让AI更顺利地追球。以下是一些建议:
当球拍靠近球时缓慢移动
假设AI的速度是8。如果球以2的速度移动,球拍不应该跳下8,然后再跳回来。相反,将y位置设置为与球的位置相等。
使球拍只在真正需要时追逐球
你可能已经实现了这一点,而我只是没有注意到。基本上,如果球会碰到球拍的边缘,就不要麻烦移动。
我修改了你的代码来做这些事情:
function calculateAI() {
if (paddleA.AI) {
//ball's x position
var bx = ball.x + (ball.width / 2);
//Get half he paddle's height and its y position
var hD2 = (paddleA.height + paddleA.heightModifier)/2;
var py = paddleA.y;
//speed
var speed = paddleA.speed + paddleA.speedModifier;
//by is either the center of the screen or the ball's y position,
//depending on what the paddle wants to do.
var by = ctx.canvas.height/2;
if (bx <= ctx.canvas.width * 0.4 && ball.directionX == -1) {
by = ball.y + (ball.height / 2) - hD2;
}
//Attempt to move toward 'by' (if I 'have' to)
if (by > py+hD2) {
//Jump to position if close enough
//(Commented out to retain speed)
/*
if(by - speed < py)
py = by;
else
*/
py += speed;
}
else if (by < py-hD2) {
//Jump to position if close enough
//(Commented out to retain speed)
/*
if(by + speed > py)
py = by;
else
*/
py -= speed;
}
//Border range check goes here
paddleA.y = py;
}
}
它不完整,但一切都应该正常。
想要了解更多关于乒乓球AI的想法,你可以查看我的乒乓球游戏的来源:http://jsweeneydev.net84.net/apps.php
http://jsweeneydev.net84.net/apps/pong/game/script.js
相关文章:
- TicTacToe minimax AI in Javascript
- wit.ai机器人引擎故事连接到hubot
- 如何搜索术语“;AI”;使用regex
- 如何通过ai关键字识别元素
- Javascript/Node AI-如何使用match从单词数组中重复单词
- 改进基于Angular的国际象棋游戏的基本AI
- 为瓷砖游戏制作AI
- 我可以用JavaScript创建AI吗
- 让AI追逐最近的食物
- Javascript TIC TAC TOE - AI not working?
- 为什么我的乒乓球AI如此紧张
- 如何将.ai文件转换为png
- JavaScript computer AI
- Node.js/Socket.IO中的基本AI
- 为什么我的AI在井字游戏中表现得很奇怪?
- 智慧.ai不解析数据聊天响应
- 用于web应用程序的服务器端AI
- Javascript ai跳跃平台
- GS1 128 PHP或Jquery中的条形码解码器(AI)
- Selenium execute_script adding"AI”;以发挥作用