Dokumentacja gry Wumpus

23.04.2013 - Kuba Kowalski
Trudność

Przykładowe boty

Poniżej, w trzech językach programowania, zamieszczone zostały kody źródłowe przykładowego bota, który potrafi grać we wszystkie tryby rozgrywki. Jest to prosty losowy algorytm pokazujący zasady działania systemu i obsługę protokołu komunikacji. Bot ten jest dostępny w systemie pod nazwą Wum_DocumentationHero.

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

  1. Każdą turę bot rozpoczyna od pobrania informacji o perceptach.
  2. Jeśli stoi na polu ze złotem to je podnosi.
  3. Jeśli już trzyma złoto to w każdej turze ma 20% szans, że spróbuje wyjść z labiryntu
  4. Jeśli poczuje smród wumpusa to odpytuje o liczbę strzał i strzela z łuku z prawdopodobieństwem liczba_strzał * 10%.
  5. Jeśli uderzył o ścianę to obraca się w losowym kierunku (50% szans na każdą ze stron).
  6. W pozostałych przypadkach bot kieruje się na wprost z szansą 50%, a obraca się z prawdopodobieństwem 25% dla każdej ze stron.
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
23
24
25
26
27
28
import random
 
hasGold = False
while True:
   percepts = raw_input('Percepts\n')
   if 'G' in percepts:
      hasGold = True
      print 'Grab\n#END'
      continue
   elif hasGold and random.randint(1, 5) is 1:
      print 'Exit\n#END'
      continue
   elif 'S' in percepts and random.randint(1, 10) <= int(raw_input('Arrows\n')):
      print 'Shoot\n#END'
      continue
   elif 'b' in percepts:
      print 'TurnLeft' if random.randint(1, 2) is 1 else 'TurnRight'
      print '#END'
      continue
   
   d = random.randint(1, 4)
   if d <= 2:
      print 'Forward'
   elif d is 3:
      print 'TurnLeft'
   else:
      print 'TurnRight'
   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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
 
namespace WumDocumentationBot
{
    class Program
    {
        static void Main(string[] args)
        {
            var rand = new Random();
            var hasGold = false;
            
            while(true)
            {
                Console.WriteLine("Percepts");
                String percepts = Console.ReadLine();
 
                if (percepts.Contains("G"))
                {
                    hasGold = true;
                    Console.WriteLine("Grab\n#END");
                    continue;
                }
                else if (hasGold && rand.Next(5)==0)
                {
                    Console.WriteLine("Exit\n#END");
                    continue;
                }
                else if (percepts.Contains("S"))
                {
                    Console.WriteLine("Arrows");
                    if (rand.Next(10) < int.Parse(Console.ReadLine()))
                    {
                        Console.WriteLine("Shoot\n#END");
                        continue;
                    }
                }
                else if (percepts.Contains("b"))
                {
                    if (rand.Next(1)==0) Console.WriteLine("TurnLeft\n#END");
                    else Console.WriteLine("TurnRight\n#END");
                    continue;
                }
 
                int d = rand.Next(4);
                if (d < 2)
                    Console.WriteLine("Forward");
                else if (d == 2)
                    Console.WriteLine("TurnLeft");
                else
                    Console.WriteLine("TurnRight");
                Console.WriteLine("#END");
            }
        }
    }
}


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
44
45
46
47
48
49
50
51
52
53
54
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();
        boolean hasGold = false;
 
        while(true)
        {
            System.out.println("Percepts");
            String percepts = input.nextLine();
 
            if (percepts.contains("G"))
            {
                hasGold = true;
                System.out.println("Grab\n#END");
                continue;
            }
            else if (hasGold && rand.nextInt(5)==0)
            {
                System.out.println("Exit\n#END");
                continue;
            }
            else if (percepts.contains("S"))
            {
                System.out.println("Arrows");
                if (rand.nextInt(10) < Integer.parseInt(input.nextLine()))
                {
                    System.out.println("Shoot\n#END");
                    continue;
                }
            }
            else if (percepts.contains("b"))
            {
                if (rand.nextInt(1)==0) System.out.println("TurnLeft\n#END");
                else System.out.println("TurnRight\n#END");
                continue;
            }
 
            int d = rand.nextInt(4);
            if (d < 2)
                System.out.println("Forward");
            else if (d == 2)
                System.out.println("TurnLeft");
            else
                System.out.println("TurnRight");
            System.out.println("#END");
        }
   }
}

0
Twoja ocena: Brak

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com