Działający algorytm minimax z cięciami alfa-beta.

This commit is contained in:
Bartłomiej Pluta
2016-05-20 23:13:52 +02:00
parent 6e055d6ffd
commit 8f1dc27b81
10 changed files with 794 additions and 53 deletions

View File

@@ -3,6 +3,11 @@
/* Plik implementuje klasę gry, w której znajduje się m.in. główna pętla gry oraz która determinuje całą rozgrywkę. */
#include <iostream>
#include <sstream>
#include <string>
#include <list>
#include <algorithm>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
@@ -11,6 +16,7 @@
#include "object.hh"
#include "pawn.hh"
#include "board.hh"
#include "minimax.hh"
// Typ wyliczeniowy rozróżniający gracza od sztucznej inteligencji
enum Player
@@ -19,10 +25,10 @@ enum Player
PL_AI
};
// Klasa gry
class Game
{
private:
// Okno naszego programu
sf::RenderWindow window;
@@ -30,21 +36,27 @@ private:
Board board;
// Zaznaczony pionek
Pawn* selected; // może lepiej Vector???
Vector selected;
// Kolor gracza
Color player_color;
// Tura(czy gracz, czy AI)
Color round;
// Flaga oznaczająca sekwencję ruchów(aby gracz nie mógł zmienić pionka w trakcie gry)
bool movements_sequence;
// Tura(czy gracz, czy komputer)
// Punkty gracza
int player_score;
// punkty gracza i komputera
// Punkty AI
int ai_score;
// stan gry
public:
// AI
MiniMax minimax;
// Konstruktor inicjalizujący parametry gry i wyzwalający pętlę główną gry
Game();
private:
// Zabij pionka (doliczając do tego punkty)
void killPawn(Vector position);
@@ -57,14 +69,29 @@ public:
// Zwróć kolor przeciwnika
Color getAIColor() const { return (player_color==CL_WHITE)?CL_BLACK:CL_WHITE; }
// Przesuń pionek na określoną pozycję uwzględniając już
// przy tym zasady gry w warcaby
bool movePawn(Vector position, Vector target);
bool movePawn(Movement movement);
// Wykonaj turę gracza (argumentem jest jedyny możliwy sposób interakcji gracza z programem
// czyli pozycja myszy w momencie kliknięcia lewego przycisku)
void executePlayerRound(sf::Vector2f mouse_position);
// Przechwytywanie zdarzeń
void eventHandler();
// Rysuje HUD (czyli ilość punktów etc.)
void drawHUD();
// Główna pętla gry
void loop();
public:
// Konstruktor inicjalizujący parametry gry i wyzwalający pętlę główną gry
Game();
};
#endif