Skocz do zawartości

Utermiko

Użytkownicy
  • Postów

    796
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Utermiko

  1. Ja sobie ostatnio kodzę w C# grę labirynt. Musisz zebrać wszystkie gwiazdki z planszy i dotrzeć do wyjścia. Skoro to labirynt to nie będzie łatwo dojść do wyjścia. Level editor już skończyłem, bo granie w te same mapki stało by się nudne, a tak to można sobie stworzyć własne. Już są rekordy na levelach, tzn. "Best time". Poniżej zamieszczam screena. Wiem, grafika do wymiany. Zresztą będzie można sobie przełączać pomiędzy rodzajami grafiki. Poniższy level zrobiłem tak na szybko, żeby pokazać.
  2. Utermiko

    Błąd

    Masz int main(...) i nie zwracasz nic?
  3. Lewą "nóżkę" N mógłbyś zgrubić i zaokrąglić A.
  4. No a więcej typów zmiennych i typ wyliczeniowy? ;P
  5. Nauka składni to jeden wieczór, pod warunkiem, że zna się jakiś język.
  6. Witam. Próbuję w C# napisać program, który przechwytuje cmd.exe. Używam metod StandardOutput oraz StandardInput. Problem w tym, że potrzebuję zrobić tak, że najpierw wpisuję polecenie, następnie otrzymuję odpowiedź, i konsolka jest gotowa do wprowadzenia kolejnego polecenia. Męczę się z tym już 2 godziny, próbowałem różnych metod i zastanawia mnie, dlaczego poniższy kod nie działa. Tzn. przechwytuje tekst, ale po skończeniu dalej próbuje to robić i program się wysypuje. while (!(p.StandardOutput.EndOfStream)) { ans += p.StandardOutput.ReadLine(); } p.StandardOutput.ReadToEnd() - wysypuje program. Sądzę, że to koliduje z wejściem, bo kiedy zamknę strumień wejścia ("p.StandardInput.Close()"), to ReadToEnd() nie wysypuje programu. To by była dobra opcja, ale niestety nie da się chyba znów przywrócić. Z góry dziękuję za pomoc. @EDIT W skrócie chodzi mi o to, żeby odpalić cmd.exe i wyjście przenosić do RichTextBoxa, a wejście wprowadzać za pomocą TextBoxa. Tak żebym mógł normalnie poruszać się po folderach itp. Teoretycznie już wiem jak to zrobić ale jest pewne ale. p.StandardInput.WriteLine(@polecenie); p.StandardInput.Flush(); p.StandardInput.Close(); wynik = p.StandardOutput.ReadToEnd(); Ten kod wtedy działa, ale jak potem otworzyć strumień wejścia?
  7. @BATOREX Jeśli zrozumiałeś to się cieszę :) @gnysek Wiem o tym, ale początkującemu lepiej zrozumieć najpierw to ze zwiększaniem się licznika. Kiedy już to dobrze zrozumie, to może zobaczyć inne (zresztą można się samemu domyślić :P).
  8. Z tego sam nie mogłem się połapać jak byłem nowy, więc ci wytłumaczę. Każda zmienna potrafi przechować jedną wartość, np. ilość punktów. Jako przykład, dam ekwipunek we własnej grze. Każdy slot to będzie oddzielna zmienna, do przechowana ID przedmiotu. Można zrobić tak: GML global.eq0=0; global.eq1=0; global.eq2=0; global.eq3=0; //itd...</span></span></span></span></span></span> Jest to nieco uciążliwe, i jeśli byśmy mieli tych slotów ok. 20, to bez sensu byłoby, np. sprawdzanie w jakimś skrypcie w którym slocie znajduje się dany przedmiot. Z pomocą przychodzą tablice. Są to zmienne, ugrupowane koło siebie pod jedną nazwą, ale pod innym indeksem. Np. GML global.eq[0]=0; Przypisujemy do tablicy "global.eq" do jej ideksu o numerze "0" wartość 0. Podczas inicjacji tablicy nie musimy wypisywać po kolei: GML global.eq[0]=0; global.eq[1]=0; global.eq[2]=0; global.eq[3]=0; tylko można to zrobić za pomocą pętli "for". GML for(i=0; i<10; i+=1) { global.eq=0; } Pętla for jest tj. licznikiem. Pierwszy argument po nawiasie to inicjacja zmiennej, która będzie się zwiększać w każdym przebiegu pętli o, w tym przypadku, 1. Drugi argument to warunek, tzn. że pętla będzie "odliczać" dopóki zmienna licznikowa jest mniejsza od 10. Trzeci argument o jaką wartość ma się zwiększać licznik przy każdym przebiegu pętli. Każdy argument pętli for należy rozdzielać średnikiem (;). Dzięki pętli "for" możemy błyskawicznie zainicjować tablicę. GML for(INICJACJA; WARUNEK; ZWIEKSZANIE) { CIAŁO } Pętla for działa tak: 1. INICJACJA 2. WARUNEK - jeśli jest PRAWDĄ to wykonaj punkt 3, 4 i 5 (po kolei). Jeśli jest FAŁSZEM to wyjdź z pętli. 3. CIAŁO 4. ZWIEKSZANIE 5. Przejdź do punktu 2. Kilku zmiennych nie da się zainicjować w taki sposób, ponieważ zmienne mają inną nazwę, a tablica ma jedną nazwę i pod różnymi jej indeksami są różne liczby. Jeśli nie rozumiesz tablic, to wyobraź sobie to jako taką tablicę do przypinania jakiś karteczek itp. Uznajmy, że karteczka to jest zmienna. Na jednej takiej tablicy (np. korkowej :P) zmieścisz kilka takich karteczek i są one uporządkowane w jednym zbiorze, tzn. na tej tablicy. Kiedy przypniesz karteczkę do ściany, to ta liczba będzie tak jakby "sama". Myślę, że pomogłem :)
  9. No to GML draw_sprite(spr_obrazek, 0, view_xview[0] + 10, view_yview[0] + 10); W sprawie tego serwera, to wiem o co ci chodziło, ale napisałem w jaki sposób działają ogólnie gry online. Tak naprawdę, to wystarczy, że się nauczysz if'a, switch'a, tablic i tych innych podstaw, a reszta to po porostu poznawanie funkcji, czytanie dokumentacji (do czego dana funkcja służy i jak jej użyć).
  10. Pozostaje Ci tylko ćwiczyć. Później wszystko zacznie Ci się wydawać banalne, tylko trzeba zacząć myśleć "programistycznie". Moje początki z GM też nie były wcale lepsze, więc się nie załamuj :D
  11. GML draw_sprite(spr_obrazek, 0, obj_gracz.x, obj_gracz.y - 10); Nie wiem czy czasem argumentów nie pomyliłem, ale powinno być dobrze. Tak jak napisał ediepl, w grze multiplayer to jest podstawa. Klient nie powinien móc zmieniać ilości punktów, tylko klient wysyła do serwera na ile punktów chciałby zmienić, a serwer sprawdza czy tak można, etc. Serwer wykonuje wszystkie obliczenia, a klient tylko przedstawia wyniki. BTW. Nie bierz się na razie za multiplayer skoro nie potrafisz zrobić tego, o co pytałeś.
  12. https://gmclan.org/index.php?wiki=article&zm=56 https://gmclan.org/index.php?wiki=article&zm=29. W GM da się zrobić większość rzeczy, a jeśli to nie wystarcza to rozszerzasz funkcjonalność za pomocą bibliotek DLL.
  13. Utermiko

    H2O

    Trudne to troszkę. Ani jednego poziomu nie udało mi się przejść. Sądzę, że w pełnej wersji na początku będzie jakiś tutorial oraz prostsze poziomy. Gra jest wg. mnie fajna, lecz trudność poziomów trochę zniechęca do grania.
  14. ediepl, wiem, że to było zbędne, ale nowemu łatwiej takie coś zrozumieć, niż żeby pytał za co odpowiada to "10".
  15. GML pozycjax = 10; pozycjay = 10; draw_text(view_xview + pozycjax, view_yview + pozycjay, "Punkty: " + string(score));
  16. A firewall nie blokuje Ci połączeń?
  17. Tak samo jak zapisałeś, tylko, że podczas odczytu używasz read, a później na wczytanych pozycjach tworzysz obiekty. I tak jak napisał edie, używaj plików binarnych. Zmniejszy to rozmiar pliku mapy.
  18. Te skrypty to są tj. funkcje. Jak potrzebujesz w 10 miejscach takiego samego, długiego kodu, to zamiast kopiować go i potem w każdym po kolei nanosić poprawki, to zmieniasz tylko w skrypcie i wywołujesz go w odpowiednich miejscach w kodzie.
  19. Dlaczego nie skorzystasz z funkcji wbudowanych w 39dll? :sp_ike:
  20. Podaj błąd i wyrzuć Dev'a. Zainstaluj Visual C++ Express (darmowe!). Dev ma praktycznie martwy debugger, w wyniku czego nawet najprostszy programik nie skompiluje się gdzie indziej. Przykład: Używałem string'ów w programie, a nie zaincludowałem biblioteki "string". Na Dev'ie skompilowało się i działało(?), a na innym już errorem sypało :)
  21. Heh, nie wiedziałem, że to aż takie proste :P W sumie można było się domyśleć o co chodzi po zdaniu Maximala: @UP Pamiętam :) Dziękuję za pomoc. Temat można zamknąć.
  22. No ale jak wczytać w ten sposób dane, np. do tablicy, którą wielkość ustala użytkownik? Kiedy dam cin>>a; to mi przeskakuje do kolejnej linii. Zrobiłem sobie sposób ze stringiem (pewnie mało optymalny ale jest :P), że ładuje znaki do tab[0], a jak napotka spację to ładuje do tab[1], aż do końca stringa. Jeśli potrzeba liczb, to po prostu je konwertuję później. Nie czuję się zbyt dobrze w C++ no ale cóż. Na OIG nie ma C# :P @EDIT Chodzi mi o to, że na początku mnie zapyta "Ile liczb wczytać?" i wpiszę powiedzmy 7, a później muszę wpisać 7 liczb porozdzielanych spacją.
  23. Bo jak dałeś w create, to pewnie speed na początku wynosi 0... Daj w step.
×
×
  • Dodaj nową pozycję...