Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

SDL C++ tic tac toe


Rekomendowane odpowiedzi

Opublikowano

Witam Serdecznie, czy ktoś z tu obecnych pomógłby mi lekko usprawnić dany program? Na razie mam tylko tyle.

 

 

#include<SDL/SDL.h>
#include<GL/gl.h>
#include<GL/glu.h>
 
    int plansza[3][3];  // 0-puste pole, 1-gracz true, -1-gracz false, 11-aktywne i gracz true,
                        // 9-aktywne i gracz false, 10-aktywne pole
    int gracz=1;
    int polozeniex=1;
    int polozeniey=1;
 
void pole()
{
    glBegin(GL_QUADS);
    glVertex3f(-0.45,-0.45,-5.0);
    glVertex3f(0.45,-0.45,-5.0);
    glVertex3f(0.45,0.45,-5.0);
    glVertex3f(-0.45,0.45,-5.0);
    glEnd();
}
 
void init()
{
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45,640.0/480.0,1.0,500.0);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_DEPTH_TEST);
 
    for (int i=0; i<5; i++) for (int j=0; j<5; j++)  plansza[i][j]=0;
    plansza[1][1]=10; //element startowy w srodku
}
 
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
 
    for (int i=0; i<3; i++) for (int j=0; j<3; j++)
    {
        switch(plansza[i][j])
        {
                case -1: glColor3f(0.4,0.0,0.0); break;
                case  9: glColor3f(0.8,0.0,0.0); break;
                case  0: glColor3f(0.4,0.4,0.4); break;
                case  1: glColor3f(0.0,0.4,0.0); break;
                case 11: glColor3f(0.0,0.8,0.0); break;
                case 10: glColor3f(0.8,0.8,0.8); break;
                break;
        }
        glPushMatrix();
        glTranslatef(i-1,j-1,-4);
 
        pole();
        glPopMatrix();
    }
}
void spr()
{
    int k1 = plansza[0][0]+plansza[1][0]+plansza[2][0];
    int k2 = plansza[0][1]+plansza[1][1]+plansza[2][1];
    int k3 = plansza[0][2]+plansza[1][2]+plansza[2][2];
    int w1 = plansza[0][0]+plansza[0][1]+plansza[0][2];
    int w2 = plansza[1][0]+plansza[1][1]+plansza[1][2];
    int w3= plansza[2][0]+plansza[2][1]+plansza[2][2];
    int p1 = plansza[0][0]+plansza[1][1]+plansza[2][2];
    int p2 = plansza[0][2]+plansza[1][1]+plansza[2][0];
 
    if( (k1==7 || k2==7 || k3==7 || w1==7 || w2==7 || w3==7 || p1==7 || p2==7) )
    {
        for(int i=0; i<3; i++)
        {
            for(int j=0; j<3; j++)
            {
                plansza[i][j] = -1;
            }
        }
    }
    if( (k1==13 || k2==13 || k3==13 || w1==13 || w2==13 || w3==13 || p1==13 || p2==13) )
    {
        for(int i=0; i<3; i++)
        {
            for(int j=0; j<3; j++)
            {
                plansza[i][j] = 1;
            }
        }
    }
}
 
int main(int argc, char* args[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
 
    SDL_SetVideoMode(640,480,32,SDL_SWSURFACE|SDL_OPENGL);
 
    int petla=1;
    SDL_Event zdarzenie;
    init();
    while (petla==1)
    {
        while (SDL_PollEvent(&zdarzenie))
        {
            switch(zdarzenie.type)
            {
                case SDL_QUIT:
                petla=0;
                break;
 
                case SDL_KEYDOWN:
                if (zdarzenie.key.keysym.sym==SDLK_LEFT) if  (polozeniex>0)
                {
                    plansza[polozeniex][polozeniey]-=10;
                    polozeniex-=1;
                    plansza[polozeniex][polozeniey]+=10;
                }
                if (zdarzenie.key.keysym.sym==SDLK_RIGHT) if (polozeniex<3)
                {
                    plansza[polozeniex][polozeniey]-=10;
                    polozeniex+=1;
                    plansza[polozeniex][polozeniey]+=10;
                }
                if (zdarzenie.key.keysym.sym==SDLK_UP) if (polozeniey<3)
                {
                    plansza[polozeniex][polozeniey]-=10;
                    polozeniey+=1;
                    plansza[polozeniex][polozeniey]+=10;
                }
                if (zdarzenie.key.keysym.sym==SDLK_DOWN) if (polozeniey>0)
                {
                    plansza[polozeniex][polozeniey]-=10;
                    polozeniey-=1;
                    plansza[polozeniex][polozeniey]+=10;
                }
                if (zdarzenie.key.keysym.sym==SDLK_SPACE)
                    if ((plansza[polozeniex][polozeniey] !=9) & (plansza[polozeniex][polozeniey] !=11))
                {
                    plansza[polozeniex][polozeniey]=gracz+10; gracz=-gracz;
                    spr();
                }
                break;
            }
        }
        display();
        SDL_GL_SwapBuffers();
    }
    SDL_Quit();
    return 0;
}
  • 2 tygodnie później...
  • 2 tygodnie później...
Opublikowano

Mozesz zrezygnować z GLU, pomysleć o SDL2 i GLSL zamiast fixed function pipeline.

 

EDIT:

 

Właściwie to przy takim mniejszym projektu do nauki przy fixed function pipeline mozesz zostać, ale polecam nowszego SDL2 i ogólnie GLU jest zbędne, mozesz zaimplementować własne metody na to co ta biblioteka Ci udostępnia.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...