Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++]Gra Typu Pong. Wolne Działanie.

Ostatnio zmodyfikowano 2014-02-28 21:13
Autor Wiadomość
CPnHorror
Temat założony przez niniejszego użytkownika
[c++]Gra Typu Pong. Wolne Działanie.
» 2014-02-28 00:33:26
Witam! Wpierw chciałbym uprzedzić iż nie jestem pewien co do poprawności działu na forum względem tematu, problemu i sprawy.
Po Drugie (wiem że to niedorzeczne) acz chciałbym się pochwalić i udostępnić kod (z którym się męczyłem 5-6 godzin) dla tych którzy także próbują tę grę napisać. oby wam się przydało..

A więc przejdę do sedna. jest jakaś "prosta metoda" na przyśpieszenie działania mojego kodu ponga ? bez względu jak podkręcę pętle czasową to i tak nie osiągnę satysfakcjonującej prędkości :-/

kod poniżej.. :-)

C/C++
// Snake
#include<iostream>
#include<conio.h>
#include<time.h>
#include<windows.h>
using namespace std;

int player_1 = 0, player_2 = 0;

int stop = 0;
int liczydlo;
float czas;
float old_czas;
int kierunek;
int predkosc;
int ball = 886;
char key;
int wolna;
int hero1 = 847, hero1_1, hero1_2, hero1_3, hero1_4;
int hero2 = 923, hero2_1, hero2_2, hero2_3, hero2_4;
char map[ 1771 ];


void nadpis( const int x, const int y )
{
    HANDLE hCon = GetStdHandle( STD_OUTPUT_HANDLE );
    COORD coord = { x, y };
    SetConsoleCursorPosition( hCon, coord );
}

void CreateMap()
{
    cout << char( 201 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 187 ) << endl;
    for( int i = 0; i < 23; i += 1 )
    {
        cout << char( 186 );
        for( int y = 0; y < 77; y += 1 )
        {
            cout << " ";
        }
        cout << char( 186 ) << endl;
    }
    cout << char( 200 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 205 ) << char( 188 ) << endl;
    wolna = 0;
    for( int a = 0; a < 23; a += 1 )
    {
        for( int b = 0; b < 77; b += 1 )
        {
            map[ wolna ] = ' ';
            wolna += 1;
        }
       
    }
}

void ruch()
{
    if( key == 112 & hero2 != 230 ) { hero2 -= 77; }
    else if( key == 119 & hero1 != 154 ) { hero1 -= 77; }
    else if( key == 108 & hero2 != 1616 ) { hero2 += 77; }
    else if( key == 115 & hero1 != 1540 ) { hero1 += 77; }
}
void DrawMap()
{
    int licz = 1;
    int licz2 = 1;
   
    wolna = 0;
    hero1_1 = hero1 - 77;
    hero1_2 = hero1_1 - 77;
    hero1_3 = hero1 + 77;
    hero1_4 = hero1_3 + 77;
    hero2_1 = hero2 - 77;
    hero2_2 = hero2_1 - 77;
    hero2_3 = hero2 + 77;
    hero2_4 = hero2_3 + 77;
   
    map[ hero1 ] = 1;
    map[ hero1_1 ] = 1;
    map[ hero1_2 ] = 1;
    map[ hero1_3 ] = 1;
    map[ hero1_4 ] = 1;
    map[ hero2 ] = 1;
    map[ hero2_1 ] = 1;
    map[ hero2_2 ] = 1;
    map[ hero2_3 ] = 1;
    map[ hero2_4 ] = 1;
   
    map[ ball ] = 15;
    for( int a = 0; a < 23; a += 1 )
    {
        nadpis( 1, licz );
        if( wolna != hero1 & wolna != hero1_1 & wolna != hero1_2 & wolna != hero1_3 & wolna != hero1_4 ) { map[ wolna ] = ' '; };
        if( wolna + 76 != hero2 & wolna + 76 != hero2_1 & wolna + 76 != hero2_2 & wolna + 76 != hero2_3 & wolna + 76 != hero2_4 ) { map[ wolna + 76 ] = ' '; };
        for( int b = 0; b < 77; b += 1 )
        {
            cout << map[ wolna ];
            wolna += 1;
        }
        licz += 1;
    }
    nadpis( 0, 25 );
    cout << "  Player 1 : " << player_1;
    nadpis( 65, 25 );
    cout << player_2 << " : Player 2  " << endl;
}

