Tworzenie i testowanie własnego bota, cz. 2: Testowanie

03.11.2012 - Kuba Kowalski
Trudność

Komunikaty testowe

Sam zapis komunikacji bota z grą oraz treści ewentualnych systemowych komunikatów o błędach są zazwyczaj niewystarczającą informacją do sprawnego wykrycia usterki. Testując standardowe programy albo korzysta się ze specjalistycznych debuggerów dołączonych do środowisk programistycznych albo wypisuje się na ekran komunikaty informujące o stanie programu. Komunikaty testowe stanowią Meridiusowy odpowiednik drugiego z wymienionych sposobów.

Komunikaty testowe są przekazywane za pomocą funkcji systemowej #PRINT. Aby ją prawidłowo wywołać, należy wypisać na ekran (czyli standardowe wyjście - tak samo jak w przypadku pozostałych rodzajów komunikatów) napis #PRINT i po spacji dowolny ciag znaków zakończony znakiem nowej linii. Tak przekazane informacje zostaną wyświetlone podczas wizualizacji rozgrywki testowej (w przeciwnym wypadku są pomijane). Uwaga - polskie znaki diakrytyczne mogą nie zostać prawidłowo wyświetlone.

Przykład zastosowania

Poniżej znajdują się przykładowe kody źródłowe z poprzedniej części artykułu rozszerzone o funkcję wypisującą co turę listę wolnych pól.


Python
Pokaż/ukryj kod źródłowy
1
2
3
4
5
6
7
8
9
10
11
12
import random
 
free = range(9)
while True:
   x, y = map(int, raw_input("LastMove\n").split())
   if x != -1:
      free.remove(x*3 + y)
   print "#PRINT Pozostale wolne pola:", free
   move = random.choice(free)
   free.remove(move)
   print "PlaceSymbol", move / 3, move % 3
   print "#END"


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
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int main ()
{
   int x, y;
   srand ( time(NULL) );
   vector<int> free (9, 0);
   for (int i = 0; i < 8; i++)
      free[i] = i;
 
   while (true)
   {
      cout << "LastMove" << endl;
      cin >> x >> y;
      if (x != -1)
         free.erase(remove(free.begin(), free.end(), x*3+y), free.end());
 
      cout << "#PRINT Pozostale wolne pola: [";
      for (int i = 0; i< free.size(); i++)
         cout << " " << free[i];
      cout << " ]" <<  endl;
      int move = free[rand()%free.size()];
      free.erase(remove(free.begin(), free.end(), move), free.end());
      cout << "PlaceSymbol " << move / 3 << " " << move % 3 << endl << "#END" << endl;
   }
}

0
Twoja ocena: Brak

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com