Pagina 17 din 18

Scris: 26 Oct 2014, 18:32
de Stefan_Ilioaica
Multumesc pentru explicatie, acum sunt si eu pe deplin lamurit care-i faza.

Scris: 11 Noi 2014, 15:02
de Stefan_Ilioaica
Are cineva idee cum pot face sa redau mai multe sunete random?
Sa zicem ca am un scroller, si trei sunete diferite de pasi: walk1, walk2, si walk3.
Eu vreau ca atunci cand ma deplasez cu sageata stanga dreapta, sa se auda random unul dintre aceste trei sunete, nu doar walk1 sau walk2.
Eu am incercat sa ma gandesc, dar ma simt putin confuz si in momentul de fata sunt total lipsit de idei.

Scris: 12 Noi 2014, 00:39
de Manu
Cel mai simplu, astfel incat sa ai control usor asupra tuturor sunetelor pentru pasi atunci cand schimbi volumul sau cand vrei sa se auda mai la stanga sau mai la dreapta la fel, ar fi sa le pui intr-un array de tip sound.

Codul pentru trei pasi ar fi urmatorul, presupunand ca i-ai denumit cu step0.ogg, step1.ogg si step2.ogg:

Cod: Selectaţi tot

// Undeva ca variabile globale, deci cel mai bine sus de tot:
sound[] steps(3);
// In main() la inceput sau undeva intr-o functie chemata din main():
for(int i=0; i<steps.length(); i++) {
steps[i].load("step"+i+".ogg");
// Poti seta eventual si volumul:
steps[i].volume = -5;
} // sfarsit for de incarcare a sunetelor.

// Mai trebuie doar o functie pentru redarea pasilor aleatoriu:
void playStepsRandomly() { 
int r = random(0, steps.length());
steps[r].play();
}
Avand codurile de mai sus, atunci cand adaugi si fisierul de sunet step3.ogg, al patrulea, trebuie doar sa schimbi acolo la sound[] steps(3) sa fie sound[] steps(4);
Un cod si mai bun, daca ar fi sa permiti ca intr-un folder numit Pasi sau Steps sa fie oricate sunete de pasi, ar fi sa nu scrii manual cate pozitii are array-ul steps, ci sa chemi functia care cauta fisiere, apoi numarul de fisiere gasite sa fie pus intre parantezele rotunde din prima linie data ca exemplu.

Scris: 24 Ian 2015, 19:05
de BosGrigore
Impusca rata este un joc audio simplu si functioneaza cu jaws.
Link-ul de descarcare este:
Impusca rata
space - foc
sageata stanga, sageata dreapta - deplasare vanator
escape, alt+f4 - inchidere joc
f1 - ajutor
Incercati jocul si veniti cu idei pentru dezvoltarea lui.
In zilele urmatoare voi posta codul sursa si fisierele audio.

Scris: 25 Ian 2015, 13:50
de Manu
E interesant, asteptam si codul sursa...
Poate ar fi bine sa creati un topic nou pentru acest joculet, altfel va fi greu de gasit in viitor.
Eventual il putem pune si pe server, sa fie gasibil oricand.

Eu as propune si un mod de joc in care sa nu trebuiasca confirmata dorinta de a continua in urma impuscarii unei rate, ci sa mearga fluent.

Scris: 25 Ian 2015, 16:04
de IonPop
Pai jocul are si o varianta fluenta, chiar foarte fluenta.
Procedura nu e complicata. Dupa ce se deschide jocul, nu te misti deloc de pe loc cu stanga - dreapta, ci doar incepi sa apesi rapid tasta spatiu ca sa impusti fix inainte, in idea ca rata fiind proasta, va veni ea singura in bataia pustii.
Dupa un timp, chiar pe cand pare ca rata s-a indepartat foarte mult... poc, constati ca ai impuscat-o.
Dupa acest moment jocul nu te mai intreaba nimic ci poti continua sa joci. Cred ca asta este fluenta la care te refereai.
Iar cand spun ca te joci, spun ca poti sa apesi din nou tasta spatiu ca sa tragi in rata tot fara sa te misti de pe loc, si dupa primul foc ai mai omorat inca o rata. Dupa inca un foc inca o rata. Dupa acea prima perioada de asteptare omori o noua rata cu fiecare foc si nici macar nu trebuie sa te misti. Cool!
Interesant este ca dupa omorarea primei rate, urmatoarele rate au devenit mai inteligente fiindca nu mai scot nici un sunet. Totusi par a fi cam proaste fiindca stau fix in bataia pustii asa ca le poti omori una dupa alta.
Si jocul poate continua asa la infinit, trebuind doar sa astepti ca vanatorul sa ii spuna cainelui sa aduca rata, apoi mai apesi inca o data pe tragaci.
Ma gandesc totusi ca poate nu s-a dorit ca jocul sa fie chiar atat de fluent. :-)

