Ejemplo n.º 1
0
        /// <summary>
        /// In this constructor main cycle is performed
        /// </summary>
        /// <param name="fold">path to game folder</param>
        /// <param name="player">player symbol</param>
        /// <param name="time">permited time</param>
        public Program(string fold, CellState player, int time)
        {
            start = DateTime.Now;

            Field field = new Field(fold);
            int delta = 0;
            # if DEBUG
            delta = (new Random()).Next(Field.SIZE);//col shift, makes game more different
            #endif
            Solution root = new Solution(field, Solution.invertCell(player));
            for (int i = 0; i < Field.SIZE; i++) {
                Solution buf = new Solution(root, (i + delta) % Field.SIZE);
                branch[i] = buf;
                if (!buf.isFinalized)
                    que.Enqueue(buf);
            }

            while ((DateTime.Now - start).TotalMilliseconds + 300 < time && que.Count != 0)//main cycle
                Solve(que.Dequeue());

            Solution max = branch[0];

            for (int i = 1; i < Field.SIZE; i++)
                if (branch[i] != null)
                    max = branch[i].isGreater(max);

            int turn = Directory.GetFiles(fold).Length / 2 + 1;
            string path = fold + (player == CellState.Cross ? "X" : "O") + turn.ToString() + ".txt";
            File.WriteAllLines(path, new String[] { max.getTurn() });
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Calculates next branches and adds them to a queue
 /// </summary>
 /// <param name="solve">root of new branches</param>
 void Solve(Solution solve)
 {
     for (int i = 0; i < Field.SIZE; i++) {
         Solution buf = new Solution(solve, i);
         if (!buf.isFinalized)
             que.Enqueue(buf);
     }
 }