Hunter Opublikowano 21 Lutego 2011 Udostępnij Opublikowano 21 Lutego 2011 Mam plik tekstowy w którym znajdują sie pozycje y i x mapy. Wyglada on nastepująco(fragment): 1,1=0 1,2=0 1,3=0 1,4=0 1,5=0 1,6=0 1,7=0 1,8=0 1,9=0 1,10=0 1,11=0 1,12=0 1,13=0 1,14=0 1,15=0 1,16=0 1,17=0 1,18=0 1,19=0 1,20=0 1,21=0 1,22=0 1,23=0 1,24=0 1,25=0 1,26=0 1,27=0 1,28=0 1,29=0 1,30=0 1,31=0 1,32=0 1,33=0 1,34=0 1,35=0 1,36=0 1,37=0 1,38=0 1,39=0 1,40=0 1,41=0 1,42=0 1,43=0 1,44=0 1,45=0 1,46=0 1,47=0 1,48=0 1,49=0 1,50=0 2,1=0 2,2=0 2,3=0 2,4=0 2,5=0 2,6=0 2,7=0 2,8=0 2,9=0 2,10=0 2,11=0 i tak do pozycji 50,50=0 mapa ma 50 na 50 pozycji, kazda pozycja oddzielona jest spacją. podajac w $_GET'ach daną pozycję np x=5&y=4 chcę sprawdzić czy na około tego pola wartości pozostałych pól są mniejsze niż 3, czyli po = mają liczbe mniejsza niz 3. w tym celu musze sprawdzic 8 pozycji na około. napisałem funkcje: function CheckBuildingsAround($x,$y,$type) { $x = $x; $y = $y; $x1 = $x-1; $y1 = $y-1; $x2 = $x; $y2 = $y-1; $x3 = $x+1; $y3 = $y-1; $x4 = $x-1; $y4 = $y; $x5 = $x; $y5 = $y; $x6 = $x+2; $y6 = $y; $x7 = $x-1; $y7 = $y+1; $x8 = $x; $y8 = $y+1; $x9 = $x+1; $y9 = $y+1; print $x1.'/'.$y1.'<br/> '; print $x2.'/'.$y2.'<br/> '; print $x3.'/'.$y3.'<br/> '; print $x4.'/'.$y4.'<br/> '; print $x5.'/'.$y5.'<br/> '; print $x6.'/'.$y6.'<br/> '; print $x7.'/'.$y7.'<br/> '; print $x8.'/'.$y8.'<br/> '; print $x9.'/'.$y9.'<br/> '; $path = 'maps/'; $file = fopen( $path.'file.txt', 'r+'); $data = fread( $file, filesize( $path.'file.txt')); fclose( $file ); $text= explode( " ", $data ); print '<br>'; $res = 0; for ($j=1;$j<=2499;$j++) { $text2 = explode( "=", $text[$j] ); if ( $text2[0] == $y1.','.$x1 )//sprawdzenie czy jest pole { if ( $text2[1] > 3 AND $text2[1] != $type ) { return 1; } } if ( $text2[0] == $y2.','.$x2 )//sprawdzenie czy jest pole { if ( $text2[1] > 3 AND $text2[1] != $type) { return 1; } } if ( $text2[0] == $y3.','.$x3 )//sprawdzenie czy jest pole { if ( $text2[1] > 3 AND $text2[1] != $type) { return 1; } } if ( $text2[0] == $y4.','.$x4 )//sprawdzenie czy jest pole { print 'a'; if ( $text2[1] > 3 AND $text2[1] != $type) { return 1; } } if ( $text2[0] == $y6.','.$x6 )//sprawdzenie czy jest pole { print 'b'; if ( $text2[1] > 3 AND $text2[1] != $type) { return 1; } } if ( $text2[0] == $y7.','.$x7 )//sprawdzenie czy jest pole { if ( $text2[1] > 3 AND $text2[1] != $type) { return 1; } } if ( $text2[0] == $y8.','.$x8 )//sprawdzenie czy jest pole { if ( $text2[1] > 3 AND $text2[1] != $type) { return 1; } } if ( $text2[0] == $y9.','.$x9 )//sprawdzenie czy jest pole { if ( $text2[1] > 3 AND $text2[1] != $type) { return 1; } } } } niestety niewiadomo czemu funkcja ta sprawdza tylko pierwsze 4 warunki -.- nie wiem co jest grane mecze sie z tym juz 2 dzień ;/ prosze o pomoc webmasterów i królów PHP. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 21 Lutego 2011 Udostępnij Opublikowano 21 Lutego 2011 Czy wszystkie pola myszą spełniać warunek < 3? Swoją drogą, to co prezentujesz tutaj to bardzo toporna metoda. Plik mapy jest za duży, a jego obsługa toporna. Mogę zaproponować inne rozwiązanie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 21 Lutego 2011 Autor Udostępnij Opublikowano 21 Lutego 2011 nie wszystkie, tylko te które są naokoło pozycji x/y podanych w $_GET. chetnie posłucham:) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 21 Lutego 2011 Udostępnij Opublikowano 21 Lutego 2011 Dobra, więc tak. Co do mapy. Plik to zlepek znaków, bajtów o wartościach z przedziału 0-255. Dlaczego by tego nie wykorzystać? W końcu jedyne co musisz przechować w pliku to wartość pola, pozycję pola może określać pozycja bajtu w pliku, w końcu mapa ma stałą wielkość. Nawet jeśli nie to jej rozmiary zawsze można wgrać na początku pliku i kazać programowi odczytywać ją i dostosowywać odpowiednio parametry. Co do sprawdzania pól. Cóż. Musisz sprawdzić pola na około jakiegoś punktu (x,y), powiedzmy w odległości delta=1, sprawdzasz wtedy pola spełniające warunki <x-delta,x+delta> i <y-delta,y+delta> oraz (x,y) != (punkt odniesienia). Jak to ogarnąć? Dwie pętle for, w nich warunek który ignoruje sprawdzanie punktu odniesienia. Proste? EDIT Prosty systemik mapy 50x50, na funkcjach, obiektowo jeszcze nie programujesz. Good luck. ;) <?php // stałe określające rozmiary mapy define( 'MAP_WIDTH', 50 ); define( 'MAP_HEIGHT', 50 ); // stała wyliczająca rozmiar pliku mapy define( 'MAP_SIZE', MAP_WIDTH * MAP_HEIGHT ); function map_open( $file ) { // otworzenie mapy if( !file_exists( $file ) ) { // brak pliku $handle = fopen( $file, 'w+' ); fwrite( $handle, str_repeat( chr( 0 ), MAP_SIZE ) ); } else if( filesize( $file ) < MAP_SIZE ) { // plik za mały $handle = fopen( $file, 'a+' ); fwrite( $handle, str_repeat( chr( 0 ), MAP_SIZE - filesize( $file ) - 1 ) ); // dopisz brakujące znaki } else { // plik ma się dobrze $handle = fopen( $file, 'r+' ); } return $handle; } function map_close( $handle ) { // zamknięcie mapy fclose( $handle ); } function map_check( $x, $y ) { // sprawdzenie czy pole jest ok if( $x < 0 || $x > MAP_WIDTH || $y < 0 || $y > MAP_HEIGHT ) { return false; } return true; } function map_get( $handle, $x, $y ) { // pobranie wartości pola if( !map_check( $x, $y ) ) { // pole jest złe! return 0; } fseek( $handle, $x + $y * MAP_WIDTH ); return ord( fgetc( $handle ) ); } function map_set( $handle, $x, $y, $value ) { // zmiana wartości pola if( !map_check( $x, $y ) ) { // pole jest złe! return false; } fseek( $handle, $x + $y * MAP_WIDTH ); fwrite( $handle, chr( $value & 0xFF ) ); return true; } $map = map_open( 'mapa.txt' ); // losowa zmiana wartości losowego pola $x = round( rand( 0, MAP_WIDTH ) ); $y = round( rand( 0, MAP_HEIGHT ) ); $value = round( rand( 0, 255 ) ); map_set( $map, $x, $y, $value ); echo $x . ',' . $y . '=' . $value; // wyświetlenie mapy w tabelce echo '<table border=1>'; for( $y = 0; $y < MAP_HEIGHT; $y++ ) { echo '<tr>'; for( $x = 0; $x < MAP_WIDTH; $x++ ) { echo '<td>' . $x . ',' . $y . '=' . map_get( $map, $x, $y ) . '</td>'; } echo '</tr>'; } echo '</table>'; map_close( $map ); ?> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 21 Lutego 2011 Udostępnij Opublikowano 21 Lutego 2011 Trochę mnie to smuci, że za pisanie gier biorą się raczkujący. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się