Jaka wiedza jest mi potrzebna do napisania Snake w konsoli ?
Ostatnio zmodyfikowano 2017-06-28 10:58
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. |
|
pekfos |
» 2017-06-19 19:56:18 Minimum to tablice i pętle. |
|
pokrywa1 Temat założony przez niniejszego użytkownika |
» 2017-06-19 19:57:35 coś wiecej moze ? |
|
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. |
|
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 :) #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; 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 ] = ' '; } } int JablkoX; int JablkoY; bool czyIstnieje; bool nowySegment; int PozycjaGlowyX = KOLUMNY / 2; int PozycjaGlowyY = WIERSZE / 2; mapa[ PozycjaGlowyY ][ PozycjaGlowyX ] = znakWeza; int CialoWezaX[( WIERSZE - 2 ) *( KOLUMNY - 2 ) ]; int CialoWezaY[( WIERSZE - 2 ) *( KOLUMNY - 2 ) ]; for( int i = 0; i < DlugoscWeza - 1; i++ ) { CialoWezaY[ i ] = PozycjaGlowyY; CialoWezaX[ i ] = PozycjaGlowyX - i - 1; mapa[ CialoWezaY[ i ] ][ CialoWezaX[ i ] ] = znakWeza; } int ostatniaPozycjaX; int ostatniaPozycjaY; int poprzedniaPozycjaX; int poprzedniaPozycjaY; int nastepnaPozycjaX; 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 ) { goraDol = - 1; lewaPrawa = 0; } if( klawisz == 77 ) { lewaPrawa = 1; goraDol = 0; } if( klawisz == 80 ) { goraDol = 1; lewaPrawa = 0; } if( klawisz == 75 ) { lewaPrawa = - 1; goraDol = 0; } if( mapa[ PozycjaGlowyY + goraDol ][ PozycjaGlowyX + lewaPrawa ] == '#' || mapa[ PozycjaGlowyY + goraDol ][ PozycjaGlowyX + lewaPrawa ] == znakWeza ) { cout << "przegrales! "; return 0; } else if( PozycjaGlowyX == JablkoX && PozycjaGlowyY == JablkoY ) { 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++ ) { 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 ]; 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" ); } }
|
|
Bercik97 |
» 2017-06-23 10:42:21 Wow propsy :D Jaram sie, ile już uczysz sie c++ ? |
|
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. |
|
Saran |
» 2017-06-23 18:39:58 Oczywiście, że się opłaca. |
|
« 1 » 2 |