Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Witam

Wiecie moze w jaki sposob zrobic wyswietlanie tabeli hi-score w menu?(nie chodzi mi o zwykla tabele wynikow:P)

Wiem ze to jest mozliwe gdyz w tej grze tak zrobiono i calkiem niezle to wyglada :)

 

Screen

Opublikowano

Najlepiej chyba ini z szyfrowaniem, no nie??? albo zmienne globalne a po kliknięciu "Exit" save do pliku i przy kolejnym uruchamianiu load -> Ja takie metody stosuję jak chce, żeby dane przetrwały >1 uruchomienie, ew. jeszcze można za pomocą rejestru, ale to odradzam.

Opublikowano

Miałem bajerowy przykład zrobić, ale nie mam ochoty i przez to kolejny zbędny post...

 

Dodanie wyniku:

GML
_max = 10;

_nick = get_string( "Podaj nick:", "Pental" );

highscore_add( _nick, global._score );

Wyświetlanie:

GML
for ( _i = 0; _i < _max; _i += 1; )

{

draw_set_color( c_blue );

draw_set_halign( fa_left );

draw_text( x, y + 20 * _i, highscore_name( _i ) );

draw_set_halign( fa_right );

draw_text( x + 250, y + 20 * _i, highscore_value( _i ) );

}

Raczej działa ;) .

 

Można by było to nieco zoptymalizować, np. najpierw wyświetlanie wyniku, potem nicku, to by uniknęło potem ciągłego używania tej funkcji. I sprawdzanie czy wynik ostatni (używając zmiennej _max) nie jest większy od zmiennej, to by uniknęło ciągłego dodawania wyników :P .

 

@Up: Najlepiej na gotowych funkcjach, same gdzieś to zapisują i nie trzeba pisać własnego systemu dodawania wyniku, a to wcale takie proste nie jest, jeśli ma być jeszcze sortowanie wg. daty, pierwszej litery, itp.

Opublikowano

Argumenty, że to jest proste? Po prostu jest. =P

Tabelka z dwoma kolumnami to na prawdę jeszcze pikuś.

Opublikowano

No Pental niezle :). Tylko, ze pkt dodaje od drugiego miejsca w tabeli wiec wyglada to tak:

nobody 0

Gracz 5

nobody 0

etc.

Wyskakuje tez błąd

ERROR in

action number 1

of Create Event

for object object0:

 

Error in code at line 3:

highscore_add( _nick, global._score );

 

at position 31: Unknown variable _score

Opublikowano

O jedną wartość w tył :/ . Zaraz poprawię, pracuję nad nową wersją.

 

@Edit: Nowa wersja gotowa, jeszcze tylko zapis do pliku i odczyt :P .

 

GML
// tworzenie tabeli

global._max = 5;

 

global.l[0] = 5;

global.l[1] = 4;

global.l[2] = 3;

global.l[3] = 2;

global.l[4] = 1;

 

global.n[0] = "try";

global.n[1] = "ytgf";

global.n[2] = "gffgdg";

global.n[3] = "gfdf";

global.n[4] = "gggg";

 

// punkty

global._score = round( random( 10 ) );

 

// podawanie nicka

_nick = get_string( "Podaj nick:", "Pental" );

 

// dodawanie wyniku (skomplikowana sprawa;P)

if ( global._score ) && ( global._score > global.l[global._max - 1] )

{

for( _i = global._max - 1; _i >= 0; _i -= 1; )

{

if ( global._score <= global.l[_i] )

{

for( _j = 0; _j < _i; _j += 1; )

{

global.l[_j] = global.l[_j + 1];

global.n[_j] = global.n[_j + 1];

}

 

global.n[_i] = _nick;

global.l[_i] = global._score;

 

// koniec petli

break;

}

 

}

}

Wyświetlanie bez zmian, musisz troszkę zaczekać.

Opublikowano

No no ;] taka tabela o wiele lepsza :)

Pental stosując Twoją pierwszą wersję mam te same błędy co PanciK a ta druga wcale mi nie działa :( (nie ma tabeli). Możesz dac przykład?:P ^^

Opublikowano

Create:

GML
// tworzenie tabeli

global._max = 5;

_sx = "ile";

_sy = "nick";

 

if ( !file_exists( 'high.txt' ) )

{

ini_open( 'high.txt' );

 

for( _i = global._max - 1; _i >= 0; _i -= 1; )

ini_write_string( _sx, string( _i ), "0" );

for( _i = global._max - 1; _i >= 0; _i -= 1; )

ini_write_string( _sy, string( _i ), "brak" );

 

ini_close();

}

 

ini_open( 'high.txt' );

 

for( _i = global._max - 1; _i >= 0; _i -= 1; )

global.l[_i] = real( ini_read_string( _sx, string( _i ), "0" ) );

for( _i = global._max - 1; _i >= 0; _i -= 1; )

global.n[_i] = ini_read_string( _sy, string( _i ), "brak" );

 

ini_close();

 

// punkty

global._score = round( random( 10 ) );

 

// podawanie nicka

_nick = get_string( "Podaj nick:", "Pental" );

 

// dodawanie wyniku

if ( global._score ) && ( global._score > global.l[global._max - 1] )

{

for( _i = global._max - 1; _i >= 0; _i -= 1; )

{

if ( global._score <= global.l[_i] ) || ( _i == 0 )

{

for( _j = 0; _j < _i; _j += 1; )

{

global.l[_j] = global.l[_j + 1];

global.n[_j] = global.n[_j + 1];

}

 

global.n[_i] = _nick;

global.l[_i] = global._score;

 

// koniec petli

break;

}

}

}

Draw tak samo jak na początku. Są bugi. Jutro poprawię ;p .

Opublikowano

Ok, wszystko naprawione.

 

Create:

// tworzenie tabeli

// maksymalna ilosc wynikow
global._max = 7;
_sx = "ile";
_sy = "nick";

if ( !file_exists( 'high.txt' ) )
{
    ini_open( 'high.txt' );

    for( _i = global._max - 1; _i >= 0; _i -= 1; )
        ini_write_string( _sx, string( _i ), "0" );
    for( _i = global._max - 1; _i >= 0; _i -= 1; )
        ini_write_string( _sy, string( _i ), "brak" );

    ini_close();
}

ini_open( 'high.txt' );

for( _i = global._max - 1; _i >= 0; _i -= 1; )
    global.l[_i] = real( ini_read_string( _sx, string( _i ), "0" ) );
for( _i = global._max - 1; _i >= 0; _i -= 1; )
    global.n[_i] = ini_read_string( _sy, string( _i ), "brak" );

ini_close();

// punkty
global._score = floor( random( 100 ) );

// podawanie nicka
_nick = get_string( "Podaj nick:", "Pental" );

// dodawanie wyniku
if ( global._score ) && ( global._score > global.l[global._max - 1] )
{
    for( _i = global._max - 2; _i >= 0; _i -= 1; )
    {
        if ( global.l[_i] >= global._score ) || ( !_i && global._score >= global.l[0] )
        {
            if ( _i ) || ( !_i && global._score <= global.l[0] )
                _i += 1;
                
            for( _j = global._max - 1; _j > _i; _j -= 1; )
            {
                global.l[_j] = global.l[_j - 1];
                global.n[_j] = global.n[_j - 1];
            }
            
            global.l[_i] = global._score;
            global.n[_i] = _nick;
            
            break;
        }
    }
}

// zapis tabelki
ini_open( 'high.txt' );

for( _i = global._max - 1; _i >= 0; _i -= 1; )
    ini_write_string( _sx, string( _i ), string( global.l[_i] ) );
for( _i = global._max - 1; _i >= 0; _i -= 1; )
    ini_write_string( _sy, string( _i ), global.n[_i] );
    
ini_close();

Draw:

for ( _i = 0; _i < global._max; _i += 1; )
{
    draw_set_color( c_blue );
    draw_set_halign( fa_right );
    draw_text( x + 250, y + 20 * _i, global.l[_i] );
    draw_set_halign( fa_left );
    draw_text( x, y + 20 * _i, global.n[_i] );
}

 

By wyczyścić "ręcznie" tabelę, usuń plik high.txt . Zrobię jeszcze kodowanie, bo zaraz Tymon się przyczepi :P .

Opublikowano

Ehhh cos mi nie dziala :P nie wiem moze ja cos zle robie :P

Przy podawaniu nick'a dodaje mi ilosc pkt z przedzialu 1-100 (nawet jesli mialem 0 pkt) a rzeczywista ilosc pkt traci sie nie wiadomo gdzie :P

Bylbym Ci jeszcze bardziej wdzieczny gdybys mogl mi dac gotowy przyklad :P

Opublikowano

skąd on ma wiedzieć jak się nazywa u ciebie ta zmienna ? zrobił ci po prostu przykladowo losowanie punktów, ty musisz tylko podmienić nazwę zmiennej a tamto wywalić :tv_horror:

  • 7 lat później...
Opublikowano

Cześć wszystkim posłużyłem się tutaj przykładem kolegów odnośnie wyświetlania tabelki w menu:

I mam takie pytania do tego tematu:

 

Wchodzę do menu,gdzie umieściłem sobie obiekt tabelka_highscore,wpisuje imię i jest pusto.

Rozumiem,że to oczywiste,no bo przecież trzeba jeszcze zmienną utworzyć w obiekcie,gdzie mam życia,punkty,hud itp,i wtedy domyślam się,że się wyświetli lista wyników w menu gry po ukończeniu planszy,czy utracie żyć..

Dokładnie chciałbym tak,że jak uzyskam już jakieś tam punkty w grze no i np zginę,to żeby wyświetlił mi się możliwość wpisu swojego imienia i ta tabelka co w menu,ale to musiałaby się wyświetlić przed planszą game over,no chyba,że wpis najlepszych 7 graczy będzie zapełniony,a mój wynik będzie zbyt mały żeby dokonać wpisu to się nie wyświetli i nie dokona się wpis.

 

kod na tą tabelkę w menu,gdzie wchodzę i wyświetlać ma się lista najlepszych graczy

 

obj_tabelka_highscore

Create

 

 

GML
// tworzenie tabelki z wynikami

// ilosc wynikow

global._max = 7;

_sx = "ile";

_sy = "nick";

 

if ( !file_exists( 'high.txt' ) )

{

ini_open( 'high.txt' );

 

for( _i = global._max - 1; _i >= 0; _i -= 1; )

ini_write_string( _sx, string( _i ), "0" );

for( _i = global._max - 1; _i >= 0; _i -= 1; )

ini_write_string( _sy, string( _i ), "brak" );

 

ini_close();

}

 

ini_open( 'high.txt' );

 

for( _i = global._max - 1; _i >= 0; _i -= 1; )

global.l[_i] = real( ini_read_string( _sx, string( _i ), "0" ) );

for( _i = global._max - 1; _i >= 0; _i -= 1; )

global.n[_i] = ini_read_string( _sy, string( _i ), "brak" );

 

ini_close();

 

// punkty

global.pScore = score;

 

// podawanie nicka

_nick = get_string( "Podaj nick:", "Pioter" );

 

// dodawanie wyniku

if ( global.pScore ) && ( global.pScore > global.l[global._max - 1] )

{

for( _i = global._max - 2; _i >= 0; _i -= 1; )

{

if ( global.l[_i] >= global.pScore ) || ( !_i && global.pScore >= global.l[0] )

{

if ( _i ) || ( !_i && global.pScore <= global.l[0] )

_i += 1;

 

for( _j = global._max - 1; _j > _i; _j -= 1; )

{

global.l[_j] = global.l[_j - 1];

global.n[_j] = global.n[_j - 1];

}

 

global.l[_i] = global.pScore;

global.n[_i] = _nick;

 

break;

}

}

}

 

// zapis tabelki

ini_open( 'high.txt' );

 

for( _i = global._max - 1; _i >= 0; _i -= 1; )

ini_write_string( _sx, string( _i ), string( global.l[_i] ) );

for( _i = global._max - 1; _i >= 0; _i -= 1; )

ini_write_string( _sy, string( _i ), global.n[_i] );

 

ini_close();

 

 

Draw

 

GML
for ( _i = 0; _i < global._max; _i += 1; )

{

draw_set_color( c_blue );

draw_set_halign( fa_right );

draw_text( x + 250, y + 20 * _i, global.l[_i] );

draw_set_halign( fa_left );

draw_text( x, y + 20 * _i, global.n[_i] );

}

 

no i teraz tak obiekt w którym mam zmienne punkty,życia itp ,oraz hud.

 

obj_game_controller

 

Create

 

GML
//Ustawienia globalne

image_speed = 0;

 

global.watch = 0; //ustawiamy globalnie na 0 w celu ich dalszego sumowaniu umozliwjajacego przejscie do nastepnej planszy po zebraniu ich odpowiedniej ilosci

global.pScore = 0;

global.life = 5;

global.coins = 0;

global.Saved = true;

globalvar spawnX, spawnY;

 

//Widok

globalvar gvX, gvY, gvW, gvH, gvObj, gvOffX, gvOffY;

gvX = view_xview[0];

gvY = view_yview[0];

gvW = view_wview[0];

gvH = view_hview[0];

gvObj = view_object[0];

gvOffX = 0;

gvOffY = 0;

 

//HUD

hpHUD = 0;

maxHpHUD = 0;

 

 

tu step mojego bohatera

 

GML
if(instance_number(obj_napis_plansz)=0)// zatrzymuje sprita bohatera na czas wyswietlenia napisu Stage

{

 

 

 

if (vspd > 25) //Jesli predkosc spadania jest szybsza niz 25 (Mozna dowolnie zmieniac ta wartosc.)

{global.damage+=4} //Zwiekszenie obrazen o wartosc 1. (Zmienienie liczby na wieksza zwiekszy zadawane obrazenia po upadku.)

if not place_free(x,y+1) //Jesli w poblizu nas jest jakis obiekt rowniez zostana zadane obrazenia

{

other.hp-=global.damage //Odejmujemy punkty zycia od wartosci zadanych obrazen.

global.damage=0 //Resetujemy zadawanie obrazen po uderzeniu w ziemie by nie zabieralo go wiecej

}

else if (vspd >35)

{

other.hp = -100; //natychniastowa smierc po upadku z ogromnej wysokosci

}

 

 

//Upadek z ogromnej wysokosci zabiora zycie,gdy energia osiagnie wartosc zero

if( hp <= 0 )

{

hp = 100;

global.life -= 1;

audio_play_sound(dzwiek_bohater_ginie, 1, false);

x = start_x;

y = start_y;

}

 

if( global.life <= 0 )

{

room_goto(rm_game_over); //pokoj,gdzie ma sie akcja gry przeniesc po koncu gry

}

 

///Kontrola

if !place_meeting(x,y,obj_water) {

//Normalny ruch

if climbing == false {

if keyboard_check_pressed(kJump) && inAir == false {

vspd = -10-sign(pwrupJmp*3);

jumpStr = 3;

//Zeskakiwanie w dol

if keyboard_check(kDown) && place_meeting(x,y+1,par_solid_ghost) {

y += 4;

vspd = 0;

jumpStr = 0;

jumpTimes = 0;

}

} else if keyboard_check(kJump) && jumpStr > 0 {

audio_play_sound(dzwiek_skoku_bohatera, 1, false); //odtwarzamy dzwiek przy skakaniu

vspd -= 2+sign(pwrupJmp);

jumpStr--;

 

} else {

if keyboard_check_released(kJump) && jumpStr > 2 {

vspd += 2+sign(pwrupJmp);

 

}

jumpStr = 0;

}

 

if keyboard_check(kAction) && attClock == false {

if keyboard_check(kDown) {

attClock = 16;

curAttack = 1;

with instance_create(x,y-16,obj_projectile) {

hspd = other.image_xscale*10;

vspd = 0; //lekko do gory -4 //mocno do gory

g = .0; //0.2 tor lotu paraboliczny

owner = par_player;

strength = 0;

explode = true;

explosionRadius = 30;

explosionStrength = 2+(sign(other.pwrupStr)*8);

//image_blend = c_black; //kolor lotu pocisku

audio_play_sound(dzwiek_bohater_strzela, 1, false); //odtwarzamy dzwiek przy strzelaniu

}

} else {

attClock = 18;

curAttack = 0;

with instance_create(x,y,par_attack) {

sprite_index = mask_player_attack;

image_xscale = other.image_xscale;

owner = par_player;

strength = 1+(sign(other.pwrupStr)*4);

}

}

}

 

if keyboard_check(kRight) && !keyboard_check(kLeft) {

if hspd < 10+(sign(pwrupSpd)*5) {

hspd = min(hspd+(2+(sign(pwrupSpd)*2))*multiF,10+(sign(pwrupSpd)*5));

}

image_xscale = 1;

}

if keyboard_check(kLeft) && !keyboard_check(kRight) {

if hspd > -10-(sign(pwrupSpd)*5) {

hspd = max(hspd-(2+(sign(pwrupSpd)*2))*multiF,-10-(sign(pwrupSpd)*5));

}

image_xscale = -1;

}

 

//Wspinanie sie

if place_meeting(x,y,par_climbable) && place_meeting(x,y-32,par_climbable) && place_meeting(x,y+32,par_climbable) && attClock <= 0 && (keyboard_check(kUp) || keyboard_check(kDown)) {

climbing = true;

vspd = 0;

hspd = 0;

}

}

//Wspinanie sie

if climbing == true {

var __hsign = keyboard_check(vk_right)-keyboard_check(vk_left);

var __vsign = keyboard_check(vk_down)-keyboard_check(vk_up);

 

hspd = min(max(hspd+__hsign,-2),2);

vspd = min(max(vspd+__vsign*2,-4),4);

 

if __vsign == -1 && !place_meeting(x,y-32,par_climbable) {

climbing = false;

vspd = -10;

}

 

if __hsign != 0 {

image_xscale = __hsign;

}

 

if !place_meeting(x,y,par_climbable) || !place_meeting(x,y+32,par_climbable) {

climbing = false;

}

}

 

}

 

else {

 

 

//Plywanie

swimDir = point_direction(0,0,keyboard_check(kRight)-keyboard_check(kLeft),keyboard_check(kDown)-keyboard_check(kUp));

if abs(keyboard_check(kRight)-keyboard_check(kLeft))+abs(keyboard_check(kDown)-keyboard_check(kUp)) != 0 {

hspd += lengthdir_x(.5,swimDir);

if !(swimDir > 0 && swimDir < 180) || place_meeting(x,y-sprite_height/3-1,obj_water) {

vspd += lengthdir_y(.5,swimDir);

}

}

if keyboard_check(kUp) && !place_meeting(x,y-sprite_height/1.5,obj_water) && vspd <= 0 { //plywanie do gory

vspd = -12;

}

}

}

 

 

a tu kod kolizji gracza z przykładowym wrogiem..

 

obj_wrog

 

GML
///Obrazenia jakie wrog zadaje bohaterowi

if !vspd > 0 && hurtClock == 0 && other.hurtClock == 0 && sign(x-other.x) == other.image_xscale {

hp -= 15;

hurtClock = room_speed;

vspd = -8;

hspd = sign(x-other.x)*16;

}

 

if( hp <= 0 )

{

hp = 100;

global.life -= 1;

x = start_x;

y = start_y;

}

 

if( global.life <= 0 )

{

room_goto( rm_game_over ); //pokoj,gdzie ma sie akcja gry przeniesc po koncu gry

}

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...