void ruch_ball()
{
    for( int ii = 0; ii < 77; ii += 1 )
    {
        if( ball == ii & kierunek == 1 ) { kierunek = 2; }
        if( ball == ii & kierunek == 3 ) { kierunek = 4; }
    }
   
    for( int iii = 1693; iii < 1771; iii += 1 )
    {
        if( ball == iii & kierunek == 2 ) { kierunek = 1; }
        if( ball == iii & kierunek == 4 ) { kierunek = 3; }
    }
    map[ ball ] = ' ';
    if( kierunek == 1 )
    {
        if( predkosc == 1 )
        {
            ball -= 1;
            liczydlo += 1;
            if( liczydlo == 4 )
            {
                ball -= 77;
                liczydlo = 0;
            }
        } else if( predkosc == 2 )
        {
            ball -= 1;
            liczydlo += 1;
            if( liczydlo == 2 )
            {
                ball -= 77;
                liczydlo = 0;
            }
        }
       
    } else if( kierunek == 2 )
    {
        if( predkosc == 1 )
        {
            ball -= 1;
            liczydlo += 1;
            if( liczydlo == 4 )
            {
                ball += 77;
                liczydlo = 0;
            }
        } else if( predkosc == 2 )
        {
            ball -= 1;
            liczydlo += 1;
            if( liczydlo == 2 )
            {
                ball += 77;
                liczydlo = 0;
            }
        }
       
    } else if( kierunek == 3 )
    {
        if( predkosc == 1 )
        {
            ball += 1;
            liczydlo += 1;
            if( liczydlo == 4 )
            {
                ball -= 77;
                liczydlo = 0;
            }
        } else if( predkosc == 2 )
        {
            ball += 1;
            liczydlo += 1;
            if( liczydlo == 2 )
            {
                ball -= 77;
                liczydlo = 0;
            }
        }
       
    } else if( kierunek == 4 )
    {
        if( predkosc == 1 )
        {
            ball += 1;
            liczydlo += 1;
            if( liczydlo == 4 )
            {
                ball += 77;
                liczydlo = 0;
            }
        } else if( predkosc == 2 )
        {
            ball += 1;
            liczydlo += 1;
            if( liczydlo == 2 )
            {
                ball += 77;
                liczydlo = 0;
            }
        }
       
    } else if( kierunek == 5 )
    {
        ball -= 1;
    } else if( kierunek == 6 )
    {
        ball += 1;
    }
   
}

void odbicie()
{
    if( ball == hero1 + 1 )
    {
        kierunek = 6;
    } else if( ball == hero1_1 + 1 )
    {
        kierunek = 3;
        predkosc = 1;
    } else if( ball == hero1_2 + 1 )
    {
        kierunek = 3;
        predkosc = 2;
    } else if( ball == hero1_3 + 1 )
    {
        kierunek = 4;
        predkosc = 1;
    } else if( ball == hero1_4 + 1 )
    {
        kierunek = 4;
        predkosc = 2;
    }
   
    if( ball + 1 == hero2 - 1 )
    {
        kierunek = 5;
    } else if( ball == hero2_1 - 1 )
    {
        kierunek = 1;
        predkosc = 1;
    } else if( ball == hero2_2 - 1 )
    {
        kierunek = 1;
        predkosc = 2;
    } else if( ball == hero2_3 - 1 )
    {
        kierunek = 2;
        predkosc = 1;
    } else if( ball == hero2_4 - 1 )
    {
        kierunek = 2;
        predkosc = 2;
    }
   
}

