Można grę w końcu ukończyć :P
Pozostało poprzenosić część kodu z klasy Game i utworzyć klasę Level, dorobić pare map, stworzyć menu i może dodać trochę dźwięków i można mówić o w miarę ukończonej grze :D

Mój tag: #leinnanblends

#gamedev #cpp #programowanie #sfml
Leinnan - Można grę w końcu ukończyć :P 
Pozostało poprzenosić część kodu z klasy Ga...
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Leinnan: No tak, ale jeszcze implementacje się różnią od siebie. Widzę że korzystasz z Linuxa, najlepsze do nauki są otwarte sterowniki, bo najmniej błędów wybaczają ( ͡º ͜ʖ͡º) szczególnie czepiają się przy kompilacji GLSLa którego będziesz musiał poznać by narysować choć jeden vertex (Core profile).
Np stery od Nvidi to łykają wszystko i nagle się okazuje że na AMD nie chce działać bo bląd kompilacji
  • Odpowiedz
Mirki, próbuję usiąść do nauki C++, ale za każdym razem jak zabieram się za jakieś materiały to odpadam po godzinie/50 kartkach tłumaczenia mi co to pętle i zmienne. Problem polega na tym, że jestem już programistą, więc potrzebuję książki, która nauczy mnie specyfiki języka, a nie będzie mnie uczyć podstaw programowania. Polecacie jakaś książkę, która będzie aktualna?
#programowanie #cpp
  • 21
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Mirko jak zwykle w fromie jak nie polecanie gowna typu prata c++ lub symfonia, teraz poleca 1200 stronnicowa ksiazke ktora jest praktycznie referencja do nauki...

To jest po prostu masakra co tu sie dzieje, ciagle wypowiadaja sie te same osoby praktycznie bez wiedzy.

To jes bardzo dobre podsumowanie poziomu ludzi ktorzy tu siedza:

dokumentacja
  • Odpowiedz
#cpp #programowanie
Jak radzić sobie z brakiem pamięci?
Mogę zwolnić zasoby, ale nie chcę w każdym możliwym miejscu przed alokacją sprawdzać czy jest jeszcze pamięć. Zrobiłbym to wyjątkiem obsługiwanym globalnie na std::bad_alloc, ale wtedy i tak jest za późno. Napisanie własnej funkcji new nie wiele da, bo nie będzie ona używana np przez std::string.
Jakieś pomysły?
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Jeszcze nie doszedlem do programowania obiektowego, ale robie swoj maly program.
Mam obiekty typu int: a,b,c,d,e,f,g,h. Kazdej chcialbym przydzielic losowa liczbe calkowita od 0-7 w taki sposob, by sie nie powtarzaly.
np. a=1, b=6, c=2, d=3, e=4, f=7, g=5. Chcialbym zeby program to robil automatycznie przy starcie.

a=rand()%8;
b=rand()%8;
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Primbledon A ja się jeszcze uprzejmie przyczepię, bo jakbyś kiedyś tak na rozmowie kwalifikacyjnej jebnął to odpadasz na starcie ;-)

Mam obiekty typu int: a,b,c,d,e,f,g,h.


int to typ prymitywny. Nie jest obiektem.
  • Odpowiedz
@sokytsinolop: Moznaby to zrobic obiektowo. Az sie prosi.
Zamiast tablic lepiej chyba byloby uzyc jakiegos sensownego ceplusplusowego kontenera (std::vector, std::array).
Pomijajac wszystko... w generation() chyba lepiej zebrac wszystkie pola do uaktualnienia a potem je uaktualnic zamiast kopiowac tablice tam i spowrotem.
  • Odpowiedz
@wytrzzeszcz: to komuś słabiutko idzie przyswajanie faktów. qsort jest duƶo gorszy od std::sort, bo uniemoƶliwia optymalizację.

W kaƶdym razie: qsort wymaga funkcji zwracającej trzy stany (mniejsze, równe, większe), std::sort potrzebuje lessthan gwarantującego strict weak ordering. Czyli normalny < dla intów.

std::sort(buffer_data, buffer_data+BUFFER_SIZE, cmp) i gotowe
  • Odpowiedz
Wideo: https://vid.me/PWcl
Dzień następny. Jak widać dodałem skrzynki, gracza, kolizje między skrzynkami, graczem i murami. Punkt startowy gracza, jak i skrzynek jest wczytywany z pliku. Pozostało dorobić miejsca docelowe dla skrzynek, wykrywanie czy skrzynka jest na jednym z nich, dorobić kilka map i można mówić o ukończonej prostej grze.

Mój tag: #leinnanblends

#gamedev #cpp #programowanie #sfml
Leinnan - Wideo: https://vid.me/PWcl
Dzień następny. Jak widać dodałem skrzynki, gra...

źródło: comment_0yZ3tmZ1B1zQ5fVrwSSfisUljRsijgVJ.jpg

