[SFML 2.0] Snake
Ostatnio zmodyfikowano 2013-04-20 11:16
Argor Temat założony przez niniejszego użytkownika |
[SFML 2.0] Snake » 2013-04-20 10:21:51 Witam, napisałem ostatnio taką prymitywną wersję gry "Snake" przy użyciu biblioteki SFML 2.0. I nie działa, po uruchomieniu wyświetla pierwszy segment i cel, nie wyświetla pozostałych segmentów i nie aktualizuje pozycji wszystkich części, pomimo, że ostatnio wciśnięty klawisz jest aktualizowany. Z tego wnioskuję, że nie działa fragment: for( n = parts - 1; n == 0; n-- ) { x[ n + 1 ] = x[ n ]; y[ n + 1 ] = y[ n ]; }
Oraz: for( i = 2; i == parts; i++ ) { snake.setPosition( 50 * x[ i ], 50 * y[ i ] ); renderWindow.draw( snake ); }
Cały kod: #include <SFML\Graphics.hpp> #include <iostream>
int main() { int x[ 50 ], y[ 50 ], parts, n, n2, i, d, celx, cely, k; std::cout << "Wybierz opoznienie: "; float TIME_STEP; std::cin >> TIME_STEP; parts = 3; celx = 3; cely = 9; k = 4; x[ 0 ] = 8; y[ 0 ] = 6; x[ 1 ] = 8; y[ 1 ] = 6; x[ 2 ] = 7; y[ 2 ] = 6; x[ 3 ] = 6; y[ 3 ] = 6; sf::RenderWindow renderWindow( sf::VideoMode( 800, 600, 32 ), "Snake 2.0" ); sf::Texture texture1; texture1.loadFromFile( "snake.png" ); sf::Sprite snake; snake.setTexture( texture1 ); sf::Texture texture2; texture2.loadFromFile( "snakeh.png" ); sf::Sprite snakeh; snakeh.setTexture( texture2 ); sf::Texture texture3; texture3.loadFromFile( "cel.png" ); sf::Sprite cel; cel.setTexture( texture3 ); sf::Event windowEvent; sf::Clock loopClock; float accumulator = 0; while( renderWindow.isOpen() ) { accumulator += loopClock.restart().asSeconds(); while( renderWindow.pollEvent( windowEvent ) ) { if( windowEvent.type == sf::Event::Closed ) { renderWindow.close(); } if( windowEvent.type == sf::Event::KeyPressed && windowEvent.key.code == sf::Keyboard::W ) { k = 1; } if( windowEvent.type == sf::Event::KeyPressed && windowEvent.key.code == sf::Keyboard::S ) { k = 2; } if( windowEvent.type == sf::Event::KeyPressed && windowEvent.key.code == sf::Keyboard::A ) { k = 3; } if( windowEvent.type == sf::Event::KeyPressed && windowEvent.key.code == sf::Keyboard::D ) { k = 4; } if( windowEvent.type == sf::Event::KeyPressed && windowEvent.key.code == sf::Keyboard::Escape ) { renderWindow.close(); } } if( accumulator > TIME_STEP ) { if( k == 1 ) { y[ 0 ] = y[ 1 ] - 1; } if( k == 2 ) { y[ 0 ] = y[ 1 ] + 1; } if( k == 3 ) { x[ 0 ] = x[ 1 ] - 1; } if( k == 4 ) { x[ 0 ] = x[ 1 ] + 1; } if( x[ 0 ] == 16 ) { x[ 0 ] = 0; } if( x[ 0 ] ==- 1 ) { x[ 0 ] = 15; } if( y[ 0 ] == 12 ) { y[ 0 ] = 0; } if( y[ 0 ] ==- 1 ) { y[ 0 ] = 11; } for( i = 2; i == parts; i++ ) { if( x[ 1 ] == x[ i ] && y[ 1 ] == y[ i ] ) { renderWindow.close(); } } if( x[ 0 ] == celx && y[ 0 ] == cely ) { parts++; celx = rand() % 16; cely = rand() % 12; for( n2 = 0; n2 == parts + 1; n2++ ) { if( celx == x[ n2 ] && cely == y[ n2 ] ) { celx = rand() % 16; cely = rand() % 12; n2 = 0; } } } for( n = parts - 1; n == 0; n-- ) { x[ n + 1 ] = x[ n ]; y[ n + 1 ] = y[ n ]; } accumulator -= TIME_STEP; } renderWindow.clear( sf::Color( 0, 0, 0, 255 ) ); snakeh.setPosition( 50 * x[ 1 ], 50 * y[ 1 ] ); renderWindow.draw( snakeh ); for( i = 2; i == parts; i++ ) { snake.setPosition( 50 * x[ i ], 50 * y[ i ] ); renderWindow.draw( snake ); } cel.setPosition( 50 * celx, 50 * cely ); renderWindow.draw( cel ); renderWindow.display(); } } [EDIT] Wybaczcie, że tutaj piszę, nie zauważyłem, że powstał dział poświęcony pisaniu gier 2D... Ale na tym forum użytkownik nie ma opcji przeniesienia swojego tematu do innego działu, więc już nic nie naprawię :/ |
|
pekfos |
» 2013-04-20 10:43:35 Zły warunek w pętli.
//edit: temat przeniesiony. |
|
Argor Temat założony przez niniejszego użytkownika |
» 2013-04-20 10:48:09 W której pętli? I na czym polega jego niewłaściwość? Za przeniesienie tematu dziękuję :) |
|
pekfos |
» 2013-04-20 10:55:36 W tych, które podałeś przed całym kodem. Zły operator. |
|
DejaVu |
» 2013-04-20 11:08:36 |
|
Argor Temat założony przez niniejszego użytkownika |
» 2013-04-20 11:16:06 :O Nie rozumiem, jakim sposobem mogłem tego nie zauważyć siedząc nad tym kodem od takiego czasu... Dzięki, już wszystko działa :) |
|
« 1 » |