summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Smeding <tom.smeding@gmail.com>2019-09-21 19:49:56 +0200
committerTom Smeding <tom.smeding@gmail.com>2019-09-21 19:49:56 +0200
commit21ef944a87e0116713e73945469801f81d9df374 (patch)
tree1b99753ff218246d0142e0475883521aef81155a
parent048540a5db19ef5d116ffe27881c68c4a0fdf948 (diff)
Interactively set parameter to AI in interactor
-rw-r--r--interactor/index.html20
-rwxr-xr-xinteractor/interactor.js25
-rw-r--r--player_mmbias.cpp10
3 files changed, 48 insertions, 7 deletions
diff --git a/interactor/index.html b/interactor/index.html
index 4593974..46df00f 100644
--- a/interactor/index.html
+++ b/interactor/index.html
@@ -10,7 +10,7 @@ var CVSH=500;
var COLOURS=["#00F","#F00","#0CC"];
-var socket=io();
+var socket=io(location.href);
var CELLSZ=~~(CVSH/(H+1));
var CVSW=CELLSZ*(W+1);
var CELL0X=~~(CVSW/2-W/2*CELLSZ)+.5,CELL0Y=~~(CVSH/2-H/2*CELLSZ)+.5;
@@ -184,6 +184,11 @@ function getusermove(){
setstatustext("<b>Your turn!</b>");
}
+function newgameparameter(){
+ var parameter=document.getElementById("parameter").value;
+ location.href=location.pathname+"?parameter="+encodeURIComponent(parameter);
+}
+
function setstatustext(text){
var elem=document.getElementById("statustext");
elem.innerHTML=text;
@@ -192,6 +197,11 @@ function setstatustext(text){
function assert(cond){if(!cond)throw new Error("Assertion failed");}
+socket.on("ainame",function(name){
+ var span=document.getElementById("ai_name");
+ span.innerHTML="";
+ span.appendChild(document.createTextNode(name));
+});
socket.on("emptyboard",function(){
bd=emptyboard();
});
@@ -223,6 +233,10 @@ socket.on("win",function(player){
<body onload="init()">
<h3>Interactor for Chain Reaction</h3>
<canvas id="cvs"></canvas><br>
-<span id="statustext"></span>
+<span id="statustext"></span><br>
+<br>
+Current AI: <span id="ai_name"></span><br>
+Parameter setting: <input id="parameter" type="text">
+<input type="button" onclick="newgameparameter()" value="New game with this parameter">
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/interactor/interactor.js b/interactor/interactor.js
index 64684ae..ae38b29 100755
--- a/interactor/interactor.js
+++ b/interactor/interactor.js
@@ -69,7 +69,26 @@ function stopproc(proc){
mkdirp("logs");
+function validparameterchar(c){
+ return 48<=c.charCodeAt(0)&&c.charCodeAt(0)<58;
+}
+
io.on("connection",function(conn){
+ // TODO: make nicer
+ var unsafe_parameter=conn.request._query.parameter;
+ var aicmd_here=aicmd;
+ if(unsafe_parameter!=null){
+ var parameter="";
+ for(var i=0;i<unsafe_parameter.length;i++){
+ if(validparameterchar(unsafe_parameter[i])){
+ parameter+=unsafe_parameter[i];
+ }
+ }
+ if(parameter!=""){
+ aicmd_here+=" "+parameter;
+ }
+ }
+
var id=uniqid();
console.log("New IO connection id "+id);
var pingtimeout=null;
@@ -91,6 +110,8 @@ io.on("connection",function(conn){
fs.writeSync(logfile,s+"\n");
};
+ conn.emit("ainame",aicmd_here);
+
conn.on("disconnect",function(){
console.log("Disconnect id "+id);
log("Ending log on disconnect (id "+id+")");
@@ -133,11 +154,11 @@ io.on("connection",function(conn){
});
- var proc=spawn("sh",["-c",aicmd],{
+ var proc=spawn("sh",["-c",aicmd_here],{
stdio:["pipe","pipe",process.stderr]
});
childpids.push(proc.pid);
- log("Process '"+aicmd+"' started with pid "+proc.pid+", initiated by ip "+conn.request.connection.remoteAddress);
+ log("Process '"+aicmd_here+"' started with pid "+proc.pid+", initiated by ip "+conn.request.connection.remoteAddress);
var buffer="";
proc.stdout.on("data",function(data){
var idx,line,mv,win;
diff --git a/player_mmbias.cpp b/player_mmbias.cpp
index 3eb6945..01decaa 100644
--- a/player_mmbias.cpp
+++ b/player_mmbias.cpp
@@ -53,7 +53,7 @@ Move calcmove(Board &bd,int me){
return Move(scores[(nposs-1)*takeperc/100].i);
}
-int main(int,char **argv){
+int main(int argc,char **argv){
struct timeval tv;
gettimeofday(&tv,NULL);
srand(tv.tv_sec*1000000+tv.tv_usec);
@@ -62,7 +62,13 @@ int main(int,char **argv){
const char *p=argv[0]+len-1;
while(isdigit(*p))p--;
p++;
- takeperc=strtol(p,NULL,10);
+ if(*p!='\0'){
+ takeperc=strtol(p,NULL,10);
+ } else {
+ if(argc==2)takeperc=strtol(argv[1],NULL,10);
+ else takeperc=0;
+ }
+ takeperc=min(100,max(0,takeperc));
cerr<<"Using takeperc "<<takeperc<<endl;
}