We already had a main loop for our game, but it didn’t to anything:D. Here we’ll modify it to make it work with our board and our userInterface.
We keep the usual SFML headers, and we add our custom classes:
////////////////////////////////////////////////////////////
// main.cpp
////////////////////////////////////////////////////////////
#include
#include "board.h"
#include "uInterface.h"
We create the window and we add a frame rate limit. By The Way if you don’t want to use anti aliasing replace the appropriate lines of code :
int main()
{
// Create the main window, using the best available resolution
//sf::RenderWindow App(sf::VideoMode::GetMode(0),
// "Your first SFML game: 4 in a row!");
// If you want antialiasing in your game, you can use these
// lines of code instead of the above ones:
unsigned int antialias = 8;
sf:: RenderWindow App(sf::VideoMode::GetMode(0),
"Your first SFML game: 4 in a row!",
sf::Style::Resize|sf::Style::Close,
sf::WindowSettings::WindowSettings ( 24, 8, antialias));
// Reduce CPU usage by limiting the times a frame
// is drawn per second
App.SetFramerateLimit(30);
Just before the game loop (main loop) we create our board and our userInterface :
// Create a 4 in a row board
Board board(App);
// Create the user interface
UInterface ui(board);
We start the main loop as usual:
// This is the main loop
// It will loop until you exit the program
while (App.IsOpened())
{
// Here we process the events list
sf::Event Event;
while (App.GetEvent(Event))
{
// Close window : exit
if (Event.Type == sf::Event::Closed)
App.Close();
We add an event catcher: when the user left clicks the screen, we place a token in a column:
else if (Event.Type == Event.MouseButtonReleased && Event.MouseButton.Button == sf::Mouse::Left)
ui.placeInColumn(App.GetInput());
}
We clear the screen with the board’s background colour:
// Clear the screen with a color
App.Clear(board.boardColor);
We draw, the board (the circles) in the frame buffer:
// Here you will draw all stuff in the frame buffer
// Draw the board
board.draw();
And we display the buffer on screen!!
// Render the frame on screen
App.Display();
}
return EXIT_SUCCESS;
}
We now have a fully working SFML game. As you see, it is very easy to do. Most of the code is used to create the board array, to find if a player has won and to define how the circles are shown on screen.
There’s lot of space for improvements. Why don’t you try showing a transparent token when hovering the mouse over a column. This way we’d know who’s next turn. Or why don’t you add some text to show who has won the match? I leave all these improvements to you. If you want some help, try posting a comment here or going to the SFML forums.
May the force be with you…^^
PS: I might be adding network support. You’d be able to match your friend in the other side of the world!! ;) Keep tuned.:)