Jakie są podstawy tworzenia gier? [Zamknięte]

12

Całkowicie nie rozumiem, jak można zakodować grę wideo.

Jestem początkującym programistą i mam doświadczenie w pisaniu aplikacji konsolowych, które robią matematykę, a co nie. Nie rozumiem, w jaki sposób te logiczne procesy mogą powodować, że obrazy poruszają się na ekranie (gry wideo). Oczywiście, gdybym wskoczył do książki o tworzeniu gier lub czegoś podobnego, zrozumiałbym, ale obecnie wciąż rozumiem podstawy programowania w ogóle. Czy ktokolwiek mógłby podać proste wyjaśnienie, mądrze kodujące, na temat przejścia od robienia prostych obliczeń matematycznych do tworzenia niesamowitych programów graficznych, takich jak gry wideo? Może są jakieś filmy wprowadzające, na które ktoś może mnie skierować?

Matt
źródło

Odpowiedzi:

14

Zakładając, że jesteś absolutnym początkującym w programowaniu, i aby oprzeć mój przykład na czymś, co możesz wiedzieć, pisząc aplikację konsolową, która ma menu, w którym użytkownik ma wybrać jedną z dostępnych opcji, co zrobisz najpierw?

Jeśli pomyślałeś o utworzeniu menu, masz rację, ale co jeśli po naciśnięciu przez użytkownika klawisza, który nie jest częścią dostępnej opcji,

  1. Twoja aplikacja zakończy działanie, lub
  2. powinien kontynuować, dopóki użytkownik nie naciśnie klawisza „Wyjdź”?

Mój zakład byłby nr 2, aplikacja będzie kontynuowana do momentu wyraźnego naciśnięcia klawisza, aby wyjść z aplikacji konsoli.

Gra jest jakoś taka! Kiedy chcesz zakończyć grę? Kiedy użytkownik wybierze, prawda? Dlatego działanie lub menu gry musi trwać, dopóki użytkownik nie chce wyjść. Następnie musisz utworzyć pętlę, która mówi programowi, aby kontynuował do momentu naciśnięcia tego samego klawisza wyjścia.

Właśnie zostałeś wprowadzony do Game Loop. Gra to kolejny program, który działa, dopóki użytkownik nie wyjdzie z niej wyraźnie.

Podczas rozgrywki ruchy są obrazami rysowanymi na ekranie w określonych współrzędnych. Gdy użytkownik / gracz naciśnie klawisz kierunkowy, taki jak [Left], wtedy odświeżasz współrzędne obrazu, jednocześnie zmniejszając współrzędną X, aby dać wrażenie ruchu w lewo. Musisz zdobyć te dane wejściowe, aby uzyskać akcję, którą gracz chce wykonać w następnej kolejności. Następnie Pętla gry będzie się powtarzać, aż gracz będzie mógł wykonać inną pożądaną akcję od gracza, dopóki gra nie zostanie zakończona.

Cóż, obawiam się, że ta odpowiedź zaczyna być dość długa, więc mam nadzieję, że wskażę Ci dwa inne pytania, które mogą Cię zainteresować.

  1. Od czego zacząć pisać gry, jakieś samouczki lub tym podobne?
  2. Przenoszenie mojego duszka w XNA za pomocą klas .

Ten trzeci link nie mówi o tym, jak zacząć pisać gry, ale o tym, jak wykonać ruch duszka na ekranie. Ponieważ zapytałeś także, jak sprawić, by grafika poruszała się na ekranie, pomyślałem, że może cię to zainteresować.

Mam nadzieję, że to pomoże! =)

Will Marcouiller
źródło
4

Podczas tworzenia aplikacji konsolowych najprawdopodobniej używasz funkcji o nazwie print () lub read () lub write (). Zamiast tego gry graficzne używają innych funkcji, które mogą mieć tak niski poziom jak set_pixel (), aby ustawić kolor pojedynczego piksela na ekranie, do całych ram, które pozwalają rysować trójwymiarowe modele z dużą ilością efektów.

