Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
Gra w kości
Autor Wiadomość
Avara 





Pomogła: 32 razy
Dołączyła: 15 Gru 2010
Posty: 331
Skąd: Łódź
Wysłany: Wto 19 Lut, 2013 21:48
Gra w kości
~ Gra w kości ~


Krótki opis:
Skrypt na jednorundową grę w kości z jednym przeciwnikiem. Każdy rzuca sześcioma kośćmi, których liczba oczek jest sumowana. Ten kto uzyska wyższy wynik wygrywa.
Na koniec gry wynik jest zapisywany za pomocą ustalonej zmiennej. Dzięki temu dalszy ciąg rozmowy może być zależny od wyniku gry.
Można zmienić napisy, kolory liter i kości oraz dodać muzykę i dźwięki.

Autor:
Avara

Kompatybilność:
RPG Maker VX

Skrypt:
Spoiler:

Kod:
=begin
*****************************************************************************
*                                Gra w kości                               *
*                               Autor:  Avara                               *
*                                Wersja:  1.0                                *
*                                utimateam.pl                                 *
********************************************************************************
  Skrypt na jednorundową grę w kości z jednym przeciwnikiem. Każdy rzuca sześ-
cioma kośćmi, których liczba oczek jest sumowana. Ten kto uzyska wyższy wynik
wygrywa.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                           ~ Wywoływanie skryptu ~
  W zdarzeniu za pomocą polecenia "Script..." wpisujemy:
      Kosci.new("IMIĘ PRZECIWNIKA", "NAZWA", NUMER)
  IMIĘ PRZECIWNIKA - imię jakie ma mieć nasz przeciwnik;
  NAZWA - nazwa pliku z twarzami w folderze "Graphics/Faces";
  NUMER - numer twarzy od 0 do 7.
Przykład:
      Kości.new("Ralph", "Actor1", 0)
Po wywołaniu skryptu najlepiej jest dać polecenie "Czekaj: 1"/"Wait: 1 frame".
Pozwoli to zapobiec błędom w odczytaniu kolejnych poleceń zdarzenia.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                  ~ Wynik ~
  Na koniec gry wynik jest zapisywany za pomocą ustalonej zmiennej. Dzięki temu
dalszy ciąg rozmowy może być zależny od wyniku gry. Znaczenie jej wartości:
  0 - przegrana;
  1 - wygrana;
  2 - remis.
=end
module Avara            # <- Nie ruszać!
  module Gra_W_Kosci    # <- Nie ruszać!
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ KONFIGURACJA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ZMIENNA = 13      # Numer zmiennej, określającej wynik gry.
    BGM_MAPA = true   # Czy muzyka z mapy ma nadal grać podczas gry?
    BGM = false       # Czy chcesz ustawić własną muzykę?
# Gdy oba powyższe są na "false", podczas gry nie ma włączonej żadnej muzyki.
    SE_KOSCI = 2      # 0 - brak dźwięków podczas rzucania kośćmi;
                # 1 - dźwięk występuje tylko przy rzucie pierwszej kości;
                # 2 - dźwięk przy pokazaniu się każdej kości.
    SE_KONIEC = true  # Czy ma być odgrywany dźwięk przy pokazaniu wyniku?
    module Napisy       # <- Nie ruszać!
      RAZEM = "Razem: "         # Napis przed sumą liczby oczek.
      KOLEJ = "Rzuca "          # Napis przed imieniem gracza, który właśnie rzuca.
      WYGRANA = "WYGRAŁEŚ!"     # Napis, gdy wygramy.
      PRZEGRANA = "PRZEGRAŁEŚ!" # Napis, gdy przegramy.
      REMIS = "REMIS!"          # Napis, gdy nastąpi remis.
    end                 # <- Nie ruszać!
    module Kolory       # <- Nie ruszać!
