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

Jaka wiedza jest mi potrzebna do napisania Snake w konsoli ?

Ostatnio zmodyfikowano 2017-06-28 10:58
Autor Wiadomość
pokrywa1
Temat założony przez niniejszego użytkownika
Jaka wiedza jest mi potrzebna do napisania Snake w konsoli ?
» 2017-06-19 19:53:22
tak jak w temacie co musze wiedziec oraz jakie tematy musze miec przeanalizowane zeby napisac taki mały projekcic sprawdzajacy wiedze.
P-162693
pekfos
» 2017-06-19 19:56:18
Minimum to tablice i pętle.
P-162694
pokrywa1
Temat założony przez niniejszego użytkownika
» 2017-06-19 19:57:35
coś wiecej moze ?
P-162695
pekfos
» 2017-06-19 19:58:27
To wystarczy do napisania węża. Dalej to same ułatwienia, np struktury i funkcje. Jeśli tylko masz pomysł, to zrobisz węża na 3 tablicach intów.
P-162696
latajacaryba
» 2017-06-20 01:59:36
No cóż... Męczyłem się i męczyłem, ale udało się. Nawet nie próbujcie tego rozczytywać :D

tylko if, tablice jedno- i dwu- wymiarowe, pętle for, do...while i while, losowanie. Żadnych wskaźników, struktur czy klas :)


C/C++
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <cstdlib>
#include <ctime>

using namespace std;
const int WIERSZE = 15;
const int KOLUMNY = 50;
const int PAUZA = 25;
int DlugoscWeza = 4;
const char znakWeza = '+';
const char znakJablka = 'O';

