Pagina 9 din 18

Scris: 07 Aug 2011, 23:45
de Manu
For-ul in cazul de fata este ca de exemplu: for(int x=0; x<y; x++), asa cum l-ai mentionat si tu.
Este intr-adevar des folosit pentru a incrementa un numar care poate fi indexul unui array, in fine, cand vei folosi se va si vedea clar cum este util.
While este folosit cand nu e nevoie de incrementare, cand conditia este data de alti factori, de exemplu faptul ca escape nu este apasat:
while(key_pressed(KEY_ESCAPE)==false)
{
//do something...
wait(5);
}
altfel exprimat:
while(!key_pressed(KEY_ESCAPE))
{
//do something...
wait(5);
}
o a treia exprimare:
while(key_pressed(KEY_ESCAPE)!=true)
{
//do something...
wait(5);
}
Va tot merge while-ul de sus pana se apasa tasta escape.
Cel mai des la jocuri vei folosi while(true), ceea ce inseamna ca acea bucla tot isi face ciclurile pana nu o intrerupi tu cu exit() sau break.
Atentie la while, neaparat sa fie inauntru un wait(5) ca sa rasufle putin procesorul.

Dau mai jos doua exemple in care sa fii salutat de trei ori prin SApi5, un exemplu cu while si unul cu for:

Cu for, cel care este natural intr-un astfel de exemplu:

Cod: Selectaţi tot

//initiem global obiectul tts pentru SApi5:
tts_voice v;

void main()
{
//dam vocea pe mai rapid, 75 la suta, in BGT se noteaza viteza de la minus 10 la plus 10:
v.rate=5;
for(int x=0; x<3; x++)
{
v.speak_wait("Hello!");
}
}
Dupa cum se vede mai sus, nu e nevoie decat de instructiunile propriu-zise in bucla, in primul rand al codului fiind mentionat cat sa se manifeste. Se creeaza mai intai o variabila, in cazul acesta am pus x careia i se da valoarea 0. Apoi se spune ca atata vreme cat 0 e mai mic decat 3, adica 0, 1 si 2, deci de trei ori. Apoi se spune ca x sa fie incrementat cu 1. Tot asa puteam spune x+=1. Puteam la fel sa incrementam cu 2, dar atunci nu se mai spunea "Hello" decat de doua ori, la 0 si la 2, pentru asta am fi scris x+=2.

Exemplul cu while, cam fara sens daca exista for:

Cod: Selectaţi tot

//initiem tts-ul global:
tts_voice vorbire;

void main()
{
//setam vocea la viteza standard, cea de mijloc, 50 la suta:
vorbire.rate=0;

//cream o variabila integer x cu valoarea 0:
int x=0;
//bucla:
while(x<3) //atata vreme cat x este mai mic decat 3.
{
vorbire.speak_wait("Hello");
//acum incrementam x-ul cu 1 ca sa nu ramana la 0 si loopul sa mearga la infinit:
x++;
}
}
Dupa cum s-a vazut, am avut nevoie de toate cele trei parti din for si aici, doar ca pe randuri diferite.

Nu mai stiu ce ai intrebat, dar ma uit si mai scriu intr-un post ulterior.

Scris: 15 Aug 2011, 01:13
de Stefan_Ilioaica
revin aici cu o mica cerinta ca sa spun asa.
as vrea daca se poate, un exemplu de cod in care sa ma pot deplasa de la mijloc la dreapta si de la dreapta la mijloc.
multumesc.

Scris: 16 Aug 2011, 03:45
de Manu
Ok, am facut un mic scroller intre 0 centru si 20 dreapta.
Probabil ca nu intelegi chiar bine lucrurile pentru ca nu ai luat-o sistematic si unele randuri, desi comentate nu sunt chiar clare in ceea ce priveste secventa in sine:

In exemplul de mai jos se vor auzi pasii la apasarea sagetilor stanga/dreapta si lovirea de perete cand se ating extremele.

Am pus pentru download si un ZIP care contine fisierul sursa .BGT, cele doua sunete .OGG si un .EXE, varianta compilata a fisierului sursa .BGT. Daca e pus pe sleep JAWS sau inchis, vor functiona sagetile si poti incerca cu .EXE ca si cum ai fi in joc. In fisierul sursa "scroller.bgt" ai putea sa te mai joci, sa schimbi ca extrema stanga sa fie la minus 20 si altele.
Download scroller0-20.ZIP

Cod: Selectaţi tot

