Który z tych programów najłatwiej napisać obiektowo?

0

Tak jak w temacie: snake,notatnik,kalkulator.

3

zaden i wszystkie

zalezy jakie zalozenia sobie zrobisz.

1

a ja tam uważam, że nie ma sensu ich pisać obiektowo. Lepiej jakiś np. Bank(kolejka osób do okienka itd.), albo Sklep(klient, towar, koszyk).

1

Nie ma odpowiedzi na twoje pytanie. Jeżeli szukasz najłatwiejszej drogi, to odpuść sobie programowanie. Nigdy nie dojedziesz do autostrady, a często będziesz jechać drogą usianą zakrętami śmierci.

Ja bym wziął kalkulator i stworzył osobne obiekty dla przycisków (lub panelu przycisków), wyświetlacza i jednostki obliczeniowej. Jest tutaj niewielkie pole do popisu. Można pobawić się interfejsami, zrobić dependency injection itd. Zobacz np. kalkulator windowsowy, który ma różne tryby.

0

Zdecydowanie snake; nie bardzo potrafię wymyślić obiektów dla notatnika i kalkulatora

0

a w czym nie można ?
kalku w javascripcie

http://www.programoteka.pl/js//kalkulator.php

snake w HTMLu:

http://thecodeplayer.com/walkthrough/html5-game-tutorial-make-a-snake-game-using-html5-canvas-jquery

jak to mówi nasz prezydent ukochany: morzna ? morzna :D

1

Notatnik jest bardzo prosty przez co wymaga dobrego pomysłu na podzielenie tego wszystkiego na klasy. Dobry trening w zakresie separowania odpowiedzialności i kompozycji.
Kalkulator ma bardzo naturalną obiektową strukturę. Można poćwiczyć zarówno kompozycję jak i dziedziczenie.
Snake znowuż to ćwiczenie na separację odpowiedzialności, delegację i tworzenie "słabych" zależności.

0

Zastanawiałem się nad snakem. Jednak na razie nie za bardzo wiem jak to zrobić. Myślałem nad czymś takim: klasa z plansza,klasa z wezem, klasa z jedzeniem. Losuje losowo jakoś pozycję z planszy i tam wstawiam jedzenie. I to powtarzam jak waż zje obecne jedzenie na planszy. Jak wąż natrafia na jedzenie to po przejściu całym wężem przez nie dodaje do ogona 1 jednostkę.
Do tego na krawędziach planszy zrobić ściany i jeśli w nie wejdzie to koniec gry. Na koniec podaje ilość zdobytych punktów.

Mógłby ktoś to skomentować ? Jednak nie wiem jak te 3 klasy mają ze sobą funkcjonować.

1

Snake'a pisałem jakiś czas temu (konsolowego, głównie dla sprawdzenia efektu wizualnego) i nie wyobrażam sobie pisać go strukturalnie (co prawda język inny, ale idea taka sama); Wszystko można podzielić na klasy, dzięki którym całość będzie wyglądać i działać jak należy; I nie piszę tu tylko o klasie węża, jedzonka i planszy, bo klas przyda się więcej - do malowania po ekranie, trzymania ustawień i/lub statystyk itd.;

Programy strukturalne dobre są na początku nauki programowania - potem już wszystko opakowuje się w klasy, bo to o wiele lepsze rozwiązanie, a w niektórych przypadkach jedyne możliwe.

0

Właśnie ja chce napisać obiektowo. Tylko jeszcze nie wiem jak. Ten mój pomysł jest dobry ? Dorzucić te klasy o których mówisz ? Klasa licząca punkty - ale jak liczyć ma punkty ? Po prostu po zjedzeniu jedzenia dolicza ileś punktów ? To nie za duża ta klasa będzie ?

0

Przeglądam ten wątek i oczom nie wierzę. Najpierw się myśli co się chce robić (np. czy robić węża, notatnik czy kalkulator), a potem się planuje czy napisać to obiektowo, strukturalnie, funkcyjnie czy jeszcze w inny sposób. Nie chcę tutaj hejtować zbytnio osób tu piszących, bo mam świadomość, że to zapewne jakieś odgórne zadanie w szkole czy na studiach, ale coś jest nie tak.

Jeśli nasz system edukacji kształci w podręcznikowy sposób "napisz na zaliczenie coś obiektowo" zamiast uczyć rozwiązywać realne problemy, to zapewne osoby nauczone tym trybem będą musiały później się oduczać takiego sposobu myślenia/programowania, a uczyć się programować na zasadzie problem->szukanie rozwiązania (a nie dane zagadnienie-->program który udowadnia znajomość danego zagadnienia czy inne przesiąknięte myśleniem szkolnym głupoty).

