> [inne][MySQL][PHP]Gra via www a aplikacja mobilna


#1

Jestem totalnym laikiem w kwestii programowania a pojawiam się tutaj ponieważ chciałbym to zmienić.

Mam swój pomysł na grę przez przeglądarkę i chciałbym do tej gry stworzyć również apkę mobilną. Pojawia się jednak dość istotne pytanie w jakich językach powinienem to zrobić?

Gry via www z tego co wiem pisane są w PHP/MySql ale czy może istnieje jakiś “lepszy” język do wykorzystania w tym celu? Czy później mając taka grę via www da się do niej napisać apke na androida i w jakim języku najlepiej to robić?

Prosiłbym Was o pomoc w dobraniu optymalnych narzędzi. Udzielając swoich odpowiedzi proszę napiszcie dlaczego akurat ten język i jeżeli macie jakieś kursy online do polecenia to tez chętnie przyjmę linki do nich (najfajniej byłoby gdyby były za free).

Z góry dziękuje za pomoc.

PS. Gdyby ktoś chciał pomoc w samym tworzeniu silnika to tez byłoby super.

PS2. W załącznikach dodałem zrzuty z gry podobnej do tej o której myślę.
[i .net/thumbs/c38b999572c2.png[/img]


#2

Wszystko jest lepsze od PHP :wink:
A tak na poważnie: możesz sobie napisać serwer w dowolnym języku. Na webie stawiasz sobie tylko samą stronę - tzn wszystkie pliki które musi sobie załadować przeglądarka, włącznie z grafikami i skryptami .js. Skrypty js powinny łączyć się z twoim serwerem gry (napisanym w dowolnym języku), pobierać z niego dane, wysyłać do niego dane itp za pomocą websocketów.
Serwer na websockecie powinien obsłużyć wsztystkie niezbędne dla działania gry ‘polecenia’ (jakieś pakiety danych) - czyli np całą komunikację związaną z uwierzytelnianiem gracza i jego akcjami w grze.

Teraz gdy przejdziemy do appki na telefon (albo programu na PC) to twój program musi umieć połączyć się z serwerem używając websocketów a następnie skomunikować się z nim za pomocą tych samych pakietów danych (interfejsu) których używała twoja przeglądarkowa wersja. Dodatkowo jeśli każdego takiego klienta zrobisz jako ‘cienkiego’ (wygooglaj sobie co to znaczy) to zaoszczędzi ci to pracy.

EDIT: z tego co wiem (bo na webie się za bardzo nie znam, brzydzę się nim) to cokolwiek innego niż PHP będzie wymagało maszyny serwerowej (nawet wirtualnej) zamiast zwykłego hostingu. Pisząc serwer gry w C++/C#/Java tworzysz proces uruchamiany na serwerze. Na hostingu nic takiego nie uruchomisz. Nie wiem jak z node.js bo gardzę tą ‘platformą’ dla leniwych noobów :wink: więc może ktoś podpowie czy jest tak samo jak z w/w.


#3

Nie wiem czy kiedykolwiek mieliście do czynienia z silnikiem Vallheru (oparty właśnie na php/mysql) intym jakie ma funkcjonalności oraz z jego różnymi przeróbkami.

Właśnie dlatego myślałem o php jako podstawie. Jednak coraz więcej osób sugeruje mi wybranie zupełnie innego języka np. C# bo w nim zrobię zarówno Web jak i mobi.

Szukam rozwiązania które pozwoli mi zapoznać się z jednym językiem i na nim oprzeć całe tworzenie - mobi i www.

Jest to możliwe?


#4

A widziałeś kiedy powstał ten silnik? Wyobraź sobie jak przez ten czas internety się zmieniły :wink:

Why? Nawet jeśli zapoznasz się tylko z JavaScript i będziesz go używał zarówno po stronie klienta oraz serwera (node.js) to i tak będziesz musiał uwzględnić różnice wynikające z samej platformy, na której dany kod uruchamiasz. W jednym przypadku jest to przeglądarka a w drugim serwerowa maszyna wirtualna. Jedyne co będzie takie samo to składnia. A jeszcze mobi… Jak zaczniesz sobie pisać w Unity używając JS to … i tak będziesz się musiał nauczyć samego Unity :wink:

Moja rada: bierz się od razu za C#/Javę po stronie serwera.


#5

Po przeczytaniu kilku dyskusji stwierdzam ze do front-endu użyje Unity (żeby było ładniejsze dla oka) a do back-endu wykorzystam c#.

Zaraz będę grzebał na forum żeby wiedzieć jak skutecznie zaprojektować grę tak aby praca nad nią nie była udręka :slight_smile:


#6

Poprawię cię tylko…

Unity to platforma. Pozwala ci pisać w kilku językach, m.in. w C#. Ma własnego frameworka, maszyne wirtualną.

Pisząc backend w C# z tego co wiem to również mógł byś użyć Unity z jego frameworkiem, ale również napisać go używając frameworka .NET i pisząc w języku C# lub VB :wink:

Skomplikowane? Zanim zaczniesz myśleć nad grą klient-serwer to zorientuj się trochę. Popisz sobie kilka prostych rzeczy, jakąś banalną gierkę w Unity, poznaj w praktyce .NET.

Gwarantuję ci, że jeśli teraz weźmiesz się za pisanie gry klient-serwer to praca nad nią będzie udręką :slight_smile:


#7

Na moment chciałbym wrócić do kwesti silnika Vallheru. Pytanie pewnie banalne i głupie ale wole się upewnić.

Czy programujac w C# (Unity lub .NET) będę w stanie uzyskać takie same funkcjonalności silnika jak w Vallheru + oczywiście inne które planuje?


#8

Tak, będziesz mógł. .


#9

Na jednym z for znalazłem info ze można to zrobic w php z użyciem API i socketow.

Myślisz ze będzie to dobre? I jak wtedy robić coś takiego? Czego używać? Jakiego języka?


#10

Można we wszystkim. Ale są rozwiązania lepsze i gorsze. Zostań przy C# i Unity.

Opierając się na PHP w gamedevie daleko nie zajdziesz. Jeśli masz się czegoś uczyć to wypadało by czegoś bardziej przyszłościowego. Zwłaszcza, że gry przeglądarkowe odchodzą do lamusa, bardziej opłaca sie w tym momencie zacząć od appki na telefon + serwera.


#11

Dales mi do myślenia. Może lepiej zacząć właśnie od samej apki?


#12

@frozenshade

Wszystko jest lepsze od PHP

Możesz to uzasadnić? PHP w wersji 7 zyskało ok 30 % wydajności w porównaniu do 5.6
Teraz naprawde nadrabia.
Typowanie parametrów, wsparcie dla Unicode, pełnoprawna obiektowośc…
Wycieki pamięci też rzadkość

Co jest w nim takiego złego, że wszystko jest lepsze od PHP… Możesz rozwinać wypowiedź i podać przykłady?

Dziękuje


#13

@Wales

Musisz podzielić aplikację tak aby były dwie niezależne od siebie części,
Musi być “backend” aplikacji który udostępnia funkcje do wywołania w jakiś sposób przez “frontend” - zobacz jakieś informacje na temat API.

Backend jest to część umieszczona na serwerze, frontend jest to mniejsza apliakcja np wyświetlająca widok HTML, aplikacja mobilna na IOS na androida.
Frontend(np aplikacja w telefonie/ strona WWW) komunikuje się z backendem(serwerem), przekazuje mu potrzebne dane np z formularza a serwer wykonuje operacje na bazie oblicza cos itp…
Poczytaj na temat webserwisów(Webservices)

Tutaj jakiś przykładowy filmik z YT: https://www.youtube.com/watch?v=nMtgFZSdtwk

Nadaje sie do tego praktycznie każdy język czy to Erlang, C++, PHP czy to JS a nawet jak się uprzesz to PERL… jedne są lepsze drugie gorsze ale na początku swojej przygody polecam Ci do backendu właśnie JS albo PHP są one proste co ważniejsze jest wsparcie masy osób które są w stanie pomóc Ci z problemami.

do aplikacji na androida możesz użyć np React JS

Aplikacje w takiej formie jest ciężej zrobić, trzeba dobrze zaprojektować metody dostępne dla frontendów aby potem nie zmieniać wiele w aplikacjach które są już zainstalowane u klientów.
Dodatkowo tak zaprogramowania aplikacja bardzo dobrze sie skaluje najbardziej obciążające częsci tj obsługa bazy, obliczenia graficzne, czy coś innego co zjada wiele zasobów może być wydzielona na inny serwer bądź zespół serwerów/klaster czy inne rozwiązanie rozproszone…


#14

Co z tego, że zyskało wydajność, skoro takie platformy jak .NET czy Java tą wydajność zawsze miały i to dużo lepszą?

Kiedy tworzysz grę bardziej złożoną od głupiego klikania (coś gdzie masz akcję, gdzie świat żyje) musisz mieć PROCES który będzie to wszystko realizował. Każdy gracz musi mieć załadowane do pamięci odpowiednie swoje zasoby (tak, wiem, że w php też można coś takiego zrobić, ale w innych językach jest to po prostu łatwiejsze na większą skalę).

Wielowątkowość: coś, czego nie unikniemy w serwerze. To musi być, musi działać i musi być wydajne. Wielowątkowość w PHP? No bez jaj :slight_smile: Są tam jakieś dodatki czy coś, ale to się zwyczajnie kłóci z podstawowym założeniem języka PHP: fire-and-forget. Przetwarzając request od usera nie odpalisz wątków (nie będę wyjaśniał dlaczego).

W dużych projektach bardzo istotne jest zarządzanie pamięcią, szczególnie po stronie serwera. Złe zarządzanie + wycieki to coś, co może zwyczajnie ubić wydajność. Języki takie jak C# i Java dają programiście bardzo dużo kontroli nad tym co się dzieje w pamięci. W C++ kontrola jest pełna, do bólu. Narzędzia do profilowania dla .NET i JVM są zwyczajnie dużo lepsze i mają więcej możliwości.

Debugowanie i step-into: Dla Javy, C++ i C# każde IDE ma to w standardzie. Dla Javy jest to wręcz niesamowicie zaawansowane - możemy debugować jeden konkretny wątek bez robienia stop-the-world. Do tego hotswapowanie kodu wraz z rollbackiem. Realizacja dużego serwerowego projektu bez czegoś takiego to masochizm.

Temat można rozwijać dalej, ale to zwyczajnie nie ma sensu. Gdyby PHP był taki fajny i do wszystkiego to przecież ludzie robili by w nim dużo więcej niż tylko strony www. Czemu biznes trzyma się .NETa i Javy a bankowość Javy w szczególności? Odpowiem - wydajność i stabilność. Czemu serwery gier MMO nie są pisane w PHP? Odpowiedź j/w.

Nie jestem idiotą z mózgiem ograniczonym do jednego języka. Używam rzeczy najlepiej nadających się do danego zagadnienia. Nie trzymam się kurczowo jednej technologii tylko dlatego, że akurat ją znam i w niej się ‘jakoś da’. Da się wszystko we wszystkim, ale nie zawsze warto.

PHP ma zwyczajnie inny target, inne założenia. jeśli chce się robić coś specjalistycznego to trzeba użyć specjalistycznych narzędzi. Stawiając sobie stronę gry nie napisałem serwera www w C++, po prostu wykupiłem hosting, wrzuciłem pliczki php i mi działa. Stawiając grę w sieci nie zrobił bym tego w tej technologii bo po prostu istnieją technologie które się dużo lepiej sprawdzą.


#15

Popieram @frozenshade w tym wypadku. Robiliśmy grę na PHP 7 i niestety właśnie jeżeli o sam projekt chodzi, to można było go zrobić wydajniej i lepiej w js.

@Wales Sam wzorowałem się na Kronikach nieco przy swoim pierwszym projekcie, a także na battleknight i the west, okazyjnie czerpiąc inspiracje z ‘silnika’ vallheru, który w rzeczywistości jest bardziej kawałkiem zabugowanego kodu :wink: W każdym razie, chcąc stworzyć podobny projekt, musisz przede wszystkim wziąć pod uwagę, że Vallheru jest dość stare, a gry takie jak kroniki fallathanu bazują w dużej mierze na właśnie starych rozwiązaniach, które już nie satysfakcjonują ludzi tak jak kiedyś :slight_smile:

Aktualnie znajdziesz lepsze języki, w których coś takiego również można napisać, my aktualnie tworzymy w zespole browserówkę tego typu w node.js, a jeżeli chodzi Ci o apkę, to właśnie lepiej coś na Javie. Najlepszym rozwiązaniem jest poszukać nowych gier browserowych na sieci, zobaczyć z jakich technologii korzystają i zastanowić się, skąd ta zmiana. Gra taka jak Forge of Empires jest dobrym tego przykładem.

W kwestiach programistycznych to już słuchaj tych co się już wypowiedzieli, dobrze prawią :smiley:


#16

Coraz większy mam mętlik w czaszce i coraz wyraźniej widzę, że zanim zacznę pisać to czeka mnie 2-3 miesiące nauki.
Zostaje mi tylko zakuwać.

Najpierw zacznę od C# i Unity (bo mam to sciągnięte :wink: ).

Chętnie poczytam linki z kursami i książkami jeżeli macie coś wartego polecenia :slight_smile:


#17

@frozenshade
Nie twierdze, ze jesteś ograniczony, ale niema sensu poznawać nieraz technologii, jeśli projekt nie będzie mega wielkim projektem. Wszystko zależy od założeń.

Tak PHP jest jezykiem który służy z założenia do obsługiwania Requestów. Dlatego jest prosty, dlatego nadaje się też do jednej głownie rzeczy. Nikt normalny nie porwie się na pisanie serwera wielowątkowego w PHP, ale też nikt początkujacy nie napisze w Javie serwera który poprawnie działa na 48 rdzeniach :wink: Bo na 100% (nawet dam sobie cos uciąć) coś się wykrzaczy, zablokuje się zasób czy coś innego :slight_smile:

Dlatego warto brac siły na zamiary, nie warto polecać początkującym Javy bo odpadną. Java ma stosunkowo wysoki próg wejścia, nie wiem ja C# bo nie miałem z nim doczynienia.

Nie twierdzę, że PHP jest dobrym rozwiązaniem, ale też nei twierdze, że jest on najgorszym bo jak to napisałeś “wszystko jest lepsze od PHP”. Wszystko zależy od założeń, bo jeśli gra ma obsługiwać do 1k requestów /sec to zastanawiałbym się nad PHP i czymś innym (znam C++).
Jest taki wzorzec projektowy https://tactician.thephpleague.com/

Oczywiście PHP ma dodatkowe narzuty zwiazane z zainicjowaniem skryptu, ale na dobrzeskonfigurowanym nginxie można ładnie wyciągnąć, aczkolwiek i ttuaj wchodzimy w wysoki poziom więc sam do końca nie jestem pewny co bym użył.

Ogólnie serwery gier to nietrywialne programy o ile mamy dużo graczy, wtedy zaczynają się problemy nie ważne czy to JAVA czy C++ czy inny serwer.

Trzeba też przewidzieć skalowalnośc rozwiaznia. Co jeśli serwer jest w stanie uciągnąć 2400 graczy online, a pojawi się kolejne 500? czy trzeba kupić nowy 3 razy droższy serwer czy może wystarczy drugi słabszy albo dwa równe troche słabsze i 2 razy tańsze do naszego? Tylko jak podzielić aplikację, aby dało się ją uruchomić na kilku serwerach na raz?
W PHP jest to trywialne poprzez postawienie kilku instancji serwera na kilku maszynach i uruchomienie na wejściu balance loadera :slight_smile:

Aby dobrze zaprojektować serwer trzeba zadać sobie dodatkowo 100 pytań. Dlatego początkująca osoba nie powinna przebierać w technologiach w czym będzie wydajnie bo na 95% projekt upadnie przed powstaniem a jeśli nie to będzie można go zrefaktoryzować.

Prędkość to nie jedyny wyznacznik bo patrząc w takich kwestiach można pisać w C który jakby nie patrzeć też jest wysokopoziomowym językim zapewniającym wszelakie mechanizmy, ale czy to ma sens? :slight_smile:
Albo w erlangu który też jest bardzo szybki i pozwala podmieniać serwery bez zatrzymywania programu, ale niema tak dużego wsparcia jak C++/Java/PHP/C# :slight_smile:

@frozenshade nie był to post, żeby się z Tobą kłócić poprostu nie zgadzam się, że “wszystko jest lepsze od php”, co nieznaczy, że porwałbym się na pisanie tego w PHP. Nnie można skreślać jednego języka na rzecz innych nieznając całej specyfikacji. Prostym przykładem jest skalowalność :slight_smile: Ale są też inne problemy, każdy język posiada wiele minusów jak i wiele plusów :slight_smile: trzeba to zbalansować pod siebie pod projekt i wybrać taki który wyda się najbardziej idealny i w miare szybko pozwoli nam to zrealizować :slight_smile:


#18

@daniel1302 z tym “Nie jestem idiotą z mózgiem ograniczonym do jednego języka.” to ja miałem raczej na myśli to, że nie muszę na siłę używać PHP, bo w PHP niby się da i tylko PHP umiem. Bo ten język nie jest stworzony do takich rzeczy, on jest mocny w innych i tam powinien być używany. A ja, programista, zwyczajnie uczę się tego, co w danym momencie trzeba użyć.

Zdziwił byś się jak to jest w praktyce i w życiu zawodowym. Poza tym co to za technologia… No Java albo C#, co to jest… no język. Umiesz programować? Jeśli tak, to opanowanie nowego języka nie powinno ci sprawić problemu. Wszystkie języki w 80% sto jest to samo tylko z innymi bibliotekami i frameworkami, które przeważnie funkcjonalnie są identyczne a różnica jest na poziomie nazw. 20% to rzeczy specjalistyczne, platform-specific, poznajesz je w momencie, gdy jest ci to bardzo potrzebne - np w przypadku optymalizacji lub problemów.

Nikt początkujący nie napisze w czymkolwiek jakiegokolwiek serwera. A jak nawet podejmie taką próbę to zwyczajnie nie będzie się to do niczego nadawało. Tak, nawet, jeśli to zrobi w php - te wszystkie gimnazjalne projekty gierek rpg nadają się tylko do kosza :wink:

Warto, jeśli taki delikwent nie nauczy się pisać w Javie to w niczym też się nie nauczy - to tylko język, myśleć trzeba algorytmami a z tym ludzie mają problemy.

OP chce napisać onlinową grę a do tego imo “wszystko jest lepsze od PHP”. Gdyby OP chciał napisać serwis www, forum czy cos takiego - napisał bym mu, żeby użył technologii PHP lub ASP.

Początkująca osoba niech się od razu uczy tego, co dla danych potrzeb jest najlepsze, niech od samego początku ma świadomość istnienia wielu technologii i konieczności przełączania się pomiędzy nimi. Inaczej zginie, zakopie się w grajdołku i każdy kolejny projekt bedzie widzieć przez pryzmat tego jednego jedynego języka, który zna.


#19

Krotko dodam, bo z telefonu że nie zgadzam się do końca z @frozenshade, a zgadzam się w pełni z daniel1302.
Przy okazji sprostuje że w php nie ma wielowątkowosci. Php wspiera wielowątkowosc, lecz jest domyślnie wyłączona i to zagadnienie jest znane dla tych bardziej doświadczonych programistów php.


#20

To jak wrócisz z telefonu to uzasadnij czemu się nie zgadzasz, może podważ moją opinię lub wytknij mi błąd :slight_smile: