Pagina 1 din 6

Curs BGT - Desfasurare

Scris: 21 Mar 2012, 13:11
de Manu
Marti, 20 martie 2012, a avut loc prin intermediul Skype prima intalnire in cadrul cursului de programare in BGT.

Am discutat doar lucruri generale, am stabilit programele de care avem nevoie.

Asadar, este necesara unealta BGT de la Blastbay Studios, care va interpreta codul sau il va compila daca e cazul.

BGT poate fi luat direct de la link-ul urmator:
Download Blastbay Game Toolkit (BGT)
Link-ul de mai sus duce direct catre kitul de pe site-ul Blastbay, asadar va descarca oricand ultima versiune.

Pentru a scrie codul, avem nevoie de un editor de text. Este suficient Notepad care vine odata cu Windows, dar recomandabil ar fi utilizarea unui editor mai complex, cu optiuni care sa faciliteze scrierea de cod.
Am recomandat EdSharp, acesta fiind creat de un nevazator, astfel fiind sigur ca nu pot aparea probleme in timpul manevrarii textului / codului cu un screen reader.

EdSharp este creat de Jamal Masrui si poate fi descarcat de la link-ul urmator:
Download EdSharp
Link-ul de mai sus descarca oricand ultima versiune a EdSharp, ducand catre kit-ul aflat pe site-ul http://empowermentzone.com.

BGT vine si cu un manual complet care contine un tutorial pentru invatarea sintaxei si o librarie cu toate functiile si obiectele disponibile. Manualul este format .CHM, cuprinsul este un tree view, iar continutul este o pagina HTML citibila cu virtual cursor. Ne plimbam intre cuprins si continut cu tasta F6.

In varianta gratuita BGT interpreteaza codul scris si salvat cu extensia .BGT, sursa ramanand vizibila pentru oricine deschide fisierul .BGT intr-un editor de text.
Asadar, scriem in Notepad sau EdSharp codul, il salvam apoi cu extensia .BGT, iar daca dam apoi enter pe fisier si unealta BGT este instalata, acesta incepe sa ruleze. In caz ca s-au strecurat erori la scrierea codului, BGT va afisa orientativ unde este eroarea (la ce rand) si cam despre ce este vorba.
Avand varianta de BGT cumparata, codul poate fi compilat, rezultand intr-un fisier .EXE, fisier care va rula oriunde, fara sa fie necesar BGT instalat pentru a interpreta codul.
Varianta Lite, cea care compileaza codul costa 30 dolari.
Licenta BGT spune ca jocurile compilate cu varianta Lite nu pot fi vandute, ele trebuie sa fie gratuite.
Mai exista doua licente, Pro Single si Pro Unlimited. Cu acestea doua jocurile pot fi si vandute, cu prima un joc, cu ultima oricate. Pro Single costa 100 dolari, iar Pro Unlimited 400.
Daca se cumpara de exemplu o licenta Lite, cand se doreste una superioara, se plateste doar diferenta. Daca de exemplu sunt cumparate doua licente Pro Single si se doreste apoi achizitionarea licentei Pro Unlimited, nu trebuie platiti decat 200 dolari, luandu-se in calcul tot ce s-a platit anterior.
Am rotunjit preturile cu 5 centi.

Toti participantii vor avea un folder numit Curs BGT, folder in care vom salva fisierele .BGT, fisierele de sunet si altele de care ne vom folosi de-a lungul timpului.

In acest topic vor aparea rezumatele cursurilor, link-uri catre imprimarile acestora, eventuale intrebari, temele si tot ceea ce va tine de cursul nostru.

Descarcati fisierul cu imprimarea primei intalniri de la link-ul urmator:
Download Fisier MP3 01._Curs_BGT_-_Introducere.mp3 (21,5 MB)

Scris: 21 Mar 2012, 23:04
de Alexandru
Participand la cursul introductiv de aseara, am imprimat si eu. Astazi, am prelucrat cursul introductiv in format .MP3 care se poate descarca de aici.

Scris: 22 Mar 2012, 00:05
de Manu
Foarte buna si imprimarea ta Alexandru.
E bine atunci sa postezi si tu varianta ta, astfel avem doua exemplare de imprimare.
Ar fi mai bine sa comprimi la 64, la 56 KBps este totusi prea putin, nu cred sa fie la cineva problema de spatiu.
Denumeste si tu la fel fisierele ca cele denumite de cornel, si pune in final intre paranteze Alexandru sa nu ne incurcam; astfel putem avea doua variante in acelasi folder, de asemenea avem un bacup, daca se intampla ca la cineva sa apara probleme in timpul imprimarii, sa nu ramanem fara.

Scris: 22 Mar 2012, 14:42
de Alexandru
Eu am redus zgomotul de fond de la microfroane, am avut grija ca vocea sa nu fie afectata. Cat despre MP3 Skype Recorder, am setat viteza de inregistrare la 128 biti, cea mai mare valoare. Am facut asta chiar dupa instalarea programului.

Scris: 22 Mar 2012, 15:35
de Manu
Am pus pe server si imprimarea ta oricum. Cand voi face pagina unde sa fie lista cu imprimarile vor fi si acestea.

Cursul 2 - 27 martie 2012

Scris: 29 Mar 2012, 00:07
de Manu
Marti, 27 martie 2012, ne-am intalnit pentru a doua oara in cadrul cursului de BGT.
Am discutat despre modul de scriere a codului, cum se comenteaza codul si am scris primele randuri.

Asadar in BGT / C++ codul este alcatuit din instructiuni (statements), blocuri de cod si expresii.

Orice instructiune (statement) este terminata prin semnul ";" (punct si virgula) si, daca se doreste, prin rand nou.
Un bloc de cod reprezinta mai multe instructiuni scrise intre acolade. Este utila aceasta modalitate pentru a sti cate instructiuni trebuie sa fie executate la un moment dat. De exemplu, la apasarea combinatiei Alt + F4 sa ni se spuna "La revedere", sa auzim un cantecel de final si sa fie tot ce tine de program scos din ram, deci un bloc cu 3 instructiuni.
Expresiile preceda in general un bloc de cod. De exemplu if (daca), while (in timp ce) sau chiar numele functiilor pot fi considerate expresii.

BGT / C++ lucreaza cu un cod case sensitive, conteaza daca litera este mare sau mica. Utilizand functia Alert() cu A mare interpretorul va da eroare pentru ca aceasta instructiune, functie este definita cu a mic.

Am invatat ca in BGT pentru a incepe rularea unui cod, trebuie sa existe urmatoarea secventa:

Cod: Selectaţi tot

void main()
{

}
Tot cea ce va fi cuprins intre cele doua acolade va fi executat in ordine.

Am invatat functiile:
alert care trebuie sa contina doua stringuri, titlul si corpul unei ferestre cu buton ok.

Am mai vazut functia wait() care trebuie sa contina ca parametru un numar reprezentand milisecundele in care procesorul sa nu faca nimic, executia programului sa fie intrerupta.

Am vazut si functia random() care va contine ca parametri doua numere, intre care sa fie generat un numar aleatoriu.

In cele din urma am vazut si functia exit() care inchide totul, scoate tot ce tine de program din memorie. Aceasta functie nu are nevoie de parametri, nu se va gasi nimic intre cele doua paranteze rotunde.

Cand avem mai multi parametri, cum este in cazul functiei alert(), acestia vor fi despartiti de virgula.

AM retinut ca stringul / textul trebuie incadrat intre ghilimele si este diferit de numere. Asadar, la functia alert() vom folosi string-uri, deci textul scris va fi intre ghilimele, iar la functia wait avem nevoie de un numar (de milisecunde), acesta nu va fi scris intre ghilimele.