Zastanawiałem się nad snakem. Jednak na razie nie za bardzo wiem jak to zrobić. Myślałem nad czymś takim: klasa z plansza,klasa z wezem, klasa z jedzeniem. Losuje losowo jakoś pozycję z planszy i tam wstawiam jedzenie. I to powtarzam jak waż zje obecne jedzenie na planszy. Jak wąż natrafia na jedzenie to po przejściu całym wężem przez nie dodaje do ogona 1 jednostkę.
Do tego na krawędziach planszy zrobić ściany i jeśli w nie wejdzie to koniec gry. Na koniec podaje ilość zdobytych punktów.

Mógłby ktoś to skomentować ? Jednak nie wiem jak te 3 klasy mają ze sobą funkcjonować.

Skupiasz się na złych rzeczach. To o czym piszesz to nie są specjalne problemy. Problemem jest implementacja tego wszystkiego,

  • czy na planszach coś będzie (jakieś murki). jeśli tak, to w jaki sposób zapiszesz w programie, że tam są murki?

  • Jak zrobisz wykrywanie zderzenie węża z obiektami na planszy, chociażby to czy faktycznie wąż wszedł w jedzenie (albo w murek)? (podpowiedź: najłatwiej chyba zrobić grida i sprawdzać przy ruchu czy dane pole jest puste. Ale to też trzeba sobie ogarnać.)

  • Jak zrobisz "rośnięcie" węża? Jakiej struktury danych użyjesz (w końcu wąż zwykle jest złożony z iluś pól-kwadracików)? W jaki sposób go będziesz animować?

  • Czy będzie tam pauza/menu z opcjami itp.? Jak to zrobisz? (podpowiedź: można użyć prostej maszyny stanów).

  • czego od strony technologii użyjesz. Jak będziesz wyświetlać rzeczy na ekranie? Jakaś biblioteka graficzna? A umiesz ją obsługiwać?

itp. itd.

No bo... Skupiając się na tym, jak to upakować w klasy parę elementów (plansza, wąż, jedzenie) tak naprawdę nawet nie dotykasz realnych problemów, które będziesz musiał rozwiązać jak będziesz implementować taką grę. Myślisz wyłącznie w kategoriach logiki gry (co byłoby dobre, pod warunkiem, że użyjesz gotowego silnika do gier, który za ciebie rozwiąże wszystko inne).

tam wstawiam jedzenie.

w jaki sposób od strony technicznej? Wstawiasz jedzenie czyli co?

0

Jak zrobisz wykrywanie zderzenie węża z obiektami na planszy, chociażby to czy faktycznie wąż wszedł w jedzenie

Myślałem że można za pomocą ifów. Snake chce napisać w bibliotece smfl.

0

No właśnie, ale co to znaczy za pomocą ifów? Co będziesz ifować?

http://memegenerator.net/instance/62002994

0

ifem sprawdzam czy glowa weza jest w tym elemencie tablicy gdzie jest jedzenie.

0

@krzywy Młot - w odróżnieniu od notatnika czy kalkulatora, Snake to gra, więc jest dużo trudniejsza w implementacji, niż zwykły program użytkowy z niedużą funkcjonalnością; Wiele rzeczy będzie stanowić dla Ciebie nie lada problem; Do tego dojdzie jeszcze SFML, którego obsługi trzeba się nauczyć - tego nie zrobi się w dwa wieczory (chyba że znasz to API, to zaoszczędzisz trochę czasu);

Na pewno chcesz się za to wziąć? Bo póki co wygląda to na rzucanie się na bardzo głęboką wodę; Z własnego doświadczenia mogę stwierdzić, że implementacja pochłonie dość dużo sił i czasu; Więc jeśli nie czujesz się na siłach to lepiej nie zaczynaj, bo możesz się rozczarować i stracić kupę czasu.

0

Pisząc kalkulator też trzeba użyć jakiejś biblioteki np.smfla. Chodzi o aplikacje okienkowo. To lepiej napisać kalkulator na początek ?

Bym spróbował ze snakem, tylko nie wiem czy sobie poradzę. Jak będę zadawał dużo pytań na tym forum to nie wiem czy ludzie będą mi pomagać.

2

Jeżeli będziesz zadawać konkretne pytania do konkretnych problemów to tak. Podstawą jest też samodzielna praca. Zwykle nie serwujemy gotowych obiadków na talerzu

0
Krzywy Młot napisał(a)