Scris: 06 Apr 2015, 17:05
de Valentin
salut!
de curand m-am apucat si eu sa invat bgt, am urmarit cursurile de pe forum. am ajuns la arrayurile bidimensionale si la creerea tablei de sah. urmand exemplul postat in topicul cursului am creat o tabla de joc dar codul imi da eroare. as aprecia mult daca ar putea cineva sa ma ajute sa inteleg unde am gresit... pun codul mai jos:

Cod:
string[][] tabla;
void main()
{
show_game_window("Tabla de sah");
tabla.resize(9); // Redimensionam al doilea nivel la 9, cel la care ne vom referi prin y, coordonatele sus - jos:
for(int x=0; x<9; x++)
{
tabla[x].resize(9); }
for(int x=0; x<9; x++)
{
for(int y=0; y<9; y++)
{
tabla[x][y]="Gol";
}
}
umplere();
int x=1, y=1;
while(!key_pressed(KEY_Q))
{
if(key_pressed(KEY_RIGHT))
{
if(x<8)
{
x++;
screen_reader_speak_interrupt(NVDA, tabla[x][y]);
}
else
screen_reader_speak_interrupt(NVDA, "Margine dreapta");
if(key_pressed(KEY_LEFT))
{
if(x>1)
{
x--;
screen_reader_speak_interrupt(NVDA, tabla[x][y]);
}
else
screen_reader_speak_interrupt(NVDA, "Margine stanga"); }
if(key_pressed(KEY_UP))
{
if(y<8)
{
y++;
screen_reader_speak_interrupt(NVDA, tabla[x][y]);
}
else
screen_reader_speak_interrupt(NVDA,"margine sus");
}
if(key_pressed(KEY_DOWN))
{
if(y>1)
{
y--;
screen_reader_speak_interrupt(NVDA, tabla[x][y]);
}
else
screen_reader_speak_interrupt(NVDA, "Margine jos");
}
wait(5);
}
exit();
}
void umplere()
{
for(int x=1; x<9; x++)
{
tabla[x][2]="Pion alb";
tabla[x][7]="Pion negru"; }
tabla[1][1]="Turn alb";
tabla[2][1]="Cal alb";
tabla[3][1]="Nebun alb";
tabla[4][1]="regina alba";
tabla[5][1]="rege alb";
tabla[6][1]=nebun alb";
tabla[7][1]="cal alb";
tabla[8][1]="tura alba";
tabla[8][1]="Turn negru";// ... de completat patratelele lipsa!
tabla[1][8]="Turn negru";
tabla[2][8]="Cal negru";
tabla[3][8]"nebun negru";
tabla[4][8]"regina neagra";
tabla[5][8]"rege negru";
tabla[6][8]"cal negru";
tabla[8][8]"tura neagra";
}

Scris: 06 Apr 2015, 23:15
de Manu
Codul are mai multe erori:

Nu imi dau seama cum ai deschis si ai inchis acoladele pentru apasarea celor 4 taste de deplasare, dar in urma corecturii mele nu e necesar decat urmatorul cod pentru deplasarea in sus de exemplu:

Cod: Selectaţi tot

if(key_pressed(KEY_UP))
{
// Verificare daca e marginea de sus:
if(y<8)
{
y++;
} // sfarsit if pentru marginea de sus.
// Verbalizarea campului:
screen_reader_speak_interrupt(NVDA, tabla[x][y]);
} // sfarsit sageata sus.
La fel pentru toate celelalte sageti.

In functia umplere() ai uitat sa pui ghilimea deschisa la unul dintre nebuni si nu ai pus semnul egal la atribuirea valorii string pentru ultimele cateva patratele.

In urma corecturii, codul complet ar fi:

Cod: Selectaţi tot

string[][] tabla; 
void main()
{
show_game_window("Tabla de sah");
tabla.resize(9); // Redimensionam al doilea nivel la 9, cel la care ne vom referi prin y, coordonatele sus - jos: 
for(int x=0; x<9; x++)
 { 
tabla[x].resize(9); } 
for(int x=0; x<9; x++)
 {
for(int y=0; y<9; y++)
{
tabla[x][y]="Gol";
}
}
umplere(); 
int x=1, y=1;
while(!key_pressed(KEY_Q))
{
if(key_pressed(KEY_RIGHT))
{
if(x<8)
{
x++;
}
screen_reader_speak_interrupt(NVDA, tabla[x][y]);
}

if(key_pressed(KEY_LEFT))
{
if(x>1)
{
x--;
}
screen_reader_speak_interrupt(NVDA, tabla[x][y]);
}

if(key_pressed(KEY_UP))
{
if(y<8)
{
y++;
}
screen_reader_speak_interrupt(NVDA, tabla[x][y]);
}

if(key_pressed(KEY_DOWN))
{
if(y>1)
{
y--;
}
screen_reader_speak_interrupt(NVDA, tabla[x][y]);
}

wait(5);
}
exit();
}

void umplere()
{
for(int x=1; x<9; x++)
{
tabla[x][2]="Pion alb";
tabla[x][7]="Pion negru";
}
tabla[1][1]="Tura alba";
tabla[2][1]="Cal alb";
tabla[3][1]="Nebun alb";
tabla[4][1]="Regina alba";
tabla[5][1]="Rege alb";
tabla[6][1]="Nebun alb";
tabla[7][1]="Cal alb";
tabla[8][1]="Tura alba";
tabla[1][8]="Tura neagra";
tabla[2][8]="Cal negru";
tabla[3][8]="Nebun negru";
tabla[4][8]="Regina neagra";
tabla[5][8]="Rege negru";
tabla[6][8]="Cal negru";
tabla[8][8]="Tura neagra";
}
   

Scris: 03 Mai 2015, 19:31
de Stefan_Ilioaica
Salutare.
Pun si eu o intrebare, desi nu stiu cat este de clara, totusi....
Cum pot face un inventar? Daca ma gandesc bine, acesta poate fi creat pe baza unui meniu, nu?
Daca da, atunci intervine si problema la care m-am gandit. Cum fac sa adaug obiectul respectiv in inventar?
Adica daca iau o inghetata, mai cumpar o pizza si mai gasesc pe jos o minge, vreau ca acestea trei sa imi apara in inventar.
Banuiesc ca aici e ceva de lucru cu variabilele, nu? Stiu ca programarea este o chestie foarte flexibila, m-am gandit la toate chestiile si combinatiile legate de variabile, ca m-am mai jucat eu cu ele si chiar mi-au iesit unele chestii pe care le-am planuit, dar chestiei asteia cu inventarul chiar nu reusesc sa-i dau de capat.
M-ar ajuta foarte mult o explicatie in acest sens, si un mic exemplu daca s-ar putea.
Multumesc anticipat!

Scris: 10 Feb 2016, 23:56
de Vlad_Ciotescu
Salutare tuturor.
se pare ca nu am mai scris pe aici de ceva timp. recent am pus mana pe niste coduri sursa si acolo am gasit niste lucruri care ne-ar putea usura munca.
am gasit un mic tool care ne permite sa arhivam si sa encriptam sunete cu un singur click pe un fisier numit pack creater. dati click pe el si urmati instructiunile.
link de download
faceti click aici

Dar am si eu nevoie de putin ajutor. ma puteti ajuta cu acel downloader creat de damien pendleton? ca numai functioneaza linkul respectiv de pe blastbay. daca-l mai are cineva il poate incarca pe dropbox?

Scris: 29 Apr 2016, 02:52
de Vlad_Ciotescu
salutare. vin cu ceva noutati. am inceput sa lucrez la un joc online multiplayer care in momentul de fata este in faza de testare. si pentru acest joc am creat o clasa pe care o voi pune si aici deoarece ne va fi folositoare. este vorba despre un input box virtual.
sunt mai mult ca sigur ca va intrebati de ce prefer o clasa pentru asaceva si de ce nu folosesc functia originala. deoarece este dinamic. adica pot adauga sunete de tastatura si multe ate lucruri putem face cu aceasta clasa.
este bine de mentionat ca aceasta clasa este disponibila doar in limba engleza in momentul de fata. acestea fiind spuse, sa intram in actiune! :)
descarcati virtualizer de aici
am uitat sa mentionez ca mai exista o clasa numita m_pro.bgt care este o varianta de dynamic_menu avansata creata de mason armstrong .
care sunt diferentele dintre meniul original si cel avansat?
1. avem posibilitatea de a putea lucra si cu sageti stanga si dreapta.
2. avem posibilitatea sa folosim proprietatea e sidescrolling care inseamna modificarea de pan al sunetului de click si de voce in caz de folosim ca item un fisier audio. iar restul sunt lucruri minore pe care nu le mai tin minte exact. restul va las pe voi sa descoperiti.

