Pagina 4 din 18
Scris: 06 Aug 2010, 14:02
de Valentin
buna ziua.. am reusit sa fac tts-ul sa vorbeasca, am pus si un intro sound si am creeat si un meniu. scriptul porneste si dupa ce sapi zice welcome to main menu da o eroare la meniu ca nu poate sa il incarce. oare de ce? dau paste aici la script desi deja e cam lung....
#include "dynamic_menu.bgt"
tts_voice speech;
int vol=-6;
sound intro;
sound ambience;
void main()
{
show_game_window("vali");
wait(5);
alert("Hello!", "You are about to play some sounds");
speech.speak_wait("welcome to madness version 1.0");
intro.load("intro.ogg");
intro.play_wait();
ambience.stream("ambience.ogg");
ambience.play_looped();
ambience.volume=vol;
speech.speak_wait("main menu. please choose an option and select.");
dynamic_menu my_menu;
int menu_result;
my_menu.allow_escape=true;
my_menu.wrap=true;
my_menu.add_item_tts("start your adventure here.wav");
my_menu.add_item_tts("personalize settings");
my_menu.add_item_tts("exit");
menu_result=my_menu.run("choose_an_option.wav", false);
if(menu_result==-1)
{
alert("Error", "There was an error loading the menu.");
exit();
}
if(menu_result==0)
{
alert("Option", "Escape was pressed. Exiting.");
exit();
}
if(menu_result==1)
{
alert("Option", "Option selected was start your adventure.");
}
if(menu_result==2)
{
alert("Option", "Option selected was personalize settings");
}
if(menu_result==3)
{
alert("Option", "Option selected was exit. Exiting.");
exit();
}
while(true)
{
if(key_pressed(KEY_SPACE))
{
exit();
}
if(key_pressed(KEY_F))
{
if(vol<0>-15)
{
vol--;
}
wait(5);
ambience.volume=vol;
}
wait(5);
if(key_pressed(KEY_RETURN))
{
ambience.stop();
}
if(key_pressed(KEY_W))
{
ambience.play_looped();
}
}
}
va multumesc. si vad ca cu ajutorul dumneavoastra am invatat destul de multe...
Scris: 06 Aug 2010, 17:09
de Manu
Nu ar fi greseli la meniu, dar de aici cam trebuie sa incepi sa restructurezi treburile, nu poti face un joculet intreg in functia "void main()".
"void main()" se executa prima data cand pornesti programelul, dar de aici se poate ajunge la alte functii create de tine.
Deci acum ar trebui ca tu sa restructurezi tot codul tau in felul urmator:
faci o functie "void meniul_principal()" in care sa pui tot ce tine de meniu.
Mai faci o functie "void desfasurare_joc()".
Ca forma ar arata astfel:
void meniul_principal()
{
aici codul pentru meniu....
}
void desfasurare_joc()
{
Aici codul pentru desfasurarea jocului, ala cu while deocamdata.
}
In cele din urma, in "void main()" lasi doar intro-ul sa zicem, apoi pui:
meniul_principal();
Acesta va rula.
La if-ul care da result=1, adica start game, in loc de acel alert pui functia:
desfasurare_joc();
Asta insemnand ca la apasarea primului item din meniu se va ajunge la ceea ce contine "void desfasurare_joc()", chestia cu while.
Ca sa intelegi si mai bine de ce merita sa faci astfel, acolo in while pune un bloc de genul:
if(key_pressed(KEY_M))
{
meniul_principal();
}
Adica la apasarea tastei "m" se va deschide iar meniul principal.
Deci avand functia "void meniul_principal()" separat creata, o vei putea chema oricand e nevoie, cand se termina jocul, cand se apasa o tasta etc.
Totusi, ai grija sa ii faci o fereastra si meniului principal, daca e vorba de alt fundal la joc fata de meniul principal sa nu uiti sa inchizi sunetul din meniu atunci cand se trece pe sunetul din "void_desfasurare_joc()".
Ca exemplu, daca acum merge sunetul de fundal al jocului si apesi "m" pentru a ajunge iar in meniu, acolo in if-ul pentru apasarea lui "m", inainte de a pune "meniul_principal();", sa mai pui si un "ambience2.close();", asta presupunand ca ai creat pentru fundalul in timpul jocului obiectul numit ambience2.
Sper ca vei intelege ce am spus mai sus si nu pare prea alambicat.
Oricum, in felul acesta, pe functii separate vei putea posta si aici mai bine secvente de cod, nu codul intregului proiect.
Ca sa vorbim totusi de codul tau, greseala era ca ai pus desfasurarea treburilor dupa meniu. Tu ar trebui sa o fi pus in if-ul cu result 1. Ar fi mers atunci si astfel, cu tot codul in "void main()".
Scris: 06 Aug 2010, 19:02
de Valentin
am facut cum mi-ati zis. am facut 3 voiduri. unul void main unul void menu si unul void game. dar meniul tot nu porneste. sunetul de introducere merge si apoi fereastra iese de tot. uitati voidul cu meniul...
void menu()
{
dynamic_menu menu;
menu.add_item_tts("start your adventure here.");
menu.add_item_tts("personalize settings");
menu.add_item_tts("exit");
int menu_result=menu.run("please select an option from the following menu",true); //this is supposed to be spoken with sapi instead of being a wave file.
if(menu_result==-1)
{
alert("Error", "There was an error loading the menu.");
exit();
}
if(menu_result==0)
{
alert("Option", "Escape was pressed. Exiting.");
exit();
}
if(menu_result==1)
{
game();
}
if(menu_result==2)
{
alert("Option", "Option selected was personalize settings");
exit();}
if(menu_result==3)
{
alert("Option", "Option selected was exit. Exiting.");
exit();
}
}
unde am gresit?
Scris: 06 Aug 2010, 19:33
de Manu
Nu stiu, eu am luat meniul tau, am pus deasupra acel "#include" pentru clasa "dynamic-menu".
Am pus in "void main()" doar "menu();".
Am creat si o functie "void game()" de forma, cu un "exit();" in ea.
La mine, codul urmator merge ok. Ia-l pe asta si completeaza tu apoi chestiile de "void game()" si ce mai vrei. Adauga treptat cate ceva in plus si astfel vei vedea unde apare problema. La celelalte optiuni, unde ai pus "alert" sa pui "menu();", astfel alegand ceva la care inca nu ai lucrat, te intorci tot in meniul principal.
#include "dynamic_menu.bgt"
void main()
{
menu();
}
void menu()
{
dynamic_menu menu;
menu.add_item_tts("start your adventure here.");
menu.add_item_tts("personalize settings");
menu.add_item_tts("exit");
int menu_result=menu.run("please select an option from the following menu",true);
if(menu_result==-1)
{
alert("Error", "There was an error loading the menu.");
exit();
}
if(menu_result==0)
{
alert("Option", "Escape was pressed. Exiting.");
exit();
}
if(menu_result==1)
{
game();
}
if(menu_result==2)
{
alert("Option", "Option selected was personalize settings");
exit();}
if(menu_result==3)
{
alert("Option", "Option selected was exit. Exiting.");
exit();
}
}
void game()
{
exit();
}
Scris: 07 Aug 2010, 10:37
de Valentin
am pus meniul dumneavoastra in scriptul meu si nu merge. dar daca am facut un script nou a mers perfect. oare de ce nu merge in scriptul meu?
Scris: 07 Aug 2010, 14:34
de Manu
Sa te mai uiti si la erorile pe care le da interpretorul.
Iti pot fi de folos.
Spuneau ca il imbunatatesc si pe aceasta latura, acum sunt niste mesaje cam lapidare.
Scris: 15 Aug 2010, 20:57
de Stefan_Ilioaica
domnu manu dumneavoastra mai aveti vrun proiect in legatura cu vrun joc?
Scris: 16 Aug 2010, 01:39
de Manu
In prezent lucrez de cateva zile intens la un program de testare a vitezei de scriere pe tastatura, viteza de reactie pe tipuri de taste, Wors per Minute (WPM) si din astea.
E mult de lucru pentru ca sa iasa cat mai coerent, are Training mode, teste de viteza pe semne, numere litere mici sau mari, va scoate rapoarte de genul: cel mai prost stai cu semnele, cel mai bine stai cu literele si viteza de reactie pentru fiecare in milisecunde ca medie si altele. Chiar in momentul asta lucrez la meniul Settings de unde se seteaza diversi parametri, cum e la Top Speed in Options.
Om mai vorbi despre asta cand e gata, daca trag tare intr-o saptamana va fi probabil gata.
Scris: 16 Aug 2010, 11:35
de Stefan_Ilioaica
salut la toti!
tocmai vroiam sa testez si eu un joculet in bgt dar nu mi-a mers.
tot timpul cand incerc sa il deschid imi apare urmatoarea eroare:
File: C:\Program Files\BGT\include\sound_pool.bgt
Line: 0 (0)
Error: Failed to open script file in path: 'C:\Program Files\BGT\include'
Scris: 16 Aug 2010, 12:50
de Manu
Cred ca problema este ca tu ai o versiune mai veche de BGT, trebuie s-o instalezi pe ultima la ora actuala, 0.5.1.
Jocul acela nu este compilat, ruleaza pe baza interpretorului pe care il ai tu instalat separat.
Versiunile mai vechi nu aveau fisierul "sound-pool.bgt", acesta constand intr-o clasa creata de ei pentru a ajuta la manipularea sunetelor in mod dinamic pentru jocuri audio.
Scris: 16 Aug 2010, 17:17
de Stefan_Ilioaica
am instalat ultima versiune de BGT si merge perfect!
multumesc pentru ajutor.
Scris: 19 Aug 2010, 15:17
de Valentin
buna tuturor..
de cand nu am mai scris in acest topic am incercat sa fac un joculet mic. se numeste ghiceste-l. in acest joc userul trebuie sa ghiceasca la ce numar se gandeste calculatorul de la 1 pana la 10. asi fi vrut sa fac acest joc cu sapy. dar cum vroiam sa fie si in romana si cum nu am gasit o voce sapi decat carmen care trebuie cumparata si cum nu toti o au, m-am gandit sa il fac cu alerturi. de sigur acest joc este doar ca sa imi testez eu abilitatile mele de scripting in materie de bgt. dar am o problema.. nu stiu de ce primesc eroarea unexpected end of file. pentru cei care ma pot ajuta o sa pun aici tot scriptul.
int guesses=0;
int numar_secret=0;
void main()
{
show_game_window("ghiceste-l");
wait(5);
alert("salut", "bine ai venit la jocul ghiceste-l. in acest joc va trebui sa ghicesti la ce numar ma gandesc intre 1 si 15. ai 4 incercari. mult noroc.");
game();
}
void game()
{
guesses=4;
secret_numar=random(1, 10);
guesses();
}
void guesses()
{
if(guesses=0)
{
alert("imi pare rau", "ai pierdut. poate vei avea noroc data urmatoare.");
joc_nou();
}
make_guess();
}
void joc_nou()
{
alert("joc nou", "vrei sa joci din nou? apasa enter pentru a juca iarasi si escape pentru a iesi din joc.");
while(true)
{
if(key_pressed(KEY_RETURN))
{
game();
}
if(key_pressed(KEY_ESCAPE))
{
exit();
}
}
}
void make_guess()
{
alert("bun venit", "te rog sa alegi un numar de la 1 la 10. pentru 10 apasa 0");
while(true)
{
if(key_pressed(KEY_1))
check_answer(1);
if(key_pressed(KEY_2))
check_answer(2);
if(key_pressed(KEY_3))
check_answer(3);
if(key_pressed(KEY_4))
check_answer(4);
if(key_pressed(KEY_5))
check_answer(5);
if(key_pressed(KEY_6))
check_answer(6);
if(key_pressed(KEY_7))
check_answer(7);
if(key_pressed(KEY_8))
check_answer(8);
if(key_pressed(KEY_9))
check_answer(9);
if(key_pressed(KEY_0))
check_answer(10);
if(key_pressed(KEY_ESCAPE))
{
alert("iesire", "ai ales sa iesi din acest joc care probabil ti se pare plictisitor.. te astept si data viitoare.");
exit();
}
wait(5);
}
}
void check_answer(int numar)
{
guesses-=1;
if(numarul==numar_secret)
{
alert("felicitari", felicitari. ai ghicit la ce numar ma gandeam. de data asta.. data viitoare voi incerca sa ma gandesc la un numar mai greu. ori cum felicitari.");
joc_nou();
}
if(numarul<numar_secret>numar_secret)
{
alert("gresit", "numarul la care ma gandesc este mai mic decat cel pe care l-ai ales");
guesses();
}
}
va multumesc tuturor..
Scris: 19 Aug 2010, 18:59
de Manu
Ma intrebam daca te-ai lasat de programare si chiar nu mai incerci nimic.
Coduletul tau avea cateva erori din care amintesc:
1. ai denumit o variabila globala cu acelasi nume cu care ai definit o functie, ma refer la "guess". Am schimbat numele functiei scriind "void guess2()" pentru diferentiere. Deci nu e voie sa fie nume de functii si nume de variabile la fel.
2. Ai folosit o variabila pe care nu ai definit-o, este vorba de "numar", eu am denumit-o "numarul" intre paranteze la functia "check_input()". De asemenea ai folosit si variabila "secret_numar", desi ai definit ca variabila globala "numar_secret".
3. La if-ul care verifica apasarea tastei 8 nu ai mai scris si argumentul functiei "check_input(8)", ai lasat parantezele goale sau era doar o paranteza, nu mai stiu, vei vedea cand vei merge rand pe rand comparand codul corectat cu al tau.
4. Intr-un "while(true)" ai uitat sa pui un "wait(5);", fara de care acolo computerul va cam scartai, procesorul ar fi fost folosit la maxim si daca ai folosi o voce SAPI 5 ar sacada urat de tot la ceva mesaj pe care ar trebui sa il enunte in timp ce se desfasoara while-ul.
5. In ultima functie, cea care verifica daca numarul este egal cu numar_secret, ori e mai mare sau mai mic, nu ai facut chiar cum trebuie if-urile. Ai pus un "if(numarul==numar_secret)", iar al doilea if era gresit, continea in el ca si daca e mai mare, si daca e mai mic, ceva de genul. Vei vedea in codul corectat cam cum trebuie sa fie.
6. Pe undeva ai folosit intr-un if doar un egal. Este obligatoriu sa fie "==" cand spunem ca daca ceva este egal cu altceva. unul singur insemnand atribuire de valori unei variabile.
7. In sfarsit, eroarea care iti aparea tie cred ca era din cauza faptului ca in ultimul "alert" nu ai pus ghilimea deschisa la al doilea parametru, cel cu mesajul. Nici nu prea mai analiza alte lucruri, asta il dadea rau peste cap.
Mai jos e codul, compara-l cu al tau si vei vedea cam pe unde ai gresit, fiind atent sa si intelegi greseala propriu-zisa. Dupa ce te vei obisnui cu vigilenta, o sa vezi ca vor aparea tot mai putine greseli cand vorbesti cu calculatorul.
int guesses=0;
int numar_secret=0;
void main()
{
show_game_window("ghiceste-l");
wait(5);
alert("salut", "bine ai venit la jocul ghiceste-l. in acest joc va trebui sa ghicesti la ce numar ma gandesc intre 1 si 15. ai 4 incercari. mult noroc.");
game();
}
void game()
{
guesses=4;
numar_secret=random(1, 10);
guesses2();
}
void guesses2()
{
if(guesses==0)
{
alert("imi pare rau", "ai pierdut. poate vei avea noroc data urmatoare.");
joc_nou();
}
make_guess();
}
void joc_nou()
{
alert("joc nou", "vrei sa joci din nou? apasa enter pentru a juca iarasi si escape pentru a iesi din joc.");
while(true)
{
if(key_pressed(KEY_RETURN))
{
game();
}
if(key_pressed(KEY_ESCAPE))
{
exit();
}
wait(5);
}
}
void make_guess()
{
alert("bun venit", "te rog sa alegi un numar de la 1 la 10. pentru 10 apasa 0");
while(true)
{
if(key_pressed(KEY_1))
check_answer(1);
if(key_pressed(KEY_2))
check_answer(2);
if(key_pressed(KEY_3))
check_answer(3);
if(key_pressed(KEY_4))
check_answer(4);
if(key_pressed(KEY_5))
check_answer(5);
if(key_pressed(KEY_6))
check_answer(6);
if(key_pressed(KEY_7))
check_answer(7);
if(key_pressed(KEY_8))
check_answer(8);
if(key_pressed(KEY_9))
check_answer(9);
if(key_pressed(KEY_0))
check_answer(10);
if(key_pressed(KEY_ESCAPE))
{
alert("iesire", "ai ales sa iesi din acest joc care probabil ti se pare plictisitor.. te astept si data viitoare.");
exit();
}
wait(5);
}
}
void check_answer(int numarul)
{
guesses-=1;
if(numarul==numar_secret)
{
alert("felicitari", "felicitari. ai ghicit la ce numar ma gandeam. de data asta.. data viitoare voi incerca sa ma gandesc la un numar mai greu. oricum felicitari.");
joc_nou();
}
if(numarul<numar_secret)
{
alert("gresit", "numarul la care ma gandesc este mai mic decat cel pe care l-ai ales");
guesses2();
}
if(numarul<numar_secret)
{
alert("gresit", "numarul la care ma gandesc este mai mare decat cel pe care l-ai ales");
guesses2();
}
}
Scris: 19 Aug 2010, 20:17
de Valentin
buna seara la toti. am adus cateva modificari la scriptuletul meu care incet incet devine un joculet. am setat sa fie anuntate cate incercari mai sunt, si am mai rezolvat unele probleme.. dar am o problema mare. sa zicem ca numarul la care calculatorul se gandeste este 6 daca eu incerc sa apas toate numerele mai mari de 6 nu merge. iar daca apas de ex 3 imi zice ca numarul la care s-a gandit calculatorul este mai mic decat al meu desi numarul este 6. oare de ce? o sa pun codul aici...
int guesses=0;
int numar_secret=0;
void main()
{
show_game_window("ghiceste-l");
wait(5);
alert("salut", "bine ai venit la jocul ghiceste-l. in acest joc va trebui sa ghicesti la ce numar ma gandesc intre 1 si 10. ai 4 incercari. mult noroc.");
game();
}
void game()
{
guesses=4;
numar_secret=random(1, 10);
guesses2();
}
void guesses2()
{
if(guesses==0)
{
alert("imi pare rau", "ai pierdut. poate vei avea noroc data urmatoare.");
joc_nou();
}
if(guesses==1)
{
alert("aproape", "aproape ai pierdut.. cum se poate.. sa nu ghicesti tu un numar... mai ai doar o incercare... hi hi hi...");
make_guess();
}
if(guesses==2)
{
alert("incercari", "mai ai doua incercari");
make_guess();
}
if(guesses==3)
{
alert("incercari", "mai ai 3 incercari.");
make_guess();
}
make_guess();
}
void joc_nou()
{
alert("joc nou", "vrei sa joci din nou? apasa enter pentru a juca iarasi si spatiu pentru a iesi din joc.");
while(true)
{
if(key_pressed(KEY_RETURN))
{
game();
}
if(key_pressed(KEY_SPACE))
{
exit();
}
wait(5);
}
}
void make_guess()
{
alert("bun venit", "te rog sa alegi un numar de la 1 la 10. pentru 10 apasa 0");
while(true)
{
if(key_pressed(KEY_1))
check_answer(1);
if(key_pressed(KEY_2))
check_answer(2);
if(key_pressed(KEY_3))
check_answer(3);
if(key_pressed(KEY_4))
check_answer(4);
if(key_pressed(KEY_5))
check_answer(5);
if(key_pressed(KEY_6))
check_answer(6);
if(key_pressed(KEY_7))
check_answer(7);
if(key_pressed(KEY_8))
check_answer(8);
if(key_pressed(KEY_9))
check_answer(9);
if(key_pressed(KEY_0))
check_answer(10);
if(key_pressed(KEY_SPACE))
{
alert("iesire", "ai ales sa iesi din acest joc care probabil ti se pare plictisitor.. te astept si data viitoare.");
exit();
}
wait(5);
}
}
void check_answer(int numarul)
{
guesses-=1;
if(numarul==numar_secret)
{
alert("felicitari", "felicitari. ai ghicit la ce numar ma gandeam. de data asta.. data viitoare voi incerca sa ma gandesc la un numar mai greu. oricum felicitari.");
joc_nou();
}
if(numarul<numar_secret)
{
alert("gresit", "numarul la care ma gandesc este mai mic decat cel pe care l-ai ales");
guesses2();
}
if(numarul<numar_secret)
{
alert("gresit", "numarul la care ma gandesc este mai mare decat cel pe care l-ai ales");
guesses2();
}
}
va multumesc pentru rabdarea de a citi atata...
Scris: 19 Aug 2010, 20:38
de Valentin
l-am rezolvat. acuma merge totul perfect. o sa pun undeva jocul pentru cei care vor sa-l incerce. sau pentru cei care vor sa invete eu cred ca este un ghid bun.. chiar daca nu am avut eu rabdare sa il explic tot ce are loc in acest script. va multumesc pentru ajutor..