Du bist nicht angemeldet.

Werbeanzeige

DeKugelschieber

Community-Fossil

Beiträge: 2 664

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

31

16.02.2015, 15:40

Ich bin heute Abend auch dabei :)
Gerade hier schon mal den Code angeguckt, sieht sehr übersichtlich aus und die erste iteration der KI muss ja kein Einstein werden ;)

domin

1x Contest-Sieger

  • Private Nachricht senden

32

16.02.2015, 22:03

Sind denn Gleitkommazahlen nun eigentlich komplett verboten oder wie muss ich den Kommentar zur "isqrt"-Methode verstehen?

C-/C++-Quelltext

1
2
//Sämtliche Spiellogik läuft mit ganzen Zahlen, da floating point Zahlen
//nicht immer und überall ganz definiert sind


Ansonsten sieht das Ganze schon sehr solide aus, werde auch mal mein Glück versuchen :)
Meine Projekte:
LightBulb, TurtleRun

Helmut

5x Contest-Sieger

  • »Helmut« ist der Autor dieses Themas

Beiträge: 691

Wohnort: Bielefeld

  • Private Nachricht senden

33

16.02.2015, 22:49

Der Kommentar soll nur verständlich machen, warum da eine sqrt Funktion mit Integerparametern ist:) float und double sind verboten, weil ich vermute, dass unterschiedliche Compiler unterschiedliche Ergebnisse mit Fließkommazahlen liefern würden.
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

KeksX

Community-Fossil

Beiträge: 2 137

Beruf: Game Designer

  • Private Nachricht senden

34

17.02.2015, 11:02

Naja, er versucht ja nur nicht zu verlieren. Ihn zu schlagen war das geringste Problem. Ich habe eher Angst und Bamme wenn ich daran denke, womit ihr kommen werdet!

Wird echt spannend, bin gespannt auf die erste Runde :)
WIP Website: kevinheese.de

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »KeksX« (17.02.2015, 11:14)


DeKugelschieber

Community-Fossil

Beiträge: 2 664

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

35

17.02.2015, 11:32

Mir geht CodeLite etwas auf die nerven, der akzeptiert keine [] bei mir ^^
Ich packs heute mal in eclipse, ist ja wurst da ich nur die Klasse senden muss.

TGGC

1x Rätselkönig

Beiträge: 1 813

Beruf: Software Entwickler

  • Private Nachricht senden

36

17.02.2015, 14:57

Leider funktioniert bei mir irgendwas nicht korekkt und es zeigt alle Prozentzahlen (CPU, LS und Std) als 0% an. Wenns erlaubt ist, wuerde ich mal kurz einen Beispielcode zeigen nur um zu wissen, ob man so ueberhaupt vorgehen darf.

Helmut

5x Contest-Sieger

  • »Helmut« ist der Autor dieses Themas

Beiträge: 691

Wohnort: Bielefeld

  • Private Nachricht senden

37

17.02.2015, 15:33

Also bei der Beispiel KI ist das mit den 0% normal, weil sie so wenig berechnet. Du kannst hier gerne Code posten, kannst mir aber auch was per PM schicken wenn du willst.
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

TGGC

1x Rätselkönig

Beiträge: 1 813

Beruf: Software Entwickler

  • Private Nachricht senden

38

17.02.2015, 15:41

Also meine Idee ginge in folgende Richtung. Ist nur ein Ansatz, theoretisch liesse sich das beliebig weit treiben. Die Frage ist halt, ob sowas akzeptabel ist, weil ich glaube man kann so jede single Threaded KI schlagen, wenn man sie 1:1 kopiert.

C-/C++-Quelltext

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
GameState StateBuffer[2];
volatile int ReadableState = -1;
volatile int ReadingState = -1;
volatile int BestNextMove[2] = {0, 0};
volatile int Calculated = 0;

void* ThreadedKI(void*)
{
    const int Tests = 5;
    int TestStep = 250;
    int KeyCombos[Tests] =
    {
        K_Right,
        K_Jump | K_Right,
        K_Jump,
        K_Left,
        K_Jump | K_Left,
    };
    GameState gsCur;
    GameState gsPre[Tests];
    int TestScores[Tests];
    int LastRead = 0;
    while (true)
    {
        if(ReadableState != -1)
        {
            ReadingState = ReadableState;

            gsCur = StateBuffer[ReadableState];
            LastRead = ReadableState;

            ReadingState = -1;
            ReadableState = -1;
            for(int i = 0; i < Tests; ++i)
            {
                gsPre[i] = gsCur;
                TestScores[i] = 0;
            }
        }
        for(int i = 0; i < Tests; ++i)
        {
            for(int j = 0; j < TestStep; ++j)
            {
                gsPre[i].Move(KeyCombos[i], 0, true);
            }
            TestScores[i] = gsPre[i].Players[0].Score - gsPre[i].Players[1].Score;
        }

        int BestScore = TestScores[0];
        int Next = 0;
        for(int i = 1; i < Tests; ++i)
        {
            if (BestScore < TestScores[i])
            {
                Next = i;
                BestScore = TestScores[i];
            }
        }
        if(ReadableState == -1)
        {
            BestNextMove[LastRead] = KeyCombos[Next];
            Calculated++;
        }
        while (Calculated > 0)
        {
            Next++;
        }
    }

    return 0;
}

class MyNicknameKI : public KI
{
public:
    MyNicknameKI()
    {
        Reset();
        BeginThread(ThreadedKI);
    }
    virtual const char* GetKIName() const
    {
        return "TGGC_Threaddemo";
    }
    virtual void Reset()
    {
        m_WriteState = 0;
    }
    virtual int CalculateNextStep(const GameState& GS)
    {
        while (Calculated < 1)
        {
            LittleNap();
        }
        int Next = BestNextMove[m_WriteState];
        m_WriteState = 1 - m_WriteState; 
        while (m_WriteState == ReadingState)
        {
            m_WriteState = 1 - m_WriteState; 
        }
        StateBuffer[m_WriteState] = GS;
        ReadableState = m_WriteState;
        Calculated = 0;
        return Next;
    }
    int m_WriteState;
};

Helmut

5x Contest-Sieger

  • »Helmut« ist der Autor dieses Themas

Beiträge: 691

Wohnort: Bielefeld

  • Private Nachricht senden

39

17.02.2015, 15:57

Ich zitiere aus den Regeln:
- Es darf ein Thread pro KI erstellt werden. Dieser muss aber vor Rückgabe der CalculateNextStep-Funktion beenden.

Das heißt du musst, wenn du Threads benutzen willst, diesen zu Beginn der CalculateNextStep Funktion erstellen und sicherstellen, dass dieser beendet, bevor CalculateNextStep zurückgibt.
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

TGGC

1x Rätselkönig

Beiträge: 1 813

Beruf: Software Entwickler

  • Private Nachricht senden

40

17.02.2015, 16:05

Ah ok und das wird dann einfach durch lesen des Quelltextes ueberprueft?

Werbeanzeige

Ähnliche Themen