Dokumentacja gry Kółko i Krzyżyk

04.11.2012 - Kuba Kowalski
Trudność

Przykładowe boty

Poniżej, w czterech językach programowania, zamieszczone zostały kody źródłowe przykładowego bota, który potrafi grać we wszystkich trybach rozgrywki. Nie jest to najprostrzy bot program jaki można napisać do tej gry, pokazuje on jednak w pełny sposób zasady działania systemu i możliwe sposoby obsługi protokołu komunikacji. Bot ten jest dostępny w systemie pod nazwą KiK_DocumentationBot.

Strategia działania przedstawionego bota jest następująca:

  1. Po rozpoczęciu gry odpytuje o wartości parametrów początkowych.
  2. Następnie na początku każdej tury pyta o zawartość całej planszy.
  3. Dopóki nie trafi na puste pole losuje współrzędne potencjalnego celu.
  4. Gdy puste pole zostało odnalezione wypisuje (jako komunikat testowy) za którym razem ta sztuka się udała, stawia tam symbol i kończy turę.
Python
Pokaż/ukryj kod źródłowy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import random
 
n, k = map(int, raw_input("Params\n").split())
print "#PRINT Parametry rozgrywki to", n, k
 
while True:
   board = []
   print "Board"
   for y in range(n):
      board.append(raw_input().split())
   print "#PRINT Wczytana plansza to", board
 
   i = 0
   while True:
      i+=1
      x = random.randint(0, n-1)
      y = random.randint(0, n-1)
      if board[y][x] == "-":
         print "#PRINT Trafiono puste pole za", i, "podejsciem."
         print "PlaceSymbol", x, y
         print "#END"
         break


C++
Pokaż/ukryj kod źródłowy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <vector>
#include <string>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int main ()
{
   srand ( time(NULL) );
   cout << "Params" << endl;
   int n, k;
   string row;
   cin >> n >> k;
   getline(cin, row);
   cout << "#PRINT Parametry rozgrywki to " << n << " " << k << endl;
 
   while (true)
   {
      vector<vector<char> > board(n, vector<char>(n));
      cout << "Board" << endl;
      for (int y = 0; y < n; y++)
      {
         string row;
         getline(cin, row);
         for (int x = 0; x < n; x++)
            board[y][x] = row[2*x];
      }
      cout << "#PRINT Wczytana plansza to";
      for (int y = 0; y < n; y++)
      {
         cout << " [";
         for (int x = 0; x < n; x++)
            cout << " " << board[y][x];
         cout << " ]";
      }
      cout << endl;
      
      int i = 0;
      while(true)
      {
         i++;
         int x = rand() % n;
         int y = rand() % n;
         if (board[y][x]=='-')
         {
            cout << "#PRINT Trafiono puste pole za " << i << " podejsciem." << endl;
            cout << "PlaceSymbol " << x << " " << y << endl << "#END" << endl;
            break;
         }
      }
   }
}


C#
Pokaż/ukryj kod źródłowy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Collections.Generic;
 
namespace TTTDocumentationBot
{
    class Program
    {
        static void Main(string[] args)
        {
            var rand = new Random();
            Console.WriteLine("Params");
            var param = Console.ReadLine().Split();
            var n = int.Parse(param[0]);
            var k = int.Parse(param[0]);
            Console.WriteLine("#PRINT Parametry rozgrywki to {0} {1}", n, k);
 
            while (true)
            {
                var board = new List<string[]>();
                Console.WriteLine("Board");
                for (var y = 0; y < n; y++)
                    board.Add(Console.ReadLine().Split());
                Console.Write("#PRINT Wczytana plansza to");
                foreach (var row in board)
                {
                    Console.Write(" [");
                    foreach (var s in row)
                        Console.Write(" " + s);
                    Console.Write(" ]");
                }
                Console.WriteLine();
 
                var i = 0;
                while (true)
                {
                    i++;
                    var x = rand.Next(n);
                    var y = rand.Next(n);
 
                    if (board[y][x]=="-")
                    {
                        Console.WriteLine("#PRINT Trafiono puste pole za {0} podejsciem.", i);
                        Console.WriteLine("PlaceSymbol {0} {1}", x, y);
                        Console.WriteLine("#END");
                        break;
                    }
                }
            }
        }
    }
}


Java
Pokaż/ukryj kod źródłowy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
 
public class program
{
   public static void main(String args[])
   {
        Scanner input = new Scanner(System.in);
        Random rand = new Random();
 
        System.out.println("Params");
        String[] params = input.nextLine().split(" ");
        int n = Integer.parseInt(params[0]);
        int k = Integer.parseInt(params[1]);
        System.out.println("#PRINT Parametry rozgrywki to " + n + " " + k);
 
        while (true)
        {
            ArrayList<ArrayList<String>> board = new ArrayList<ArrayList<String>>();
            System.out.println("Board");
            for (int y = 0; y < n; y++)
                board.add(new ArrayList<String>(Arrays.asList(input.nextLine().split(" "))));
            System.out.println("#PRINT Wczytana plansza to " + board);
 
            int i = 0;
            while (true)
            {
                i++;
                int x = rand.nextInt(n);
                int y = rand.nextInt(n);
                if ("-".equals(board.get(y).get(x)))
                {
                    System.out.println("#PRINT Trafiono puste pole za " + i + " podejsciem.");
                    System.out.println("PlaceSymbol " + x + " " + y);
                    System.out.println("#END");
                    break;
                }
            }
        }
    }
}

0
Twoja ocena: Brak

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com