Czy prosta gra nada się do portfolio.

0

Witam.

Chciałem się was zapytać czy prosta gra w javie wykorzystująca Swing/AWT nada się do portfolio? Mówiąc prosta gra mam na myśli bardzo prostą grę w stylu statek gracza i chmara kosmitów lecąca w jego stronę.

Akurat dla zabawy sobie pisałem taką grę i pomyślałem że skoro już robię no to można by ją wykorzystać do szukania pracy, myślicie że nie będzie "obciachu" zamieszczając taką grę?

Jak coś to zamieszczam link do kodu. Jak by ktoś był na tyle miły żeby zerknąć i ocenić to był bym wdzięczny. Gra jest jeszcze nie skończona, ale cały mechanizm rozgrywki i szkielet jest gotowy. Musze tylko dodać główne menu itp. Chcę jeszcze wykorzystać pliki xml do zapisywania najlepszych wyników itp.

Link: https://github.com/dejmien/Space-War

0

Jak szukasz pracy jako programista gier to może być, ale i tak słabe.

0

Dzięki za opinie. Nie nie chcę zostać programistą gier.

1

Mało to semantyczne(logiczne? domenowe? nie wiem jak to nazwać) - czemu masz klasy nazwane Alien_A, Alien_B i Alien_C? Co to ma oznaczać? Czym się różni A od B od C? Zerknąłem w kod, ale te klasy wyglądają prawie identyczne, i część kodu się powtarza (zła praktyka).

No i w rezultacie potrójnie kod piszesz, bo dla każdej klasy piszesz coś takiego:

public  LevelBuilder withNumberOfAlien_A(int number) {
			level.numberOfAlien_A = number;
			return this;
		}

		public LevelBuilder withNumberOfAlien_B(int number) {
			level.numberOfAlien_B = number;
			return this;
		}

		public LevelBuilder withNumberOfAlien_C(int number) {
			level.numberOfAlien_C = number;
			return this;
		}

albo tutaj:

private void moveBackgroundOne() {
// CIACH .............
private void moveBackgroundTwo() {
// IDENTYCZNA FUNKCJA!!!
 

poczytaj o zasadzie DRY(Don't Repeat Yourself), bo na razie ten kod jest jednym wielkim zlepkiem złych praktyk.

albo "magic numbers":

public void move() {
		this.x += 5;
public Rectangle getColisionBox() {
		return  new Rectangle(x,y,10,10);

dlaczego 5, dlaczego 10?

No i niby obiektówka, ale programujesz de facto strukturalnie, czy jak to nazwać:

private void movePlayerBullets() {

		for(int i = 0; i < player.getBullets().size(); i++) {

				if(player.getBullets().get(i).isVisible() == true)
				player.getBullets().get(i).move();	

	public void paintAlien(Graphics g) {

		for(int i = 0; i < aliens.size(); i++) {

			g.drawImage(aliens.get(i).getImage(),aliens.get(i).getPosX(),aliens.get(i).getPosY(),null);
		}

	}

w OOP raczej byś oddelegował do obiektu player ruszanie bulletami (czyli ta funkcja powinna należeć do obiektu 'player',), i byś zrobił coś w rodzaju metody wirtualnej paint (czyli coś co się nazywa polimorfizm), i obiekty same by się rysowały - bo inaczej wychodzi na to, że równie dobrze mógłbyś użyć zwykłej struktury a nie klasy. (co czasem ma sens, jeśli jest świadomym zabiegiem, np. jeśli robisz ogólny menedżer/ silnik/ renderer który potrzebuje mieć wiedzę o wszystkich obiektach, nawet kosztem enkapsulacji - ale tutaj to wygląda raczej jak nieudolna obiektówka).

0

Na początku to dziękuje CI wielkie że chciało Ci się obejrzeć ten program.

Alien_A, Alien_B i Alien_C

Klasy przeciwników "obcych" są jeszcze nie skończone. Ale ma to wyglądać tak że są 3 rodzaje przeciwników. Każdy różni się prędkością poruszania plus Alien_B Alien_C mogą strzelać.

w OOP raczej byś oddelegował do obiektu player ruszanie bulletami (czyli ta funkcja powinna należeć do obiektu 'player',),

Ja sobie myślałem nad tym tak że funkcja move() która przesuwa danych obiekt poprzez zwiększanie wartości posX powinna należeć właśnie do konkretnych obiektów. Ale metody które wykorzystują tą metodę move() konkretnych obiektów powinny się znajdować w klasach które są za to odpowiedzialne. Nie wiem ale wydaje mi się że gdybym te metody zapisał w klasie player i innych to by mi się straszny syf zrobił.

private void moveBackgroundOne() {
// CIACH .............
private void moveBackgroundTwo() {

// IDENTYCZNA FUNKCJA!!!

No tak faktycznie to mogę wszystko w jednej funkcji zrobić.

public void move() {
this.x += 5;

public Rectangle getColisionBox() {
return new Rectangle(x,y,10,10);

No te 5, 10 to są tylko tymczasowe. Gdybym wszedł do fazy "poprawiania programu" to 5 zostało by zmienione na zmienną speed a 10 a rozmiary konkretnego obiektu.

1

Każdy różni się prędkością poruszania plus Alien_B Alien_C mogą strzelać.

to nie możesz zrobić jednej klasy Alien i dodać do niej dwa pola: prędkość, i flagę pt "czy obiekt może strzelać":

private int velocity;
private boolean canShoot;

?

Ja sobie myślałem nad tym tak że funkcja move() która przesuwa danych obiekt poprzez zwiększanie wartości posX powinna należeć właśnie do konkretnych obiektów. Ale metody które wykorzystują tą metodę move() konkretnych obiektów powinny się znajdować w klasach które są za to odpowiedzialne. Nie wiem ale wydaje mi się że gdybym te metody zapisał w klasie player i innych to by mi się straszny syf zrobił.

A nie lepiej zrobić jakiś ogólny menedżer obiektów, który by wywoływał metodę move wszystkich zarządzanych/zarejestrowanych obiektów? W momencie wystrzału następowałoby

   objectManager.add(new Bullet)

a sama klasa by wyglądała tak (PSEUDOKOD):

class ObjectManager:
   private array objects = new Array

   method add(object):
       this.objects.add(object)

   method move():
       for object in this.objects:
              object.move()
0

to nie możesz zrobić jednej klasy Alien i dodać do niej dwa pola: prędkość, i flagę pt "czy obiekt może strzelać":

No tak dało by się. A czy np. jeśli w przyszłości chciał bym dalej rozwijać ten program i np. dodawać konkretnym przeciwnikom nowe umiejętności itp. to nie lepszym pomysłem będzie zostawić to tak jak jest teraz?

0

To może zrób klasę bazową zawierającą rzeczy powtarzające się i po prostu niech następne klasy(w tym wypadku nowe typy przeciwników, czy co tam masz)dziedziczą z niej i do nich dodawaj to co ich wyróżnia(czyli np. ataki, poruszanie się czy co tam wymyślisz).

Cóż mistrzem obiektówki nie jestem, więc jeżeli to kiepski pomysł niech ktoś bardziej rozeznany mnie poprawi ;).

1

to co powiedział przedmówca, oraz to, że w zasadzie nie wykorzystujesz potęgi tego, że masz klasę bazową Alien, i wszędzie tam gdzie robisz 3 odrębne metody - jedna obsługuje klasę Alien_A, druga klasę Alien_B, trzecia klasę Alien_c, mógłbyś operować po prostu na klasie Alien. No i możesz zrobić listę / tablicę obiektów i iterować po niej w pętli, to ułatwia. Na takiej zasadzie, jak tutaj zrobiłeś (tylko, że nie wszędzie stosujesz to podejście)

for(int i = 0; i < player.getBullets().size(); i++) {

chodzi o pewne traktowanie obiektów jako jednolitej grupy(wykorzystując mechanizmy dziedziczenia i polimorfizmu), a nie tworzenie 3 różnych funkcji do obsługi 3 rodzajów obiektów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1