Post on 12-Apr-2017
transcript
Marile civilizații ale lumii
1
Pop Adrian
2
Cuprins
PREFAȚĂ .......................................................................................................... 3
PREZENTAREA SOFTULUI ........................................................................... 4
1. Instalarea și deschiderea softului ............................................................... 4
2. Pagina principală și panoul de opțiuni ....................................................... 5
3. Cuprinsul .................................................................................................. 6
4. Paginile cu informații ................................................................................ 7
5. Civilizațiile prezentate .............................................................................. 9
6. Jocuri și aplicații ..................................................................................... 13
7. Sistemul de chat ...................................................................................... 18
8. Comenzile vocale .................................................................................... 19
9. Bibliografia ............................................................................................. 19
10. Ieșire ...................................................................................................... 20
INTRODUCERE ÎN .NET ȘI C# ..................................................................... 21
MANUALUL PROGRAMATORULUI........................................................... 24
CONCLUZIE ................................................................................................... 36
BIBLIOGRAFIE .............................................................................................. 37
WEBOGRAFIE ............................................................................................... 37
Marile civilizații ale lumii
3
PREFAȚĂ
Lucrarea de față este o broșură de prezentare a softului educațional intitulat
“Marile civilizații” ale lumii. Softul este gândit să fie o unealtă de ajutor pentru
elevii din ciclul gimnazial și liceal, profesorii de istorie care vor să utilizeze un
mod interactiv de predare sau orice persoană curioasă și care vrea să afle mai
multe lucruri despre civilizații precum Civilizația Aztecă, Civilizația Japoneza,
Civilizația Egiptului Antic ș.a. Softul este bine structurat, astfel că utilizatorii se
pot bucura de o parte teoretică cu nenumărate informații, sau o parte interactivă
cu diferite jocuri și aplicații care fac procesul de învățare mai ușor și interesant.
Motivul pentru care am ales această temă pentru proiect este pentru că
mereu am fost pasionat de istorie, mai ales de Epoca Antică și cea Medievală,
perioade în care popoarele, alături de știință, artă și cultură, au evoluat foarte mult.
Pe de altă parte, majoritatea civilizațiilor prezentate au acel gram de mister în care
sunt învăluite, ceea ce m-a făcut să vreau să aflu mai multe despre fiecare, despre
cultura și modul lor de viață. A căuta informații și a le sintetiza în acest soft a
reprezentat o provocare, care însă s-a soldat cu nenumărate căștiguri personale.
Pe de o parte mi-am îmbogățit cultura generală, iar pe de altă parte am devenit un
programator mai bun, fiecare aplicație realizată punându-mă în fața unei noi
provocări, găsind însă mereu un mod logic dar în același timp creativ de rezolvare.
Ideea inițială a softului era mult mai simplă. La început, vroiam să fac un
simplu progrămel despre o civilizație precolumbiană sau antică, însă pe măsură
ce răsfoiam enciclopediile și cărțile nu mă puteam decide ce să aleg, astfel că…am
ales să le integrez pe toate. Pe măsură ce am dezvoltat softul am adăugat altele,
am găsit noi informații astfel că într-un final am reușit să sintetizez și structurez
toate datele istorice, pentru a găsi orice vrem despre orice civilizație imediat.
Nici realizarea aplicațiilor nu a fost mai ușoară. De la simplul test teoretic,
la panoramele 360 și jocul contra calculatorului, a fost nevoie de mult timp și
multe teste ca acestea să iasă într-un final perfecte, așa cum vroiam. Chat-ul,
panoul funcțional de setări și controlul vocal a reprezentat o nouă provocare, care
însă a fost dusă la final cu succes.
Astfel, pot spune că sutele de ore de muncă și studiu nu au fost în zadar.
Văzând acum proiectul final, sunt mândru atât de el cât și de mine, deoarece am
reușit ceea ce mi-am propus: realizarea unui instrument interactiv pentru învățat.
Folosind tehnologii deținute de aproape orice calculator și având cerințe de sistem
minime și decente, softul poate fi astfel utilizat atât acasă de către elevi pentru uz
propriu, cât și la școală de către profesori pentru un mod mai interactiv și
interesant de a preda unele lecții. Partea bună este că softul poate fi oricând
dezvoltat, adăugând cu ușurință noi capitole teoretice sau aplicații.
În concluzie, acest soft este un program cu adevărat interesant, invitându-
vă să aflați mai multe despre din această broșură sau de pe CD-ul atașat.
Pop Adrian
4
PREZENTAREA SOFTULUI
1. Instalarea și deschiderea softului
Forma finală a softului este un installer care necesită un număr minim de
pași pentru instalare. Întrucând avem nevoie de .NET Framework 4.5 pentru
funcționare, installer-ul va căuta dacă acest program este instalat pe computerul
dumneavoastră, iar în caz contrar vă va redirecționa către site-ul oficial de unde
puteți descărca programul. Installer-ul va crea pe desktop automat o scurtătură
pentru a putea deschide softul.
La executarea acestuia, pe ecran va apărea treptat o piramidă care va
persista 1-2 secunde, după care pagina principală a softului va fi deschisă. Aceasta
arată exact ca în imaginea de mai jos.
Marile civilizații ale lumii
5
2. Pagina principală și panoul de opțiuni
Astfel, la un prim contact, observăm 3 butoane mari: Start, Opțiuni și Ieșire.
Putem observa de asemenea că pe fundal se aude muzică, iar cursorul nostru este
diferit. Pentru a seta fiecare lucru așa cum ne place, avem la îndemână panoul de
opțiuni, care poate fi accesat printr-un simplu click pe butonul corespunzător.
Primul set de opțiuni care poate fi adus este referitor la cursor. Softul pune
la dispoziție 7 tipuri diferite care pot fi alese printr-un simplu click pe ele.
Cel de-al doilea set de opțiuni se referă la proprietățile audio. Pe parcursul
softului vom întâlni 3 tipuri de sunete: muzică de fundal, voce și efecte. Muzica
de fundal este specifică fiecărei pagini și fiecărei civilizații, vocea intervine atunci
când punem cursorul mouse-ului pe un anumit buton, imagine, sau în cadrul
paginilor teoretice ale fiecărei civilizații (butoanele care permit redarea vocală a
textului de pe ele), iar efectele se referă la suntele din aplicații, precum diferite
beep-uri sau alarme sonore. La alegere, acestea se pot activa sau dezactiva.
Singura opțiune grafică prezentă
este cea referitoare la tooltip-uri. Un
tooltip este un balonaș cu un text care
apare atunci când cursorul mouse-ului
se află pe un anumit control. Aici, ele
Pop Adrian
6
pot fi activate sau dezactivate printr-un singur click pe căsuța aferentă acestei
opțiuni.
Ultima opțiune se referă la controlul vocal. Activarea sau dezactivarea ei,
va duce la apariția sau dispariția unui nou control în partea de sus a paginii.
Conectând un microfon, acest control devine utilizabil prin rostirea anumitor
comenzi (mai multe informații la sfârșitul acestei părți sau în secțiunea de
prezentare a codului).
3. Cuprinsul
La un simplu click pe butonul Start, vom fi redirecționați către pagina de
cuprins. Aceasta arată precum cea de mai jos.
Aici vom observa 6 imagini mari, fiecare cu un subtitlu, în funcție de
civilizația pe care o reprezintă. Apropiind cursorul mouse-ului pe una dintre ele,
dacă efectele sonore de tip voce sunt activate, o voce va rosti numele civilizației
respective. În partea de jos observăm de asemenea două butoane.
Marile civilizații ale lumii
7
Primul este butonul care odată apăsat ne va duce înapoi la pagina principală.
Cel de-al doilea, odată apăsat va opri muzica de fundal. La o altă apăsare, aceasta
va fi repornită. Dacă în panoul de opțiuni, caracteristica audio specifică sunetelor
de fundal este dezactivată, atunci suntetul de fundal va fi implicit oprit. Ne putem
da seama de starea audio în funcție de cum arată butonul.
Un lucru interesant pe care îl putem observa aici este bara din
partea dreaptă a ecranului. Atunci când apropiem cursorul mouse-ului de
ea, aceasta se va deschide în lateral, ivind două noi iconițe. Prima iconiță,
cea reprezentată de cufărul de comori, face legătura între cuprins și
pagina de jocuri și aplicații. La apăsarea celei de-a doua iconițe,
reprezentând iazul cu pești, se va deschide fereastra de login pentru chat
(mai multe detalii la sfârșitul acestei secțiuni sau la partea de cod).
4. Paginile cu informații
Apăsând pe un buton referitor la o civilizație la alegere, vom fi
redirecționați către o pagină asemănătoare celei de mai jos.
În primul rând, în partea de sus observăm placheta cu titlul capitolului. Sub
acesta, se află cele două pagini cu informații pentru capitolul respectiv (uneori un
Pop Adrian
8
capitol se poate întinde pe mai multe pagini). Pe pagini putem observa text însoțit
de imagini reprezentative. În partea de jos există 5 tipuri de butoane.
Înapoi Înainte Pagina
principală Cuprins Volun on/off
Astfel, pentru a naviga printre pagini tot ce trebuie să facem
este să apăsăm pe butoanele cu săgeți, pentru a schimba secțiunile
pe primele două din mijloc, iar pentru a activa sau dezactiva sunetul
de fundal, pe cel de-al treilea buton din mijloc. Pentru un plus de
ușurință de lucru, putem schimba paginile între ele folosind și
săgețile de la tastatură.
Observăm și aici, în partea din dreapta, o bară de instrumente
care devine vizibilă atunci când punem cursorul mouse-ului pe ea.
În cadrul acesteia întâlnim 4 tipuri de butoane:
a) Butoanele inscripționate cu cifrele 1 și 2 permit citirea
textului de pe cele două pagini din mijloc de către o voce
feminină. Astfel, butonul 1 corespunde primei pagini, iar
butonul 2 celei de-a doua. Pentru a opri vocalizarea textului,
tot ce trebuie să facem este să apăsăm din nou pe butonul
respectiv.
b) Butonul care are iconița unui ochi, permite ascunderea celor
două pagini. Acest buton este util atunci când dorim să privim
imaginea de fundal mai bine. Pentru a reface vizibilitatea
paginilor, tot ce trebuie să facem este să reapăsăm butonul.
c) Butonul care are iconița reprezentată de două săgeți permite
afișarea unui mini-meniu. Întrucât fiecare civilizație este grupată pe 1-20
de capitole, este mai ușor să îl folosim pentru a sări de exemplu de la pagina
2 direct la pagina 10. Pentru a-l deschide, tot ce trebuie să facem este să
apăsăm pe butonul corespunzător. Astfel, în mijloc ecranului își va face
apariția o nouă fereastră cu mai multe butoane pe care este inscripționat
numele capitolelor civilizației curente. Pentru a sări la altă pagină, vom da
click pe butonul corespunzător alegerii noastre și vom fi redirecționați
imediat. Dacă pe pagina de pe care plecăm volumul este închis, atunci și pe
pagina unde vom ajunge volumul va rămâne închis. Dacă am deschis
această fereastră din greșeală, putem să o închidem folosind butonul X.
Marile civilizații ale lumii
9
d) Cel de-al 5-lea buton are iconița unei rotițe. La simpla lui apăsare, panoul
de opțiuni va fi afișat, putând face ce modificare dorim. Orice modificare
făcută într-o anumită pagină, are efect global.
5. Civilizațiile prezentate
Structura de bază a părții teoretice a fiecărei civilizații este astfel conform celor
descrise mai sus. Momentan, în cadrul softului sunt prezentate 6 civilizații:
Civilizația Aztecă, Civilizația Maiașă, Civilizația Incașă, Civilizația Egiptului
Antic, Civilizația Japoniei Antice și Civilizația Chinei Antice. Mai jos, puteți
vizualiza câteva imagini din soft, de la diferite pagini și capitole.
Civilizația Atecă – Sporturi
Pop Adrian
10
Civilizația Maiașă – Credințe
Civilizația Incașă – Incașii
Marile civilizații ale lumii
11
Civilizația Egiptului Antic – Introducere
Civilizația Japoniei Antice – Alimentația
Pop Adrian
12
Civilizația Chinei Antice – Locuințele
Civilizația Egiptului Antic – Arhitectura
Marile civilizații ale lumii
13
6. Jocuri și aplicații
După cum am spus, pentru a accesa pagina cu jocuri și aplicații, trebuie să
apăsăm pe butonul sub forma unui cufăr din pagina de Cuprins. Odată apăsat, ni
se va deschide o pagină precum cea de mai jos.
Butoanele aferente ne sunt binecunoscute. În partea centrală observăm 6 rame
cu fundaluri diverse. Ele corespund celor 6 aplicații dezvoltate pentru acest soft.
În ordinea apariției lor pe pagină, acestea sunt: Test teoretic, Rebus, Tur 360,
Băștinași vs. Conquistadori, Piramide – Palmieri, Caractere Chinezești. Mai jos
vă voi prezenta pe scurt fiecare dintre acestea.
a) Test teoretic – această aplicație permite testarea cunoștințelor prin
intermediul unui test cu 9 întrebări. Întrebările sunt despre toate cele 6
civilizații. Fiecare întrebare are 4 variante de răspuns aferente. În cazul unui
răspuns corect, răspunsul va fi colorat în verde, în caz contrar, în roșu. La
sfârșit, ne este generat un raport conform răspunsurilor noastre unde putem
vedea ce și unde am greșit. Pentru a relua testul, vom apăsa pe butonul din
partea jos ce reprezintă o săgeată circulară.
Pop Adrian
14
b) Rebusul – această aplicație este după cum și numele îi spune, o încrucișare
de 17 cuvinte. Indiciile pentru rezolvare se găsesc pe foaia de pergament
aferentă. După ce am terminat de completat, tot ce trebuie să facem este să
apăsăm pe butonul de verificare de mai jos. Dacă totul este corect, căsuțele
se vor colora în verde, în caz contrar, în roșu.
c) Tur 360 – aceasta este o aplicație interesantă care ne permite alegerea a 6
locații diferite, specifice celor 6 civilizații și vizualizarea lor într-un tur de
360 de grade. Selectând o poză, turul respectiv se va încărca iar noi, cu
ajutorul mouse-ului vom putea privi din toate unghiurile, roti în toate
direcțiile, dând astfel un efect de sferă, ca și cum am fi la fața locului.
d) Băștinași vs. Conquistadori este o aplicație care ne permite să ne testăm
cunoștințele…împotriva calculatorului. Astfel, vom răspunde la diferite
Marile civilizații ale lumii
15
întrebări teoretice, în timp ce și calculatorul o va face. Palpitant, nu? La
deschiderea jocului, vom fi întâmpinați de o fereastră precum următoarea.
Aici este pagina de inițializare a jocului. În prima căsuță astfel, trebuie să ne
introducem numele. Mai jos, vom alege ce vrem să fim: băștinași sau
conchistadori. Alegerea noastră nu va afecta întrebările jocului, singurele
diferențe fiind la fundalul din timpul jocului și la mesajele de final. Astfel, dacă
vom alege să fim băștinași, va trebui să luptăm să ne apărăm pământurile, iar dacă
vom alege să fim conchistadori, va trebui să luptăm să cucerim ținutul. Cu toate
acestea, mereu se poate termina cu o egalitate.
Dificultatea jocului acțiionează asupra probabilității de răspuns corect a
calculatorului. Astfel, dificultatea ușor va face calculatorul să răspundă corect la
aproximativ 25% din întrebări, mediu la 33% iar greu la 50%. Odată alese aceste
opțiuni, va trebui să apăsăm pe butonul ce reprezintă o săgeată.
Odată început jocul, vom observa că în partea de sus avem 2 bare de viață, un
cronometru, iar în partea de jos avem un câmp unde sunt afișate întrebări și
răspunsuri. Modul de funcționare al jocului este următorul:
- Întrebarea cu variantele de răspuns este afișată, cronometrul începe (avem
10 secunde la dispoziție să răspundem corect la întrebare)
- Selectăm varianta de răspuns și apăsăm pe butonul Răspunde
- Calculatorul alege și el (în privat), iar odată ce noi am răspuns, îi este afișat
și răspunsul lui
- Dacă am răspuns corect atât noi cât și calculatorul, nu se întâmplă nimic,
iar după o secundă va fi pusă o nouă întrebare
- Dacă noi răspundem corect, calculatorului va pierde 10 puncte din viață
Pop Adrian
16
- Dacă răspundem greșit, iar calculatorul corect, pierdem 10 puncte de viață
- În caz că ambii jucători răspund greșit, atât noi cât și calculatorul vom
pierde 10 puncte de viață
- Ținând cont că bara de viață are la început valoarea 100, jocul va continua
cu întrebări până când unul sau ambii jucători vor avea bara de viață goală.
- Dacă vom câștiga, vom cuceri ținutul (sau vom goni cuceritorii), dacă vom
pierde vom fi cuceriți (sau alungați), iar dacă vom ajunge cu viața la 0 în
același timp, va fi egalitate
Marile civilizații ale lumii
17
e) Piramide – Triunghiuri – acesta este un joc de logică. La început, ne este
prezentată o tablă cu 25 de imagini (5 rânduri, 5 coloane) reprezentând
palmieri. La un click pe o imagine, atât imaginea selectată cât și vecinii ei
direcți din stânga, dreapta, jos și sus se vor transforma în piramide. Scopul
jocului este de a umple toată tabla de joc cu piramide. La nivelele
superioare, tabla de joc va deveni tot mai mare.
f) Caractere chinezești – este o aplicație care ne permite să răsfoim o carte
virtuală cu cele mai simple caractere din limba chineză. Fiecare simbol este
Pop Adrian
18
explicat într-un mod haios care permite reținerea lui mai ușor. Sub fiecare, este
traducerea caracterului în limba română. Cartea se răsfoiește ușor, folosind
mouse-ul sau butoanele din partea de jos.
7. Sistemul de chat
Sub iconița pentru jocuri și aplicații, am menționat de iconița care deschide
sitemul de chat. La apăsarea ei, pe ecran ne va fi afișată o căsuță precum de mai
jos.
Primul câmp va fi completat cu numele pe care vrem să îl avem pe chat, iar
al doilea va fi completat cu adresa serverului la care încercăm să ne conectăm.
După apăsarea butonului conectare, dacă totul este ok, va fi afișată fereastra de
chat. Ea arată ca mai în imaginea de mai jos.
Marile civilizații ale lumii
19
8. Comenzile vocale
Activând comenzile vocale din panoul de opțiuni, vom putea da prin
intermediul unui microfon diferite comenzi care vor fi executate astfel fără a mai
atinge mouse-ul sau tastatura. Controlul pentru comenzile vocale arată așa:
Control activ (sus) și inactiv (jos)
Controlul poate fi activat prin rostirea comenzii “Hey” sau “Enable Voice”.
Astfel, beculețul verde se va aprinde, ceea ce va însemna că putem rosti comanda
principală. Momentan, comenzile acceptate sunt:
- Menu – redirecționare către pagina principală
- Content – redirecționare către cuprins
- Start – Apăsare pe butonul start
- Options – deschiderea panoului de opțiuni
- Next / Back – derulare printre pagini
- Exit – ieșire
- Yes / No – răspunsuri pentru dialogul cu fereastra de ieșire
9. Bibliografia
Bibliografia poate fi accesată apăsând pe butonul i din Meniu. (dreapta jos)
Pop Adrian
20
10. Ieșire
Pentru a ieși din program vom apăsa pe butonul ieșire sau vom rosi comanda
Exit (în caz că avem comenzile vocale activate). Va apărea o căsuță de dialog
precum cea de mai jos.
Dacă vrem să părăsim programul, vom da click pe da, în caz contrar, pe nu,
pentru a reveni.
Marile civilizații ale lumii
21
INTRODUCERE ÎN .NET ȘI C#
.NET este un cadru (Framework) de dezvoltare software unitară care permite
realizarea, distribuirea şi rularea aplicaţiilor desktop Windows şi aplicaţiilor
WEB. Tehnologia .NET pune laolaltă mai multe tehnologii (ASP, XML, OOP,
SOAP, WDSL, UDDI) şi limbaje de programare (VB, C++, C#, J#) asigurând,
totodată, atât portabilitatea codului compilat între diferite calculatoare cu sistem
Windows, cât şi reutilizarea codului în programe, indiferent de limbajul de
programare utilizat.
De ce .NET? În primul rând pentru că ne oferă instrumente pe care le putem
folosi şi în alte programe, oferă acces uşor la baze de date, permite realizarea
desenelor sau a altor elemente grafice. Spaţiul de nume System.Windows.Forms
conţine instrumente (controale) ce permit implementarea elementelor interfeţei
grafice cu utilizatorul. Folosind aceste controale, puteţi proiecta şi dezvolta rapid
şi interactiv, elementele interfeţei grafice. Tot .NET vă oferă clase care efectuează
majoritatea sarcinilor uzuale cu care se confruntă programele şi care plictisesc şi
fură timpul programatorilor, reducând astfel timpul necesar dezvoltării
aplicaţiilor.
Limbajul C# a fost dezvoltat de o echipă restrânsă de ingineri de la Microsoft,
echipă din care s-a evidenţiat Anders Hejlsberg (autorul limbajului Turbo Pascal
şi membru al echipei care a proiectat Borland Delphi). C# este un limbaj simplu,
cu circa 80 de cuvinte cheie şi 12 tipuri de date predefinite. El permite
programarea structurată, modulară şi orientată obiectual, conform perceptelor
moderne ale programării profesioniste. Principiile de bază ale programării
orientate pe obiecte (încapsulare, moșternire, polimorfism) sunt elemente
fundamentale ale programării C#. În mare, limbajul moşteneşte sintaxa şi
principiile de programare din C++. Sunt o serie de tipuri noi de date sau funcţiuni
diferite ale datelor din C++, iar în spiritul realizării unor secvenţe de cod sigure
(safe), unele funcţiuni au fost adăugate (de exemplu, interfeţe şi delegări),
diversificate (tipul struct), modificate (tipul string) sau chiar eliminate
(moştenirea multiplă şi pointerii către funcţii). Unele funcţiuni (cum ar fi accesul
direct la memorie folosind pointeri) au fost păstrate, dar secvenţele de cod
corespunzătoare se consideră „nesigure”.
O aplicaţie C# este formată din una sau mai multe clase, grupate în spaţii de
nume (namespaces). Este obligatoriu ca doar una din aceste clase să conţină un
„punct de intrare” (entry point), şi anume metoda (funcţia) Main.
Clasa (class), în termeni simplificaţi, reprezintă principalul element structural
şi de organizare în limbajele orientate spre obiecte, grupând date cât şi funcţii care
prelucrează respectivele date.
Spaţiul de nume (Namespaces): din raţiuni practice, programele mari, sunt
divizate în module, dezvoltate separat, de mai multe persoane. Din acest motiv,
Pop Adrian
22
există posibilitatea de a apărea
identificatori cu acelaşi nume. Pentru a
evita erori furnizate din acest motiv, în
1955 limbajul C++ introduce noţiunea şi
cuvântul cheie namespace. Fiecare
mulţime de definiţii dintr-o librărie sau
program este grupată într-un spaţiu de
nume, existând astfel posibilitatea de a
avea într-un program definiţii cu nume
identic, dar situate în alte spaţii de nume.
În cazul în care, într-o aplicaţie, unele
clase sunt deja definite, ele se pot folosi
importând spaţiile de nume care conţin
definiţiile acestora. Mai menţionăm
faptul că un spaţiu de nume poate conţine mai multe spaţii de nume.
În C#, simplificat vorbind, un program poate fi privit ca având mai multe
„straturi”: avem cod în interiorul metodelor, care, la rândul lor, se află în interiorul
claselor, aflate în interiorul namespaces-urilor. Convenţie: S-a adoptat următoarea
convenţie de scriere: în cazul în care folosim nume compuse din mai multe
cuvinte, fiecare cuvânt este scris cu majusculă: HelloWorld, WriteLine. Această
convenţie poartă numele de Convenţie Pascal. Asemănătoare este Convenţia
cămilă, cu diferenţa că primul caracter din primul cuvânt este literă mică.
Ca şi limbajul C++ cu care se înrudeşte, limbajul C# are un alfabet format din
litere mari şi mici ale alfabetului englez, cifre şi alte semne. Vocabularul
limbajului este format din acele „simboluri” cu semnificaţii lexicale în scrierea
programelor: cuvinte (nume), expresii, separatori, delimitatori şi comentarii.
Programarea orientată obiect – POO (programe cu noi tipuri ce integrează atât
datele, cât şi metodele asociate creării, prelucrării şi distrugerii acestor date); se
obţin avantaje prin abstractizarea programării (programul nu mai este o
succesiune de prelucrări, ci un ansamblu de obiecte care prind viaţă, au diverse
proprietăţi, sunt capabile de acţiuni specifice şi care interacţionează în cadrul
programului); intervin tehnici noi privind instanţierea, derivarea şi polimorfismul
tipurilor obiectuale. Limbajul C# permite utilizarea programării orientate pe
obiecte respectând toate principiile enunţate anterior. Toate componentele
limbajului sunt într-un fel sau altul, asociate noţiunii de clasă. Programul însuşi
este o clasă având metoda statică Main() ca punct de intrare, clasă ce nu se
instanţiază.
Chiar şi tipurile predefinite byte, int sau bool sunt clase sigilate derivate din
clasa ValueType din spaţiul System. Tot din ierarhia de clase oferită de limbaj se
obţin şi tipuri speciale cum ar fi: interfeţe, delegări şi atribute. Începând cu
versiunea 2.0 a limbajului i s-a adăugat un nou tip: clasele generice, echivalentul
claselor template din C++.
Marile civilizații ale lumii
23
Programarea vizuală trebuie privită ca un mod de proiectare a unui program
prin operare directă asupra unui set de elemente grafice (de aici vine denumirea
de programare vizuală). Această operare are ca efect scrierea automată a unor
secvenţe de program, secvenţe care, împreună cu secvenţele scrise textual vor
forma programul. Spunem că o aplicaţie este vizuală dacă dispune de o interfaţă
grafică sugestivă şi pune la dispoziţia utilizatorului instrumente specifice de
utilizare (drag, clic, hint etc.) Realizarea unei aplicaţii vizuale nu constă doar în
desenare şi aranjare de controale, ci presupune în principal stabilirea unor decizii
arhitecturale, decizii ce au la bază unul dintre modelele arhitecturale de bază.
În realizarea aplicaţiei mai trebuie respectate şi principiile proiectării
interfeţelor:
- Simplitatea: Interfaţa trebuie să fie cât mai uşor de înţeles şi de învăţat de
către utilizator şi să permită acestuia să efectueze operaţiile dorite în timp
cât mai scurt. În acest sens, este vitală culegerea de informaţii despre
utilizatorii finali ai aplicaţiei şi a modului în care aceştia sunt obişnuiţi să
lucreze.
- Poziţia controalelor: Locaţia controalelor dintr-o fereastră trebuie să
reflecte importanţa relativă şi frecvenţa de utilizare. Astfel, când un
utilizator trebuie să introducă nişte informaţii – unele obligatorii şi altele
opţionale – este indicat să organizăm controalele astfel încât primele să fie
cele care preiau informaţii obligatorii.
- Consistenţa: Ferestrele şi controalele trebuie să fie afişate după un design
asemănător („template”) pe parcursul utilizării aplicaţiei. Înainte de a
implementa interfaţa, trebuie decidem cum va arăta aceasta, să definim
„template”-ul.
- Estetica: Interfaţa trebuie să fie pe cât posibil plăcută şi atrăgătoare.
Pop Adrian
24
MANUALUL PROGRAMATORULUI
În cele ce urmează, mi-am propus să vă arăt câteva dintre cele mai
importante, interesante sau definitorii bucăți de cod din realizarea aplicației.
Inițializarea Paginii Principale se face astfel:
//Declaratie sunet fundal public WMPLib.WindowsMediaPlayer fundal = new WMPLib.WindowsMediaPlayer(); public Meniu() { InitializeComponent(); Settings.Default.ActiveForm = this.Name; this.Cursor = SchimbareCursor.CreateCursor(new Bitmap("Data/Cursor/" + Settings.Default.Cursor + ".png"), 5, 5); this.BackgroundImage = new Bitmap("Data/Backgrounds/AcasaBackground.jpg"); if(Settings.Default.MuzicaFundal)fundal.URL = "Data/Music/Jungle_2.mp3"; fundal.settings.setMode("loop", true); }
Observăm mai multe variabile de tip Settings.Defauld.Variabilă. Acestea
sunt variabile globale persistente, adică își păstrează valorile chiar dacă programul
este repornit. În cadrul acestui program avem 8 setări globale: Cursor (ține minte
cursorul ales), MuzicaFundal, Voce, Efecte, ToolTip (dacă sunt active sau nu),
GoTo (variabilă necesară ca mini-meniurile să funcșioneze corect), ControlVocal
(dacă e activ sau nu) și ActiveForm (variabilă care memorează numele paginii pe
care ne aflăm într-un anumit moment; necesară pentru realizarea controlului
vocal). Toate aceste variabile sunt reținute într-un fișier XML numit app.config.
<startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <userSettings> <Marile_civilizatii_ale_lumii.Properties.Settings> <setting name="Cursor" serializeAs="String">
Marile civilizații ale lumii
25
Fundalul este un player din biblioteca windows. Acestuia i-a fost atribuit
un anumit URL care reprezintă calea sunetului, iar mai apoi setarea de loop a fost
pusă pe true, ceea ce înseană că sunetul va fi repetat la nesfârșit.
În pagina de cuprins observăm sidebar-ul care devine activ când punem
cursorul mouse-ului peste el. Acest efect a fost realizat astfel:
bool p = true; private void SideBar_MouseHover(object sender, EventArgs e) { if(p)SideBar.Left -= 95; p = false; }
<value>Cursor_2</value> </setting> <setting name="MuzicaFundal" serializeAs="String"> <value>True</value> </setting> <setting name="Voce" serializeAs="String"> <value>True</value> </setting> <setting name="Efecte" serializeAs="String"> <value>True</value> </setting> <setting name="Tooltip" serializeAs="String"> <value>True</value> </setting> <setting name="GoTo" serializeAs="String"> <value>0</value> </setting> <setting name="ControlVocal" serializeAs="String"> <value>False</value> </setting> <setting name="ActiveForm" serializeAs="String"> <value>Meniu</value> </setting> </Marile_civilizatii_ale_lumii.Properties.Settings> </userSettings>
Pop Adrian
26
private void SideBar_MouseLeave(object sender, EventArgs e) { if (Cursor.Position.X < SideBar.Location.X) { SideBar.Left = SideBar.Location.X + 95; p = true; } if (SideBar.Location.X > SystemInformation.VirtualScreen.Width) SideBar.Left = SystemInformation.VirtualScreen.Width-40; }
Event-ul pentru ramele din pagina de cuprins, specifice civilizațiilor arată
asemănător celui de mai jos, singurul lucru care diferă fiind pagina nou deschisă.
private void japonia_Click(object sender, EventArgs e) { CivilizatiaJaponeza ca = new CivilizatiaJaponeza(1); Settings.Default.ActiveForm = ca.Name; ca.Show(); this.Hide(); volumeButton1.Stop(); }
Functia Show() îi spune formei create anterior să fie afișată, iar funcția
Hide() este atașată formei curente, spunându-i să se ascundă.
În cadrul unei pagini din cadrul unei civilizații, funcția care schimbă
informațiile nu este complexă, însă ordinea operațiilor trebuie respectată
numaidecât pentru realizarea corectă a operațiunilor.
void SchimbareInfo() { //Aici modificam daca butoanele inainte sau inapoi se vad if(k>1) { butonInapoi1.Visible = true; } else if(k==1)
Marile civilizații ale lumii
27
{ butonInapoi1.Visible = false; } if(k==13) { butonInainte1.Visible = false; } else { butonInainte1.Visible = true; } Schimbam informatiile din forma this.BackgroundImage = new Bitmap("Data/Backgrounds/CAZ_" + k.ToString() + "_Background.jpg"); pictureBox1.BackgroundImage = new Bitmap("Data/Info/AZ_" + (2 * k - 1).ToString() + ".jpg"); pictureBox2.BackgroundImage = new Bitmap("Data/Info/AZ_" + (2 * k).ToString() + ".jpg"); pictureBox3.BackgroundImage = new Bitmap("Data/Title/TAZ_" + k.ToString() + ".png"); //Schimbam muzica if (Settings.Default.MuzicaFundal) { volumeButton1.AudioBackgroundPath = "Jungle_" + (k % 5).ToString(); volumeButton1.ClickIt(); volumeButton1.ClickIt(); } //Schimbam documentele audio audioReadButton1.ClickIt(new EventArgs()); audioReadButton2.ClickIt(new EventArgs()); audioReadButton1.AudioFilePath = "Data/AudioSpeak/Aztecii/AZ_" + (2 * k-1).ToString() + ".mp3"; audioReadButton2.AudioFilePath = "Data/AudioSpeak/Aztecii/AZ_" + (2 * k).ToString() + ".mp3"; }
Pop Adrian
28
Astfel, întâi verificăm dacă nu cumva suntem pe ultima sau prima pagină.
Mai apoi, modificăm informațiile de pe pagini în funcție de parametru public k.
Mai apoi, schimbăm și muzica de fundal în funcție de același parametru.
În cadrul unui mini-meniu, pentr a nu atribui fiecărui buton un event, am
atribuit pur și simplu o funcție.
foreach(var v in this.Controls.OfType<PictureBox>()) { v.Click += btnClick; v.BackgroundImage = new Bitmap("Data/Title/TAZ_" + v.Name.Replace("pictureBox", "") + ".png"); }
Această funcție numită btnClick este definită mai jos.
//Determinarea numarului formei si returnarea lui int k; private void btnClick(object sender, EventArgs e) { PictureBox btn = (PictureBox)sender; k = Convert.ToInt32(btn.Name.Replace("pictureBox", "")); Close(); } public int Rasp { get { return k; } } private void button1_Click(object sender, EventArgs e) { this.Close(); }
Funcția returnează astfel acel parametru k de care am vorbit mai înainte, în
funcție de butonul pe care am apăsat. Acest parametru este preluat de către pagina
pe care ne aflăm și în funcție de el, apelăm funcția SchimbareInfo() sau nu.
În cadrul testului de la aplicații, funcția care generează o întrebare random
este următoarea:
//Functia care returneaza un nume de intrebare int[] a = new int[21];
Marile civilizații ale lumii
29
int q = 0; Random r = new Random(); void GetNumber() { //Resetare intrebari if (q == 20) { q = 0; for (int i = 1; i <= 20; i++) { a[i] = 0; } } bool avem = true; int b = r.Next(1, 21); for (int i = 1; i <= q; i++) { avem = avem && (a[i] != b); } if (avem) { intrebareagenerata = b; a[++q] = b; } else GetNumber(); }
Această funcție generează un număr aleatoriu între 1 și 20, reprezentând o
posibilă întrebare. Mai apoi, se verifică dacă întrebarea aceea a mai fost pusă sau
nu. Dacă nu a mai fpst, se returnează valoarea. În caz cpntrar, se caută alta. Dacă
am folosint toate întrebările, resetăm vectorul care ține evidența.
Întrebările sunt citite din fișier și scrise în spațiul corespunzător conform
codului de mai jos.
//Citim intrebarea try { using (StreamReader s = new StreamReader("Data/Test/Intrebari/" + intrebareagenerata.ToString() + ".txt")) {
Pop Adrian
30
textintrebare = (nr_intrebare+1).ToString() + ". " + s.ReadLine(); } } catch { MessageBox.Show("Eroare la citirea fisierului. Fisier eronat/lipsa."); } //Scriem intrebarea pe fundal Bitmap bg = new Bitmap("Data/Test/BackIntrebare.png"); Graphics gp = Graphics.FromImage(bg); Font font = new Font("Buxton Sketch", 24); gp.DrawString(textintrebare, font, Brushes.Black, new RectangleF(70, 35, 800, 250)); //Si acum schimbam vechea poza cu cea noua intrebare.BackgroundImage = bg;
Astfel, verificăm dacă există fișierul din care putem citi, în caz contrar,
returăm o eroare. Mai apoi, folosindu-ne de proprietășile grafice din c#, desenăm
string-ul reprezentat de întrebare pe Bitmap-ul reprezentat de imaginea spațiului
rezervat pentru întrebare și variante. Verificarea răspunsurilor are loc prin
compararea valorilor citite din fișierul cu răsounsurile corecte, cu valorile
selectate de user. Mai apoi, se generează un raport. Acest lucru se face astfel:
private void GenereazaRaport() { for (int i = 0; i <= 8; i++) { label2.Text += it[i] + "\n"; label2.Text += "Ai ales: " + rd[i] + "; Raspuns corect: " + rc[i]; if(rd[i]==rc[i])label2.Text+=" => +1p"; else label2.Text+=" => 0p"; label2.Text+="\n\n"; } label2.Text += "Punctaj final: " + (punctaj+1).ToString(); panel1.Visible = true; }
Marile civilizații ale lumii
31
În jocul cu piramide și palmieri, în spatele acelei table avem de fapt o
matrice cu 2 valori: 0 dacă avem palmier, 1 dacă avem piramidă. Verificarea și
schimbarea imaginilor atunci când dăm click pe una se face astfel:
//Verificam vecinii si ii schimbam mat[rand, col] = Schimbare(mat[rand, col]); if (rand - 1 > 0) mat[rand - 1, col] = Schimbare(mat[rand - 1, col]); if (rand + 1 <= 5) mat[rand + 1, col] = Schimbare(mat[rand + 1, col]); if (col + 1 <= 5) mat[rand, col + 1] = Schimbare(mat[rand, col + 1]); if (col - 1 > 0) mat[rand, col - 1] = Schimbare(mat[rand, col - 1]);
La sfărșit, verificăm dacă totul este bine:
//Verificare daca totul e bine void Verificare() { int k = 0; for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { if (mat[i, j] == 0) k++; } } if (k == 25) { panel1.Visible = false; pictureBox1.Visible = true; butonInainte1.Visible = true; hoverButton2.Visible = true; if (Settings.Default.Voce) g.URL = "Data/ButtonSounds/PiramideGameFelicitari.mp3"; }
Pop Adrian
32
Verificarea decurge astfel: numărăm câte cifre de 1 sunt în matrice. Dacă
sunt exact 25 (câte căsuțe avem la primul nivel), afișăm mesajul de felicitări,
redăm un sunet specific și facem vizibil butonul pentru nivelul următor.
Verificarea rebusului se face asemănător, verificând literele din fiecare
căsuță.
bool complet = true; foreach (var pb in this.Controls.OfType<TextBox>()) { if (pb.Text == litere[Convert.ToInt32(pb.Name.Replace("textBox", ""))]) { pb.BackColor = Color.Green; } else { pb.BackColor = Color.Red; complet = false; } }
Jocul Băștinași vs Conchistadori are o complexitate mai mare. În cele 650
linii de cod exista numeroase funcții și event-uri care sunt apelate.
Tururile 360 și cartea animată sunt realizate în flash. Swf-ul astfel obținut
este încărcat într-un control de tip webbrowser.
Clasa care schimbă cursorul este și ea mai complexă și se folosește de
proprietăți și dll-uri din windows.
class SchimbareCursor { public struct IconInfo { public bool fIcon; public int xHotspot; public int yHotspot; public IntPtr hbmMask; public IntPtr hbmColor; } [DllImport("user32.dll")] public static extern IntPtr CreateIconIndirect(ref IconInfo icon);
Marile civilizații ale lumii
33
[DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo); public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot) { IconInfo tmp = new IconInfo(); GetIconInfo(bmp.GetHicon(), ref tmp); tmp.xHotspot = xHotSpot; tmp.yHotspot = yHotSpot; tmp.fIcon = false; return new Cursor(CreateIconIndirect(ref tmp)); } }
O parte din funcția de recunoaștere a controlului vocal este următoarea:
//Daca motorul de recunoastere este activ, atunci putem spune chestii if (speaking_is_on) { switch (e.Result.Text) { //Daca spunem First Page sau Menu, sa zburam direct spre meniu case "First Page": foreach (var c in this.Parent.Controls.OfType<ButonMeniu>()) { if (c.Name == "butonMeniu1") { controlvizibil = false; c.ClickIt(); } } break; case "Menu": goto case "First Page"; //Daca spunem Start, sa deschidem pagina Start case "Start":
Pop Adrian
34
Form parent = (this.Parent as Form); foreach(var ctl in parent.Controls.OfType<Button>()) { try { if (ctl.Name == "fp_startbutton") { ctl.PerformClick(); } } catch(NullReferenceException) { throw; } } break;
Astfel, în funcție de ce am spus, dacă recognizer-ul găsește în dicționarele
declarate de noi acele cuvinte sau expresii, va executa anumite comenzi. În caz
contrar, se va dezactiva și nu va face nimic.
La realizarea acestui soft am folosind mai multe programe, printre care:
- Microsoft Visual Studio 2014 – programul principal folosit pentru codarea
și realizarea întregului proiect, oferind interfața necesară pentru crearea de
astfel de aplicații
- Photoshop CS6 – program folosit la realizarea și modificarea obiectelor
grafice mai complexe din soft (animații, logo-uri, rame etc.)
- Paint.NET – program folosit la modificarea rapidă a caracteristicilor unei
imagini precum lungimea, lățimea, formatul, dimensiunea pe disc; am ales
să îl folosesc în detrimentul photoshop-ului tocmai pentru rapiditatea și
ușurința în lucru oferită
- Audacity – program folosit pentru editarea sunetelor de funal, a efectelor
de la aplicații, a textului vorbit
- Notepad++ - program folosit pentr editarea unor documente text
- Ivona Reader – programul principal care m-a ajutat să convertesc textul
scris în text vorbit
Cerințe sistem:
- Minim 1 GB RAM
- Placă video, minim 128
- 300 MB liberi
Marile civilizații ale lumii
35
- .NET Framework 4.5
- Ultima versiune de flashplayer
- Rezoluție minimă: 1280 x 800
- Conexiune la internet
- Microfon (opțional)
Pop Adrian
36
CONCLUZIE
Pot spune că realizarea acestui soft educațional a reprezentat o provocare.
Am învățat să folosesc tehnologii noi, am devenit un programator mai bun,
îmbogățindu-mi în același timp cultura generală. Astfel, sutele de ore de muncă și
studiu nu au fost în zadar. Văzând acum proiectul final, sunt mândru atât de el cât
și de mine, deoarece am reușit ceea ce mi-am propus: realizarea unui instrument
interactiv pentru învățat. Folosind tehnologii deținute de aproape orice calculator
și având cerințe de sistem minime și decente, softul poate fi astfel utilizat atât
acasă de către elevi pentru uz propriu, cât și la școală de către profesori pentru un
mod mai interactiv și interesant de a preda unele lecții.
Partea bună este că softul poate fi oricând dezvoltat, adăugând cu ușurință
noi capitole teoretice sau aplicații. O implementare utilă pe care aș putea să o fac
ar fi un sistem de update, care downloadează automat de pe un server fișierele noi
apărute în cadrul softului, apoi le implementează la versiunea noastră, astfel că
utilizatorul ar fi oricând la curent cu ultimele modificări. Un alt lucru ce ar putea
fi făcut ar fi un sistem de login, având astfel o bază de date cu toți utilizatorii.
Aceștia vor putea vizualiza ce pagini au vizitat până acum, unde au rămas cu
studiul sau își vor putea salva scorurile de la jocuri, realizând un clasament
general. Idei de noi aplicații ar putea fi un Mistery Game (un joc unde într-o
imagine sunt ascunse mai multe obicete greu de văzut, iar noi trebuie să dăm click
pe ele pentru a le recupera) sau un Maze Game (un labirint unde avem un caracter
pe care îl controlăm cu tastele cu săgeți și trebuie să îl ajutăm să găsească ieșirea).
Sfârșit
Marile civilizații ale lumii
37
BIBLIOGRAFIE
1. Drimba, Ovidiu, Istoria culturii si civilizatiei - volumul I, Editura
Saeculmo, Bucuresti, 2003
2. Drimba, Ovidiu, Istoria culturii si civilizatiei - volumul II, Editura
Saeculmo, Bucuresti, 2003
3. ***, Enciclopedia Lumii Antice, Editura Aquila, Oradea, 2006
4. Abbat, Mireille Simoni, Aztecii, Editura Meridiane, Bucuresti, 1979
5. Jacques Gernet, China antica, Colecţia Civilizaţii Dispărute, Bucuresti,
2000
6. Robert Cohen, Egiptul faraonilor, Colecţia Civilizaţii Dispărute,
Bucuresti, 2000
7. Diego Rival, Civilizatia Incasa si Mayasa, Colecţia Civilizaţii Dispărute,
Bucuresti, 2000
8. Kirsten Dalley, Civilizatii disparute si secrete ale trecutului, Colectia
Trebuie sa stii, 2014
WEBOGRAFIE
1. http://www.aztec-history.com/aztec-empire.html
2. http://www.allabouthistory.org/aztec-civilization.htm
3. http://www.history.com/topics/aztecs
4. http://en.wikipedia.org/wiki/Aztec_Empire
5. http://ro.wikipedia.org/wiki/Imperiul_Aztec
6. http://www.ancient.eu/Aztec_Civilization/
7. http://www.history.com/topics/maya
8. http://www.indians.org/welker/maya.htm
9. http://www.historymuseum.ca/cmc/exhibitions/civil/maya/01eng.shtml
10. https://www.brainpop.com/worldhistory/mayacivilization/
11. http://www.ancient.eu/Maya_Civilization/
12. http://www.houstonculture.org/mexico/aztecs.html
13. http://en.wikipedia.org/wiki/Inca_Empire
14. http://www.crystalinks.com/inca_civilization.html
15. http://www.ushistory.org/civ/11c.asp
16. http://ngm.nationalgeographic.com/2011/04/inca-empire/pringle-text
17. http://www.ancient.eu/Inca_Civilization/
18. http://www.britannica.com/EBchecked/topic/284517/Inca
19. http://en.wikipedia.org/wiki/Ancient_Egypt
20. http://www.historymuseum.ca/cmc/civil/egypt/egcivile.shtml
21. http://www.historymuseum.ca/cmc/civil/egypt/egypte.shtml
22. http://www.timemaps.com/civilization/Ancient-Egypt
23. http://civilization.wikia.com/wiki/Egyptian_(Civ5)
24. http://www.history.com/topics/ancient-history/ancient-egypt
Pop Adrian
38
25. http://www.ancient.eu/egypt/
26. http://www.ancientchina.co.uk/menu.html
27. http://www.timemaps.com/civilization/Ancient-China
28. http://www.china.org.cn/e-gudai/index-1.htm
29. http://www.ancient.eu/china/
30. http://en.wikipedia.org/wiki/History_of_China
31. http://en.wikipedia.org/wiki/Portal:Ancient_Japan
32. http://en.wikipedia.org/wiki/History_of_Japan
33. http://www.crystalinks.com/japan1.html
34. http://www.facts-about-japan.com/ancient-japan.html