Pobierz
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Czemu funkcja wolnorynkowa z biblioteki algorithms w Cpp nazywa się __gcd() zamiast gcd()? Ktoś potrafi wyjaśnić dlaczego na początku jej nazwy stoją podkreślenia i to jeszcze dwa?

#programowanie #cpp
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

__ to zwyczajowo internale i nazwy zastrzeżone. Nie stanowi publicznego api i nie masz gwarancji, że w następnej wersji będzie dostępne.
  • Odpowiedz
Mam taką sytuację (bez strachu, kilka linijek tam jest i proste ale na Wykopie mało przejrzyście): http://pastebin.com/U5B9NTd1

No i teraz:
1) Czy usunięcie MyClassB spowoduje wywołanie tak destruktora MyClassB, jak i MyClass czy muszę się jakoś odwołać z destruktora MyClassB do MyClass, np. funkcją MyClass::del() w każdym z destruktorów?
2) Czy usunięcie MyClassA spowoduje wywołanie destruktora MyClass, czy też muszę uczynić destruktor MyClass wirtualnym żebym to się stało?

#cpp #
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@lionbest: ten void* to tam sobie dodałem tak tylko dla przykładu. zresztą, delete na staticcast(this->voidptr) już ma sens. ale dziękuję za odpowiedź. :)
  • Odpowiedz
@Dijuna: Generalnie to tak jak masz napisane to powinieneś mieć virtual przy destruktorze, żeby działało zawsze (w MyClass). Dopóki nie pokażesz więcej kodu trudno powiedzieć co się stanie.
  • Odpowiedz
#cpp #naukaprogramowania
Napisałem pewną klasę odpowiadającą za wyświetlanie tekstu na ekranie.
Mam jednak pewien problem. W klasie mam tego typu metody które dodają znaki przekonwertowane na string do bufora:

friend TextOut & operator<<(TextOut & TO, std::string & text) {...}
friend TextOut & operator<<(TextOut & TO, char * text) {...}
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@ifinox: zacznijmy od tego że przyjmuje std::string to nie char*, to są dwa różne typy. Jeśli wywołujesz operator<< z obiektem string, teoretycznie można wykorzystać zarówno zadeklarowaną funkcję jak i template, ale w takim przypadku zwykła funkcja ma pierwszeństwo.
Jeśli wywołasz operator<< z obiektem innego typu, kompilator nie będzie w stanie użyć funkcji więc wykorzysta (a przynajmniej jeśli typ parametru mu na to pozwoli) template. wewnątrz template użyłem funkcji to_string która
  • Odpowiedz
@czarn1y: Jeśli zadanie jest sformułowane tak jak napisałeś, to jest idiotyczne, bo nie można przeciążać typu zwracanego.

Natomiast ogólnie możesz to zrobić w ten sposób:
int foo(char a, char& out);

Częsta praktyka w C. Funkcja zwraca status jako int, a wynik jej działania zapisywany jest do zmiennej przekazanej przez referencję do funkcji.
  • Odpowiedz
bo nie można przeciążać typu zwracanego.


@Strus: no nie do końca, w przeciążonej funkcji typ zwracany może być różny. ale dedukcja, która z przeciążonych funkcji powinna być wywołana, bazuje na typach przekazanych parametrów. więc nie da się przeciążyć TYLKO typu zwracanego, ale można to zrobić zmieniając również listę parametrów.
@Acrivec:
  • Odpowiedz
Mirki, mam tablicę:

double tab[10][5][30]


i powiązane z tą tablicą wyrażenie tab [6][4], które według rozwiązania oznacza:

6
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Lux_Aeterna:
Masz tablicę dwuwymiarową, 10 rzędów, 5 kolumn; każda komórka zawiera 30 elementową tablicę. Wszystko jest numerowane od zera.
6 - tyle jest rządów przed Twoim
5 - tyle jest kolumn w każdym rzędzie
Komórka do której się odwołujesz jest oznaczona ×
Żółte komórki poprzedzają Twoją, jest ich 34, zatem Twoja jest 35. Zatem wołając tab [6][4] odwołujesz się do 30-elementowej tablicy znajdującej się w 35 komórce tablicy dwuwymiarowej
Romantycznywidelec - @LuxAeterna: 
Masz tablicę dwuwymiarową, 10 rzędów, 5 kolumn; k...

źródło: comment_tmI0rXMUYKbGJGME6ApyBJe5giaKF3DV.jpg

Pobierz
  • Odpowiedz
@czarnyzawias: Co masz na myśli pod konwersją? Tworzenie nowego obiektu?

operator konwersji:
explicit operator B();
definiujesz w A i tam tworzysz nową instancję B, ale musisz dodać stosowny konstruktor w B aby móc zanicjalizować ten obiekt.
  • Odpowiedz