brutalmaze/client-examples/BrutalmazeClient.cs

105 lines
2.5 KiB
C#

using System;
using System.Text;
using System.Net.Sockets;
namespace BrutalmazeClient
{
class Program
{
static void Main(string[] args)
{
const string host = "localhost";
const int port = 42069;
Socket client_socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
client_socket.Connect(host, port);
Random rnd = new Random();
int recv, sent;
byte[] buff = new byte[1000];
byte[] query;
string[] matrix = new string[100];
const int MAGIC = 42; // For escape
string l, data, l1;
int sz, nl;
int nh, ne, nb, score;
char hC;
int hX, hY, hA, canAtk, canReg;
int prevX = 1234, prevY = 5678;
int dir = 0, deg = 0, atk = 1;
int needEsc = 0;
while (42 < 420)
{
try
{
recv = client_socket.Receive(buff, 7, 0);
}
catch (SocketException e)
{
Console.WriteLine(e.ToString());
break;
}
l = Encoding.ASCII.GetString(buff, 0, 7);
sz = Int32.Parse(l);
if (sz == 0)
break;
recv = client_socket.Receive(buff, sz, 0);
data = Encoding.ASCII.GetString(buff, 0, sz);
// Standardize Data
nl = 0;
l1 = data.Split('\n')[nl];
nh = Int32.Parse(l1.Split(' ')[0]);
ne = Int32.Parse(l1.Split(' ')[1]);
nb = Int32.Parse(l1.Split(' ')[2]);
score = Int32.Parse(l1.Split(' ')[3]);
for (int i = 0; i < nh; ++i, ++nl)
matrix[i] = data.Split('\n')[i + 1];
l1 = data.Split('\n')[++nl];
hC = Char.Parse(l1.Split(' ')[0]);
hX = Int32.Parse(l1.Split(' ')[1]);
hY = Int32.Parse(l1.Split(' ')[2]);
hA = Int32.Parse(l1.Split(' ')[3]);
canAtk = Int32.Parse(l1.Split(' ')[4]);
canReg = Int32.Parse(l1.Split(' ')[5]);
for(int i = 1; i <= ne; ++i, ++nl)
{
}
for(int i = 1; i <= nb; ++i, ++nl)
{
}
// Process
if (needEsc == 0)
{
dir = 0;
if (prevX == hX && prevY == hY)
{
int matX = hX / 100, matY = hY / 100;
if (matrix[matY - 1][matX + 2] == '0' && matrix[matY - 1][matX - 2] == '1')
{
dir = 5;
needEsc = 1;
}
if (matrix[matY - 1][matX + 2] == '1' && matrix[matY + 1][matX - 2] == '0')
{
dir = 7;
needEsc = 1;
}
}
}
else
{
needEsc = (needEsc + 1) % MAGIC;
}
deg = rnd.Next(-4, 5) * 10;
atk = rnd.Next(1, 1);
query = Encoding.ASCII.GetBytes(dir.ToString() + " " + deg.ToString() + " " + atk.ToString());
sent = client_socket.Send(query);
prevX = hX;
prevY = hY;
}
client_socket.Shutdown(SocketShutdown.Both);
client_socket.Close();
}
}
}