Kerbal Space Program Forum | Polska Społeczność Gry
Off-topic => Dyskusje na dowolne tematy => Wątek zaczęty przez: Windowsill w Śro, 23 Kwi 2014, 08:29:50
-
Cześć!
Jeśli jesteś programistą to napisz w jakim języku piszesz i ile już się nim posługujesz.
Okej ja zacznę ;)
Programuję w c++ od roku i znam trochę c#. Aktualnie piszę grę w c++ ale zobaczyłem KSP i mam przerwę w programowaniu.
-
Programuję w Java mniej więcej od pół roku. Podobnie jak ty zobaczyłem KSP ale nie bardzo na mnie wpłynęło.
-
Rok temu zacząłem w Javie ale przesiadłem się na Linuksa i zajarałem się Pythonem. Poza tym na pingwinku nie działa KSP. Niby jest wersja na Linuksa ale nie działa. >:(
-
Rok temu zacząłem w Javie ale przesiadłem się na Linuksa i zajarałem się Pythonem. Poza tym na pingwinku nie działa KSP. Niby jest wersja na Linuksa ale nie działa. >:(
Odpal na wirtualnej maszynie KSP ;D
-
Ja się bawię jedynie w webmasterkę. PHP, MYSQL, JavaScript, jQuery oraz AJAX.
-
Poza tym na pingwinku nie działa KSP.
Na laptopie pobrałem ze Steama i działa, chociaż fakt, o płynności (w przeciwieństwie do Win7) nie ma mowy.
Wracając do tematu wcześniej trochę próbowałem Javy oraz Pythona, teraz ze względu na studia oraz zainteresowania (elektronika/mikrokontrolery) najwięcej piszę w C/C++. Zamierzam się też bliżej zapoznać z C#. No i stosunkowo dużo pisałem w Lua.
-
Java(ewentualnie +MySQL, gdy potrzeba bazy), HTML+CSS+PHP+MySQL+JQuery
Jestem w trakcie pisania gry.
-
Możesz się pochwalić :)
-
http://forum.kerbale.pl/inne-gry/colony/
Ot, co! 8)
-
C++, HTML, JavaScript
-
PHP, HTML, Basic, MySQL, Lua
-
Mam pewien problem ponieważ też właśnie coś tworzę - dokładnie grę 2d typu tibia/margonem (http://margonem.pl) (Bliżej temu do margonem).
Macie może jakiś pomysł na wyświetlanie innych graczy? Jedyne co wymyśliłem to w intervalu co 300ms łączyć się ajaxem z bazą danych i sprawdzać czy w danym miejscu nie ma jakiegoś gracza, ale czy sprawdzanie co 300ms 609 kafelków nie zabije przeglądarki? Nie mam żadnej innej idei na napisanie tego póki co.
-
Przeglądarkę i pewnie przy okazji serwer. Wymyślając coś na szybko, to ja bym wysyłał do serwera zapytanie z pozycją aktualnego gracza. W takim wypadku, jeśli mapę przechowujesz w czymś na kształt tablicy dwuwymiarowej, musiałbyś sprawdzić jakieś r^2 innych pozycji dookoła otrzymanej pozycji (r - zasięg pola widzenia). Potem możesz odesłać listę graczy w pobliżu wraz z innymi potrzebnymi informacjami. Albo pustą jeśli niczego nie ma.
Chociaż nie wykluczam, że pewnie są jakieś lepsze sposoby żeby to zaimplementować, bo jednak gry, a w szczególności przeglądarkowe, to nie moja specjalność.
-
W sensie, żebym stworzył nową tablicę taką samą jak ta w której przechowuję kolizje, tylko przechowywać tam graczy? Poniekąd było by szybciej działać na pliku, ale w takim wypadku mógłby być problem, gdy jedna osoba wejdzie na drugą.
-
Tu nie chodzi o grę ani o przeglądarkę, ale o możliwie jak najlepiej zoptymalizowany algorytm, minimalizujący liczbę koniecznych czynności.
ROZWIĄZANIE NR. 1
Jakie będą wymiary w kafelkach? Wydaje mi się osobiście, że jedyne sensowne wyjście (biorąc pod uwagę, że plansza jest prostokątna) to 21x29 (bo pozostałe wyjścia to 3x203 i 7x87).
W takim wypadku, każdy gracz ma dwa konieczne dla Ciebie pola: położenie X z zakresu od 0 do 20 i położenie Y z zakresu od 0 do 28 (X i Y może być odwrotnie, mniejsza). Łącznie te dwie liczby zajmują 10 bitów.
Teraz załóżmy optymistyczny plan "na początek", że na serwerze znajduje się 1000 graczy. Oznacza to 10.000 bitów do pobrania co aktualizację. Oczywiście, za każdym razem wyliczasz na podstawie położenia tych graczy oraz gracza sterowanego, czy kogoś wyświetlić. 10 tys. bitów to nieco ponad kibibajt (zakładając, że 1 B = 8 b) - dokładnie 1250 bajtów. Skoro ustaliłeś interval na 300 ms (ach, te cudowne gry standalone z interwałem rzędu 17 ms :D), daje to ok. 4167 bajtów na sekundę. Zakładając, że miesiąc trwa średnio 30 dni, 10 GB transferu miesięcznie.
10 GB transferu miesięcznie, zakładając, że 24 godziny na dobę, 7 dni w tygodniu, bez przerwy na serwerze znajduje się tysiąc osób.
Co to oznacza?
1. Nikt nie będzie siedział na serwerze tak długo w ciągu miesiąca, by pobrać tak dużo danych. Załóżmy, że trafi się ktoś "mocno uzależniony", który w ciągu miesiąca spędzi na twoim serwerze łączny okres, powiedzmy 5 dni. W ciągu miesiąca pobierze on około 51 MB na każdego gracza. Zakładając, że ma ograniczony transfer do powiedzmy 5 GB miesięcznie, będzie mógł "grać" ze 100 graczami bez wyczerpania transferu. Prawda jest jednak taka, że osoby "mocno uzależnione" od wszelkich gier mogą wydawać więcej pieniędzy na lepszy internet.
2. Czy naprawdę jesteś przekonany, że serwer nie wytrzyma przeciążenia rzędu 350 MB na godzinę? No, chyba że oczekujesz większej ilości graczy, niż 1000 (co na początku może być trudne do osiągnięcia). Wtedy sprawa jest prosta: zarabianie pieniędzy np. na reklamach, mikropłatnościach, Premium. Będziesz w stanie utrzymać porządne serwery.
ROZWIĄZANIE NR. 2 (na które wpadłem przypadkiem)
Sposób na "bardzo dużą ilość graczy+bardzo mały transfer".
Położenie gracza musi być zapisywane na serwerze, inaczej gracze będą mogli czitować.
Prosta funkcja wewnątrz serwera, która co interwał rysuje rysunek z kompletną mapą świata gry, a na niej nakłada postaci graczy na podstawie ich położeń. Następnie, dla każdego gracza wycina fragment mapy i mu wysyła. O ile na początku, gdy graczy jest mało, bardziej opłaca się używać sposobu pierwszego, o tyle jednak w sposobie drugim wysyłana jest stale taka sama ilość danych - czyli jeden rysunek. Jeśli ilość przesyłanych danych odnośnie położenia (czyli sposób drugi) przekroczy ilość danych koniecznych do przesłania zaledwie jednego obrazka (co może zdarzyć się dosyć szybko), wystarczy przełączyć się na rozwiązanie drugie. Bez względu na to, czy gracz będzie 1, czy 100, czy pięć miliardów, ilość danych wysyłanych do pojedynczego gracza będzie taka sama. A jeśli mimo to graczy będzie tak dużo, że serwer przestanie wyrabiać... kupić lepszy serwer (jak napisałem pod koniec rozwiązania pierwszego)
-
Teraz jest to jedynie zamknięta pre-alpha tylko dla mnie. Całą grę widziało tyle osób, że mógłbym je policzyć na palcach jednej ręki, a o 1000 graczy to ja nawet nie marzę w tej chwili.
Tak, wszystkie informacje są zapisywane w bazie danych mysql. I właśnie myślałem nad tym, aby wyszukiwać co 300ms w bazie osoby na tej samej mapie, które są online w zakresie widzenia mojej postaci i te osoby wyświetlać.
Własnie o to mi chodzi czy to nie będzie zbyt duże obciążenie. Nie znam się, uczę się jedynie w domu i potrzebowałem takiej porady. Dziękuję :)
-
A jeśli nie jestem programistą, to też mogę napisać w jakim języku programuję? Bo Steven Prata programistą jako takim nie jest, ale bestsellerów na temat programowania kilka spłodził.
Ja na przykład piszę w C, czasami w C++, ale programistą nie jestem.
Edit: literówka.
-
Ja kodze w C++, kiedyś bawiłem się też Assemblerem, ale wole C++. ;)
-
Najchętniej to C++, php, bash, sql, css, assembler... niektórych bym tutaj językami nie nawał tak do końca, ale taką funkcję spełniają, więc cóż poradzić ;) Reszty nie wymienię, bo operuję nimi na tyle sprawnie, by wypadało to uczynić :)
-
Bascom :D :P
-
zaczynam naukę w C++, potrafię już pisać proste programy w konsoli ;)