# Kolory przyjmują numery od 0 do 31, które można sprawdzić w pliku "Window",
# znajdującego się w folderze "Graphics/System" (kwadraciki w prawym dolnym rogu).
      IMIONA = 3      # Kolor imion.
      KOSCI = 4       # Kolor kości i kropek.
      RAZEM = 3       # Kolor napisu przed sumą oczek.
      SUMA = 0        # Kolor cyfr wyrażających sumę oczek.
      KOLEJ = 0       # Kolor napisu określającego czyja jest kolej.
      WYGRANA = 3     # Kolor napisu, gdy wygramy.
      PRZEGRANA = 2   # Kolor napisu, gdy przegramy.
      REMIS = 14      # Kolor napisu, gdy nastąpi remis.
    end                 # <- Nie ruszać!
    module Przerwy      # <- Nie ruszać!
# Przerwy pomiędzy kolejnymi zdarzeniami. Długa następuje po pojawieniu się po
# wyświetleniu, kto rzuca, a przed pojawieniem się pierwszej kości oraz po wyś-
# wietleniu ostatniej z nich. W pozostałych miejscach następuje przerwa krótka.
# 1 sekunda = 60
      DLUGA = 80
      KROTKA = 30
    end                 # <- Nie ruszać!
    module Dzwieki      # <- Nie ruszać!
# BGMy muszą być w folderze "Audio/BGM", zaś dźwięki SE w folderze "Audio/SE".
      BGM = "Town4"       # Nazwa BGMu, gdy mamy włączony własny BGM
                          # (patrz 35. linijka skryptu).
      KOSCI = "Cursor"    # Nazwa SE odgrywanego przy rzucie kośćmi (37. linijka).
      WYGRANA = "Cat"     # SE, gdy wygramy (patrz 40. linijka skryptu).
      PRZEGRANA = "Cow"   # SE, gdy przegramy (patrz 40. linijka skryptu).
      REMIS = "Crow"      # SE, gdy nastąpi remis (patrz 40. linijka skryptu).
      GLOSNOSC_SE = 60    # Głośność wszystkich użytych tu SE.
      GLOSNOSC_BGM = 60   # Głośność BGMa, gdy używamy własnego (35. linijka).
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ KONIEC KONFIGURACJI ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~~~~~~~~~~ DALEJ NIE ZMIENIAĆ! CHYBA ŻE NA WŁASNĄ ODPOWIEDZIALNOŚĆ! ~~~~~~~~~~~
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    end
  end
end

class Kosci
  def initialize(imie, twarz_nazwa, twarz_nr)
    $scene = Scene_Av_Gra_W_Kosci.new(imie, twarz_nazwa, twarz_nr)
  end
end

class Scene_Av_Gra_W_Kosci < Scene_Base
  include Avara::Gra_W_Kosci::Przerwy
  include Avara::Gra_W_Kosci::Dzwieki
  def initialize(imie, twarz_nazwa, twarz_nr)
    @imie = imie;       @twarz_nazwa = twarz_nazwa;       @twarz_nr = twarz_nr
    @kto = 0;           @kosc = 0;          @suma = [nil, 0, 0];  @czas = 0
    @kolej = false;     @rzut = false;      @wynik = false;      @koniec = false
  end
  def start
    create_menu_background
    @okno = Window_Av_Gra_W_Kosci.new
    @okno.twarze(@imie, @twarz_nazwa, @twarz_nr)
    Audio.bgm_stop unless Avara::Gra_W_Kosci::BGM_MAPA
    Audio.bgm_play("Audio/BGM/" + BGM, GLOSNOSC_BGM) if Avara::Gra_W_Kosci::BGM
  end
 
  def terminate
    dispose_menu_background
    @okno.dispose
  end
 
  def update
    @czas += 1 unless @koniec == true
    if @kolej
      if @czas == DLUGA
        Audio.se_play("Audio/SE/" + KOSCI, GLOSNOSC_SE) if
         Avara::Gra_W_Kosci::SE_KOSCI >= 1
        rzut;     @kolej = false;     @rzut = true
      end
    elsif @rzut
      if @czas == KROTKA and @kosc != 6
        Audio.se_play("Audio/SE/" + KOSCI, GLOSNOSC_SE) if
         Avara::Gra_W_Kosci::SE_KOSCI == 2
        rzut
      elsif @czas == DLUGA and @kosc == 6
        @rzut = false;      @kosc = 0;      @czas = 0
        if @kto == 1;         kolej
        elsif @kto == 2;      @wynik = true;        end
      end
    elsif @wynik
      if @czas == KROTKA
        if @suma[1] > @suma[2];       wynik = 0;    se = PRZEGRANA
        elsif @suma[1] < @suma[2];    wynik = 1;    se = WYGRANA
        elsif @suma[1] == @suma[2];   wynik = 2;    se = REMIS;       end
        $game_variables[Avara::Gra_W_Kosci::ZMIENNA] = wynik
        @okno.wynik(wynik);     @wynik = false;     @koniec = true
        Audio.se_play("Audio/SE/" + se, GLOSNOSC_SE) unless
         Avara::Gra_W_Kosci::SE_KONIEC == false
      end
    elsif @koniec
      if Input.trigger?(Input::C) or Input.trigger?(Input::B)
        $scene = Scene_Map.new;       $game_map.autoplay
      end
    else
      if @czas == KROTKA;     @czas = 0;      kolej;      end
    end
  end
 
  def kolej
    @kto += 1;        @okno.kolej(@kto);        @kolej = true
  end
 
  def rzut
    @kosc += 1;     ile = rand(6) + 1;      @suma[@kto] += ile;     @czas = 0
    @okno.rysuj(@kto, @kosc, ile, @suma[@kto])
  end
