• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gra w C++ Trwa tworzenie

Object Storage Arubacloud
0 głosów
1,092 wizyt
pytanie zadane 2 lipca 2016 w C i C++ przez 20012game Początkujący (260 p.)
Witam to już moje 2 pytanie na forum i chciałbym się spytać o parę żeczy

1. Moja gra polega na wydobywaniu surowców narazie jest tylko złoto , szafiry i węgiel planuje dodać żelazo można zatrudniać górników i trochę innych rzeczy ale chciałbym zrobić pewną rzecz w kopalni czyli pierwszym miejscu jakie odwiedzamy chciałbym aby w menu przez nie podawaniu niczego przez 2 sekundy pętla szła dalej

Powiem jakby to miało działać pojawiasz się w kopalni załóżmy masz zatrudnionego 1 górnika który wykopuje 3 węgla i masz opcjie

1 Wydobywasz rudę

2 Ulepszasz kilof za złoto

3 ulepszasz kilof za szafiry

i 4 idź do miasta

i chciałbym jak ktoś nic nie wybierze przez 2 sekundy to pętla szła dalej czyli dodawała nam te 3 węgla które wykopie górnik i znów wyświetlało by się to menu i tak w kółko

 2 co chciałbym się spytać co jeszcze mogę dodać co w takiej grze by się przydało i w ogóle co powinno być

gra się powoli rozrasta bo kod ma już ponad 300 linijek a dla mnie to dużo

 

Programuję w C++ mam Windows i nie mam zamiaru uczyć się SFML czy Allegro

5 odpowiedzi

+1 głos
odpowiedź 2 lipca 2016 przez Dash Nałogowiec (29,650 p.)
Co powinno być?

1.Szyfrowany save state żeby nikt nie oszukiwał.  Szyf może być banalny, poczytaj chociażby o harcerskich szyfrach przestawnych  pokroju gaderypoluki.  

2. Grafika łącznie z animacjami. Ogarniesz podstawy SFML-a

3. Multiplayer, na współdzielonym komputerze plus powiedzmy LAN. W SFML nie będzie to trudne do zrobienia.

Od strony technicznej:

1.Przepisz grę na paradygmat obiektowy, zdecydowanie ci to ułatwi.

2.Dodaj pętlę stałokrokową.

3. Prosta maszyna stanów do obsługi menu i właściwej gry.

Do zobaczenia za pół roku, trzymam kciuki :). Moja odpowiedź jest na serio, to nie są łatwe rzeczy, ale gwarantuje że po drodze nauczysz się programować w zadowalającym stopniu. Uprzedzając pytanie jak to zrobić, mówię "Po kolei".
komentarz 2 lipca 2016 przez Dash Nałogowiec (29,650 p.)
Nie oszukujmy się, mało kto kończy pierwszy projekt. Dałem takie a nie inne zagadnienia jako wytyczne, do czego się ewentualnie kierować, nie żeby machnąć tutaj drugie Civilization. Szyfrowanie ma wprowadzić do operacji na stringach i przemyślenia całości -żeby sensownie zebrać dane do zapisu, grafika - nawet najprostsza, da zaczepienie do uczenia się SFML-a, obsługa multiplayera naprowadzi na to jak działają podstawy wymiany danych, moduł Network w sfml idealnie się do tego nada bo jest bardzo intuicyjny. Przepisania na obiektówkę tłumaczyć chyba nie muszę , pętla stałokrokowa jest podstawą gamedevu a prosta maszyna stanów to wręcz podręcznikowy przykład wykorzystania polimorfizmu i wskaźników. Ja zwyczajnie uważam że lepiej uczyć się przy tworzeniu niż z książek, pierwsze programy i tak idą do śmieci.
komentarz 2 lipca 2016 przez niezalogowany
@Davis @Avernis czy wy naprawdę nie czytacie tego co napisałem? Szyfrowanie zapisu gry - nawet najprostsze - jest głupotą i stratą czasu, czasu który można poświęcić na rozwój gry.

