Avara - Wto 19 Lut, 2013 21:48 Temat postu: 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
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 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.YellowKomputer - Wto 19 Lut, 2013 23:00 A mi nic nie działa Avara - Wto 19 Lut, 2013 23:55 Albo nie wrzuciłeś skryptu w odpowiednie miejsce albo go nie wywołałeś Laura - 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 - 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.Laura - Sro 20 Lut, 2013 12:30 Ale jak ten warunek ma wyglądać?Avara - 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 Laura - 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łamAvara - 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 -.- ...Laura - Sro 20 Lut, 2013 19:31 http://img716.imageshack....eztytuuvafi.png
Tak mam i nadal mam tak jak mówiłamAvara - 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.Laura - Sro 20 Lut, 2013 20:02 Wielkie dzięki działaFalkret - Sro 27 Lut, 2013 20:57 Dałoby się zrobić coś takiego pod Xp'ka?Avara - 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ść Śliwka - Nie 21 Kwi, 2013 13:20 A mnie wyskakuje "NameError occured while running script.
uninitialized constant Game_Interpreter::Kości"