end

class Window_Av_Gra_W_Kosci < Window_Base
  include Avara::Gra_W_Kosci
  def initialize(x = 0, y = 0, width = 544, height = 416)
    super(x, y, width, height)
  end
 
  def twarze(imie, twarz_nazwa, twarz_nr)
    @imie = imie
    draw_face(twarz_nazwa, twarz_nr, 4, 4)
    draw_actor_face($game_party.members[0], 4, 284)
    self.contents.font.color = text_color(Kolory::IMIONA)
    self.contents.draw_text(110, 4, 412, 20, @imie)
    self.contents.draw_text(110, 380 - 20, 412, 20, $game_party.members[0].name)
  end
 
  def kosc(x, y)
    self.contents.fill_rect(x, y, 50, 50, text_color(Kolory::KOSCI))
    self.contents.clear_rect(x,       y,       1, 1)
    self.contents.clear_rect(x + 49,  y,       1, 1)
    self.contents.clear_rect(x,       y + 49,  1, 1)
    self.contents.clear_rect(x + 49,  y + 49,  1, 1)
    self.contents.clear_rect(x + 3,   y + 2,   44, 46)
    self.contents.clear_rect(x + 2,   y + 3,   46, 44)
  end
 
  def rysuj(kto, kosc, ile, suma)
    if kto == 1;      y = 50;     y_suma = 115              # Przeciwnik.
    elsif kto == 2;   y = 284;    y_suma = 249;     end     # My.
    if kosc == 1;         x = 120
      self.contents.font.color = text_color(Kolory::RAZEM)
      self.contents.draw_text(0, y_suma, 256, 20, Napisy::RAZEM, 2)
    elsif kosc == 2;      x = 185
    elsif kosc == 3;      x = 250
    elsif kosc == 4;      x = 315
    elsif kosc == 5;      x = 380
    elsif kosc == 6;      x = 445;      end
    if ile == 1;        kr = [7]
    elsif ile == 2;     kr = [1, 4]
    elsif ile == 3;     kr = [1, 7, 4]
    elsif ile == 4;     kr = [1, 2, 3, 4]
    elsif ile == 5;     kr = [1, 2, 7, 3, 4]
    elsif ile == 6;     kr = [1, 5, 3, 2, 6, 4];      end
    kosc(x, y);       kropki(x, y, kr)
    self.contents.clear_rect(256, y_suma - 5, 256, 30)
    self.contents.font.color = text_color(Kolory::SUMA)
    self.contents.draw_text(256, y_suma, 256, 20, suma)
  end
 
  def kropki(xx, yy, kr)
    for i in kr
      x = xx + 2;   y = yy + 2
      if i == 1;      x += 6;   y += 6
      elsif i == 2;   x += 32;  y += 6
      elsif i == 3;   x += 6;   y += 32
      elsif i == 4;   x += 32;  y += 32
      elsif i == 5;   x += 6;   y += 19
      elsif i == 6;   x += 32;  y += 19
      elsif i == 7;   x += 19;  y += 19;    end
      kropka(x, y)
    end
  end
 
  def kropka(x, y)
    self.contents.fill_rect(x + 2,  y,     4, 8, text_color(Kolory::KOSCI))
    self.contents.fill_rect(x + 1,  y + 1, 6, 6, text_color(Kolory::KOSCI))
    self.contents.fill_rect(x,      y + 2, 8, 4, text_color(Kolory::KOSCI))
  end
 
  def kolej(kto)
    self.contents.clear_rect(0, 192 - 30, 512, 60)
    if kto == 1;          imie = @imie
    elsif kto == 2;       imie = $game_party.members[0].name;       end
    self.contents.font.size = 40
    self.contents.font.color = text_color(Kolory::KOLEJ)
    self.contents.draw_text(0, 192 - 20, 512, 40, Napisy::KOLEJ + imie.to_s, 1)
    self.contents.font.size = 20
  end
 
  def wynik(wynik)
    self.contents.clear_rect(0, 192 - 30, 512, 60)
    if wynik == 0;      tekst = Napisy::PRZEGRANA;  kolor = Kolory::PRZEGRANA
    elsif wynik == 1;   tekst = Napisy::WYGRANA;    kolor = Kolory::WYGRANA
    elsif wynik == 2;   tekst = Napisy::REMIS;      kolor = Kolory::REMIS;   end
    self.contents.font.size = 40
    self.contents.font.color = text_color(kolor)
    self.contents.draw_text(0, 192 - 20, 512, 40, tekst, 1)
    self.contents.font.size = 20
  end