void main()
{
//cream o fereastra:
show_game_window("Scroller Example");
//o variabila care va fi punctul pe care ne aflam, intre 0 mijloc si 20 dreapta:
int x=0;
//un obiect sunet numit pas:
sound pas;
//un obiect sunet numit perete pentru a se auzi cand ne lovim de mijloc sau limita dreapta:
sound perete;
//incarcam cele doua sunete cu load:
pas.load("pasul.ogg");
perete.load("peretele.ogg");

//deschidem un while care va astepta apasarea tastelor sageata stanga sau dreapta sau Q pentru inchidere:
while(true)
{
//punem un if daca se apasa tasta Q sa se inchida totul:
if(key_pressed(KEY_Q))
{
exit();
} //gata if-ul pentru tasta Q.

//un if pentru pasul in dreapta, sageata in dreapta:
if(key_pressed(KEY_RIGHT))
{
//mergem intr-un if care nu va lasa ca x sa fie mai mare de 20, extrema dreapta:
if(x<20)
{
//il crestem (incrementam) pe x cu cate unu ca sa fie deplasare:
x++;
//setam proprietatea pan (stanga dreapta) a pasilor:
pas.pan=x;
//dam play la pas:
pas.play();
} //gata cu if-ul care verifica sa fie pentru pas x mai mic de 20.
else //daca nu e mai mic, deci egal cu 20 sa se auda peretele la dreapta:
{
//setam proprietatea pan a sunetului la extrema unde este x:
perete.pan=x;
//dam play la perete:
perete.play();
} //gata cu else-ul care spune ca e lovire de perete.
} //gata cu if-ul pentru sageata in dreapta.

//un if pentru sageata stanga, deplasarea la stanga:
if(key_pressed(KEY_LEFT))
{
//mergem intr-un if care nu va lasa ca x sa fie mai mic de 0, extrema stanga, adica mijlocul dintre boxe:
if(x>0)
{
//il scadem (decrementam) pe x cu cate unu ca sa fie deplasare:
x--;
//setam proprietatea pan (stanga dreapta) a pasilor:
pas.pan=x;
//dam play la pas:
pas.play();
} //gata cu if-ul care verifica sa fie pentru pas x mai mare de 0.
else //daca nu e mai mare de 0, deci egal cu 0 sa se auda peretele la mijloc:
{
//setam proprietatea pan a sunetului perete la pozitia x:
perete.pan=0;
//dam play la perete:
perete.play();
} //gata cu else-ul care spune ca e lovire de perete.
} //gata cu if-ul pentru deplasarea la stanga.

//punem o asteptare de 5 milisecunde care sa se intample la fiecare ciclu al buclei while:
wait(5);
} //inchidem while-ul.
} //se incheie functia main.

Ar fi bine sa vezi rand cu rand ce anume nu intelegi si sa intrebi punctual.
In orice caz, poate ne vedem la cursul de BGT.

BGT 1.1, What's new

Scris: 07 Noi 2011, 21:15
de Manu
In scurt timp apare BGT 1.1, mi-a dat si mie Philip Bennefall fisierul What's new si m-am gandit ca poate ar fi cineva si aici interesat(a) de cea ce e nou.
Mai are doar de documentat cate ceva si e gata:
Version 1.1:
* Updated the script interpreter to the latest version which fixes some more bugs found by users, gives significant performance boosts in many areas, and adds the following features:
1. Declaring functions with default arguments.
2. Several new features to the array object such as sorting, reversing, searching etc.
* Added support for mouse devices.
* Added the pathfinder object to find intelligent paths between two points with a lot of customization options.
* Included one of the add-ons for the script interpreter, a vector object to represent locations in space with many overloaded operators for easy manipulation.
* Added support for communicating directly with four popular screen readers in order to have text spoken.
* Changed the memory management functions from the standard malloc and free to custom replacements which are much faster, giving a great performance boost of the entire engine as large amounts of dynamic memory are allocated all the time during execution.
* Optimized all functions and methods that return objects (particularly arrays), resulting in a significant speed increase for these.
* Added two functions called keys_down and keys_pressed to return a list of all the keys that are currently down or that have just been pressed.
* Added a function called list_sound_devices, and another called open_sound device which enables the opening of any given device on the user's system rather than just the default one (thanks Liam).
* Added a function to read environment variables (thanks Marc).
* Added a function to read text from the clipboard.
* Updated the ENet library to the latest version which fixes some bugs and improves performance even further when using reliable packets.
* Changed the behavior when a runtime error occurs, so that it is now possible to choose whether or not the complete stack trace text should be copied to the clipboard before the program exits.
* Extended the language tutorial with a description of functions with default arguments.
* Made the automatic window polling occur a little less frequently which gives a slight performance boost.
* Added the install_keyhook and uninstall_keyhook functions to enable BGT games to access the keyboard even while the Jaws for Windows screen reader is active.
* Added a method called read_until to the file object that reads data until a certain criteria has been met.
* Added a method called force to the timer object to simulate that a certain amount of time has elapsed, which is needed for serialization.
* Filtered out the signed/unsigned mismatch warning from the compiler output as it was being triggered in the most trivial cases.
* Significantly improved the performance of the keyboard management functions.
* Rewrote the implementation of the tts_voice object so that it now uses the IDispatch COM interface, which allows for more functionality such as enumerating and changing voices.
* Optimized the stop method of the tts-voice object slightly.
* Improved the unpredictability of the seed to the random number generator so that it no longer generates the same sequence of numbers if two BGT instances are launched within the same second.
* Added a function called string_distance to check how similar two arbitrary strings are.
* Added checks for invalid input to the key_down and key_pressed functions as this would otherwise cause a hard crash.
* Added the ability to generate triangle waves to the tone synth.
* Changed the key_down and key_pressed functions to take an integer as their parameter.
* Added support for screen readers to the audio form include class (thanks Damien).
* Added an extra parameter to the extended methods in the sound_pool include class to set whether or not a returned slot should be persistent and not get automatically cleaned up after playback is finished.
* Extended the FAQ with a brief description of how to protect your sounds with encryption in a way that makes it harder to break.
* Added some new information to the documentation about how to use the sound pool properly.
* Fixed a number of serious crashes that would occur occasionally on Windows 7 (thanks Lukáš and Daniel).
* Fixed an ancient and very serious bug that caused sounds to mysteriously inherit properties from each other (thanks Lukáš, Michael and Damien).
* Fixed a memory leak that would occur on exit.
* Fixed a bug in the network_event overloaded assignment operator that would cause it to crash seemingly at random (thanks Emanuel).
* Fixed a bug in the tone generator that would cause it to produce notes that were slightly off key.
* Fixed a bug where the properties SCRIPT_CURRENT_LINE, SCRIPT_CURRENT_FILE and SCRIPT_CURRENT_FUNCTION were returning error values if accessed before main began executing.
* Fixed a number of bugs in the audio form include class (thanks Damien).
* Fixed a bug in the sound pool where more sounds would start playing after a pause/resume operation.
* Fixed a bug where some uncommon international characters would not be spoken properly by the tts-voice object (thanks Lukáš).
* Fixed a bug in the file object where the reached_end property would not be accurately set when reading files in binary rather than text format (thanks Damien).
* Fixed a bug where the last error flag would not be correctly set after a call to one of the encryption or decryption functions (thanks Damien).
* Fixed a bug in the input_box function where it would freeze the window if no information text was given (thanks Nikola).
* Fixed a bug where the wrong error code would be given if a file could not be opened for reading in binary mode using the file object.
* Fixed some errors in the documentation layout (thanks Damien).

Scris: 11 Dec 2011, 18:33
de Stefan_Ilioaica
salut!
dupa o lunga absenta de pe aici, m-am mai gandit sa mai fac putina programare.
am facut un mic scriptulet dar nu merge.
vreau ca dupa prima casuta de dialog, sa imi urmeze alta, dar nu merge.
pun mai jos codul la corectat:

void main()
{
show_game_window("joc nou");
string prenume=input_box("prenume", "va rugam scrieti aici prenumele dumneavoastra.");
if(prenume=="")
{
alert ("eroare!", "trebuie sa introduceti prenumele.");
exit();
}
}

void nume()
{
show_game_window("joc nou");
string nume=input_box("nume", "va rugam introduceti numele de familie.");
if(nume=="")
{
alert ("eroare!", "trebuie sa introduceti numele de familie pentru a putea trece mai departe!");
exit();
}
}

ar mai fi o intrebare:
Cum pot verbaliza meniurile dintr-un joc cu jaws?
sa zicem ca fac un meniu, si acesta vreau sa fie verbalizat de catre jaws.

Scris: 11 Dec 2011, 22:40
de Manu
Ce anume nu functioneaza la scriptuletul tau?
Daca nu scrii nimic in input box, apare alertul cu eroarea, altfel nu se intampla nimic, pare sa functioneze ok ceea ce tu ai vrut sa se intample.
Dupa ce inchizi if-ul, ai mai putea adauga urmatoarea secventa inainte de ultima acolada, cea care inchide void main:

Cod: Selectaţi tot

else
{
alert("Salut!", "Ce mai faci "+prenume+"?");
exit();
}
Astfel, cand nu scrii nimic apare eroarea ta in care spune ca nu ai scris nimic, iar daca scrii de exemplu Stefan, va spune:
"Salut! Ce mai faci Stefan?".

Scris: 12 Dec 2011, 10:28
de Andreea Neagu
Manu scrie:Ce anume nu functioneaza la scriptuletul tau?
Stefan_Ilioaica scrie: vreau ca dupa prima casuta de dialog, sa imi urmeze alta, dar nu merge.
Eu inteleg de aici ca Stefan ar vrea doua inputuri, unul dupa altul, dar nu apare decat primul.
Manu scrie:Daca nu scrii nimic in input box, apare alertul cu eroarea, altfel nu se intampla nimic, pare sa functioneze ok ceea ce tu ai vrut sa se intample.
Doar ca nu se intampla pana la capat. Functia nume () nu e apelata nicaieri si de aceea nu apare al doilea input box.
In plus, nu e necesar al doilea show_game_window, cel din functia nume(), fereastra de joc fiind deja afisata.
Mai jos ai codul cu apelarea functiei nume introdusa, astfel incat sa apara si al doilea input.

Cod: Selectaţi tot

void main() 
{ 
show_game_window("joc nou"); 
string prenume=input_box("prenume", "va rugam scrieti aici prenumele dumneavoastra."); 
if(prenume=="") 
{ 
alert ("eroare!", "trebuie sa introduceti prenumele."); 
exit(); 
} 
nume();
} 

void nume() 
{ 
string nume=input_box("nume", "va rugam introduceti numele de familie."); 
if(nume=="") 
{ 
alert ("eroare!", "trebuie sa introduceti numele de familie pentru a putea trece mai departe!"); 
exit(); 
} 
} 

Scris: 12 Dec 2011, 16:45
de Manu
Scuze, nici nu vazusem a doua functie, ma uitasem doar la void main() si am judecat doar dupa aceasta.

Scris: 12 Dec 2011, 19:35
de Stefan_Ilioaica
ce inseamna else? si cand este folosit de obicei?

Scris: 12 Dec 2011, 22:53
de Manu
"Else" in cazul de fata inseamna "altfel".

If-ul in BGT / C++ are urmatoarea sintaxa, prezint printr-un exemplu mai jos.

Sa zicem ca ai un script care sa afiseze mesaje diferite in functie de ce se scrie intr-un input:

Cod: Selectaţi tot

void main()
{
// inseram input box-ul care solicita completarea prenumelui:
string prenume=input_box("Salut!", "Scrie aici prenumele tau:");

/*
De aici e un comentariu:
incepem if-ul cu trei ramuri, pe scurt, daca prenumele este Stefan sa spuna "Salut Stefan, ce mai faci?"; altfel daca nu e scris nimic sa spuna "De ce nu scrii ceva?"; altfel sa spuna "Nu il cunosc pe X, unde X este ceea ce s-a completat in afara de "Stefan".
Sfarsit comentariu.
*/

// daca variabila prenume contine valoarea "Stefan":
if(prenume=="Stefan")
{
alert("Te cunosc!", "Salut "+prenume+"! Ce mai faci?");
}

// altfel daca variabila prenume nu contine nimic:
else if(prenume=="")
{
alert("Eroare!", "De ce nu scrii ceva?");
}

// altfel, adica orice altceva decat primele doua posibilitati:
else
{
alert("Stanjenit!", "Nu il cunosc pe "+prenume+".");
}
exit();
}

Scris: 07 Feb 2012, 12:57
de Stefan_Ilioaica
salut.
cum pot creea un combobox sau un listbox in care sa am niste chestii si in functie de ce aleg sa se intample cate ceva?
tot in felul acesta, as vrea sa stiu cum se pot creea niste butoane, sa aiba acelas rol ca si la combobox.

Scris: 07 Feb 2012, 15:27
de Manu
BGT nu are interfata grafica.
Daca vrei un combo box audio, desigur ca se poate.
Pot face o functie care sa afiseze un asa-zis combo box, dar nu vad la ce ti-ar trebui.
Daca vrei sa faci altceva decat jocuri audio, e destul de usor si practic AutoIt.

Scris: 08 Feb 2012, 09:58
de Stefan_Ilioaica
eu facusem ceva numai din alert-uri si imput box-uri, si vroiam sa fac ceva in cat sa nu mai fie nevoie sa tot tastez ceea ce vreau si dupa aceea sa se intample lucrul asta, ci sa am posibilitatea de a-l alege direct dintr-o lista.

Scris: 08 Feb 2012, 10:42
de Manu
Ok, pai se poate face o lista audio in BGT, una vizuala in AutoIt sau alte multe limbaje.
Vrei neaparat lista sa fie vizibila, sa fie un list view standard, ori o lista pur si simplu.

Scris: 08 Feb 2012, 10:44
de Stefan_Ilioaica
as dori ca lista sa fiecat mai simplu de facut. ce imi recomandati?