我正在制作游戏,我想创建一个可以模拟按键的人工智能机器人,当它失败时重试并记录上次失败并纠正其自我。昨晚我坐下来写这段代码,但我根本不工作。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Script : MonoBehaviour {
int[] FirstTry = new int[3];
int[] SecondTry = new int[3];
int[] ThirdTry = new int[3];
int[] FourthTry = new int[3];
int[] FifthTry = new int[3];
int[] SixthTry = new int[3];
int FRT = 0;
int FT = 0;
int ST = 0;
int TT = 0;
int FFT = 0;
int SXT = 0;
public int W = 1;
public int A = 2;
public int S = 3;
public int D = 4;
int test;
int numbTests = 6;
float ev2Sec = 2;
float regenTime = 2;
IList hi;
public Vector3 startTrans;
public bool isRunning = true;
// Use this for initialization
void Start () {
startTrans = transform.position;
}
// Update is called once per frame
void Update () {
ev2Sec -= Time.deltaTime;
if (ev2Sec < 0) {
if (numbTests > 0) {
test = Random.Range(0, 4);
if (numbTests == 3) {
foreach (int x in FirstTry)
{
if (x.Equals (test))
{
test = Random.Range(0, 4);
}
}
}
else if (numbTests == 2) {
foreach (int x in SecondTry)
{
if (x.Equals (test))
{
test = Random.Range(0, 4);
}
}
}
else if (numbTests == 4) {
foreach (int x in FifthTry)
{
if (x.Equals (test))
{
test = Random.Range(0, 4);
}
}
}
else if (numbTests == 5) {
foreach (int x in SixthTry)
{
if (x.Equals (test))
{
test = Random.Range(0, 4);
}
}
}
else if (numbTests == 1) {
foreach (int x in ThirdTry)
{
if (x.Equals (test))
{
test = Random.Range(0, 4);
}
}
}
else if (numbTests == 0) {
foreach (int x in FourthTry)
{
if (x.Equals (test))
{
test = Random.Range(0, 4);
}
}
}
if (test == 1) {
transform.position = Vector3.MoveTowards(transform.position, transform.forward * 10, 10);
ev2Sec = regenTime;
numbTests -= 1;
}
if (test == 2) {
transform.position = Vector3.MoveTowards(transform.position, transform.right * -10, 10);
ev2Sec = regenTime;
numbTests -= 1;
}
if (test == 3) {
transform.position = Vector3.MoveTowards(transform.position, transform.forward * -10, 10);
numbTests -= 1;
ev2Sec = regenTime;
}
if (test == 4) {
transform.position = Vector3.MoveTowards(transform.position, transform.right * 10, 10);
ev2Sec = regenTime;
numbTests -= 1;
}
}
else {
numbTests = 6;
}
}
}
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.tag == "Ground") {
isRunning = false;
print("NumbTest" + numbTests);
print ("GETTINGCALLED");
transform.position = startTrans;
print ("First" + FT);
print ("Second" + ST);
print ("Third" + TT);
print ("Fourth" + FRT);
print ("Fifth" + FFT);
print ("Sixth" + SXT);
if (numbTests == 0)
if (FRT == 0) {
isRunning = true;
FourthTry[0] = test;
FRT += 1;
numbTests = 6;
}
else {
FRT += 1;
print (FRT);
isRunning = true;
FourthTry[FRT] = test;
print (FourthTry);
numbTests = 6;
}
if (numbTests == 1)
if (TT == 0) {
isRunning = true;
ThirdTry[0] = test;
TT += 1;
numbTests = 6;
}
else {
TT += 1;
isRunning = true;
ThirdTry[TT] = test;
numbTests = 6;
}
if (numbTests == 2)
if (ST == 0) {
isRunning = true;
SecondTry[0] = test;
ST += 1;
numbTests = 6;
}
else {
ST += 1;
isRunning = true;
SecondTry[ST] = test;
numbTests = 6;
}
if (numbTests == 3)
if (FT == 0) {
isRunning = true;
FirstTry[0] = test;
FT += 1;
numbTests = 6;
}
else {
FT += 1;
isRunning = true;
FirstTry[FT] = test;
numbTests = 6;
}
if (numbTests == 4)
if (FFT == 0) {
print ("SOMETHING");
isRunning = true;
FifthTry[0] = test;
FFT += 1;
numbTests = 6;
}
else {
print ("SOMETHINGZZZZ");
FFT += 1;
isRunning = true;
FifthTry[FFT] = test;
numbTests = 6;
}
if (numbTests == 5)
if (SXT == 0) {
isRunning = true;
SixthTry[0] = test;
SXT += 1;
numbTests = 6;
}
else {
SXT += 1;
isRunning = true;
SixthTry[SXT] = test;
numbTests = 6;
}
}
}
}
我认为这样可行但我只是给了我随机的东西,我没想到同样的密钥一遍又一遍地重复。
我试图通过这个脚本实现的目标是,我有6个动作,每次动作都会从WASD中选择,如果玩家从多维数据集块中掉出来并掉到带有地面标签的立方体上,那么最后一个按下的键将添加到数组中。此数组决定您所在的移动。因此,如果机器人按下A on Move .no 3.数字2将被添加到ThirdTry数组。然后当生成随机数时,如果它检查数组是否存在随机数,如果是,则创建一个新的随机数...
是的,我知道。我非常努力地尝试过,这就是我和AI和机器人一起使用的。任何人都可以通过改进我已有的代码或者他们将如何执行此过程的示例代码或甚至是关于此主题的教程来帮助我。