@Davis Skoro dla autora 300 linii kodu to sporo, to oznacza że dopiero zaczyna, jego umiejętności w programowaniu to raptem podstawy i wątpię aby chciał dorzucić sobie jeszcze sieciówkę, a jak powszechnie wiadomo gry sieciowe są znacznie trudniejsze i zaczynanie przygody z "graficznym" gamedevem od multi uważam za debilizm (sry, ale musiałem to napisać dobitnie). Uczepiłeś się tego SFML'a podczas gdy autor wyraźnie zaznaczył że nie chce go użyć (w tym przypadku w 100% się z nim zgadzam, bo jego niechęć na tak wczesnym etapie nauki jest uzasadniona). Jeżeli chcesz to możemy o tym podyskutować na PW aby nie robić spamu, a później wypisać tutaj wnioski.
komentarz 2 lipca 2016 przez Avernis Nałogowiec (27,400 p.)
komentarz 2 lipca 2016 przez Dash Nałogowiec (29,650 p.)
Dopiero teraz zauważyłem to "nie mam zamiaru". Mea Culpa, dlatego wcisnąłem SFML-a. Pisałem odpowiedź z przekonaniem że autor chce się uczyć SFML'a , Allegro, a nie bardzo wie jak się za to zabrać. Ta wstawka na dole wprowadza trochę w błąd.

W sumie nie ma za bardzo o czym dyskutować. Zwyczajnie bardziej stawiam na rozwój samych umiejętności niż gry, cóż, wstrzeliłem się trochę obok pytania. Nie będę edytować odpowiedzi, bo komentarze straciłyby sens, ale ramach spowiedzi mogę powiedzieć że chodziło mi o rzeczy które są potrzebne w tworzeniu gier, bo w sumie nie za bardzo jest jak dawać rady dotyczące konkretnej wizji autora. Byłoby gites gdybym uważniej przeczytał pytanie, za co przepraszam, odpisałem w dosyć machinalny sposób.

Co do szyfrowania, nie jest ono wykorzystywane w grach, ale podaj lepsze ćwiczenie na obsługę stringów niż prosty szyfr, a jednocześnie zaprzecz że ogarnianie stringów nie jest przydatne ;).
komentarz 3 lipca 2016 przez niezalogowany
Lepsze ćwiczenie do nauki pracy ze stringami: implementacja regexów.
0 głosów
odpowiedź 2 lipca 2016 przez Kodeman Gaduła (4,480 p.)
Sam jestem początkującym i nie wiem jak to zrobić, ale gdy sam robiłem taką grę, to po prostu zamiast czekania użyłem prostego klikania. Niestety trzeba było iść na kompromis. Ciągłe klikanie będzie mniejszym problemem, jeśli nie będziesz musiał używać entera do akceptowania każdego ruchu. Korzystałem z tego poradnika (9:35): https://youtu.be/ib7LXBNfZ7g?t=9m35s

Polecam obejrzenie całego
komentarz 2 lipca 2016 przez 20012game Początkujący (260 p.)
obejrzałem to już dawno switch'a używam prawie w wszystkich menu i wyborze
komentarz 2 lipca 2016 przez Kodeman Gaduła (4,480 p.)
a jeśli potrzebujesz ciekawych pomysłów związanych z wykopywaniem rudy itp. to znam grę diamond hunt
komentarz 2 lipca 2016 przez 20012game Początkujący (260 p.)
podaj jakiś pomysł bo nie za bardzo wiem oco ci chodzi
komentarz 2 lipca 2016 przez Kodeman Gaduła (4,480 p.)
Gra jest darmowa w internecie, sprawdź sobie i czerp inspirację oraz dobre pomysły
komentarz 2 lipca 2016 przez Avernis Nałogowiec (27,400 p.)

czy zamiast switcha nie lepiej użyć getchara?

char = getchar();

if(char == 13)
{

}

 

