ソースを参照

Hearts: Add key combinations to letting the AI play for you

A single card can be played with F10 while Shift-F10 toggles the AI
for the current as well as all future tricks.
Gunnar Beutner 4 年 前
コミット
6a194869cf

+ 10 - 3
Userland/Games/Hearts/Game.cpp

@@ -41,6 +41,7 @@ Game::Game()
     };
     m_players[0].name_alignment = Gfx::TextAlignment::BottomRight;
     m_players[0].name = "Gunnar";
+    m_players[0].is_human = true;
     m_players[0].taken_cards_target = { width / 2 - Card::width / 2, height };
 
     m_players[1].first_card_position = { outer_border_size, (height - player_deck_height) / 2 };
@@ -252,7 +253,7 @@ void Game::let_player_play_card()
     else
         on_status_change(String::formatted("Waiting for {} to play a card...", player));
 
-    if (is_human(player)) {
+    if (player.is_human) {
         m_human_can_play = true;
         update();
         return;
@@ -351,13 +352,19 @@ void Game::advance_game()
 
 void Game::keydown_event(GUI::KeyEvent& event)
 {
-    if (event.shift() && event.key() == KeyCode::Key_F11)
+    if (event.shift() && event.key() == KeyCode::Key_F10) {
+        m_players[0].is_human = !m_players[0].is_human;
+        advance_game();
+    } else if (event.key() == KeyCode::Key_F10) {
+        if (m_human_can_play)
+            play_card(m_players[0], pick_card(m_players[0]));
+    } else if (event.shift() && event.key() == KeyCode::Key_F11)
         dump_state();
 }
 
 void Game::play_card(Player& player, size_t card_index)
 {
-    if (is_human(player))
+    if (player.is_human)
         m_human_can_play = false;
     VERIFY(player.hand[card_index]);
     VERIFY(m_trick.size() < 4);

+ 0 - 1
Userland/Games/Hearts/Game.h

@@ -40,7 +40,6 @@ private:
     void continue_game_after_delay(int interval_ms = 750);
     void advance_game();
     size_t pick_card(Player& player);
-    bool is_human(Player& player) const { return &player == &m_players[0]; }
     size_t player_index(Player& player);
     Player& current_player();
     bool game_ended() const { return m_trick_number == 13; }

+ 1 - 0
Userland/Games/Hearts/Player.h

@@ -38,6 +38,7 @@ public:
     Gfx::TextAlignment name_alignment;
     Gfx::IntPoint taken_cards_target;
     String name;
+    bool is_human { false };
 };
 
 }