Ale główna idea jest taka sama, jak w przypadku prostej aplikacji konsoli matematycznej. Użytkownik otrzymuje dane wejściowe, postępuje zgodnie z nim, aby zmodyfikować niektóre zmienne, a następnie drukuje (lub rysuje) niektóre dane wyjściowe. Gry i inne interaktywne programy wykonują co najmniej 30, 60 lub więcej cykli obliczeń wejścia-wyjścia. Oczywiście każda część może być tak złożona, jak chcesz, ale zwykle wszystko sprowadza się do danych wejściowych-obliczeniowych-wyjściowych. Więc nie martw się, jesteś na dobrej drodze.

Jeśli chodzi o rekomendacje, powiedziałbym, że kontynuujesz programowanie, tyle ile możesz. Jeśli jesteś zainteresowany skupieniem się na programowaniu gier i znasz tylko programowanie konsoli, spróbuj stworzyć małą przygodę tekstową lub RPG. W ten sposób dużo ćwiczysz, jak zarządzać zmiennymi, używać liczb losowych i porządkować kod.

Po pewnym doświadczeniu zapoznaj się z podstawami biblioteki graficznej. Jeśli wykonujesz programowanie proceduralne, polecam OpenGL, a jeśli programujesz obiektowo, polecam XNA.

Nie bierz jednak zbyt wielu rzeczy na raz. Bardzo łatwo jest rozczarować się nauką skomplikowanego narzędzia, podczas gdy uczysz się, jak zarządzać drzewem źródłowym, podczas gdy uczysz się, jak iterować po tablicy, podczas gdy uczysz się, jak uzyskać wejście i dźwięk, cały czas projektujesz swoją grę.

Przed nami długa droga, ale pamiętajcie, że zabawa polega na tym, by przez nią przejść.

Tak trzymaj!


źródło
4

Gra komputerowa to niekończąca się pętla:

  • Aktualizacja: Przejdź do stanu gry o jeden mały odcinek czasu (np. 1/80 sekundy).
  • Namaluj aktualny stan gry.

Istnieją ich odmiany. Niektóre gry mają więcej aktualizacji między poszczególnymi farbami lub mogą się one różnić, aby gra była płynna na różnych komputerach. Ale to są szczegóły techniczne.

Faza aktualizacji, która ma miejsce od 50 do 100 razy na sekundę (tak, to często), wykonuje następujące czynności:

  • Zaktualizuj fizykę gier. Powiedz, że aktor ma prędkość. Aktualizacja powinna przesunąć go trochę we właściwym kierunku. Ponadto, jeśli używasz silnika fizyki, powinien on sprawdzać kolizje z innymi aktorami lub przeszkodami.
  • Zaktualizuj zasady gier. To sprawia, że ​​jest to gra, a nie eksperyment fizyki. Powiedz, że kula trafiła aktora gracza. Zasady gry nakazują graczowi odjąć X punktów zdrowia i kulę, aby zniknęła.
  • Aktualizacje AI. Czasami aktorzy sterowani komputerowo powinni zdecydować, co robić. Idź w lewo czy w prawo? Znajdź ścieżkę do miłego miejsca. Wystrzel broń.
  • Kontrola wejścia. Zaktualizuj aktora gracza zgodnie z przyciskami naciskanymi na klawiaturze.
  • Zaktualizuj wykres sceny. Może to być przyspieszenie animacji o jeden krok lub aktualizacja GUI, aby pokazać, że gracz ma teraz 10 punktów mniej zdrowia. Jego jedynym celem jest sprawienie, aby gra wyglądała przyjemnie.

Od czego zaczynasz

Podstawowym wymaganiem dla gry graficznej jest programowanie grafiki. Upewnij się, że możesz otworzyć okno i narysować w nim piłkę.

Zakładam, że możesz robić jakieś zajęcia. Zrób klasę piłki. Ma następujące elementy: x, y, deltaX, deltaY. Wszystkie są liczbami całkowitymi i skalami pikselowymi. Teraz napisz tę pętlę.

forever, do this {
  start measure time (in milliseconds)
  //physics part
  add deltaX to x
  add deltaY to y
  if x is bigger than the screen width, assign -deltaX to deltaX
  if y is bigger than the screen height, assign -deltaY to deltaY
  if x is less than 0, assign -deltaX to deltaX
  if y is less than 0, assign -deltaY to deltaY

  //paint
  paint the ball at x, y
  stop measuring time, assign this to workTime
  make the thread sleep for (25 - workTime) milliseconds
}

