4conq/Strategy/main.cpp
szdytom 02eadae4ca
Add framework
Signed-off-by: szdytom <szdytom@qq.com>
2024-01-30 20:46:18 +08:00

71 lines
1.6 KiB
C++

#include <cstdio>
#include <format>
#include <string>
#include <cstdlib>
#include <sstream>
#include <cstring>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "Strategy.h"
using namespace std;
int main(int argc, char **argv) {
int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockfd == -1) {
perror("socket()");
return -1;
}
sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(3030);
addr.sin_addr.s_addr = inet_addr(argc >= 2 ? argv[1] : "127.0.0.1");
if (connect(sockfd, (sockaddr*)&addr, sizeof(addr)) == -1) {
perror("connect()");
return -1;
}
fprintf(stderr, "Connected to server.\n");
FILE *fserverr = fdopen(sockfd, "r");
FILE *fserverw = fdopen(dup(sockfd), "w");
static char buf[128];
while (true) {
if (fscanf(fserverr, "%s", buf) == -1)
break;
string method(buf);
if (method == "init") {
int n;
fscanf(fserverr, "%d", &n);
vector<vector<int>> B(n, vector<int>(n));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j)
fscanf(fserverr, "%d", &B[i][j]);
}
initStrategy(n, B);
fprintf(stderr, "init() called\n");
} else if (method == "getMove") {
int lstX, lstY;
fscanf(fserverr, "%d %d", &lstX, &lstY);
fprintf(stderr, "getMove(%d, %d) called\n", lstX, lstY);
auto [x, y] = getMove(lstX, lstY);
if (fprintf(fserverw, "%d %d\n", x, y) == -1) {
perror("send(getMove)");
return -1;
}
fflush(fserverw);
fprintf(stderr, "getMove(%d, %d): (%d, %d)\n", lstX, lstY, x, y);
} else {
fprintf(stderr, "Unknown method: %s\n", method.c_str());
return -1;
}
}
close(sockfd);
return 0;
}