标签: game-ai

AI为SpriteKit中的敌人

我一直在精灵套件中制作游戏已有一段时间了.我添加了敌人,我想知道如何使用AI在地图上控制它们(就像在任何其他游戏中一样).

我想要的是敌人在TMX地图周围思考,根据随机数转向角落.我试图这样做,但遇到了很多问题.有谁知道任何可以帮助我的文章?我做了一些研究."PathFinding"和"A*"出现了,但有关于如何做的知道解释或示例代码.任何帮助将不胜感激.

objective-c path-finding game-ai ios sprite-kit

5
推荐指数
2
解决办法
1939
查看次数

在四排 (connect4) 游戏中实现和使用 MinMax

我正在尝试为四连胜(或连接四或连接四)游戏实现 MinMax 算法。

我想我明白了,它应该构建一棵可能的板树,达到一定的深度,评估它们并返回它们的分数,然后我们只取这些分数的最大值。

因此,aiChooseCol()通过调用检查每个可能列的分数MinMax()并返回具有最大分数的列。

现在我不确定这是正确的打电话方式吗MinMax()

检查一下是否正确temp = Math.Max(temp, 1000);

我还没有制作启发式函数,但这至少应该识别一个获胜列并选择它,但目前它只是选择左侧的第一个免费列......我不知道我做错了什么。

private int AiChooseCol()
{
    int best = -1000;
    int col=0;
    for (int i = 0; i < m_Board.Cols; i++)
    {
        if (m_Board.CheckIfColHasRoom(i))
        {
            m_Board.FillSignInBoardAccordingToCol(i, m_Sign);
            int t = MinMax(5, m_Board, board.GetOtherPlayerSign(m_Sign));
            if (t > best)
            {
                best = t;
                col = i;
            }
            m_Board.RemoveTopCoinFromCol(i);
        }

    }
    return col;
}


private int MinMax(int Depth, board Board, char PlayerSign)
{
    int temp=0;
    if …
Run Code Online (Sandbox Code Playgroud)

c# artificial-intelligence game-ai minmax

3
推荐指数
1
解决办法
9626
查看次数

关于为 Vexed 关卡编写求解器的建议

Vexed 是一款流行的益智游戏,有许多可用版本(其中一些是 GPL 免费软件)。非常适合小屏幕设备;有适用于 Android、iOS 等的版本。我在 PalmOS 平台上发现了它。

只是为了好玩,我想编写一个可以解决 Vexed 关卡的解算器。

Vexed 是一款方块滑动益智游戏。简而言之,规则如下:

0) 每个级别都是一个正方形网格,由不可逾越的边界界定。在任何关卡中都会有一些实心方块,这是无法通过的。有一些不同颜色的方块;这些可以放置在底部边框上、放置在实心方块上或放置在其他块(不同颜色)上。大多数关卡尺寸为 8x8 或更小。

1)您可以采取的唯一操作是将块向左或向右滑动。每经过一个方块的方格都算作一次移动。

2)有重力。如果在滑动一个块后,它不再停留在实心方块或另一个块上,它就会下落,直到它停留在另一个块、实心方块或底部边框上。请注意,您将无法再次举起它。

3)只要两个或多个相同颜色的块接触,它们就会消失。请注意,链条是可能的:如果支撑块消失,位于其上的块将会掉落,这可能导致更多相同颜色的块接触并因此消失。

4)目标是在最少的移动次数内使所有方块消失。每个级别都有一个“标准分数”,告诉您最少的移动次数。(在最初的 PalmOS 游戏中,“标准分数”不一定是最低的,但在我这些天玩的 Android 版本中,它是最低的。)

以下是 SourceForge 项目,其中包含该游戏 PalmOS 版本的源代码:

http://sourceforge.net/projects/vexed/

我是一名经验丰富的软件开发人员,但我还没有真正做过任何人工智能之类的工作(寻路、解决问题等),所以我正在寻求建议来指引我正确的方向。

目前,我可以看到两个基本策略可供我追求:

0) 只需编写一个强力求解器,可能用 C 语言来提高速度,它会遍历每个游戏的所有可能的解决方案,并返回所有解决方案的列表,首先是最好的解决方案。这是一个合理的方法,还是可能的移动总数会使这个过程太慢?我认为不存在大于 10x10 的关卡。

