Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: Debug version works fine, release desn't (Tic Tac Toe)  (Read 2714 times)

0 Members and 1 Guest are viewing this topic.

Hair_FTW

  • Newbie
  • *
  • Posts: 6
    • View Profile
Debug version works fine, release desn't (Tic Tac Toe)
« on: September 06, 2011, 11:43:00 pm »
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).

Code: [Select]
///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

asdatapel

  • Jr. Member
  • **
  • Posts: 76
    • View Profile
Debug version works fine, release desn't (Tic Tac Toe)
« Reply #1 on: September 07, 2011, 04:52:21 am »
Im not a code expert, so I cant tell you about your actual problem, but about the debug vs release thing here: http://haacked.com/archive/2004/02/14/difference-between-debug-vs-release-build.aspx

Valeour

  • Newbie
  • *
  • Posts: 19
    • View Profile
Debug version works fine, release desn't (Tic Tac Toe)
« Reply #2 on: September 07, 2011, 02:13:14 pm »
To your question "Why is debug.exe bigger than release.exe" is because debug contains alot of debugging code in the SFML area. All of this debug code is literally for that reason; debugging. It helps narrow down errors and what not.

Release doesn't contain these debug lines, so naturally it's alot less to process.

As to why release isn't working as well, I don't know. Sorry.
Check out my blog; Technical Daze

Hair_FTW

  • Newbie
  • *
  • Posts: 6
    • View Profile
Debug version works fine, release desn't (Tic Tac Toe)
« Reply #3 on: September 07, 2011, 03:50:56 pm »
"One can expect to see funny errors in release builds due to compiler optimizations or differences in memory layout or initialization. These are ususally referred to as Release - Only bugs :)"

Does this means that the code is fine (it is doing everything it is supposed to do in debug)? Released games (sold) come in debug or release version?

Haikarainen

  • Guest
Debug version works fine, release desn't (Tic Tac Toe)
« Reply #4 on: September 07, 2011, 04:35:06 pm »
Are you linking the debugtarget with debuglibraries, and release with releaselibs?

Also, debug will always be bigger since they contain debugging symbols, to help with stuff like trace stack etc.

Hair_FTW

  • Newbie
  • *
  • Posts: 6
    • View Profile
Debug version works fine, release desn't (Tic Tac Toe)
« Reply #5 on: September 09, 2011, 05:16:04 pm »
Quote from: "Haikarainen"
Are you linking the debugtarget with debuglibraries, and release with releaselibs?

Also, debug will always be bigger since they contain debugging symbols, to help with stuff like trace stack etc.

Yes i am.

I managed to correct the error. I added in the "if" sections  event.Type == Event::MouseButtonPressed and now it works.

Cheers