Hello.
I Programmed a Tic Tac Toe game using C++ and SFML. It's very simples, 2 players, no menu no sound. And i didn't use oop.
The game on Debug runs fine, but on Release doesn't. As soon as the mouse cursor runs over the game window a wild "X" appears. After that, it works fine. Why is that happening? I'm using Code::Blocks.
The game uses 4 800x800 images (win, loose, tie and the board) and 2 200x200 (circle and cross). Here is the code (i'm sorry for the mess, it's my first "project", also sorry for the variable names, i'm portuguese).
///Headers///
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>
///Namespaces///
using namespace std;
using namespace sf;
int main ()
{
///Variables///
char tabuleirodejogo [3][3];
for (int i=0; i<3; i++)
{
for (int u=0; u<3; u++)
{
tabuleirodejogo[i][u] = 'n';
}
}
///Window///
RenderWindow Janela (VideoMode(800,800,32), "Tic Tac Toe");
///Images///
Image Tabuleiro, Jogador_X, Jogador_O, Ganhou_X, Ganhou_O, Empate;
if (!Tabuleiro.LoadFromFile("tabuleiro.jpg"))
return EXIT_FAILURE;
if (!Jogador_X.LoadFromFile("Jogador X.png"))
return EXIT_FAILURE;
if (!Jogador_O.LoadFromFile("Jogador O.png"))
return EXIT_FAILURE;
if (!Ganhou_X.LoadFromFile("Ganhou X.png"))
return EXIT_FAILURE;
if (!Ganhou_O.LoadFromFile("Ganhou O.png"))
return EXIT_FAILURE;
if (!Empate.LoadFromFile("Empate.png"))
return EXIT_FAILURE;
Jogador_X.SetSmooth(false);
Jogador_O.SetSmooth(false);
///Sprites///
Sprite tabuleiro;
tabuleiro.SetImage(Tabuleiro);
Janela.Draw(tabuleiro);
Sprite jx;
jx.SetImage(Jogador_X);
Sprite jo;
jo.SetImage(Jogador_O);
Sprite go(Ganhou_O);
Sprite gx(Ganhou_X);
Sprite empate(Empate);
///Loop///
while (Janela.IsOpened())
{
///Player X///
while (1)
{
Event jogarx;
(Janela.GetEvent(jogarx));
if (jogarx.Type == Event::Closed)
Janela.Close();
if ((tabuleirodejogo[0][0] == 'n') && (jogarx.Key.Code == Mouse::Left) && (jogarx.MouseButton.X < 250) && (jogarx.MouseButton.Y < 245))
{
tabuleirodejogo[0][0] = 'x';
jx.SetPosition(35.f,28.f);
Janela.Draw(jx);
break;
}
if ((tabuleirodejogo[0][1] == 'n') && (jogarx.Key.Code == Mouse::Left) && (jogarx.MouseButton.X > 265) && (jogarx.MouseButton.Y < 250) && (jogarx.MouseButton.X < 520))
{
tabuleirodejogo[0][1] = 'x';
jx.SetPosition(301.f,28.f);
Janela.Draw(jx);
break;
}
if ((tabuleirodejogo[0][2] == 'n') && (jogarx.Key.Code == Mouse::Left) && (jogarx.MouseButton.Y < 250) && (jogarx.MouseButton.X > 536))
{
tabuleirodejogo[0][2] = 'x';
jx.SetPosition(562.f,28.f);
Janela.Draw(jx);
break;
}
if ((tabuleirodejogo[1][0] == 'n') && (jogarx.Key.Code == Mouse::Left) && (jogarx.MouseButton.X < 250) && (jogarx.MouseButton.Y < 505) && (jogarx.MouseButton.Y > 260))
{
tabuleirodejogo[1][0] = 'x';
jx.SetPosition(35.f,290.f);
Janela.Draw(jx);
break;
}
if ((tabuleirodejogo[1][1] == 'n') && (jogarx.Key.Code == Mouse::Left) && (jogarx.MouseButton.X > 265) && (jogarx.MouseButton.X < 520) && (jogarx.MouseButton.Y < 505) && (jogarx.MouseButton.Y > 260))
{
tabuleirodejogo[1][1] = 'x';
jx.SetPosition(301.f,290.f);
Janela.Draw(jx);
break;
}
if ((tabuleirodejogo[1][2] == 'n') && (jogarx.Key.Code == Mouse::Left) && (jogarx.MouseButton.X > 536) && (jogarx.MouseButton.Y < 505) && (jogarx.MouseButton.Y > 260))
{
tabuleirodejogo[1][2] = 'x';
jx.SetPosition(562.f,290.f);
Janela.Draw(jx);
break;
}
if ((tabuleirodejogo[2][0] == 'n') && (jogarx.Key.Code == Mouse::Left) && (jogarx.MouseButton.X < 250) && (jogarx.MouseButton.Y > 520))
{
tabuleirodejogo[2][0] = 'x';
jx.SetPosition(35.f,555.f);
Janela.Draw(jx);
break;
}
if ((tabuleirodejogo[2][1] == 'n') && (jogarx.Key.Code == Mouse::Left) && (jogarx.MouseButton.X > 270) && (jogarx.MouseButton.X < 520) && (jogarx.MouseButton.Y > 520))
{
tabuleirodejogo[2][1] = 'x';
jx.SetPosition(301.f,555.f);
Janela.Draw(jx);
break;
}
if ((tabuleirodejogo[2][2] == 'n') && (jogarx.Key.Code == Mouse::Left) && (jogarx.MouseButton.X > 535) && (jogarx.MouseButton.Y > 520))
{
tabuleirodejogo[2][2] = 'x';
jx.SetPosition(562.f,555.f);
Janela.Draw(jx);
break;
}
Janela.Display();
}
///Player X won///
if (tabuleirodejogo[0][0] == 'x' && tabuleirodejogo[0][1] == 'x' && tabuleirodejogo[0][2] == 'x')
{
Janela.Draw(gx);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[1][0] == 'x' && tabuleirodejogo[1][1] == 'x' && tabuleirodejogo[1][2] == 'x')
{
Janela.Draw(gx);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[2][0] == 'x' && tabuleirodejogo[2][1] == 'x' && tabuleirodejogo[2][2] == 'x')
{
Janela.Draw(gx);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[0][0] == 'x' && tabuleirodejogo[1][0] == 'x' && tabuleirodejogo[2][0] == 'x')
{
Janela.Draw(gx);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[0][1] == 'x' && tabuleirodejogo[1][1] == 'x' && tabuleirodejogo[2][1] == 'x')
{
Janela.Draw(gx);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[0][2] == 'x' && tabuleirodejogo[1][2] == 'x' && tabuleirodejogo[2][2] == 'x')
{
Janela.Draw(gx);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[0][0] == 'x' && tabuleirodejogo[1][1] == 'x' && tabuleirodejogo[2][2] == 'x')
{
Janela.Draw(gx);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[2][0] == 'x' && tabuleirodejogo[1][1] == 'x' && tabuleirodejogo[0][2] == 'x')
{
Janela.Draw(gx);
Janela.Display();
Sleep(3.f);
break;
}
///Tie///
else if(tabuleirodejogo[0][0] != 'n' && tabuleirodejogo[0][1] != 'n' && tabuleirodejogo[0][2] != 'n' && tabuleirodejogo[1][0] != 'n' && tabuleirodejogo[1][1] != 'n' && tabuleirodejogo[1][2] != 'n' && tabuleirodejogo[2][0] != 'n' && tabuleirodejogo[2][1] != 'n' && tabuleirodejogo[2][2] != 'n')
{
Janela.Draw(empate);
Janela.Display();
Sleep(3.f);
break;
}
///Player O///
while (1)
{
Event jogaro;
(Janela.GetEvent(jogaro));
if (jogaro.Type == Event::Closed)
Janela.Close();
if ((tabuleirodejogo[0][0] == 'n') && (jogaro.Key.Code == Mouse::Left) && (jogaro.MouseButton.X < 250) && (jogaro.MouseButton.Y < 245))
{
tabuleirodejogo[0][0] = 'o';
jo.SetPosition(35.f,28.f);
Janela.Draw(jo);
break;
}
if ((tabuleirodejogo[0][1] == 'n') && (jogaro.Key.Code == Mouse::Left) && (jogaro.MouseButton.X > 265) && (jogaro.MouseButton.Y < 250) && (jogaro.MouseButton.X < 520))
{
tabuleirodejogo[0][1] = 'o';
jo.SetPosition(301.f,28.f);
Janela.Draw(jo);
break;
}
if ((tabuleirodejogo[0][2] == 'n') && (jogaro.Key.Code == Mouse::Left) && (jogaro.MouseButton.Y < 250) && (jogaro.MouseButton.X > 536))
{
tabuleirodejogo[0][2] = 'o';
jo.SetPosition(562.f,28.f);
Janela.Draw(jo);
break;
}
if ((tabuleirodejogo[1][0] == 'n') && (jogaro.Key.Code == Mouse::Left) && (jogaro.MouseButton.X < 250) && (jogaro.MouseButton.Y < 505) && (jogaro.MouseButton.Y > 260))
{
tabuleirodejogo[1][0] = 'o';
jo.SetPosition(35.f,290.f);
Janela.Draw(jo);
break;
}
if ((tabuleirodejogo[1][1] == 'n') && (jogaro.Key.Code == Mouse::Left) && (jogaro.MouseButton.X > 265) && (jogaro.MouseButton.X < 520) && (jogaro.MouseButton.Y < 505) && (jogaro.MouseButton.Y > 260))
{
tabuleirodejogo[1][1] = 'o';
jo.SetPosition(301.f,290.f);
Janela.Draw(jo);
break;
}
if ((tabuleirodejogo[1][2] == 'n') && (jogaro.Key.Code == Mouse::Left) && (jogaro.MouseButton.X > 536) && (jogaro.MouseButton.Y < 505) && (jogaro.MouseButton.Y > 260))
{
tabuleirodejogo[1][2] = 'o';
jo.SetPosition(562.f,290.f);
Janela.Draw(jo);
break;
}
if ((tabuleirodejogo[2][0] == 'n') && (jogaro.Key.Code == Mouse::Left) && (jogaro.MouseButton.X < 250) && (jogaro.MouseButton.Y > 520))
{
tabuleirodejogo[2][0] = 'o';
jo.SetPosition(35.f,555.f);
Janela.Draw(jo);
break;
}
if ((tabuleirodejogo[2][1] == 'n') && (jogaro.Key.Code == Mouse::Left) && (jogaro.MouseButton.X > 270) && (jogaro.MouseButton.X < 520) && (jogaro.MouseButton.Y > 520))
{
tabuleirodejogo[2][1] = 'o';
jo.SetPosition(301.f,555.f);
Janela.Draw(jo);
break;
}
if ((tabuleirodejogo[2][2] == 'n') && (jogaro.Key.Code == Mouse::Left) && (jogaro.MouseButton.X > 535) && (jogaro.MouseButton.Y > 520))
{
tabuleirodejogo[2][2] = 'o';
jo.SetPosition(562.f,555.f);
Janela.Draw(jo);
break;
}
Janela.Display();
}
///Player O Won///
if (tabuleirodejogo[0][0] == 'o' && tabuleirodejogo[0][1] == 'o' && tabuleirodejogo[0][2] == 'o')
{
Janela.Draw(go);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[1][0] == 'o' && tabuleirodejogo[1][1] == 'o' && tabuleirodejogo[1][2] == 'o')
{
Janela.Draw(go);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[2][0] == 'o' && tabuleirodejogo[2][1] == 'o' && tabuleirodejogo[2][2] == 'o')
{
Janela.Draw(go);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[0][0] == 'o' && tabuleirodejogo[1][0] == 'o' && tabuleirodejogo[2][0] == 'o')
{
Janela.Draw(go);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[0][1] == 'o' && tabuleirodejogo[1][1] == 'o' && tabuleirodejogo[2][1] == 'o')
{
Janela.Draw(go);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[0][2] == 'o' && tabuleirodejogo[1][2] == 'o' && tabuleirodejogo[2][2] == 'o')
{
Janela.Draw(go);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[0][0] == 'o' && tabuleirodejogo[1][1] == 'o' && tabuleirodejogo[2][2] == 'o')
{
Janela.Draw(go);
Janela.Display();
Sleep(3.f);
break;
}
else if (tabuleirodejogo[2][0] == 'o' && tabuleirodejogo[1][1] == 'o' && tabuleirodejogo[0][2] == 'o')
{
Janela.Draw(go);
Janela.Display();
Sleep(3.f);
break;
}
///Tie///
else if(tabuleirodejogo[0][0] != 'n' && tabuleirodejogo[0][1] != 'n' && tabuleirodejogo[0][2] != 'n' && tabuleirodejogo[1][0] != 'n' && tabuleirodejogo[1][1] != 'n' && tabuleirodejogo[1][2] != 'n' && tabuleirodejogo[2][0] != 'n' && tabuleirodejogo[2][1] != 'n' && tabuleirodejogo[2][2] != 'n')
{
Janela.Draw(empate);
Janela.Display();
Sleep(3.f);
break;
}
}
return EXIT_SUCCESS;
}
Translation:
tabuleirodojogo = boardofthegame
Jogador_X = Player_X
Ganhou_X = Win_X
Empate = Tie
Janela = Window
Do you people know why it runs fine on Debug but on Release don't?
Also why is it that the debug exe. has 5 megabytes and the release version only 1?
Cheers