Am retinut ca se pot face doua tipuri de comentarii.
Pe un rand. Tot ceea ce este precedat de // (doua slash-uri) va fi ignorat de interpretor / compilator pana la terminarea randului curent..
Pe mai multe randuri, tot cea ce este cuprins intre /* (slash asterisc) si */ (asterisc slash) va fi ignorat de interpretor / compilator, indiferent de numarul randurilor.
Comentariile sunt pentru a ne usura munca, pentru a face tot felul de remarci pe marginea codului, astfel incat la revenirea asupra acestuia sa ne amintim mai usor ce si cum am facut.

Tot codul pe care l-am scris este urmatorul:

Cod: Selectaţi tot

void main()
{
// acesta este un comentariu
alert("Mesaj 1", "Salut lume!");
wait(2000); // se asteapta doua secunde.
alert("Mesaj 2", "Acesta este al doilea mesaj.");
random(1,10); // instructiune fara rost.
alert("Mesaj 3", "Un numar aleatoriu intre 1 si 10 este: " + random(1, 10)+".");
/*
Acesta este un comentariu pe mai multe randuri.
Randul 2 de comentariu.
Va mai fi doar o instructiune, cea de inchidere.
Al patrulea rand de comentariu.
*/
exit();
}
Observam la cel de-al treilea alert ca am folosit semnul plus si functia random(). Tot cea ce este dupa virgula este al doilea parametru, corpul mesajului cu buton ok. Pentru ca functia random() da un numar si pentru ca functia sa nu fie confundata cu textul din corp, am inchis ghilimelele cand am terminat textul scris de noi, am pus plus pentru a lega numarul rezultat din random() de text, apoi functia random(), apoi iar plus pentru a mai pune tot noi, deci intre ghilimele, semnul punct care este tot string.


Ca tema de casa am zis sa se faca un script in care sa apara un mesaj de salut, apoi sa se astepte 3 secunde, dupa care sa apara un alt mesaj in care corpul sa fie urmatorul:
"Eu am x calculatoare, x laptopuri si x telefoane."
X sa fie in toate trei cazurile un numar aleatoriu intre 1 si 20.
Sa se inchida totul cu exit().

In aceasta faza unele lucruri sunt invatate mecanic de cei care nu au mai avut de-a face cu programarea, termenii functie, parametru fiind considerati inca necunoscuti.

Imprimarea acestei intalniri este la link-ul urmator:
Download Fisier MP3 02._Curs_BGT_-_Primii_pasi.mp3 (22,2 MB)

tema de casa

Scris: 29 Mar 2012, 15:33
de Eddy
void main()
{
alert("mesaj 1","salut");
wait(3000);
alert("mesaj 2","eu am: "+random(1,20)+"desktopuri"+random(1,20)+"laptopuri"+random(1,20)+"telefoane");
exit();
}

Scris: 29 Mar 2012, 18:38
de Manu
Aproape bine, doar ca la afisare nu vor fi spatii intre numarul de obiecte si cuvintele alaturate. Asadar, a fost o scapare la redactarea stringurilor. La formularea ta ar fi fost necesara si virgula la enumerare.
In concluzie, fara eroare de cod, dar cu greseli de redactare text.

Cursul 3 - Variabilele

Scris: 05 Apr 2012, 23:56
de Manu
Marti, 3 aprilie 2012, ne-am intalnit pentru a treia oara in cadrul cursului nostru de programare in BGT, sintaxa C++.

Am vorbit de aceasta data despre variabile.

Am retinut ca variabilele sunt ca niste cutii mai mici sau mai mari care pot stoca diverse informatii, cum ar fi stringuri / texte, numere intregi, numere cu zecimale sau pur si simplu valoarea adevarat sau fals.

De retinut ca C++ este un limbaj static typed, adica variabilele sunt verificate la compilare, trebuie din start sa stim ce vrem sa facem cu ele. Variabilele sunt verificate dupa tipul lor, nu dupa cea ce contin, adica nu dupa valoarea atribuita.
Explicat altfel, cutiile noastre trebuie create din start cu un scop anume, trebuie sa se stie cu ce vor fi umplute. Intr-o cutie care poate contine string / text nu se poate pune numar, dar nici invers, intr-o cutie creata pentru numar nu se poate pune text.