Pisząc kalkulator też trzeba użyć jakiejś biblioteki np.smfla. Chodzi o aplikacje okienkowo. To lepiej napisać kalkulator na początek ?

Że co? Do kalkulatora nie potrzebujesz żadnego SFMLa; No chyba, że ten kalkulator chcesz nie wiadomo jak odpicować graficznie, choć to i tak nie ma sensu; Jeżeli interesuje Cię zwykła aplikacja okienkowa, to w zupełności wystarczy Ci biblioteka standardowa i standardowe komponenty; Macie w tym C++ komponenty, prawda?

Bym spróbował ze snakem, tylko nie wiem czy sobie poradzę.

No właśnie - to podstawowe pytanie; IMHO nie sądzę, żebyś sobie sam z tym projektem poradził, bo póki co jest dla Ciebie zbyt dużym wyzwaniem; Zacznij od czegoś łatwiejszego - nie od razu Rzym zbudowano.

0

Będę próbować napisać snake, tylko czy biblioteka smfl to dobry wybór ? Czy snake okienkowo łatwiej stworzyć z jakoś inna biblioteką ?

0
furious programming napisał(a):

Snake to gra, więc jest dużo trudniejsza w implementacji, niż zwykły program użytkowy z niedużą funkcjonalnością; Wiele rzeczy będzie stanowić dla Ciebie nie lada problem; Do tego dojdzie jeszcze SFML, którego obsługi trzeba się nauczyć - tego nie zrobi się w dwa wieczory (chyba że znasz to API, to zaoszczędzisz trochę czasu);

Na pewno chcesz się za to wziąć? Bo póki co wygląda to na rzucanie się na bardzo głęboką wodę; Z własnego doświadczenia mogę stwierdzić, że implementacja pochłonie dość dużo sił i czasu

Cóż Ty opowiadasz? Snake to jedna z najprostszych w implementacji gra jaką można sobie wymyślić - to była w ogóle pierwsza gra jaką napisałem ucząc się programować w wieku 10 lat
Jeśli 10 latek sobie poradził w parę wieczorów po 2h dziennie (bo więcej mi rodzice nie pozwali siedzieć przed komputerem ;) ) to raczej on też nie będzie miał problemów (chociaż w sumie 10 latki mają bardziej plastyczny umysł i się szybciej uczą...)

1
hmmmmmm napisał(a):

Cóż Ty opowiadasz? Snake to jedna z najprostszych w implementacji gra jaką można sobie wymyślić - to była w ogóle pierwsza gra jaką napisałem ucząc się programować w wieku 10 lat
Jeśli 10 latek sobie poradził w parę wieczorów po 2h dziennie (bo więcej mi rodzice nie pozwali siedzieć przed komputerem ;) ) to raczej on też nie będzie miał problemów (chociaż w sumie 10 latki mają bardziej plastyczny umysł i się szybciej uczą...)

A gdzie on napisał, że Snake to trudna gra do napisania? Bo szukam i nie widzę niczego takiego.

Jest to po prostu trudniejsze do napisania niż kalkulator z dodawaniem/odejmowaniem/mnożeniem/dzieleniem i notatnik z możliwością zapisania do pliku.

2
hmmmmmm napisał(a)

Cóż Ty opowiadasz? Snake to jedna z najprostszych w implementacji gra jaką można sobie wymyślić - to była w ogóle pierwsza gra jaką napisałem ucząc się programować w wieku 10 lat

Tak jak napisał @some_ONE - nigdzie nie napisałem, że Snake to gra trudna w implementacji, więc naucz się czytać ze zrozumieniem (albo nie komentuj); Jak byk w pierwszym zdaniu widnieje to:

furious programming napisał(a)

Snake to gra, więc jest dużo trudniejsza w implementacji, niż zwykły program użytkowy z niedużą funkcjonalnością;

co oznacza, że jest trudniejsza od byle narzędzia z nikłą funkcjonalnością, które można wyklikać w pół godziny;
____A mam prawo tak sądzić, bo skoro pytacz chce "zbierać jedzenie za pomocą ifa", to raczej nie ma szans na napisanie tej gry nawet z podstawowymi funkcjami, bez wiszenia na forum i pytania dosłownie o wszystko;
____Przy okazji - jedne z najprostszych gier to Kółko i Krzyżyk, Statki, symulacja rzutu kostką czy każde inne gry, które nie wymagają gry "na żywo"; Dopiero potem zaczyna się zabawa z pętlami i bardziej konkretną interakcją z graczem, np. Snake, Tetris czy inne gry np. typu Roguelike.

0
some_ONE napisał(a):