komentarz 2 lipca 2016 przez Kodeman Gaduła (4,480 p.)
przy dużej ilości wyborów, nie czystszy jest kod ze switchem?
komentarz 2 lipca 2016 przez Avernis Nałogowiec (27,400 p.)
Co kto woli, dla mnie czystszy jest ten kod. Jakoś nigdy nie trawiłem switchy swoim wzrokiem. Ja podałem tylko przykład jak to można zrobić inaczej.
komentarz 2 lipca 2016 przez Kodeman Gaduła (4,480 p.)
okej, myślałem że getchar jest po prostu lepszy, tak jak ludzie piszą, że do stopowania programu lepiej używać czegoś innego niż getch()
0 głosów
odpowiedź 2 lipca 2016 przez Michał Muzyka Pasjonat (24,080 p.)
myśle że dobrym pomysłem byłoby wrzucenie tutaj pliku .exe zeby każdy mógł zobaczyć grę, ocenić dobre, słabe strony oraz podpowiedzieć co możesz dodać
komentarz 2 lipca 2016 przez niezalogowany
Jeżeli każdy ma zobaczyć to lepiej wrzucić źródła, nie każdy używa Windowsa
komentarz 2 lipca 2016 przez Michał Muzyka Pasjonat (24,080 p.)
zaproponowałem wrzucenie pliku exe ponieważ wiele osób o które prosiłem o kod burzyły się że "chcę być jedynym właścicielem kodu"
komentarz 2 lipca 2016 przez 20012game Początkujący (260 p.)
Wrzucę jak skończę dodawać żelazo bo teraz z niewiadomych przyczyn kod zmniejszył się o 100 linijek XD
0 głosów
odpowiedź 2 lipca 2016 przez niezalogowany

1. Moja gra polega na wydobywaniu surowców narazie jest tylko złoto , szafiry i węgiel planuje dodać żelazo można zatrudniać górników i trochę innych rzeczy ale chciałbym zrobić pewną rzecz w kopalni czyli pierwszym miejscu jakie odwiedzamy chciałbym aby w menu przez nie podawaniu niczego przez 2 sekundy pętla szła dalej 

Powiem jakby to miało działać pojawiasz się w kopalni załóżmy masz zatrudnionego 1 górnika który wykopuje 3 węgla i masz opcjie 

1 Wydobywasz rudę

2 Ulepszasz kilof za złoto

3 ulepszasz kilof za szafiry

i 4 idź do miasta

i chciałbym jak ktoś nic nie wybierze przez 2 sekundy to pętla szła dalej czyli dodawała nam te 3 węgla które wykopie górnik i znów wyświetlało by się to menu i tak w kółko

Mówiąc szczerze, to nie zadałeś tutaj żadnego pytania tylko opisałeś jak ma wyglądać gra. Jednak, spróbuję coś ci poradzić:

Jak dla mnie ta gra to idealna gra tekstowa w konsoli, sam napisałeś że jesteś początkującym więc pchanie się w SFML'a to raczej na tym etapie niezbyt dobry pomysł (z resztą z samego opisu gra lepiej pasuje do konsoli niż wersji graficznej w oknie). Oprócz tego chciałbyś zrobić interaktywny ekran (jeżeli minie timeout to update informacji) i chciałbyś zrobić to dobrze to bez WinApi się nie obejdzie (do obsługi konsoli)

2 co chciałbym się spytać co jeszcze mogę dodać co w takiej grze by się przydało i w ogóle co powinno być

Co chcesz, na razie zrób rdzeń rozgrywki później pomyśl nad tym co jeszcze dodasz

 

komentarz 2 lipca 2016 przez DragonCoder Nałogowiec (36,500 p.)

@Szymon jeste programist niskopoziomowym? Bo jak tak to mam pytanie o właśnie kod co oznacza zapis 0x000000000040054c <+15>:  ret 

komentarz 2 lipca 2016 przez niezalogowany
Nie, nie jestem programistą niskopoziomowym, ale cośtam wiem:

jest to pop'nięcie adresu ze stosu i skok pod ten adres, najprościej mówiąc to powrót do miejsca z którego została wykonana funkcja
komentarz 2 lipca 2016 przez DragonCoder Nałogowiec (36,500 p.)
Ok :D, no ale wiedze masz duża :)
komentarz 3 lipca 2016 przez Schizohatter Nałogowiec (39,600 p.)
Nie ma sensu liczyć linijek kodu. Serio. Piszę karciankę multiplayer przez przeglądarkę i tak:

