tomasz Temat założony przez niniejszego użytkownika |
» 2013-08-20 15:16:10 Wklejam cały, bo nasunęło mi się drugie pytanie, a mianowicie zauważyłem jak by program trochę się ciął. Bardzo możliwe, że napaskudziłem w kodzie, sam oceń. Aha i chętnie przyjmę krytykę co do samego napisanego kodu, bo domyślam się, że mam jeszcze złe nawyki. ps Zastanawiałem się, czy użycie wskaźników nie przyśpieszyło by pętli odpowiadającej za naciskanie przycisków. #include <SFML/Window.hpp> #include <SFML/Graphics.hpp> #include <ctime>
bool click( sf::Mouse & mouse, sf::RectangleShape & object, sf::RenderWindow & window ) { if( mouse.getPosition( window ).x > object.getPosition().x && mouse.getPosition( window ).x < object.getPosition().x + object.getSize().x && mouse.getPosition( window ).y > object.getPosition().y && mouse.getPosition( window ).y < object.getPosition().y + object.getSize().y && mouse.isButtonPressed( mouse.Left ) ) return true; else return false; }
void menu( sf::RectangleShape & object1, sf::RectangleShape & object2, sf::RenderWindow & window ) { sf::Font font1; font1.loadFromFile( "fonts/comicbd.ttf" ); sf::Font font2; font2.loadFromFile( "fonts/BRUSHSCI.ttf" ); sf::Text text1( "1 Player", font1, 20 ); sf::Text text2( "2 Players", font1, 20 ); object1.setPosition( 350, 355 ); object1.setSize( sf::Vector2f( 100, 50 ) ); object1.setFillColor( sf::Color::Blue ); object2.setPosition( 350, 420 ); object2.setSize( sf::Vector2f( 100, 50 ) ); object2.setFillColor( sf::Color::Blue ); text1.setPosition( object1.getPosition().x + 10, object1.getPosition().y + 12 ); text2.setPosition( object2.getPosition().x + 6, object2.getPosition().y + 12 ); sf::Text text( "Memory", font2, 200 ); text.setColor( sf::Color::Blue ); text.setPosition( 110, 135 ); text.rotate( - 15 ); window.draw( object1 ); window.draw( object2 ); window.draw( text1 ); window.draw( text2 ); window.draw( text ); }
void levelMenu( sf::RectangleShape & object1, sf::RectangleShape & object2, sf::RectangleShape & object3, sf::RenderWindow & window ) { sf::Font font1; font1.loadFromFile( "fonts/comicbd.ttf" ); sf::Font font2; font2.loadFromFile( "fonts/BRUSHSCI.ttf" ); sf::Text text1( "Level I", font1, 20 ); sf::Text text2( "Level II", font1, 20 ); sf::Text text3( "Level III", font1, 20 ); object1.setSize( sf::Vector2f( 100, 50 ) ); object1.setPosition( 350, 315 ); object1.setFillColor( sf::Color::Blue ); object2.setSize( sf::Vector2f( 100, 50 ) ); object2.setPosition( 350, 380 ); object2.setFillColor( sf::Color::Blue ); object3.setSize( sf::Vector2f( 100, 50 ) ); object3.setPosition( 350, 445 ); object3.setFillColor( sf::Color::Blue ); text1.setPosition( object1.getPosition().x + 15, object1.getPosition().y + 12 ); text2.setPosition( object2.getPosition().x + 10, object2.getPosition().y + 12 ); text3.setPosition( object3.getPosition().x + 6, object3.getPosition().y + 12 ); sf::Text text( "Level", font2, 200 ); text.setColor( sf::Color::Blue ); text.setPosition( 165, 115 ); text.rotate( - 15 ); window.draw( object1 ); window.draw( object2 ); window.draw( object3 ); window.draw( text1 ); window.draw( text2 ); window.draw( text3 ); window.draw( text ); }
int main() { sf::RenderWindow window( sf::VideoMode( 800, 600, 32 ), "SFML 2.0" ); sf::Event zdarzenie; sf::Mouse mouse; sf::Font font; font.loadFromFile( "fonts/arial.ttf" ); int choice = 0; int a = 0; int level = 0; bool won = true; sf::RectangleShape aTile; sf::RectangleShape bTile; int hitTile[ 2 ]; std::string hitText[ 2 ] = { " ", " " }; sf::RectangleShape tile1; sf::RectangleShape tile2; sf::RectangleShape tile3; sf::RectangleShape tile4; sf::RectangleShape tile5; sf::RectangleShape tile6; sf::RectangleShape tile7; sf::RectangleShape tile8; sf::RectangleShape tile9; sf::RectangleShape tile10; sf::RectangleShape tile11; sf::RectangleShape tile12; sf::RectangleShape tile13; sf::RectangleShape tile14; sf::RectangleShape tile15; sf::RectangleShape tile16; sf::Text tileText; sf::Text tileText1( "1", font, 20 ); sf::Text tileText2( "1", font, 20 ); sf::Text tileText3( "2", font, 20 ); sf::Text tileText4( "2", font, 20 ); sf::Text tileText5( "3", font, 20 ); sf::Text tileText6( "3", font, 20 ); sf::Text tileText7( "4", font, 20 ); sf::Text tileText8( "4", font, 20 ); sf::Text tileText9( "5", font, 20 ); sf::Text tileText10( "5", font, 20 ); sf::Text tileText11( "6", font, 20 ); sf::Text tileText12( "6", font, 20 ); sf::Text tileText13( "7", font, 20 ); sf::Text tileText14( "7", font, 20 ); sf::Text tileText15( "8", font, 20 ); sf::Text tileText16( "8", font, 20 ); sf::RectangleShape buttons[] = { tile1, tile2, tile3, tile4, tile5, tile6, tile7, tile8, tile9, tile10, tile11, tile12, tile13, tile14, tile15, tile16 }; sf::Text texts[] = { tileText1, tileText2, tileText3, tileText4, tileText5, tileText6, tileText7, tileText8, tileText9, tileText10, tileText11, tileText12, tileText13, tileText14, tileText15, tileText16 }; buttons[ 0 ].setPosition( 350, 250 ); buttons[ 0 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 1 ].setPosition( 410, 250 ); buttons[ 1 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 2 ].setPosition( 350, 310 ); buttons[ 2 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 3 ].setPosition( 410, 310 ); buttons[ 3 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 4 ].setPosition( 290, 190 ); buttons[ 4 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 5 ].setPosition( 350, 190 ); buttons[ 5 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 6 ].setPosition( 410, 190 ); buttons[ 6 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 7 ].setPosition( 470, 190 ); buttons[ 7 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 8 ].setPosition( 290, 250 ); buttons[ 8 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 9 ].setPosition( 470, 250 ); buttons[ 9 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 10 ].setPosition( 290, 310 ); buttons[ 10 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 11 ].setPosition( 470, 310 ); buttons[ 11 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 12 ].setPosition( 290, 370 ); buttons[ 12 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 13 ].setPosition( 350, 370 ); buttons[ 13 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 14 ].setPosition( 410, 370 ); buttons[ 14 ].setSize( sf::Vector2f( 50, 50 ) ); buttons[ 15 ].setPosition( 470, 370 ); buttons[ 15 ].setSize( sf::Vector2f( 50, 50 ) ); for( int i = 0; i < 16; i++ ) { int los =( rand() % 16 ); sf::Text t = texts[ i ]; srand( time( NULL ) ); texts[ i ] = texts[ los ]; texts[ los ] = t; texts[ i ].setPosition( buttons[ i ].getPosition().x, buttons[ i ].getPosition().y ); texts[ los ].setPosition( buttons[ los ].getPosition().x, buttons[ los ].getPosition().y ); } sf::RectangleShape menuButton1; sf::RectangleShape menuButton2; sf::Text menuText1; sf::Text menuText2; sf::RectangleShape levelButton1; sf::RectangleShape levelButton2; sf::RectangleShape levelButton3; while( window.isOpen() ) { while( window.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) window.close(); if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape ) window.close(); } window.clear(); menu( menuButton1, menuButton2, window ); if( click( mouse, menuButton1, window ) && choice == 0 ) choice = 1; if( click( mouse, menuButton2, window ) && choice == 0 ) choice = 2; if( choice == 1 || choice == 2 ) { window.clear(); levelMenu( levelButton1, levelButton2, levelButton3, window ); if( click( mouse, levelButton1, window ) && level == 0 ) level = 4; if( click( mouse, levelButton2, window ) && level == 0 ) level = 16; if( click( mouse, levelButton3, window ) && level == 0 ) level = 36; } if( choice == 1 && level != 0 ) { window.clear(); for( int i = 0; i < level; i++ ) { window.draw( buttons[ i ] ); window.draw( texts[ i ] ); } for( int i = 0; i < level; i++ ) { if( click( mouse, buttons[ i ], window ) && buttons[ i ].getFillColor() != sf::Color::Magenta && buttons[ i ].getFillColor() != sf::Color::Black ) { buttons[ i ].setFillColor( sf::Color::Magenta ); hitText[ a ] = texts[ i ].getString(); hitTile[ a ] = i; a++; if( hitText[ 0 ] == hitText[ 1 ] && hitText[ 1 ] != " " ) { window.clear( sf::Color::Green ); a = 0; hitText[ 0 ] = " "; hitText[ 1 ] = " "; buttons[ hitTile[ 0 ] ].setFillColor( sf::Color::Black ); buttons[ hitTile[ 1 ] ].setFillColor( sf::Color::Black ); } if( hitText[ 0 ] != hitText[ 1 ] && hitText[ 1 ] != " " ) { window.clear( sf::Color::Green ); a = 0; hitText[ 0 ] = " "; hitText[ 1 ] = " "; buttons[ hitTile[ 0 ] ].setFillColor( sf::Color::White ); buttons[ hitTile[ 1 ] ].setFillColor( sf::Color::White ); } } won = true; } for( int i = 0; i < 16; i++ ) { if( buttons[ i ].getFillColor() != sf::Color::Black ) won = false; } if( won ) { window.clear(); sf::Text grat( "Gratulacje", font, 100 ); grat.setPosition( 100, 100 ); window.draw( grat ); } } if( choice == 2 && level != 0 ) { window.clear(); } window.display(); } return 0; }
|