end


Screeny:
Spoiler:



Dodatkowe informacje:
Instrukcja w skrypcie.
Po wywołaniu skryptu najlepiej jest dać polecenie "Czekaj: 1"/"Wait: 1 frame". Pozwoli to zapobiec błędom w odczytaniu kolejnych poleceń zdarzenia.
Przeciwnik jest wyświetlany na górze, my zaś na dole.
________________________


Drakensang - przeglądarkowa gra RPG online
Spoiler:

Ostatnio zmieniony przez Avara Sro 20 Lut, 2013 20:14, w całości zmieniany 2 razy  
 
 
 
YellowKomputer 




Preferowany:
RPG Maker VX

Dołączył: 03 Lut 2013
Posty: 22
Wysłany: Wto 19 Lut, 2013 23:00
A mi nic nie działa ;-(
________________________
Żółty komputer
 
 
Avara 





Pomogła: 32 razy
Dołączyła: 15 Gru 2010
Posty: 331
Skąd: Łódź
Wysłany: Wto 19 Lut, 2013 23:55
Albo nie wrzuciłeś skryptu w odpowiednie miejsce albo go nie wywołałeś :kable:
________________________


Drakensang - przeglądarkowa gra RPG online
Spoiler:

 
 
 
Laura 




Pomogła: 2 razy
Dołączyła: 28 Wrz 2012
Posty: 49
Wysłany: Sro 20 Lut, 2013 07:33
Jesteś wielka Avara
Jak zrobić by rozmowa się ciągneła po grze dla wygranego wyniku i dla przegranego wyniku?
 
 
Avara 





Pomogła: 32 razy
Dołączyła: 15 Gru 2010
Posty: 331
Skąd: Łódź
Wysłany: Sro 20 Lut, 2013 10:16
Wszystko jest w instrukcji. Wybierasz sobie zmienną, która przyjmuje odpowiednio wartość po każdej grze:
0 - gdy przegrasz,
1 - gdy wygrasz,
2 - przy remisie.
A później robisz sobie warunek zależny od tej zmiennej.
________________________


Drakensang - przeglądarkowa gra RPG online
Spoiler:

 
 
 
Laura 




Pomogła: 2 razy
Dołączyła: 28 Wrz 2012
Posty: 49
Wysłany: Sro 20 Lut, 2013 12:30
Ale jak ten warunek ma wyglądać?
 
 
Avara 





Pomogła: 32 razy
Dołączyła: 15 Gru 2010
Posty: 331
Skąd: Łódź
Wysłany: Sro 20 Lut, 2013 17:43
Warunek ustawiasz za pomocą tego polecenia:
Spoiler:



A całe zdarzenie może wyglądać np. w ten sposób:
Spoiler:

Ale to pytanie z podstaw Maker'a :->
________________________


Drakensang - przeglądarkowa gra RPG online
Spoiler:

 
 
 
Laura 




Pomogła: 2 razy
Dołączyła: 28 Wrz 2012
Posty: 49
Wysłany: Sro 20 Lut, 2013 19:01
Zrobiłam tak ale albo mi źle pokazuje albo jak wygrałam to najpierw pokazuje mi to co by pokazała jak przegram a dopiero potem pokazuje to co wygrałam
 
 
Avara 





Pomogła: 32 razy
Dołączyła: 15 Gru 2010
Posty: 331
Skąd: Łódź
Wysłany: Sro 20 Lut, 2013 19:25
Heh... Przypatrz się warunkom. Musi być najpierw "== 0", później "== 1" a na koniec "== 2". Albo robisz "<=" albo dwa razy "== 1".
A jak nadal masz problemy, to wrzuć tu screena (to jak zdarzenie jest rozpisane) lub prześlij mi demo na PW -.- ...
________________________


Drakensang - przeglądarkowa gra RPG online
Spoiler:

 
 
 
Laura 




Pomogła: 2 razy
Dołączyła: 28 Wrz 2012
Posty: 49
Wysłany: Sro 20 Lut, 2013 19:31
http://img716.imageshack....eztytuuvafi.png

Tak mam i nadal mam tak jak mówiłam
 
 
Avara 





Pomogła: 32 razy
Dołączyła: 15 Gru 2010
Posty: 331
Skąd: Łódź
Wysłany: Sro 20 Lut, 2013 19:52
Już wiem. Jest to wina programu. Mimo, że włącza nową scenę, to zaczyna odtwarzać kolejną linijkę kodu zdarzenia. Przed warunkami (zaraz po wywołaniu skryptu na grę w kości) ustaw "Czekaj: 1". Przerwa będzie niewidoczna, a pozwoli na prawidłowe odczytanie poleceń zdarzenia.
________________________


Drakensang - przeglądarkowa gra RPG online
Spoiler:

 
 
 
Laura 




Pomogła: 2 razy
Dołączyła: 28 Wrz 2012
Posty: 49
Wysłany: Sro 20 Lut, 2013 20:02
Wielkie dzięki działa
 
 
Falkret 



Dołączył: 20 Lis 2012
Posty: 80
Wysłany: Sro 27 Lut, 2013 20:57
Dałoby się zrobić coś takiego pod Xp'ka?
________________________
SKOŃCZYŁEM ZABAWĘ Z MAKEREM
Przede wszystkim, za mało czasu i chęci, a także cierpliwości. Prace nad wszelkimi projektami przekazuje thiefferowi119.
================================
 
 
Avara 





Pomogła: 32 razy
Dołączyła: 15 Gru 2010
Posty: 331
Skąd: Łódź
Wysłany: Sro 27 Lut, 2013 21:08
Nie piszę skryptów na XP. Ktoś inny musiałby Ci napisać taki skrypt. Ale równie dobrze taką prostą grę w kości możesz zrobić na zdarzeniach. Tylko nie pytaj się w tym temacie jak... Sam najpierw spróbuj do tego dojść :->
________________________


Drakensang - przeglądarkowa gra RPG online
Spoiler:

 
 
 
Śliwka 




Preferowany:
RPG Maker VX

Pomogła: 1 raz
Dołączyła: 25 Kwi 2011
Posty: 59
Skąd: Ś-Cie
Wysłany: Nie 21 Kwi, 2013 12:20
A mnie wyskakuje "NameError occured while running script.
uninitialized constant Game_Interpreter::Kości" :-(
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene