+ All Categories
Home > Documents > Afis - Marile civilizatii ale lumii

Afis - Marile civilizatii ale lumii

Date post: 12-Apr-2017
Category:
Upload: pop-adrian
View: 200 times
Download: 7 times
Share this document with a friend
39
Transcript
Page 1: Afis - Marile civilizatii ale lumii
Page 2: Afis - Marile civilizatii ale lumii

Marile civilizații ale lumii

1

Page 3: Afis - Marile civilizatii ale lumii

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

Page 4: Afis - Marile civilizatii ale lumii

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.

Page 5: Afis - Marile civilizatii ale lumii

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.

Page 6: Afis - Marile civilizatii ale lumii

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

Page 7: Afis - Marile civilizatii ale lumii

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.

Page 8: Afis - Marile civilizatii ale lumii

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

Page 9: Afis - Marile civilizatii ale lumii

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.

Page 10: Afis - Marile civilizatii ale lumii

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

Page 11: Afis - Marile civilizatii ale lumii

Pop Adrian

10

Civilizația Maiașă – Credințe

Civilizația Incașă – Incașii

Page 12: Afis - Marile civilizatii ale lumii

Marile civilizații ale lumii

11

Civilizația Egiptului Antic – Introducere

Civilizația Japoniei Antice – Alimentația

Page 13: Afis - Marile civilizatii ale lumii

Pop Adrian

12

Civilizația Chinei Antice – Locuințele

Civilizația Egiptului Antic – Arhitectura

Page 14: Afis - Marile civilizatii ale lumii

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ă.

Page 15: Afis - Marile civilizatii ale lumii

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

Page 16: Afis - Marile civilizatii ale lumii

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ță

Page 17: Afis - Marile civilizatii ale lumii

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

Page 18: Afis - Marile civilizatii ale lumii

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

Page 19: Afis - Marile civilizatii ale lumii

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.

Page 20: Afis - Marile civilizatii ale lumii

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)

Page 21: Afis - Marile civilizatii ale lumii

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.

Page 22: Afis - Marile civilizatii ale lumii

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,

Page 23: Afis - Marile civilizatii ale lumii

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++.

Page 24: Afis - Marile civilizatii ale lumii

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.

Page 25: Afis - Marile civilizatii ale lumii

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">

Page 26: Afis - Marile civilizatii ale lumii

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>

Page 27: Afis - Marile civilizatii ale lumii

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)

Page 28: Afis - Marile civilizatii ale lumii

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"; }

Page 29: Afis - Marile civilizatii ale lumii

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];

Page 30: Afis - Marile civilizatii ale lumii

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")) {

Page 31: Afis - Marile civilizatii ale lumii

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; }

Page 32: Afis - Marile civilizatii ale lumii

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"; }

Page 33: Afis - Marile civilizatii ale lumii

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);

Page 34: Afis - Marile civilizatii ale lumii

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":

Page 35: Afis - Marile civilizatii ale lumii

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

Page 36: Afis - Marile civilizatii ale lumii

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)

Page 37: Afis - Marile civilizatii ale lumii

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

Page 38: Afis - Marile civilizatii ale lumii

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

Page 39: Afis - Marile civilizatii ale lumii

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


Recommended