Hunteerrq Temat założony przez niniejszego użytkownika |
Gra odczytywana jako wirus. » 2015-12-25 13:38:53 Witam, napisałem grę typu Pong, jednak na innych komputerach gra jest blokowana przez wszystkie antywirusy. Link do pliku .exe z teksturami i z plikami SFML: http://sendfile.es/pokaz/623739---rlqr.htmlJest to typowa gra Pong, jedyny dodatek jest taki, że co 5 sekund losuje pseudolosową liczbę od 0-9, jeżeli jest od <0;1> to zwiększa prędkość o 1,5, jeżeli od <2;3> to zwiększa wysokość o 1,5, a w pozostałych przypadkach nic nie robi. Nie wiem czy kod źródłowy pomoże, gdyż napisałem to bardzo chaotycznie i robiłem metodą prób i błędów, jednak postanowiłem dodać. #include <SFML/Graphics.hpp> #include <cmath> #include <iostream> #include <Windows.h>
const int windowx = 1280; const int windowy = 520;
using namespace std; int main() { int warunek = 0; int random; int gra = 0; int pointsG1, pointsG2; pointsG1 = 0; pointsG2 = 0; bool heigh, width; heigh = true; width = true; sf::Clock clock; sf::Clock clock2; bool top = true; float mouse; float bx, by; float p1, p2, p1x, p2x; p2x = 470; p1x = 0; p1 = 150; p2 = 150; bx = 232, 5; by = 160; srand( time( NULL ) ); sf::RenderWindow okno( sf::VideoMode( windowx, windowy ), "Game-1" ); sf::Texture TextureBackground; sf::Texture TexturePlayer; sf::Texture TextureBall; sf::Texture TextureLost1; sf::Texture TextureLost2; sf::View view( sf::FloatRect( 0, 0, 500, 340 ) ); okno.setView( view ); sf::View view1( sf::FloatRect( 0, 0, 1000, 400 ) ); if( !TexturePlayer.loadFromFile( "Player.png" ) ) cout << "Could not load Player texture \n "; else cout << "Player texture was properly loaded \n "; if( !TextureBackground.loadFromFile( "Background.png" ) ) cout << "Cound not load Background texture \n "; else cout << "Background was properly loaded \n"; if( !TextureBall.loadFromFile( "Ball.png" ) ) cout << "Could not load Ball texture \n"; else cout << "Ball texture was properly loaded \n"; if( !TextureLost1.loadFromFile( "LOST1.png" ) ) cout << "Could not load Lost1 texture \n"; else cout << "Lost1 texture was properly loaded \n"; if( !TextureLost2.loadFromFile( "LOST2.png" ) ) cout << "Could not load Lost2 texture \n"; else cout << "Lost2 texture was properly loaded \n"; sf::Sprite Background; sf::Sprite Player; sf::Sprite Player2; sf::Sprite Ball; sf::Sprite Lost1; sf::Sprite Lost2; Background.setTexture( TextureBackground ); Player.setTexture( TexturePlayer ); Player2.setTexture( TexturePlayer ); Ball.setTexture( TextureBall ); Lost1.setTexture( TextureLost1 ); Lost2.setTexture( TextureLost2 ); while( okno.isOpen() ) { sf::Time elapsed1 = clock.getElapsedTime(); sf::Event event; sf::Time elapsed2 = clock2.getElapsedTime(); if( warunek == 0 ) { random = rand() % 10; cout << random << endl; warunek++; } if( elapsed2.asSeconds() >= 5.000 ) { random = rand() % 10; cout << random << endl; clock2.restart(); } Player2.setPosition( p2x, p2 ); Player.setPosition( p1x, p1 ); Ball.setPosition( bx, by ); while( okno.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) okno.close(); if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape ) okno.close(); } okno.clear(); if( random >= 4 ) { if( elapsed1.asSeconds() > 0.016 ) { if( bx <= 14 &&( p1 - 26 >= by || p1 + 55 <= by ) ) { cout << "Gracz1 przegral\n"; pointsG2++; bx = 232, 5; by = 160; cout << "Gracz1 ma: " << pointsG1 << " punktow, Gracz2 ma: " << pointsG2 << " punktow \n"; gra = 1; } if( bx >= 459 &&( p2 - 26 >= by || p2 + 55 <= by ) ) { cout << "Gracz 2 przegral \n"; pointsG1++; bx = 232, 5; by = 160; cout << "Gracz1 ma: " << pointsG1 << " punktow, Gracz2 ma: " << pointsG2 << " punktow \n"; okno.draw( Lost2 ); gra = 2; } if( top && width ) { bx = bx - 4; by = by - 4; if( by <= 13 ) top = false; if( bx <= 10 ) width = false; } else if( !top && width ) { bx = bx - 4; by = by + 4; if( by >= 290 ) top = true; if( bx <= 10 ) width = false; } else if( !top && !width ) { by = by + 4; bx = bx + 4; if( by >= 290 ) top = true; if( bx >= 460 ) width = true; } else if( top && !width ) { by = by - 4; bx = bx + 4; if( by <= 10 ) top = false; if( bx >= 460 ) width = true; } clock.restart(); } } else if( random >= 2 && random < 4 ) { if( elapsed1.asSeconds() > 0.013 ) { if( bx <= 14 &&( p1 - 26 >= by || p1 + 55 <= by ) ) { cout << "Gracz1 przegrał\n"; pointsG2++; bx = 232, 5; by = 160; cout << "Gracz1 ma: " << pointsG1 << " punktow, Gracz2 ma: " << pointsG2 << " punktow \n"; gra = 1; } if( bx >= 459 &&( p2 - 26 >= by || p2 + 55 <= by ) ) { cout << "Gracz 2 przegrał \n"; pointsG1++; bx = 232, 5; by = 160; cout << "Gracz1 ma: " << pointsG1 << " punktow, Gracz2 ma: " << pointsG2 << " punktow \n"; okno.draw( Lost2 ); gra = 2; } if( top && width ) { bx = bx - 4; by = by - 6; if( by <= 13 ) top = false; if( bx <= 10 ) width = false; } else if( !top && width ) { bx = bx - 4; by = by + 6; if( by >= 290 ) top = true; if( bx <= 10 ) width = false; } else if( !top && !width ) { by = by + 6; bx = bx + 4; if( by >= 290 ) top = true; if( bx >= 460 ) width = true; } else if( top && !width ) { by = by - 6; bx = bx + 4; if( by <= 10 ) top = false; if( bx >= 460 ) width = true; } clock.restart(); } } else if( random >= 0 && random < 2 ) { if( elapsed1.asSeconds() > 0.013 ) { if( bx <= 14 &&( p1 - 26 >= by || p1 + 55 <= by ) ) { cout << "Gracz1 przegrał\n"; pointsG2++; bx = 232, 5; by = 160; cout << "Gracz1 ma: " << pointsG1 << " punktow, Gracz2 ma: " << pointsG2 << " punktow \n"; gra = 1; } if( bx >= 459 &&( p2 - 26 >= by || p2 + 55 <= by ) ) { cout << "Gracz 2 przegrał \n"; pointsG1++; bx = 232, 5; by = 160; cout << "Gracz1 ma: " << pointsG1 << " punktow, Gracz2 ma: " << pointsG2 << " punktow \n"; okno.draw( Lost2 ); gra = 2; } if( top && width ) { bx = bx - 6; by = by - 4; if( by <= 13 ) top = false; if( bx <= 10 ) width = false; } else if( !top && width ) { bx = bx - 6; by = by + 4; if( by >= 290 ) top = true; if( bx <= 10 ) width = false; } else if( !top && !width ) { by = by + 4; bx = bx + 6; if( by >= 290 ) top = true; if( bx >= 460 ) width = true; } else if( top && !width ) { by = by - 4; bx = bx + 6; if( by <= 10 ) top = false; if( bx >= 460 ) width = true; } clock.restart(); } } if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) && p1 >= 20 ) { p1 = p1 - 1; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::S ) && p1 <= 240 ) { p1 = p1 + 1; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) && p2 >= 20 ) { p2 = p2 - 1; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) && p2 <= 240 ) { p2 = p2 + 1; } if( gra == 1 ) { okno.setView( view1 ); okno.draw( Lost1 ); okno.display(); Sleep( 1200 ); gra = 0; random = 6; okno.setView( view ); } else if( gra == 2 ) { okno.setView( view1 ); okno.draw( Lost2 ); okno.display(); Sleep( 1200 ); gra = 0; random = 6; okno.setView( view ); } else { okno.draw( Background ); okno.draw( Player ); okno.draw( Player2 ); okno.draw( Ball ); okno.display(); } } return 0; }
|
|
DejaVu |
» 2015-12-25 19:01:04 1. Spróbuj skompilować w trybie release. 2. Wywal plik nagłówkowy Windows.h - jeżeli chcesz użyć sleep-a to użyj przenośnego rozwiązania dostarczonego w bibliotece SFML. |
|
Gibas11 |
» 2015-12-25 21:35:57 @DejaVu Ad2. Btw na początku kursu o WinApi powinna być informacja, że jest niezalecane. Uczenie nowych programistów tej nieporęcznej kobyły jest taką zbrodnią jak zachęcanie do używania goto. :\ Sam kurs oczywiście powinien zostać, a nuż ktoś będzie chciał pracować w M$, ale należałoby chyba wyboldować informacje o wadach WinApi, których praktycznie nie da się przeskoczyć. Sam jako początkujący programista pomyślałem „Mam Windowsa a to coś nazywa się WinApi, na pewno będzie idealne, w końcu nazwa pasuje do mojego systemu, czyli musi być dopracowane, szybkie i wygodne!”, no, mniej - więcej tak, w każdym razie był to największy błąd podczas mojej nauki kodzenia. |
|
C-Objective |
» 2015-12-26 15:20:36 Nieporęczna kobyła :)? Jak nieporęczna to możnaby to jakoś upodobnić do C (Oczywiście spróbować, może jest to nie możliwe...), a kobyła jako-taka to to nie jest. SFML dla windows może nie być zrobione w api linuxa. Więc wszystko co pod windą zmnierza do jednego i tego samego G (WINAPI). Fajnie byłoby, gdyby WinAPI chociaż by się postarało i zrobiło jakąś lepszą obsługę błędów - bo nie wiadomo o co chodzi (program przestał odpowiadać...), taką jak np. w C++ (Chodzi mi głównie o nowsze rozwiązania), albo Java, ale na to nie możemy liczyć ponieważ M$ nie chce się bawić w takie pierdoły, a nowe WinAPI wyjdzie pewnie za kilka lat (10 dopiero co wyszła), a na to niestety nawet ósemka się nie załapie. Goto nie jest takie złe, chyba że piszemy mały kod (w dodatku formatowany w astyle), jednak dalej twierdzę(imy) że goto jest batchowym przybytkiem. W Java na szczęście to usunęli. Co do tematu: Win32.Trojan.Generic? Dodaj do wyątków, zrób antywiruswi ice bucket challenge. Sleep nie jest takie złe. Używam go, ale moje programy nie są toksyczne. Jedyną rzecz którą mogę wytknąć Sleep'owi to to że zamraża całą aplikację (io w konsoli, itd). |
|
Elaine |
» 2015-12-26 16:16:01 Fajnie byłoby, gdyby WinAPI chociaż by się postarało i zrobiło jakąś lepszą obsługę błędów - bo nie wiadomo o co chodzi (program przestał odpowiadać...), taką jak np. w C++ (Chodzi mi głównie o nowsze rozwiązania), albo Java |
Takie coś już zostało wprowadzone w Windowsie NT 3.1, wydanym w 1993 roku, będącym pierwszą wersją Windowsa¹. Nazywa się SEH; wiele kompilatorów C++ używa tego mechanizmu do implementacji wyjątków C++, bo już istnieje i jest wystarczająco ogólny. (1). "Windowsów" opartych o DOS nie liczę, w końcu te dwie linie systemów nawet nie mają zgodnego API. To tylko chwyt marketingowy. |
|
C-Objective |
» 2015-12-26 17:34:09 tj? W gcc, WinAPI podczas jakiegoś błędu zawiesza program i wyświetla wspomnianą wcześniej wiadomość |
|
« 1 » |