int main()
{
    srand( time( NULL ) );
    char mapa[ WIERSZE ][ KOLUMNY ];
    char klawisz;
    int lewaPrawa = 0, goraDol = 1;
   
    //TWORZENIE MAPY
    for( int i = 0; i < KOLUMNY; i++ )
    {
        mapa[ 0 ][ i ] = '#';
        mapa[ WIERSZE - 1 ][ i ] = '#';
    }
   
    for( int j = 1; j < WIERSZE - 1; j++ )
    {
        for( int i = 0; i < KOLUMNY; i++ )
        {
            if( i == 0 || i == KOLUMNY - 1 )
                 mapa[ j ][ i ] = '#';
            else
                 mapa[ j ][ i ] = ' ';
           
        }
    }
   
    //japko :)
    int JablkoX;
    int JablkoY;
    bool czyIstnieje; // czy jest na mapie
    // WAZ
    bool nowySegment;
    int PozycjaGlowyX = KOLUMNY / 2;
    int PozycjaGlowyY = WIERSZE / 2;
    mapa[ PozycjaGlowyY ][ PozycjaGlowyX ] = znakWeza; // glowa weza na srodku mapy
    int CialoWezaX[( WIERSZE - 2 ) *( KOLUMNY - 2 ) ];
    int CialoWezaY[( WIERSZE - 2 ) *( KOLUMNY - 2 ) ];
   
    for( int i = 0; i < DlugoscWeza - 1; i++ ) // ustawianie ciala weza za jego glowa
    {
        CialoWezaY[ i ] = PozycjaGlowyY;
        CialoWezaX[ i ] = PozycjaGlowyX - i - 1;
        mapa[ CialoWezaY[ i ] ][ CialoWezaX[ i ] ] = znakWeza;
    }
    int ostatniaPozycjaX;
    int ostatniaPozycjaY;
    int poprzedniaPozycjaX;
    int poprzedniaPozycjaY;
   
    int nastepnaPozycjaX; // zmienne pomocnicze, potrzebne do petli
    int nastepnaPozycjaY;
   
    while( 1 )
    {
       
        for( int j = 0; j < WIERSZE; j++ )
        {
            for( int i = 0; i < KOLUMNY; i++ )
            {
                cout << mapa[ j ][ i ];
            }
            cout << endl;
        }
        for( int i = 0; i < 20; i++ )
        {
            Sleep( PAUZA );
            if( kbhit() )
            {
                klawisz = getch();
            }
        }
       
       
        if( klawisz == 72 ) // W GORE
        {
            goraDol = - 1;
            lewaPrawa = 0;
        }
       
        if( klawisz == 77 ) // W PRAWO
        {
            lewaPrawa = 1;
            goraDol = 0;
        }
       
        if( klawisz == 80 ) // W DOL
        {
            goraDol = 1;
            lewaPrawa = 0;
        }
       
        if( klawisz == 75 ) // W LEWO
        {
            lewaPrawa = - 1;
            goraDol = 0;
        }
       
        //RUCH
       
        if( mapa[ PozycjaGlowyY + goraDol ][ PozycjaGlowyX + lewaPrawa ] == '#' || mapa[ PozycjaGlowyY + goraDol ][ PozycjaGlowyX + lewaPrawa ] == znakWeza )
        {
            cout << "przegrales! ";
            return 0;
        }
        else if( PozycjaGlowyX == JablkoX && PozycjaGlowyY == JablkoY ) // czy zjadl jablko
        {
            czyIstnieje = false;
            if( mapa[ CialoWezaY[ DlugoscWeza - 1 ] ][ CialoWezaX[ DlugoscWeza - 1 ] - 1 ] == ' ' )
            {
                ++DlugoscWeza;
                mapa[ CialoWezaY[ DlugoscWeza - 1 ] ][ CialoWezaX[ DlugoscWeza - 1 ] - 1 ] == znakWeza;
                ostatniaPozycjaX = CialoWezaX[ DlugoscWeza - 1 ];
                ostatniaPozycjaY = CialoWezaY[ DlugoscWeza - 1 ];
                nowySegment = true;
            }
           
            else if( mapa[ CialoWezaY[ DlugoscWeza - 1 ] ][ CialoWezaX[ DlugoscWeza - 1 ] + 1 ] == ' ' )
            {
                ++DlugoscWeza;
                mapa[ CialoWezaY[ DlugoscWeza - 1 ] ][ CialoWezaX[ DlugoscWeza - 1 ] + 1 ] == znakWeza;
                ostatniaPozycjaX = CialoWezaX[ DlugoscWeza - 1 ];
                ostatniaPozycjaY = CialoWezaY[ DlugoscWeza - 1 ];
                nowySegment = true;
            }
           
            else if( mapa[ CialoWezaY[ DlugoscWeza - 1 ] - 1 ][ CialoWezaX[ DlugoscWeza - 1 ] ] == ' ' )
            {
                ++DlugoscWeza;
                mapa[ CialoWezaY[ DlugoscWeza - 1 ] - 1 ][ CialoWezaX[ DlugoscWeza - 1 ] - 1 ] == znakWeza;
                ostatniaPozycjaX = CialoWezaX[ DlugoscWeza - 1 ];
                ostatniaPozycjaY = CialoWezaY[ DlugoscWeza - 1 ];
                nowySegment = true;
            }
           
            else if( mapa[ CialoWezaY[ DlugoscWeza - 1 ] + 1 ][ CialoWezaX[ DlugoscWeza - 1 ] ] == ' ' )
            {
                ++DlugoscWeza;
                mapa[ CialoWezaY[ DlugoscWeza - 1 ] + 1 ][ CialoWezaX[ DlugoscWeza - 1 ] ] == znakWeza;
                ostatniaPozycjaX = CialoWezaX[ DlugoscWeza - 1 ];
                ostatniaPozycjaY = CialoWezaY[ DlugoscWeza - 1 ];
                nowySegment = true;
            }
        }
       
       
        else
        {
            mapa[ PozycjaGlowyY + goraDol ][ PozycjaGlowyX + lewaPrawa ] = znakWeza;
            poprzedniaPozycjaX = PozycjaGlowyX;
            poprzedniaPozycjaY = PozycjaGlowyY;
            PozycjaGlowyY += goraDol;
            PozycjaGlowyX += lewaPrawa;
        }
       
        for( int i = 0; i < DlugoscWeza; i++ ) // przesuwanie weza
        {
            nastepnaPozycjaX = CialoWezaX[ i ];
            nastepnaPozycjaY = CialoWezaY[ i ];
            CialoWezaX[ i ] = poprzedniaPozycjaX;
            CialoWezaY[ i ] = poprzedniaPozycjaY;
           
            poprzedniaPozycjaX = nastepnaPozycjaX;
            poprzedniaPozycjaY = nastepnaPozycjaY;
            if( i == DlugoscWeza - 1 && nowySegment == false )
                 mapa[ ostatniaPozycjaY ][ ostatniaPozycjaX ] = ' ';
           
        }
        nowySegment = false;
        ostatniaPozycjaX = CialoWezaX[ DlugoscWeza - 1 ];
        ostatniaPozycjaY = CialoWezaY[ DlugoscWeza - 1 ];
       
       
        // losowanie jablka
       
        if( czyIstnieje == false )
        {
            do {
                JablkoX =( std::rand() % KOLUMNY - 2 ) + 1;
                JablkoY =( std::rand() % WIERSZE - 2 ) + 1;
               
            } while( mapa[ JablkoY ][ JablkoX ] != ' ' );
           
            czyIstnieje = true;
            mapa[ JablkoY ][ JablkoX ] = znakJablka;
        }
       
        system( "cls" );
    }
}
P-162710
Bercik97
» 2017-06-23 10:42:21
Wow propsy :D Jaram sie, ile już uczysz sie c++ ?
P-162776
Chowan
» 2017-06-23 18:17:32
A wgle to się opłaca coś takiego pisać znajac  jedynie pętlę tablice czy się uczyć dalej wskaźniki struktury klasy i dopiero brać się za takiego snake czy inne tego typu rzeczy.
P-162785
Saran
» 2017-06-23 18:39:58
Oczywiście, że się opłaca.
P-162787
« 1 » 2
  Strona 1 z 2 Następna strona