Spowoduje to, że piłka odbije się od granic okien. To jeszcze nie jest gra , a raczej symulacja fizyczna. Jeśli napiszesz aktualizację fizyki piłek wewnątrz klasy piłek, łatwo jest dodać kilka piłek. Przechowuj je na liście, aktualizuj i maluj każdą dla każdej klatki.

Możesz dodać wiosło (symulować dla niego fizykę i umożliwić sterowanie nim za pomocą myszy lub klawiatury) oraz cel gry, taki jak powstrzymanie piłki przed dotarciem do lewej ściany. Jeśli gra dodaje coraz więcej piłek w miarę upływu czasu, trudność wzrośnie. Masz grę.

Po co spać przez (25 - workTime) milisekund? Jeśli zrobisz to w ten sposób, symulacja będzie przebiegać w stałym tempie 40 aktualizacji i farb na sekundę. Będzie całkiem gładko. Jeśli pominąłbyś część uśpienia, animacja byłaby gwałtowna i zajmowałaby 100% procesora. Również prędkość piłki zależałaby od prędkości maszyny, która ją obsługuje. Teraz prędkość pionowa kulki wynosi 40 * delta pikseli na sekundę.

Rewolwerowiec
źródło
2

Weź swój program konsolowy, który robi matematykę, a potem, gdy podasz poprawną odpowiedź, zestrzel konfetti ... Stało się to grą (ktoś oprócz mnie gra Math Blaster jako dziecko? :)).

Jeśli chodzi o tworzenie komputerów do tworzenia środowisk gier, czasem może być trochę więcej do zrobienia, ale sprowadza się to do zastosowania ludzkiej wiedzy o otaczającym ich świecie. Gry wykorzystują tę samą matematykę, fizykę i nauki, aby zdefiniować się, gdy stosujemy się do otaczającego nas świata, aby wyjaśnić, jak to działa.

Gry Sim są dobrym przykładem gry wirtualnej. Dawno temu czytałem wywiad z facetem odpowiedzialnym za gry Sim i prawie wszystkie z nich, bez wyjątku, narodziły się z czytania o temacie próbującym wyjaśnić otaczający nas świat, następnie zaprzęgnięte w matematyczne formuły i wprowadzone do wirtualnego środowiska reprezentować to. Na przykład SimCity wywodzi się z próby symulacji podstaw gospodarki.

Jeśli chodzi o specyfikę tworzenia środowiska gry 3D, włóż do niego fizykę, dodaj trochę dźwięku, pozwól użytkownikowi zacząć z nim wchodzić w interakcję. Po to jest ta strona i wiele innych, i jest to niemożliwe podsumowując w bardziej szczegółową odpowiedź.

Na koniec dnia opisuję gry wideo jako bardzo szybkie, ograniczone bazy danych. Są bardzo skoncentrowani na relacyjnych danych i szybkim dostępie do danych. Mam na myśli, że jeśli renderujesz ramkę co 60 sekund, bardzo szybko przetwarzasz potencjalnie duże ilości danych w zależności od tego, gdzie gracz jest w grze do wszystkich innych danych śledzonych przez grę :)

James
źródło
Lol, „gry wideo jako bardzo szybkie bazy danych z ograniczonym zestawem danych” prawdopodobnie tylko wprowadzają zamieszanie.
michael.bartnett
1

To, co musisz zrozumieć, to matryce. Stanowią podstawę gier. Kiedy zrozumiesz moc macierzy, zobaczysz, jak gry redukują się do prostej matematyki.

Zajmujesz pozycję wierzchołka w przestrzeni gry. Projektujesz go za pomocą matrycy na ekranie (znajdź współrzędne ekranu). Interpolujesz kilka pikseli między nim a sąsiednimi wierzchołkami i gotowe. Jest to oczywiście niezwykle duże uproszczenie, ale podstawy rasteryzacji wcale nie są skomplikowane, gdy zajmiesz się matrycami.

DeadMG
źródło