Here’s a simple example of a matchstick game program in C++ with a graphical interface, using the SFML library. The program implements a basic matchstick game where the player competes against a simple artificial intelligence.
### Installing SFML
Before you begin, you need to install the SFML library. You can download it from the [official SFML website](
https://www.sfml-dev.org/download.php) and set it up in your IDE (for example, Visual Studio or Code::Blocks).
### Matchstick Game Code
```cpp
Code: Select all
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>
#include <vector>
#include <string>
class MatchstickGame {
public:
MatchstickGame(int totalMatches) : matches(totalMatches) {}
void playerTurn(int num) {
if (num > 0 && num <= 3 && num <= matches) {
matches -= num;
}
}
void aiTurn() {
int num = (matches - 1) % 4;
if (num == 0) num = 1; // AI takes at least 1 match
matches -= num;
}
int getMatches() const {
return matches;
}
bool isGameOver() const {
return matches <= 0;
}
private:
int matches;
};
void drawMatches(sf::RenderWindow &window, int matches) {
window.clear(sf::Color::White);
sf::Font font;
font.loadFromFile("arial.ttf"); // Make sure to have a font file in the project directory
sf::Text text("Matches remaining: " + std::to_string(matches), font, 30);
text.setFillColor(sf::Color::Black);
text.setPosition(50, 50);
window.draw(text);
window.display();
}
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "Matchstick Game");
MatchstickGame game(20);
int playerMatches = 0;
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
if (event.type == sf::Event::TextEntered) {
if (event.text.unicode < 128) {
char input = static_cast<char>(event.text.unicode);
if (input >= '1' && input <= '3') {
playerMatches = input - '0'; // Convert char to int
game.playerTurn(playerMatches);
if (game.isGameOver()) {
std::cout << "You lost! AI wins!" << std::endl;
window.close();
} else {
game.aiTurn();
if (game.isGameOver()) {
std::cout << "You win!" << std::endl;
window.close();
}
}
}
}
}
}
drawMatches(window, game.getMatches());
}
return 0;
}
### Code Description
1. **`MatchstickGame` Class**: Implements the game logic, including player and AI moves, and checks the game state.
2. **`drawMatches` Function**: Displays the number of remaining matches on the screen.
3. **Main Loop**: Handles events, allows the player to input the number of matches they want to take, and performs the AI's moves.
4. **Graphical Interface**: Uses SFML to display the window and text.
### Running the Program
1. Make sure you have the font file `arial.ttf` in the project directory, or change the font path in the code.
2. Compile the project, ensuring the SFML setup is correct (libraries and headers).
3. Run the program. The player can input numbers from 1 to 3 to choose matches. The game continues until one side wins.
### Notes
This code is a simple example and can be improved. You can add error handling, enhance the AI, implement graphical elements for buttons instead of text input, and expand the game with new features.