In exemplul de mai jos cream o variabila de tip string si apoi ii afisam continutul intr-un alert()

Cod: Selectaţi tot

void main()
{
// Cream variabila / cutia goala:
string mesaj;
// Atribuim o valoare variabilei / introducem un text in cutie:
mesaj="Salut lume!";
// In alert, corpul ferestrei va fi continutul variabilei, nu o mai punem intre ghilimele, acestea fiind cuprinse deja in continutul variabilei: 
alert("Titlu", mesaj);
}
Am vazut ca pe un rand am creat variabila:
string mesaj;
Apoi pe urmatorul rand am atribuit o valoare folosind semnul egal:
mesaj="Salut lume!";

Valoarea poate fi atribuita si in acelasi statement cu crearea variabilei, deci codul urmator este similar:

Cod: Selectaţi tot

void main()
{
string mesaj="Salut lume!";
alert("Titlu", mesaj);
}
Tot astfel putem crea pentru numere intregi variabile, doar ca in loc de string scriem int.

Cod: Selectaţi tot

void main()
{
string mesaj="Varsta mea este: ";
int varsta=30;
alert("Titlu", mesaj+varsta);
}
Mai sus am creat doua variabile, una de tip string si una de tip int (pentru numar intreg). De observat ca numarul atribuit 30 a fost scris fara ghilimele.
Corpul ferestrei cu buton Ok generata de alert() a continut un text rezultat din alaturarea variabilei string mesaj si variabilei int varsta: "Varsta mea este 30".
Interpretorul a dedus automat ca vrem ca ceea ce contine int varsta sa fie considerat text, deci se realizeaza o conversie automata de la integer (numar intreg) la string, am folosit pentru aceasta semnul + (plus).

In exemplul urmator adaugam si variabila int diferenta pentru a ajusta varsta mea la cea reala:

Cod: Selectaţi tot

void main()
{
string_mesaj="Varsta mea este: ";
int varsta=30;
// cream o variabila pentru diferenta de varsta, in cazul meu fiind minus 1:
int diferenta=-1;
// Adunam cele doua variabile int:
varsta=varsta+diferenta;
alert("Titlu", mesaj+varsta);
}
Observam ca am atribuit variabilei varsta valoarea ei plus valoarea variabilei diferenta, deci varsta a fost egala cu ea insasi (30) plus valoarea variabilei diferenta (minus 1). Mesajul rezultat ar trebui sa fie: "Varsta mea este 29".
Adunarea unei valori la o variabila poate fi exprimata si in felul urmator:
varsta+=diferenta;
Asadar, instructiunea de mai sus este sinonima cu:
varsta=varsta+diferenta;

De retinut ca folosind semnul + plus putem alatura continutul a doua variabile de tip string sau a unei variabile de tip string cu una de tip integer. Nu s-ar putea insa adauga la o variabila integer una de tip string.
Daca punem semnul + plus intre doua variabile integer, valorile acestora vor fi adunate in mod normal.

Pe scurt, avand in vedere exemplul de mai sus, schimband al doilea parametru al functiei alert() vom avea o eroare:
alert("Titlu", varsta+mesaj);
Interpretorul nu va sti ce sa faca vazand ca se doreste adunarea unui integer cu un string. Invers insa, adunand un string cu un integer va considera ca vrem ca totul sa fie string.

Mai avem doua tipuri de variabile pentru numere cu zecimale: float si double.

Cod: Selectaţi tot

void main()
{
float numar=1.5;
double x=3.2;
double rezultat=numar+x;
alert("Titlu", "Rezultatul este: "+rezultat);
}
Corpul mesajului de mai sus va fi: "Rezultatul este 4.7".