Serwer:
Napisana przeze mnie biblioteka do obsługi websocket - 300 linijek
Obsługa graczy (akceptacja, dorzucanie do kolejki) - 250 linijek

Klient:
interfejs/html - 210 linijek
interfejs/css - 800 linijek skompresowanych
interfejs/js - 300 linijek
Obsługa websocket - 100 linijek
silnik/js - 300 linijek

A przecież jeszcze nic się nie da robić, poza dołączeniem do serwera i wykładaniem kart na planszę (bez żadnych zasad, po prostu wykładanie na określone pole).

Tak więc jak przy 300 linijkach masz grę, w którą już można grać, to jest to dobry wynik :)
komentarz 3 lipca 2016 przez 20012game Początkujący (260 p.)
No mam gre tylko w konsoli
0 głosów
odpowiedź 2 lipca 2016 przez 20012game Początkujący (260 p.)
Plik exe można pobrać pod tym linkiem

Niewiem czy dobrze wrzuciłem bo jeszcze nie wrzucałem plików na internet

https://drive.google.com/file/d/0B5Y_cRHmgS3FT2NORlYyMjJrd0k/view?usp=sharing

nie zważajcie na nazwę pliku po nie ma za bardzo wspólnego z grą

 

proszę w razie znalezienia błędów o powiadomienie mnie o tym po dodaniu żelaza jeszcze nie sprawdzałem gry więc mogą się zdarzać błędy z nim związane
komentarz 3 lipca 2016 przez 20012game Początkujący (260 p.)
popiszmy na pw bo teraz twojej wypowiedzi nie zrozumiałem
komentarz 3 lipca 2016 przez DragonCoder Nałogowiec (36,500 p.)
Przekroczyłem limit wiadoości :D, zapomniałeś zamknąc nawiasu
komentarz 3 lipca 2016 przez 20012game Początkujący (260 p.)
Ale błąd tworzy

szansa_szafir=rand%()100+1;

i inne z losowaniem liczby
komentarz 3 lipca 2016 przez DragonCoder Nałogowiec (36,500 p.)
A zainkludowałeś blbliotekę  cstdlib? Jak kodu nie ma to mogę strzelać jak do kaczek, albo trafie albo nie
komentarz 3 lipca 2016 przez 20012game Początkujący (260 p.)
Tak to jest cały błąd

||=== Build: Debug in GRASTRATEGIA (compiler: GNU GCC Compiler) ===|
C:\Users\x\Desktop\GRASTRATEGIA\main.cpp|320|warning: character constant too long for its type|
C:\Users\x\Desktop\GRASTRATEGIA\main.cpp|324|warning: multi-character character constant [-Wmultichar]|
C:\Users\x\Desktop\GRASTRATEGIA\main.cpp|328|warning: character constant too long for its type|
C:\Users\x\Desktop\GRASTRATEGIA\main.cpp||In function 'int main()':|
C:\Users\x\Desktop\GRASTRATEGIA\main.cpp|51|error: expected primary-expression before ')' token|
C:\Users\x\Desktop\GRASTRATEGIA\main.cpp|53|error: expected primary-expression before ')' token|
C:\Users\x\Desktop\GRASTRATEGIA\main.cpp|55|error: expected primary-expression before ')' token|
C:\Users\x\Desktop\GRASTRATEGIA\main.cpp|57|error: expected primary-expression before ')' token|
||=== Build failed: 4 error(s), 3 warning(s) (0 minute(s), 1 second(s)) ===|

 

a to są miejsca kodu które go powodują wszystkie z losowaniem liczby

te 4

szansa_szafir=rand%()100+1;

wykop_szafir=rand%()5+1;

szansa_zloto=rand%()2+1;

wykop_zloto=rand%()5+1;

Podobne pytania

0 głosów
1 odpowiedź 1,553 wizyt
pytanie zadane 30 czerwca 2016 w C i C++ przez 20012game Początkujący (260 p.)
0 głosów
2 odpowiedzi 230 wizyt
pytanie zadane 19 czerwca 2017 w C# przez mix923 Początkujący (450 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...