void punkt()
{
    int test = 0;
    for( int u = 0; u < 23; u += 1 )
    {
        if( ball == test ) { player_1 += 1; stop = 1; break; }
        else if( ball == test + 76 ) { player_2 += 1; stop = 1; break; }
        if( stop == 0 ) { test += 77; }
    }
}

void losuj()
{
    time_t t;
    srand(( unsigned ) time( & t ) );
    int nr_los = rand() % 5 + 1;
    int nr_loss = rand() % 1 + 1;
    ball = 886;
    kierunek = nr_los;
    predkosc = nr_loss;
   
    nadpis( 30, 25 );
    cout << "Nacisnij Klawisz by dalej grac" << endl;
    getch();
    stop = 0;
    nadpis( 30, 25 );
    cout << "                              " << endl;
}

int main()
{
    kierunek = 3;
    predkosc = 2;
   
   
    liczydlo = 0;
    cout << "Player 1 sterowanie: W - Gora, S - Dol" << endl << "Player 2 sterowanie: P - Gora, L - Dol" << endl << "Press Key To Start Game" << endl;
    getch();
    system( "cls" );
    CreateMap();
    old_czas = 0;
    do
    {
        czas = clock() / 125;
        if( czas > old_czas )
        {
            old_czas = czas;
            key = 0;
            if( kbhit() )
            {
                key = getch();
            }
            ruch_ball();
            ruch();
            DrawMap();
            odbicie();
            punkt();
            if( stop == 1 ) { losuj(); }
        }
    } while( key != 27 );
   
    cout << endl << char( 1 ) << char( 2 ) << endl;
    getch();
    return 0;
};
P-105380
DejaVu
» 2014-02-28 00:55:05
Zrób swoją grę PONG przy pomocy biblioteki SFML. Konsola nie została stworzona z myślą o renderowaniu gier, tylko z myślą o łatwym sposobie interakcji z użytkownikiem, wymagającej pisania tekstu i zatwierdzania go za pomocą klawisza ENTER.
P-105382
CPnHorror
Temat założony przez niniejszego użytkownika
» 2014-02-28 02:04:11
ta biblioteka wiele zmienia ? aż tak bardzo ? :-)

ps. potrzebne mi będzie jakieś dodatkowe oprogramowanie ?
i czy będę musiał zmieniać dużo w kodzie ?
P-105383
oputyk
» 2014-02-28 10:33:05
SFML 2.1 Żadnego dodatkowego oprogramowania, oprócz plików potrzebnych do działania biblioteki. A jeśli chodzi o kod, no to będziesz musiał go całego przebudować.
P-105386
akwes
» 2014-02-28 13:11:06
Tak, konsola sama z siebie jest wolna. Jednak ważniejszą rzeczą będzie tu powiedzenie Ci abyś (chociażby na tym kodzie) spróbował nie korzystać ze zmiennych globalnych na rzecz parametrów funkcji oraz starał się nie duplikować kodu tylko starać się go parametryzować. Wiele ifów może tutaj zastąpić mniejszą ilością. Kod będzie szybszy a już na pewno będzie się go lepiej czytało :)
P-105394
CPnHorror
Temat założony przez niniejszego użytkownika
» 2014-02-28 21:13:15
jeszcze mam takie pytanie... nie wiem czemu ale ciągle w visual 2010 wyskakuje mi coś takiego :

1>------ Build started: Project: Pong, Configuration: Debug Win32 ------
1>LINK : error LNK2001: unresolved external symbol _mainCRTStartup
1>c:\users\samsung\documents\visual studio 2010\Projects\Pong\Debug\Pong.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


...

gdzie może być problem ? czego to dotyczy ?

/// JUŻ NIEAKTUALNE. ZAINSTALOWAŁEM INNE IDE . :-)
P-105432
« 1 »
  Strona 1 z 1