Skocz do zawartości

Pental Stary

Zbanowani
  • Postów

    354
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Pental Stary

  1. Proszę, o to kod mojego "file explorera". Wszystkie pliki (oprócz tego pliku) muszą być w folderze Files :P . Ale: jest mało optymalny, mógłbym użyć funkcji ew. dodatkowej zmiennej, ale nie chce mi się. "Powrót" to tak na prawdę "wstecz", tak więc niekoniecznie niezawodne :P , oraz da się zajrzeć do folderu wstecz, wystarczy twojastrona.pl?dir=/.. <html> <head> <title>Starocie</title> <style type="text/css"> body { background-color: rgb( 255, 255, 220 ); } hr { height: 1px; color: black; width: 520px; text-align: left; } #all { padding: 10px; text-align: center; width: 520px; background-color: rgb( 255, 255, 190 ); font-family: Courier New; font-size: 13; } a, a:visited { font-weight: none; color: black; text-decoration: none; } a:hover { text-decoration: underline; } img { border: 0; } </style> </head> <body> <div id="all"> <div style="text-align: left;"> <?php // wyswietlanie plikow $d = "files" . $_GET["dir"]; $files = scandir( $d, 0 ); echo "Folder: " . $d . " (Plików i folderów: " . ( sizeof( $files ) - 2 ) . ")\n<br>"; for( $i = 1; $i < sizeof( $files ); $i++ ) { if( $files[$i] != "." && $files[$i] != "..") { $p = pathinfo( $files[$i] ); if ( $p["extension"] == "" ) echo "<a href=\"http://calante.ugu.pl/?dir=" . $_GET["dir"] . "/" . $files[$i] . "\"><img src=\"dir.bmp\" style=\"margin-right: 10px;\">" . $files[$i] . "</a>"; elseif ( $p["extension"] == "exe" ) echo "<a href=\"http://calante.ugu.pl/" . $d . "/" . $files[$i] . "\"><img src=\"app.bmp\" style=\"margin-right: 12px; margin-left: 2px;\">" . $files[$i] . "</a>"; elseif ( $p["extension"] == "txt" ) echo "<a href=\"http://calante.ugu.pl/" . $d . "/" . $files[$i] . "\"><img src=\"text.bmp\" style=\"margin-right: 14px;\">" . $files[$i] . "</a>"; elseif ( $p["extension"] == "png" || $p["extension"] == "bmp" || $p["extension"] == "gif" || $p["extension"] == "jpg" ) echo "<a href=\"http://calante.ugu.pl/" . $d . "/" . $files[$i] . "\"><img src=\"img.bmp\" style=\"margin-right: 14px;\">" . $files[$i] . "</a>"; else echo "<a href=\"http://calante.ugu.pl/" . $d . "/" . $files[$i] . "\"><img src=\"file.bmp\" style=\"margin-right: 14px;\">" . $files[$i] . "</a>"; echo "<br>\n"; } } if ( $_GET["dir"] != "" ) echo "<a href=\"java script: history.go( -1 );\"> <img src=\"go.bmp\" style=\"margin-right: 10px;\">Powrót</a>"; ?> </div> </div> </body> </html> Może ci się przyda :) . Wygląda to tak: http://calante.ugu.pl/ :P . Aha, spacja robi się pomiędzy java a script, usuń ją, i powinno działać jak należy :) .
  2. Konrad, łał, zaszpanowałeś swoją wiedzą, ale samo odnoszenie się do dll'a wcale nie jest szybsze. No i skąd wziąć id obrazka :] ? Trzeba by było napisać od razu całą funkcję do odczytu obrazka z zewnątrz i w programie używać gotowych tablic. A to, może, by już było dobrym rozwiązaniem.
  3. Ej, no :( . Sam przeczytaj, zwróciłeś się do cytatu: "to nie prawda", a jeśli nie, to co ma piernik do wiatraka? A tobie polecam przeczytać pierwszego posta, jeśli to zrobiłeś to wywnioskuj coś z niego :P .
  4. 1024x768? Jeden piksel to nie jeden piksel rooma :D . Ten kod jest dla obiektów statycznych raczej :P ...
  5. Aha, 5 - latek tak nie rozumuje :unsure: . Masz rację, gra ładuje się szybciej i exe'k mniej waży, jeśli zamiast jednego rooma, będzie dużo roomów... Człowieku zastanów się co piszesz! Jeśli ładujemy zasoby z zewnętrznych plików exe'k zawsze będzie mniejszy :o . A teraz napiszesz coś innego, proszę, nie rób ze mnie idioty, myśleć chyba umiem i wiem, że a - b, zakładając że b jest większe niż zero, zawsze będzie mniejsze od a :/ . A z dllem byłoby wolniej, gdyż samo odwołanie się do niego obciąża komputer.
  6. Zaraz ci to zrobię, ale najpierw objaśnienie: __l = ds_list_create(); // tworzy liste wyrazow __s = get_string( 'Podaj stringa:', '' ); __a = ''; // to aktualny wyraz, na razie pusty for( __i = 0; __i < string_length( __s ); __i += 1; ) // przejezdza po kazdym znaku string_length( __s ) <- dlugosc tekstu ktory podales { __c = string_char_at( __s, __i + 1 ); // aktualny znak if ( __c == ' ' ) // jesli to spacja, znaczy ze wyraz poprzedni sie skonczyl wiec dodajemy wyraz do listy a aktualny nadal jest pusty { ds_list_add( __l, __a ); // dodajemy ten wyraz __a = ''; // aktualny jest znowu pusty } else // a jesli nie ma spacji { __a += __c; // aktualny wyraz zwieksza sie o aktualna literke if ( __i == string_length( __s ) - 1 ) // jesli to koniec zdania { ds_list_add( __l, __a ); // dodajemy ostatni wyraz } } } for( __i = 0; __i < ds_list_size( __l ); __i += 1; ) // tyle ile jest wyrazow tyle wyswietlamy :) show_message( 'Wyraz nr ' + string( __i + 1 ) + ': ' + ds_list_find_value( __l, __i ) );
  7. Saus, ty chyba nie wiesz, co to jest dzisiejszy komputer xD . Zauważ, że tam jest jeszcze jedna pętla :) . HuderLord, e tam, wiele gier mają w "nie-skompresowanych" plikach tekstowych bardzo ważne zasoby i co z tego :P ? Konrad, użycie dll'a wiele lepszym rozwiązaniem by nie było.
  8. Właśnie, to co napisaliście to prawda. Do większości plansz się nie nadaje, chyba, że do gier pacmano-podobnych. Ew. po kilku zmianach miałoby to zastosowanie, w tworzeniu otoczenia :P . Swoją drogą - jest to także niewydajne, o tyle, że aby pobrać kolor danego piksela, grafika zostaje wyświetlona na tymczasowej powierzchni. Ale to już wina braku funkcji sprite_getpixel() :confused: .
  9. Odczyt poziomów z pliku mówi samo za siebie, w tym jednak przykładzie zamiast odczytywać poziom z pliku tekstowego, poziom odczytujemy z grafiki, np. bitmapy, gifa itp. Jakie to ma zalety? Hmm... jedyne co to daje, to zmniejsza rozmiar exe'ka i gra szybciej się ładuje, większego sensu raczej to nie ma, no ale kit z tym :P . Jak wygląda taka grafika? Ano, załóżmy, że tak :) : Została powiększona ośmiokrotnie jakby co. Do odczytu takiego poziomu, wystarczy prosty skrypt load_map: /* load_map( sciezka, lista1, lista2 ) sciezka - sciezka do pliku mapy, np. 'mapa.gif' lista1 - lista z kolorami lista2 - lista z obiektami funkcja nie dziala poprawnie w evencie Draw! */ _dir = argument[0]; _col = argument[1]; _obj = argument[2]; var __temp, __s; __s = sprite_add( _dir, 0, 0, 0, 0, 0, 0, 0 ); __w = sprite_get_width( __s ); __h = sprite_get_height( __s ); __temp = surface_create( __w, __h ); surface_set_target( __temp ); draw_sprite( __s, 0, 0, 0 ); surface_reset_target(); for( _i = 0; _i < __w; _i += 1; ) for( _j = 0; _j < __h; _j += 1; ) { __c = surface_getpixel( __temp, _i, _j ); __x = _i * ( room_width / __w ); __y = _j * ( room_height / __h ); for( i = 0; i < ds_list_size( _col ); i += 1; ) { if ( ds_list_find_value( _col, i ) == __c ) { instance_create( __x, __y, ds_list_find_value( _obj, i ) ); break; } } } surface_free( __temp ); Nie będę objaśniał tego kodu, bo sensu by to nie miało. Jak odczytać planszę? Wystarczy stworzyć dwie listy - jedna z kolorami, druga z obiektami. Wyglądać to może tak: global._list_col = ds_list_create(); global._list_obj = ds_list_create(); Dodawanie jednak na przemian wartości do pierwszej i drugiej listy byłoby może nieco niewygodne, dlatego też można napisać sobie prostą funkcję ułatwiającą życie o nazwie add_color: ds_list_add( global._list_col, argument[0] ); ds_list_add( global._list_obj, argument[1] ); Funkcje już mamy, teraz do dzieła. Pamiętaj, że: -kolor zielony (make_color_rgb( 0, 255, 0 )) to obiekt Point -kolor czerwony (c_red) to obiekt Hero -zaś kolor czarny (c_black, ew. 0) to obiekt Block Teraz przygotowujemy obydwie listy do użycia: load_map( 'mapa.gif', global._list_col, global._list_obj ); Gotowe :) . Jeszcze jedna uwaga: ponieważ grafika ma wymiary 10 x 10, to by uzyskać odpowiedni efekt należy zapamiętać tę o to zasadę: szerokosc rooma = szerokosc grafiki * szerokosc innych sprite'ow wysokosc rooma = wysokosc grafiki * wysokosc innych sprite'ow Czyli w tym wypadku rozmiar rooma, zakładają, że grafiki mają wymiary 32 x 32, to 320 x 320 :) . Tyle ode mnie. Mogę także zarzucić przykładem z dwoma planszami: https://gmclan.org/up4218_4_Mapy.html Pozdrawiam, Pental.
  10. Hmm... Coś znalazłem ;) ! Tablice prosto mówiąc to są indeksowane zmienne. Potrzebę używania tablic łatwo jest zauważyć kiedy przyjdzie nam na nie zapotrzebowanie. Na przykład, chcielibyśmy aby możliwe było w łatwy sposób wyzerować wartość zmiennej a z liczbą na końcu 2, czyli a2. Wydaje to się banalne, i tak w rzeczywistości jest. a2 = 0; Jak widać żadnych problemów nie ma. A gdybyśmy chcieli zmienną a2, a3 itd. ... a99, a100? Akurat wtedy zauważyć by można zbędne występowanie 100 linijek kodu. Dlatego prostszym rozwiązaniem było by w jakiś sposób jednak indeksować te zmienne. Czy GML pozwala na to? Oczywiście, GML jak większość język programowania bądź skryptowych oferuje tablice (w niektórych językach występują tablice asocyjne, tzn. o indeksie w postaci łańcucha znaków, ale to tylko ciekawostka). Jak wygląda składnia nadania wartości tablicy? Przyjrzyj się dokładnie: tablica[indeks] = <wartosc>; Generalnie wygląda to całkiem łatwo. Jak to wygląda w praktyce? Przykład, który mogę zaoferować to program do wyliczania średni arytmetycznej spośród podanych przez nas liczb. Kod będzie banalnie prosty: maxValues = 0; do { value[maxValues] = get_integer( "Podaj liczbę, lub wpisz zero.", 0 ); maxValues += 1; // powiekszanie indeksu kolejnej tablicy, wydaje sie logiczne, gdyz co chwile bedziemy tworzyc nowa zmienna } until( !value[maxValues - 1] ) // koniec petli, gdy podamy liczbe 0 divAll = 0; // znane z obliczania sredniej ocen, dodajemy wszystkie liczby for( i = 0; i < maxValues - 1; i += 1; ) divAll += value[i]; divAll /= maxValues - 1; // a potem dzielimy przez maksymalna wartosc show_message( "Średnia tych liczb to: " + string( divAll ) ); game_end(); Przykład może wydawać się trudny. Przeanalizujmy go. Można napisać w punktach proces obliczania średniej w tym przykładzie. 1. Deklarujemy zmienną odpowiedzialną za maksymalną ilość liczb 2. Zaczyna sie pętla. Jeśli Podamy zero, następuje koniec i przechodzimy do następnego punktu. W przeciwnym wypadku wszystko się zapętla. Pętla ta odpowiedzialna jest za tworzenie tablicy o coraz większym indeksie, gdyż indeksem jej jest ciągle powiększająca się zmienna maxValues. 3. Teraz pętlą for dzięki iteratorowi (i += 1) będziemy "przechodzili" kolejno po wszystkich tablicach i sumowali je, tzn. wartość wszystkich liczb będzie znajdywała się w zmiennej divAll. 4. Teraz znanym nam sposobem, osiągniętą sumę dzielimy operatorem dzielenia przez największy indeks tablicy value (czyt. przez ilość liczb). 5. Na końcu wyświetlamy wartość średniej i kończymy program. Wydaje się trudne, ale w ten sposób łatwo będzie ci wszystko przychodzić. Pozostaje jeszcze jedno zagadnienie, mianowicie tablice dwuwymiarowe. Tego już nie będę szczegółowo omawiał, powiem tylko, iż są to tablice z dwoma indeksami. Oddzielamy je przecinkami. Tak jak poprzednio, potrzebne nam to będzie tylko wtedy, gdy będzie nam brakowało pomysłów na stworzenie odpowiedniego elementu gry. Np. taki ekwipunek, łatwo byłoby go "wykonać" na tablicach dwuwymiarowych. Wtedy tworzymy stałą, nazywamy ją FLD_EMPTY i nadajemy jej wartość -1. W zdarzeniu Create można stworzyć ekwipunek w taki sposób: for( i = 0; i < 10; i += 1; ) { for( j = 0; j < 10; j += 1; ) { inv[i,j] = FLD_EMPTY; // 10 x 10 = 100 pol wolnych } } Możemy sobie napisać funkcję dodającą przedmiot do plecaka, potrzebne będzie jednak stworzenie stałej FLD_ITEM. Teraz łatwo będzie napisać tę funkcję. for( i = 0; i < 10; i += 1; ) { for( j = 0; j < 10; j += 1; ) { if ( inv[i,j] == FLD_EMPTY ) { inv[i,j] = FLD_ITEM; return true; } } } Dodatkowo będzie ona nam zwracała wartość 1, jeśli w plecaku będzie miejsce na rzecz, lub 0, jeśli miejsca zabraknie. Wyświetlania go już nie na piszę, bo nie o tym mowa i szkoda na to czasu. Mam jednak nadzieję, że zrozumiałeś do czego służą tego typu zmienne. Miłej nauki biggrin.gif ! By Misztrzunio :) . Przerobiłem lekko, bo wersja Misztrzunia miała błędy :P .
  11. Aha, miło. Kod na oddzielanie wyrazów: __l = ds_list_create(); __s = get_string( 'Podaj stringa:', '' ); __a = ''; for( __i = 0; __i < string_length( __s ); __i += 1; ) { __c = string_char_at( __s, __i + 1 ); if ( __c == ' ' ) { ds_list_add( __l, __a ); __a = ''; } else { __a += __c; if ( __i == string_length( __s ) - 1 ) { ds_list_add( __l, __a ); } } } for( __i = 0; __i < ds_list_size( __l ); __i += 1; ) show_message( 'Wyraz nr ' + string( __i + 1 ) + ': ' + ds_list_find_value( __l, __i ) ); Reszty ci nie zrobię, póki nie wytłumaczysz...
  12. No właśnie, jak nie potrafisz dobrze wytłumaczyć, to dopiero co ja mam powiedzieć. Czekaj chwilkę, zaraz edit :) .
  13. Oj tam, powiedz jak to ma działać. Że "tekst tekst" jest równy np. "tekst tekst lol" ?
  14. Co do punktu 3 Tymon, może go źle zrozumiałeś :P ? A przedrostki śmierdzą, duża litera załatwi sprawę :) . A przykład mi się podoba. Chciałem jeszcze powiedzieć, że sam listing kodu w C++ odpowiedzialny za coś takiego byłby podobny. Funkcje takie, jak te z GMa oferuje każda dobra biblioteka za to odpowiedzialna :) .
  15. Że gra nie działa. To jacyś idioci, którzy myślą, że jak dadzą 1 będą fajni, ech.. W grę jeszcze nie grałem, jednak mam zamiar, bo zapowiada się wyśmienicie :) .
  16. To także podstawy. Aby to osiągnąć musisz znać resztę z dzielenia i tyle.
  17. No czasem mogą być problemy, nawet przy tym kodzie. Jeśli warunki są różne, switch odpada.
  18. Aha, to tylko GML :) . No fakt, ale kod w switchu jest nie przyszłościowy, i wcale nie czytelny. A co do krótkiego kodu, masz rację. Lepsza kilkuminutowa bajka od jakiegoś dobrego długiego horroru :) .
  19. Jej, lamusku Harvie, wyjdź :> . Zaczynając od twojej niewiedzy -> w case'ach może być tylko liczba całkowita, tak więc good bye. Kod jest najlepszy, jeśli chodzi o łatwe edytowanie, mógłbym dać kolejną funkcję, ale wtedy taki Harv by nie zrozumiał, więc zuy pomysł :) .
  20. Aha ok, załóżmy, że coś z waszych wypowiedzi rozumiem :o . No to moje uwagi: -w switchu wyglądało to by bardziej fatalnie -kod może mógłby być nieco bardziej "krótszy", jednak mógłby być cięższy do przeanalizowania -to co podał marek, to nie to, co chciał mieć mój kuzyn, tak więc wypad :) -czy ja się chwalę :confused: Na podstawie tego tematu wywnioskowałem, że lepiej dać gotowy przykład, wtedy nikt nie zajrzy do kodu i nie zobaczy jego "słabych stron" xD .
  21. Pisałem program dla kuzyna - zamieszczam kod źródłowy skryptu: GML _text = get_string( "Podaj tekst:", "Siemka misiu masz zajefajne foteczki jestes boski chce cie przeleciec i w ogole zaraz dostane orgazmu jak nie zamkne twojego profilu" ); _result = ''; for( _i = 1; _i <= string_length( _text ); _i += 1; ) { _char = string_upper( string_char_at( _text, _i ) ); _char2 = string_upper( string_char_at( _text, _i + 1 ) ); if ( _char == "Z" && string_upper( string_char_at( _text, _i - 1 ) ) == "S" ) { continue; } else if ( _char == "S" && _char2 == "Z" && round( random( 1 ) ) ) { _result += choose( "sH", "Sh", "SH", "sh" ); continue; } else if ( _char == "Ż" || _char == "ż" && round( random( 1 ) ) ) { _result += choose( "sH", "Sh", "SH", "sh" ); continue; } else if ( _char == "O" && ( round( random( 1 ) ) ) ) { _result += "0"; continue; } else if ( _char == "I" && ( round( random( 1 ) ) ) ) { _result += "1"; continue; } else if ( _char == "A" && ( round( random( 1 ) ) ) ) { _result += "4"; continue; } else if ( _char == "E" && ( round( random( 1 ) ) ) ) { _result += "3"; continue; } else if ( _i mod 2 ) _result += string_upper( _char ); else _result += string_lower( _char ); } clipboard_set_text( _result ); show_message( "Tekst skopiowany do schowka!" ); Pozdrawiam!
×
×
  • Dodaj nową pozycję...