1)学习一些人工智能算法,并以巧妙的方式应用它们来解决问题,可能使用Python。

请注意,PalmOS Vexed 的源代码包含一个求解器。据作者介绍,“求解器使用 A* 和剪枝启发法来寻找解决方案。”

http://www.scottlu.com/Content/Vexed.html

因此,我可以采取的一种策略是研究 A* 算法,然后研究现有求解器的 C++ 代码,并尝试从中学习。

我将使用 Python 和 C 标签来标记它,但如果您认为我应该使用其他东西,请进行推销,我会考虑它!

这是“Variety 25 Pack”中某个关卡的 ASCII 艺术;48级,“黑暗领主”。我能够解决大多数关卡,但这一关让我很烦恼。这个关卡的标准分数是25步,但我还没有完全解决它!

__________
|## g####|
|## # b##|
|## # p##|
|#g   ###|
|bp   ###|
|p# p g  |
==========
Run Code Online (Sandbox Code Playgroud)

在这张图中,边框是下划线、竖线和等号字符。填充的方块是“#”。开放空间是空格字符。彩色块是“g”(绿色)、“b”(蓝色)和“p”(紫色)。 …

c python artificial-intelligence solver game-ai

2
推荐指数
1
解决办法
1262
查看次数

敌人出现在5号球员机会1后面

我写了一个脚本让敌人出现在玩家后面,每3分钟有5次机会,我已经把五分之一的机会改为一次机会进行测试,但我不确定是否有用.

我知道如何将敌人放在玩家身后,但不会有机会获得1对5.

我已经尝试过1到5之间的随机数.如果随机数等于1,他必须产生敌人,否则不会.

这是代码:

using UnityEngine;
using System.Collections;
public class MainEnemy : MonoBehaviour
{
    public GameObject Main;
    public GameObject Holder;
    public Transform player;
    public Transform FPSController;
    bool wantPosition;
    bool appear;
    float timer;
    Vector3 temp;
    // Use this for initialization

    void Start()
    {
        wantPosition = true;
        appear = false;
        temp = new Vector3(0, 0, 0);
        timer = 20;// 180;
    }

    // Update is called once per frame
    void Update()
    {
        Appear();
    }

    Vector3 GetPosition()
    {
        Debug.Log("Hij doet het getposition");
        float px …
Run Code Online (Sandbox Code Playgroud)

c# 3d game-ai unity-game-engine

2
推荐指数
1
解决办法
119
查看次数

Lode Runner 中的 AI 寻路

我正在实施 Lode Runner 的一个版本(这个版本),但我不确定如何重现小兵合作以逼迫玩家的效果,可以使用 A* 来完成,还是有更好的方法?是否有更好的算法来实现仆从(例如群体)之间的协作,或者最好的解决方案是简单地为每个人单独应用一个算法?

artificial-intelligence path-finding game-ai

1
推荐指数
1
解决办法
2056
查看次数

让我的敌人走向我的玩家C++

我想让我Enemy搬到我家Player.

我知道的事情:

  • 玩家的位置
  • Enemie`'的位置
  • 敌人的速度

我需要做的事情:

  • 了解玩家的方向,让敌人移动

所以我认为我需要做的是根据球员的位置"规范化"敌人的位置,这样我就知道要去哪里了,两者都有基于的位置Vector2f.

这就是我在敌人身上的代码:

void Enemy::Move()
{
    //cout << "Move" << endl;

    // Make movement
    Vector2f playerPosition = EntityManager::Instance().player.GetPosition();
    Vector2f thisPosition;
    thisPosition.x = xPos;
    thisPosition.y = yPos;
    //Vector2f direction = normalize(playerPosition - thisPosition);

    speed = 5;
    //EntityManager::Instance().enemy.enemyVisual.move(speed * direction);
}

Vector2f normalize(const Vector2f& source)
{
    float length = sqrt((source.x * source.x) + (source.y * source.y));
    if (length != 0)
        return Vector2f(source.x / length, source.y / length);
    else
        return source; …
Run Code Online (Sandbox Code Playgroud)

c++ game-ai sfml

0
推荐指数
1
解决办法
1392
查看次数