De observat ca folosim "." (punct), nu "," (virgula) intre intreg si zecimale.
Si in cazul variabilelor care pot contine numar cu zecimale float sau double, daca le adaugam cu + plus dupa un string vor fi considerate ca string.

Diferenta intre float si double este limita numarului, float fiind de 32 biti, double fiind de 64 de biti. Deci double poate contine numere mult mai mari decat float. Se recomanda utilizarea variabilelor double daca nu stim exact cat de mare ajunge sa fie numarul continut.

Mai avem si tipul de variabile numite booleene.
Acestea sunt cele mai simple,e le pot contine doar doua valori: true (= adevarat) sau false (= fals).

Acestea se definesc in felul urmator:

Cod: Selectaţi tot

void main()
{
bool sfarsit=true;
}
Nu putem inca da un exemplu concret sa vedem utilitatea acestor variabile, dar vorbit liber, un exemplu ar suna astfel:

Daca sfarsit este egal cu true (adevarat) atunci inchide jocul. Daca sfarsit este egal cu false (fals), atunci sa se continue jocul.


Variabilele pot fi globale sau locale, lucru care va fi inteles dupa ce se va invata cate ceva despre definirea functiilor.
In prezent putem spune ca daca o variabila este declara'ta / creata in interiorul unui bloc de cod, adica intre acolada deschisa si acolada inchisa, asa cum am facut si noi mai sus, aceasta va fi locala.
Daca vom crea o variabila in afara unui bloc de cod, aceasta va fi globala.

Exemplu de variabila globala:

Cod: Selectaţi tot

string mesaj="Salut lume!";

void main()
{
alert("Titlu", mesaj);
}
Observam ca am declarat variabila de tip string numita mesaj in afara lui void main(). Aceasta inseamna ca este vorba de o variabila globala, ea va putea fi folosita oriunde in cadrul scriptului, nu doar in cadrul blocului de cod care urmeaza dupa void main().
Vom intelege mai tarziu cum stau exact lucrurile cu variabilele globale si locale.


Tema propusa pentru acasa este:
Sa se creeze un script in care sa avem o variabila de tip string care sa contina mesajul:
"Numarul total de aparate este: "
Sa existe in total 4 variabile de tip integer, cate una pentru numarul de desktopuri, pentru numarul de laptopuri si una pentru numarul de telefoane, iar in final una, a patra, pentru numarul de aparate care sa contina un numar egal cu suma celor trei variabile.
Rezultatul sa fie afisat printr-un alert().

Imprimarea realizata de Alexandru a acestei intalniri este la link-ul urmator:
Download Fisier MP3 03._Curs_BGT_-_Variabilele.mp3 (38,7 MB)

lectia 3 tema pentru acasa

Scris: 07 Apr 2012, 15:29
de Eddy
void main()
{
string mesaj="Numarul total de aparate este:";
int d=3;
int l=4;
int t=5;
int suma=d+l+t;
mesaj+=suma;
alert("titlu", mesaj);
exit();
}

Scris: 07 Apr 2012, 21:09
de Manu
Tema rezolvata corect si elegant.
De remarcat utilizarea compound assignment la modificarea finala a valorii variabilei mesaj.
Prin Compound operators este o modalitate eleganta si placuta de atribuire de valori in multe limbaje, mai ales cele derivate din C.
Procedeul se numeste compound assignment sau augmented assignment.

O greseala din nou de redactare o observ... nu este spatiu dupa semnul ":" (doua puncte), astfel ca mesajul final este:
"Numarul total de aparate este:12"
in loc de:
"Numarul total de aparate este: 12".
Asadar, rezolvarea ta a temelor tinde catre perfectiune, data viitoare cine stie...

tema

Scris: 08 Apr 2012, 00:05
de Cornel
intr-adevar, frumos acel mesaj+=suma; adaugat de Eddi; varianta lui e si concisa in acelasi timp prin numirea variabilelor foarte schematic; pun si eu versiunea mai de incepator:

void main()
{
string mesaj="numarul total de aparate este: ";
int desktopuri=3;
int laptopuri=4;
int telefoane=6;
int total=desktopuri+laptopuri+telefoane;
alert("titlu", mesaj + total);
exit();
}

Scris: 08 Apr 2012, 00:19
de Manu
Nu sunt greseli in varianta ta Cornel, eu la redactare as scrie propozitia cu majuscula.
Daca cineva vrea sa fie riguros si considera corpul ferestrei afisate prin alert() ca fiind o propozitie, ar trebui sa puna inca un plus la sfarsit si un punct intre ghilimele. In general eu tin mult la redactare, cred ca atunci cand un client alege un joc, observa destul de repede inadvertentele de redactare a mesajelor si poate sa aiba indoieli ca totul este in regula. Avand insa in vedere ca e vorba de un joc audio de cele mai multe ori, lipsa majusculei nu va prea fi observata.

Uneori nu e avantajos sa denumim variabilele prea scurt, riscam la un proiect mare sa cam uitam ce e cu ele sau sa uitam daca am mai folosit sau nu o variabila. De exemplu denumind cu t variabila int pentru total, vom fi tentati in viitor sa numim cu t si variabila care stocheaza un timer/ cronometru.
Desigur ca lucrand sistematic, comentand codul, nu ne vom incurca.

La JAWS Scripting foloseam Hungarian Notation, pentru a nu ne incurca in ceea ce priveste tipul variabilei, o precedam cu initiala tipului, apoi numele nostru era cu litera mare.
Aici vom merge pe denumirea variabilelor cat mai explicit, de exemplu string my_name, int number_of_devices etc, utilizand underline intre cuvinte.
Desigur ca fiecare poate nota variabilele cum vrea, totul e sa se descurce si sa isi pastreze o unitate pentru a-i fi mai usor cand revine asupra codului in momentul cand doreste realizarea unei noi versiuni dupa ceva vreme de la finalizarea celei anterioare.
Se pare ca in functie de cum am citit in manualele unui limbaj, asa cam si folosesc notarea. De exemplu in Java Script scriu cuvintele legate, cu majuscule de la al doilea: myName, numberOfDevices etc.
In JAWS Scripting merg tot pe Hungarian Notation.

curs 2 tema

Scris: 09 Apr 2012, 07:43
de Eddy
modulul 2 tema refacuta
varianta 1

void main()
{
alert("Mesaj", "Salut");
wait(3000);
alert("Enumerare", "Eu am: " + random(1, 20) + " desktopuri, " + random(1, 20) + " laptopuri si " + random(1, 20) + " telefoane.");
exit();
}

varianta 2

void main()
{
alert("Mesaj", "Salut");
wait(3000);
alert("Enumerare", "Eu am: " + random(1, 20) + " " + "desktopuri" + "," + " " + random(1, 20) + " " + "laptopuri" + " " + "si" + " " + random(1, 20) + " " + "telefoane"+".");
exit();

}
eu nam gasit alt mod ca sa afisez corect mesajul
ori pun semnele de punctuatie si spatile intre ghilimele cu stringurile
ori altfel iese ditai carnatu de instructiune

Scris: 09 Apr 2012, 14:13
de Manu
Prima varianta e ok, nu vad sensul celei de-a doua unde lipesti stringuri fara sa fie variabile sau functii intercalate.
Totul era ca au fost omise spatii si virgule intre cuvinte la afisarea rezultatului rezolvarii din postul anterior, scris in 29 martie.

A doua varianta de azi da tot bine din cate am observat, doar ca ai deschis si ai inchis ghilimelele de mai mult eori decat era necesar, aceasta fiind o munca utila doar in ideea exersarii lucrului cu semnele.
Asadar, Varianta 1 era corecta, as fi spus perfecta daca nu m-as putea lega mai in gluma, mai in serios de corpul primului alert(), unde acel "Salut" ar putea fi urmat si de un semnul exclamarii. :)