pekfos |
» 2015-05-28 15:53:57 std::swap(). |
|
arek213 Temat założony przez niniejszego użytkownika |
» 2015-05-28 17:08:51 Nawet nie wiesz jak mi pomogłeś ! Teraz tylko jakoś musze ustawić aby czyściło mi tylko wybrane elementy tablicy oraz aby po dodaniu już 3 elementu nie robiły się dziury między wężem oraz uporządkować kod. Czy o to chodziło z tym swapem ?: #include <iostream> #include <windows.h> #include<cstdlib> #include<conio.h> #include<vector> #include <algorithm> #include<ctime>
using namespace std;
class Plansza { private: char sciana = 219; public: char tablica[ 23 ][ 70 ]; void wypelnij() { for( int i = 0; i < 23; i++ ) { for( int j = 0; j < 70; j++ ) { tablica[ i ][ j ] = 0; } } for( int j = 0; j < 70; j++ ) { tablica[ 0 ][ j ] = sciana; } for( int i = 1; i < 23; i++ ) { tablica[ i ][ 0 ] = sciana; tablica[ i ][ 69 ] = sciana; } for( int j = 0; j < 70; j++ ) { tablica[ 22 ][ j ] = sciana; } } void rysuj() const { for( int i = 0; i < 23; i++ ) { for( int j = 0; j < 70; j++ ) { cout << tablica[ i ][ j ]; } cout << endl; } } }; class segment { public: int x, y; segment( int x, int y ) : x( x ) , y( y ) { } }; class waz { public: vector < segment > tab; char znak = 219; };
class Jedzenie { public: char znak = '@'; int poz_x; int poz_y; Jedzenie( int x, int y ) : poz_x( x ) , poz_y( y ) { }; };
int main() { Plansza mapa; Jedzenie jablko( 40, 15 ); mapa.wypelnij(); mapa.tablica[ jablko.poz_y ][ jablko.poz_x ] = jablko.znak; waz Waz; segment pierwszy( 39, 15 ); Waz.tab.push_back( pierwszy ); mapa.tablica[ Waz.tab[ 0 ].y ][ Waz.tab[ 0 ].x ] = Waz.znak; mapa.rysuj(); char c = 'w'; int a; int b; int d; int e; for( int j = 0;; ++j ) { if( kbhit() ) { c = getch(); } for( int i = 0; i < Waz.tab.size(); ++i ) { mapa.tablica[ Waz.tab[ i ].y ][ Waz.tab[ i ].x ] = ' '; d = Waz.tab[ i ].y; e = Waz.tab[ i ].x; if( i >= 1 ) { Waz.tab[ i ].y = a; Waz.tab[ i ].x = b; mapa.tablica[ Waz.tab[ i ].y ][ Waz.tab[ i ].x ] = Waz.znak; } a = Waz.tab[ i ].y; b = Waz.tab[ i ].x; swap( d, a ); swap( b, e ); if( i == 0 ) { switch( c ) { case 's': Waz.tab[ 0 ].y++; break; case 'w': Waz.tab[ 0 ].y--; break; case 'a': Waz.tab[ 0 ].x--; break; case 'd': Waz.tab[ 0 ].x++; break; } mapa.tablica[ Waz.tab[ i ].y ][ Waz.tab[ i ].x ] = Waz.znak; } if( Waz.tab[ 0 ].y == jablko.poz_y && Waz.tab[ 0 ].x == jablko.poz_x ) { srand( time( NULL ) ); Waz.tab.push_back( segment( b, a ) ); jablko.poz_y = rand() % 21 + 1; jablko.poz_x = rand() % 68 + 1; mapa.tablica[ jablko.poz_y ][ jablko.poz_x ] = jablko.znak; break; } } system( "cls" ); mapa.rysuj(); } return 0; }
|
|
pekfos |
» 2015-05-28 20:06:18 Czy o to chodziło z tym swapem ?:
|
Mniej więcej. Wystarczyły by 2 zmienne: Dla głowy zapisujesz współrzędne i wykonujesz ruch, dla reszty podmieniasz zapisane współrzędne z tymi z aktualnie przerabianego segmentu. |
|
arek213 Temat założony przez niniejszego użytkownika |
» 2015-05-28 20:27:25 Da się zrobić tak aby tylko czyściło te miejsca których jest wąż ? Bo jak tak czyszcze całą konsole to dość dziwnie wygląda.
Próbuje to zrobić dla dwóch zmiennych i nie wychodzi. |
|
notabigthreat |
» 2015-05-28 22:10:48 Sam nigdy nie próbowałem i nic nie gwarantuję. Możesz cofać kursor ( '\b' ) i nadpisywać zamiast czyścić ekran. |
|
stevy |
» 2015-05-29 08:28:38 W plik nagłówkowym Windows.h masz wszystko czego potrzebujesz. Zakładam że Twój problem jest trywialny i nie oczekujesz robić tego szybciej niż przesuwać karetkę (tak, ten wskaźnik konsoli to karetka) w odpowiednie miejsca. Będziesz potrzebował lekkiej znajomości swojego pierwszego uchwytu do okna (HANDLE z Windows.H) np. tak się ją deklaruje: HANDLE poruszanie = GetStdHandle( STD_OUTPUT_HANDLE );
jest tam też: SetConsoleTextAttribute( poruszanie, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE );
czy w końcu coś co pozwoli Ci ustawić tą karetkę: COORD pozycja_karetki;
pozycja_karetki.x = 22; pozycja_karetki.y = 11; SetConsoleCursorPosition( poruszanie, Pozycja_karetki ); printf( "tekst w pozycji (22,11);
I wiele wiele innych. Snake to byłą moja 2 gra jaką napisałem, mniej więcej po 2 tygodniach od rozpoczęcia nauki programowania w C, więc mam do niej duży sentyment. Mam nadzieję, że pomogłem. |
|
arek213 Temat założony przez niniejszego użytkownika |
» 2015-05-29 11:03:18 Jak się ucyzłeś języka, że jużpo dwóch tygodniach od nauki zaczęłeś pisać snake ? Jak długo go pisałeś ? |
|
stevy |
» 2015-05-29 12:28:21 Właśnie pisząc gry nauczyłem się programować. Kółko i krzyżyk, snake czy sokoban dobrze wpływają na naukę algorytmowego myślenia. Samego snake pisałem koło tygodnia, bo brakowało mi wiedzy o samym języku, bibliotekach, funkcjach, itd., podobnjie jak Tobie. Kod miał koło 1000 linijek, może mniej... Oglądałem go ostatnio, aż się łezka w oku kręci:) |
|
1 « 2 » 3 |