FS 05 /HOW MAKE IT: very shortly PICTORIAL GUIDE after GOMOKU ENGINE code
go on: < previous page this page 12/16more delay now next page >


game board
summary

flagx add ten
flagx values
M+ in line /001
M+ in line /002
M+ in line /003
M+ in line /004
LastMove /001
LastMove /002
predict low now
predict high now
2d delay, dilay
more delay now
dilay +, delay +
three: better end
strategy FS05

summary

Engine use filter with "flagx" array and special values (delay, dilay, CC, MC ...) separate to now free array "x_away". More about "flagx": see page 02, about "delay" etc.: see pages FS03 (19)




In array "x_away" engine search sequences of signs according the "more delay" rules in all differrent directions. More "x_away" values inside one sequence engine add to one value and write to special positions in "more delay" sequence in now free array "pred_x".




Rules (sequences of signs) for searching (from left to right) "more delay". On right side is marked (violet colour) squares, where engine read and add more "x_away" values. In white frames it makes no odds on order of signs.




Rules for write sum of values (from "x_away") to array "pred_x". Positions of write is marked (violet).
About exceptions (squares in white frames): see pages FS03 (25)





Sample with "more delay". Engine reduce "x_away" values 100 and 10 on values 1.




Next sample. See on "flagx" value 198. Marked two different direction "dilay" sequences in one square. In "x_away" array therefore is value 2.
Engine use "more delay" for defend. In all samples of this page engine is second (O) player.





examples in C++
read "flagx" values , write "x_away" values and count values:
//...
if (flagx[][] == 197) x_away[][] = 1, dilCx++;  //dilay (C)         
if (flagx[][] == 198) x_away[][] = 2, dillCx++;  //dilax (C) and dilay (C)
if (flagx[][] == 199) x_away[][] = 1, delCx++;  //delay (C)
if ((flagx[][] > 199) && (flagx[][] < 1000)) x_away[][] = 1, xCC++;  //(C + C)  
if (flagx[][] == 1097) x_away[][] = 10, dilMx++;  //dilay (M)
if (flagx[][] == 1098) x_away[][] = 100, delMx++;  //delay (M)
if (flagx[][] == 1099) x_away[][] = 200, dellMx++;  //delay (M) and delay (M)
if ((flagx[][] > 1099) && (flagx[][] < 2000)) x_away[][] = 100, countMC++;  //(M + C)
if (flagx[][] > 1999) x_away[][] = 1000, countMMx++;  //(M + M)
//...
convert values:
//...
if ((sum_lagx > 0) && (sum_lagx < 1000)) {
  xshift = ((sum_lagx % 10) + ((sum_lagx / 10) % 10) + (sum_lagx / 100));
  }
//sample 123: 1 + 2 + 3 = 6
//...
use "more delay" to defend, engine are second (O) player:
//...
if (plusx < pred_x[][]) plusx = pred_x[][];  //maximal "more delay" value
if (xmax < flagx[][]) xmax = flagx[][];  //maximal "flagx" value
//...

//special reserves:
//If who is zero, engine are second (O) player.
//---------------------------------------------
//baco = 0;
//if((who == 0) && (plusx > 1) && (omax < 1097) && (xmax > 196) && (xmax < 2000)) {
//  if((dilCo + dillCo + delCo + oCC) == 0)) baco = 1;
//  }   
//if((who == 0) && (plusx > 1 && (omax < 1097)) && (xmax > 1096) && (xmax < 2000)) {
//  if(((dilCo + dillCo + delCo + oCC) > 0)) {
//    if((dilMx + delMx + dellMx + countMCx) > 0) baco = 2;
//    }
//  }
//if((who == 0) && (plusx > 1) && (omax < 1098) && (xmax > 1097) && (xmax < 2000)) {
//  if((dilMo > 0) && ((delMx + dellMx + countMCx) > 0))  baco = 2;
//  }

//...
//sumo = 0;
//if((baco == 1) && (pred_x[][] == plusx) {
//  if((sumo == 0) && (flagx[][] > 1099)) flagx[][] = 1100, sumo = 1;
//  if((sumo == 0) && (flagx[][] == 1099)) flagx[][] = 1100, sumo = 1;
//  if((sumo == 0) && (flagx[][] == 1097)) flagx[][] = 1100, sumo = 1;
//  if((sumo == 0) && (o_plus[][] > 999)) flago[][] = 1100, sumo = 1;  //LastMove
//  if((sumo == 0) && (flago[][] > 999)) flago[][] = 1100, sumo = 1;
//  if((sumo == 0) && (flagx[][] > 199) && (flagx[][] < 1000)) flagx[][] = 1100, sumo = 1;
//  if((sumo == 0) && (flagx[][] == 198)) flagx[][] = 1100, sumo = 1;
//  if((sumo == 0) && (flago[][] > 99)) flago[][] = 1100, sumo = 1;
//  if(sumo == 0) flagx[][] = 1100, sumo = 1;
//  }
//if((baco == 2) && (pred_x[][] == plusx) {
//  if((sumo == 0) && (flagx[][] > 1099)) flagx[][] = 1100, sumo = 1;
//  if((sumo == 0) && (flagx[][] == 1099)) flagx[][] = 1100, sumo = 1;
//  if((sumo == 0) && (flagx[][] == 1097)) flagx[][] = 1100, sumo = 1;
//  if((sumo == 0) && (o_plus[][] > 999)) flago[][] = 1100, sumo = 1;  //LastMove
//  if((sumo == 0) && (flago[][] > 999)) flago[][] = 1100, sumo = 1;
//  if((sumo == 0) && (flago[][] == 198)) flago[][] = 1100, sumo = 1;
//  if((sumo == 0) && (flago[][] == 197)) flago[][] = 1100, sumo = 1
//  if((sumo == 0) && (flago[][] > 99)) flago[][] = 1100, sumo = 1;
//  if((sumo == 0) flagx[][] = 1100, sumo = 1; 
//  }
//...
go on: < previous page next page >
FS03: alike theme FREE SECTOR, 2016 (free alliance of developers Pixoria gomoku plug-in engines) page 12/16