Внедрение Stockfish в UnityC#

Место общения программистов C#
Ответить
Anonymous
 Внедрение Stockfish в Unity

Сообщение Anonymous »

Я действительно изо всех сил пытаюсь реализовать stockfish в единстве с C #, я видел много людей, использующих стандартный ввод для чтения Stockfish. хотя моя программа зависнет, что бы я ни делал. (Сейчас я просто пытаюсь получить какую-либо информацию от вяленой рыбы, так что это довольно просто). Кто-нибудь может сказать мне, почему это зависает сразу после запуска? Большое спасибо. p.s. извините, если написал не туда.

Код: Выделить всё

using System.Collections.Generic;
using UnityEngine;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using General;
using System.Threading;

public class UCIExtension : MonoBehaviour
{
private Process stockfishProcess = new Process();
private StreamWriter inputWriter;
private StreamReader outputReader;

private bool engineActive = false;

public int moveTime;

List feed = new List();

public void Start()
{
//prepare and sync engine

engineActive = true;

// Path to the Stockfish executable
string stockfishPath = Application.dataPath + "/Tools/Stockfish_17_x86-32.exe";
// Start Stockfish process
stockfishProcess.StartInfo.FileName = stockfishPath;
stockfishProcess.StartInfo.UseShellExecute = false;
stockfishProcess.StartInfo.RedirectStandardInput = true;
stockfishProcess.StartInfo.RedirectStandardOutput = true;
stockfishProcess.StartInfo.CreateNoWindow = true;

stockfishProcess.Start();
inputWriter = stockfishProcess.StandardInput;
outputReader = stockfishProcess.StandardOutput;

UnityEngine.Debug.Log(RunCommand("d", ""));
}

private void OnOutputReceived(object sender, DataReceivedEventArgs e)
{
if (e.Data != null)
{
feed.Add(e.Data);
}
}

public async Task RunCommand(string command, string conditional)
{
inputWriter.WriteLine(command);
feed.Clear();

while(true)
{
if(feed.Count == 0) continue;

UnityEngine.Debug.Log(feed[feed.Count - 1]);
return;

}
}
Я пробовал асинхронные функции, задачи и множество различных способов кодирования, readline, readtoend, readtoendasync, readlineasync, различные команды и модели stockfish, а также однажды попробовал переделать сценарий. Я ожидал, что Stockfish будет правильно общаться с Unity и возвращать выходные данные, которые пишет Stockfish, он просто зависает.

Подробнее здесь: https://stackoverflow.com/questions/790 ... into-unity
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»