我一直在精灵套件中制作游戏已有一段时间了.我添加了敌人,我想知道如何使用AI在地图上控制它们(就像在任何其他游戏中一样).
我想要的是敌人在TMX地图周围思考,根据随机数转向角落.我试图这样做,但遇到了很多问题.有谁知道任何可以帮助我的文章?我做了一些研究."PathFinding"和"A*"出现了,但有关于如何做的知道解释或示例代码.任何帮助将不胜感激.
我正在尝试为四连胜(或连接四或连接四)游戏实现 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) 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”(紫色)。 …
我写了一个脚本让敌人出现在玩家后面,每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) 我正在实施 Lode Runner 的一个版本(这个版本),但我不确定如何重现小兵合作以逼迫玩家的效果,可以使用 A* 来完成,还是有更好的方法?是否有更好的算法来实现仆从(例如群体)之间的协作,或者最好的解决方案是简单地为每个人单独应用一个算法?
我想让我Enemy搬到我家Player.
我知道的事情:
我需要做的事情:
所以我认为我需要做的是根据球员的位置"规范化"敌人的位置,这样我就知道要去哪里了,两者都有基于的位置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) game-ai ×6
c# ×2
path-finding ×2
3d ×1
c ×1
c++ ×1
ios ×1
minmax ×1
objective-c ×1
python ×1
sfml ×1
solver ×1
sprite-kit ×1