A gdzie on napisał, że Snake to trudna gra do napisania? Bo szukam i nie widzę niczego takiego

Napisał że to rzucanie sie na "bardzo głęboką wodę", jak dla mnie to jednoznaczne z powiedzeniem że napisanie snake'a jest trudne

0

Napisał że to rzucanie sie na "bardzo głęboką wodę" [...]

Bo w przypadku pytacza jest to "rzucanie się na bardzo głęboką wodę"; Poczytaj dokładnie i ze zrozumieniem posty pytacza, a zrozumiesz dlaczego tak twierdzę; Już sam wątek świadczy o tym, że pytacz jest początkujący, więc nie polecałbym takiej osobie pisania jakiejkolwiek gry;

Tym bardziej z użyciem SFML, którego obsługi trzeba się nauczyć (jak każdego innego gotowego API), a także dowiedzieć się jak pisać, co pisać, co się opłaca, a co nie; Tego nie nauczy się w kilka dni, więc trzeba zacząć od czegoś prostszego.

1

Będę próbować napisać snake, tylko czy biblioteka smfl to dobry wybór ? Czy snake okienkowo łatwiej stworzyć z jakoś inna biblioteką ?

Sprawdź.
jak masz wątpliwości co do biblioteki to możesz ją wypróbować robiąc coś prostego, jakiegoś Hello Worlda, jakiś przykładowy program.

Tutaj mógłbyś np. zrobić program, który przesuwa jakiś obrazek po ekranie. Jakby ci się udało, mógłbyś dalej testować, np. program który animuje połączone ze sobą kwadraty (ciało węża). Później kwadraty by mogły się ruszać jak wąż. Byś zobaczył, czy będziesz w stanie zrobić coś takiego technicznie w tej bibliotece.

A potem najlepiej byłoby zacząć od początku program na czysto (ponieważ kod, który napiszesz przy nauce nowej biblioteki raczej nie będzie/i nie musi być wysokiej jakości - chodzi raczej o wiedzę, którą zdobędziesz). Możesz również testować inne biblioteki. Z sytuacją "nie wiem czy dana biblioteka jest dobra" będziesz miał do czynienia raczej zawsze w programowaniu, co nie znaczy, że nie można do tego podejść metodycznie.

Notatnik jest bardzo prosty

Zależy co ma się na myśli notatnik. Notatnik można zrobić w pół minuty wrzucając gotowe pole tekstowe do programu i odpalając go... Ew. dodając parę opcji typu zapisz, ładuj, ale to też powinno być prozaiczne. I nawet obiektówki nie trzeba, tylko jakieś wyłapywanie eventów.

A notatnik można robić również od zera, czyli bez użycia gotowego komponentu, czyli mając jakieś płótno i rysując wszystko jakąś biblioteką graficzną, obsługując klawisze, tworząc i zarządzając buforami tekstowymi, renderowaniem poszczególnych linii, obsługą fontów, formatowaniem, dodając ficzery typu "zawijanie linii" etc. A to by byłoby już o wiele trudniejsze.

Kalkulator. Też zależy jaki. Graficzny z przyciskami i ekranikiem? Czy w formie parsera, który by pobierał tekst od uzytkownika w stylu:

(2 + 2) * 4 + (1 * 3)
?
i liczył?
Dwa zupełnie inne rodzaje kalkulatora. Nie wiem, który trudniejszy. Ten pierwszy nie wymaga pisania parsera, z drugiej strony napisanie prostego parsera wyrażeń nie jest czymś trudnym.

A wąż... to wąż. Może różnić się szczegółami, grafiką, opcjami wyboru trudności, obecnością highscore, integracją z facebookiem itp. ale wąż jaki jest każdy widzi. Wymagania są bardziej jasne w przypadku węża. Więc może o tyle jest prostszy, że OPowi będzie łatwiej komuś wytłumaczyć co chce zrobić, i skłonić internautów do pomocy mu (nie oszukujmy się, że OP ma w sobie wiele samodzielności programistycznej...)

0

To jak powinno sie zbierać jedzenie, jak nie za pomocą ifa ?

0

@krzywy Młot - no dobrze, za pomocą ifa; A teraz pokaż implementację tego warunku (kod) i reakcję na oba przypadki (warunek spełniony i nie).

0
Krzywy Młot napisał(a):

To jak powinno sie zbierać jedzenie, jak nie za pomocą ifa ?

To tak jak byś na forum o lotnictwie zapytał jak masz pilotować samolot i byś powiedział, że wydaje Ci się, że najlepiej będzie startować i lądować za pomocą wznoszenia i opadania

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