Scris: 25 Dec 2016, 20:28
de Stefan_Ilioaica
Salutare!
N-am mai dat de mult timp pe aici, dar totusi am o nelamurire care nu imi da pace.
Cum pot face ca un scriptulet BGT sa imi fie verbalizat prin intermediul a doua screen readere? Sa poata functiona cu ambele atunci cand il deschid?
Problema e ca mie nu imi vine nicio idee. Pentru fiecare mesaj, ar trebuii sa scriu screen_reader_speak, urmat de screen reader-ul care trebuie specificat.
Totusi, eu cred ca exista o metoda mai simpla de a stabili de la bun inceput care screenreadere sa functioneze, iar mai departe tu sa pui mesajele ce trebuiesc verbalizate linistit, fara a mai tot sta sa scrii care dintre voci sa iti verbalizeze.
Adica, ma gandesc, ca daca scriu acuma screen_reader_speak(JAWS, "Salut);
Ar trebui sa mai scriu al doilea mesaj si pt NVDA, in mod asemanator, iar asta ar fi foarte obositor

Scris: 26 Dec 2016, 08:55
de IonPop
Am cautat screen_reader_speak bgt si am gasit:
http://forum.audiogames.net/viewtopic.php?id=14594
Si se pare ca in exemplul tau JAWS este o constanta sau variabila de tip uint.
Asa ca poti stabili de la bun inceput care screen reader sa functioneze, ii atribui valoarea corespunzatoare unei variabile, sa zicem sr=1, sau sr=2 etc, si apoi poti folosi functia:
screen_reader_speak(sr, text)
Probabil in documentatia BGT scrie ce valori poate avea acea variabila sau constanta, dar daca nu gasesti, poti incerca pe rand cu 1, 2, 3... si sa verifici daca functioneaza cu cititorul de ecran care ruleaza.
Ca sa ruleze automat cu screen readerul activ, ar trebui ca BGT sa aiba o functie cu care sa se poata verifica care este screen readerul care ruleaza si in functie de rezultatul ei sa setezi acea variabila sr pe care sa o folosesti apoi ori de cate ori este nevoie. Daca nu are o astfel de functie, poti face ca in exemplul din acea pagina catre care am dat adresa, si sa faci o bucla in care sa incerci sa verbalizezi mesajul rand pe rand folosind valorile 1, apoi 2, apoi 3 etc, iar programul va incerca sa redea mesajul rand pe rand prin toate screen readerele pe care le suporta. Cam ca la tara metoda aia, dar daca nu se poate detecta altfel care screen reader functioneaza... ar putea fi o solutie.

Scris: 20 Ian 2017, 16:17
de Stefan_Ilioaica
Salutare.
M-am lovit de o problema destul de spinoasa, as zice eu, nereusind sa ii dau de capat cu niciun chip.
Am facut un mic codulet, in care doua personaje sa se lupte.
Printre altele, am facut ca la apasarea tastei spatiu, sunetul de arma sa fie unul random. Am trei sunete, deci am folosit un array, in genul celui ce l-a prezentat Manu mai sus cu pasii.
IN scriptulet se intampla in felul urmator: se apasa space, adversarului i se scad puncte din viata, apare functia de redare random a sunetelor, dupa care intra functia de atac a adversarului, urmand ca apoi s-o ia totul de la capat pana unul dintre personaje ajunge cu viata la zero.
Problema e ca la un moment dat, fie cand apas a doua oare space, sau atreia, imi da un out of bounds de toata frumusetea.
Ati avea idee cat de cat ce s-ar intampla, de ce da eroarea asta?
Ar trebui sa pun un if, ceva? Se depaseste ceva pe undeva si scriptului s-ar putea sa nu ii convina?
Pun mai jos codul
Asadar, avem sus de tot:
sound[] laser (3); Dupa care la un moment dat, intr-o functie venim cu for-ul
for(int s=0; s<laser.length(); s++)
{
laser[s].load("Sounds/Laser Gun"+s+".ogg");
}
Mai departe vine un while, cu if-urile a ceea ce se intample la apasarea tastei space.
scade sanatatea inamicului
intra in joc functia laser_sound
apoi urmeaza enemy_attack(), iar dupa incheierea acesteia, procesul se reia.
Acum, voi pune mai jos functia de redare random a sunetelor
void laser_sound()
{
int r=random(0, laser.length());
laser[r].play();
}
Deci, ce credeti?

Scris: 21 Ian 2017, 12:05
de IonPop
Probabil ca ar fi mai util daca ai pune codul aici, cel care produce acea eroare, nu doar cel care incarca sunetele in acel array.
Iar la eroarea aut of bounds probabil ca iti spune si in care linie apare acea eroare. Ar fi bine sa spui care este linia de cod care produce eroarea.