Sunteți pe pagina 1din 33

Liceul Teoretic Alexandru Papiu Ilarian

Realizator: Marton Florin


Mihaela Capangi

Profesor:

Dej, 2012

Cuprins

1. E-LEARNING I SOFTUL EDUCAIONAL

2. SOFTUL EDUCATIONAL HEROES OF MATH

1. CONCEPT

2. REALIZAREA PROIECTULUI

3. BAZA DE DATE

4. FORMULARE

4. 1. FORMULARUL DE LOGARE

4. 2. FORMULARUL DE PREZENTARE I STABILIRE A OPIUNILOR

4. 3. FORMULARUL ADMINISTRARE A UTILIZATORILOR UTILIZATORI

12

4. 4. FORMULARUL ADMINISTRARE A PROBLEMELOR PROBLEME

17

4. 6. FORMULARUL ADMINISTRARE A HRILOR HARI

19

4.6. FORMULARUL DE GENERARE A JOCULUI

25

4.7. FORMULARE DE GENERARE A MESAJELOR

30

3. CONCLUZII

31

BIBLIOGRAFIE

32

1. E-Learning i softul educaional

n utima perioad preocuprile pentru e-Learning au devenit tot mai importante pentru
nvmntul romnesc, pentru societate n ansamblu. Este evident c suportul oferit de
calculator proceselor de nvmnt ncepe s fie neles de toate prile implicate, iar
eforturile colilor de a se dota cu tehnic de calcul i al societilor private de a elabora softuri specifice nu vor fi fr rezultat.
E-Learning nglobeaz metode i tehnici tradiionale sau moderne i utiliznd
tehnologii IT conduce subiectul care l utilizeaz la obinerea unei experiene n nelegerea i
stpnirea de cunotine i ndemnri ntr-un domeniu al cunoaterii.
Software educaional reprezint orice produs software care poate fi utilizat pe orice
calculator i care reprezint un subiect, o tem, un experiment, o lecie etc, fiind o alternativ
fa de metodele educaionale tradiionale.
Cu toate acestea, dezideratul final fiind competena, nici o tehnologie, nici o teorie,
nici o abordare nu va elimina sau neglija relaia profesor-elev/student.
Pentru a adapta procesul de nvare la utilizator, sistemele de e-Learning trebuie s
suplineasc o parte din metodele pedagogice aplicate de un formator clasic deoarece nu pot fi
modelate i introduse ntr-un sistem software. Astfel, ntr-un sistem de e-learning nu pot fi
cuprinse istorioare i anecdote, care sunt utilizate de formator n clas pentru a menine
interesul acesteia sau pentru a ntri anumite cunotine de nvat. Dar, sistemele de elearning au avantajele date de ergonomie, prezentarea concis a datelor i aspectul estetic
susinut de aplicaiile multimedia.

2. Softul Educational Heroes of Math

1. Concept
Softul Educational Heroes of Math este un proiect destinat utilizrii la clasele mici (I,
II), ca auxiliar didactic n predarea i evaluarea matematicii.
Softul este organizat sub forma unui joc, dat fiind categoria de vrst creia i se
adreseaz. Astfel elevii vor nva matematica avnd impresia c se joac.
Titlul softului parafrazeaz titlul unui cunoscut joc Heroes of Might and Magic, joc
care a stat la baza ntregii idei, de la grafic pn la modul de joc.
Elevul pornete de la un castel, parcurge un labirint n care diferite personaje i vor
pune ntrebri i trebuie s ajung la cel de al doilea castel pentru a finaliza jocul. Personajele
sunt de dou categorii: dragonul care nu dispare de pe hart dect n cazul n care elevul a
rspuns corect la problem, i personaje (cavaleri, elfi, gremlini etc) care dispar indiferent de
rspunsul dat de elev.
Eroul este reprezentat pe hart prin imaginea scutului, care are aceleai caracteristici
cu steagul pe care i-l alege.
Proiectul este structurat n mai multe ferestre care se ncarc independent, mai
potrivite pentru interfaa unui joc dect modelul MDI.
Proiectul utilizeaz o baz de date MsAccess care retine informaii despre utilizatori,
hrile sistemului i problemele propuse pentru rezolvare.
Conectarea la joc se face pe baza unui nume de utilizator i a unei parole.
Fiecare utilizator are asociat un rol (elev sau profesor) n funcie de care se stabilesc
drepturile de acces. Doar profesorul are drept de a modifica conturile elevilor, problemele sau
hrile.

2. Realizarea proiectului
Pentru realizarea proiectului au fost utilizate:
- C# 2008, pentru dezvoltare
- Microsoft Access, pentru baza de date
- Photoshop, pentru prelucrarea imaginilor.
3. Baza de date
Pentru reinerea datelor se utilizeaz o baz de date Microsoft Access
mathheroes.mdb. Aceasta conine urmtoarele tabele:
a) Useri reine datele utilizatorilor i drepturile de acces.
Nume cmp
idU
nume
parola
clasa
nick
img
steag
rol
utilizator

Tip de date
Autonumber
Text
Text
Text
Text
Text
Text
Text
Text

Descriere
id-ul utilizatorului; se folosete pentru identificarea
unic a acestuia
numele complet al utilizatorului
parola utilizatorului (criptat)
clasa
numele de juctor
imaginea de profil
steagul care l reprezint
drepturile de acces: elev sau profesor
numele de utilizator

b) Probleme
Nume cmp
idP
idH
enunt
rspuns
dificultate
corect
greit

Tip de date
Autonumber
Number
Text
Text
Number
Number
Number

Descriere
id-ul problemei; se folosete pentru identificarea unic
a acesteia
realizeaz legtura cu harta asociat
enunul problemei
rspunsul corect
gradul de dificultate
numrul de plusuri obinut pentru rspunsul corect
numrul de minusuri acordate pentru rspunsul greit

c) Clasament
Nume cmp
idU
idH
puncte

Tip de date
Number
Number
Number

Descriere
identificatorul utilizatorului
identificatorul hrii
punctele obinute din parcurgerea hrii
6

d) Hri
Nume cmp
idH

Tip de date
Autonumber

titlu
fiier
descriere
posibil

Text
Text
Text
Logic

valid

Logic

Descriere
id-ul hrii; se folosete pentru identificarea unic a
acesteia
titlul hrii
identificatorul fiierelor auxiliare hrii
descrierea hrii
specific ffaptul c harta poate fi modificat (true) sau
nu (false)
specific ffaptul c harta este valid (true) sau nu
(false)

4. Formulare
Proiectul este structurat n mai multe ferestre care se ncarc independent, mai
potrivite pentru interfaa unui joc dect modelul MDI. Astfel, am construit un formular de
logare, un formular de definire a opiunilor de joc, trei formulare de administrare (numai
pentru profesor) utilizatori, probleme i hri i un formalar de evaluare.
4. 1. Formularul de logare
Pentru a limita drepturile elevilor i, n acelai timp pentru a acorda o mai mare
libertate profesorului n alegerea coninuturilor evaluate se utilizeaz un formular de logare
frmLogin.

Fig. 1. Formularul de logare

Formularul conine dou csue de text, n care se introduce numele de utilizator i


parola, i un buton prin intemediul cruia se face validarea datelor.
Odat introduse informaiile, este cutat n baza de date combinaia nume utilizator +
parol. n cazul n care aceasta este gsit, se ncarc fereastra de opiuni i se transmite id-ul
utilizatorului i rolul asociat acestuia, iar n caz contrar se genereaz un mesaj prin care
utilizatorul este informat c datele nu sunt valide.
Secvena de cod prin care realizeaz logarea utilizatorului este redat mai jos:
OleDbConnection con = new
OleDbConnection("Provider=Microsoft.Jet.OleDB.4.0; Data Source =
mathheroes.mdb");
string qs = "select * from useri where utilizator='" +
txtUser.Text + "' and parola='" + criptare(txtParola.Text) + "'";
OleDbCommand com = new OleDbCommand(qs, con);
con.Open();
OleDbDataReader r = com.ExecuteReader();
if (r.Read())
{
fo = new frmOptiuni();
fo.idu = r["idU"].ToString();
fo.rol = r["rol"].ToString();
r.Close();
con.Close();
this.Hide();
fo.ShowDialog();
}
else
{

if (MessageBox.Show("User sau parol incorecte!", "Logare


nereusita", MessageBoxButtons.OK, MessageBoxIcon.Warning) ==
DialogResult.OK)
{
r.Close();
con.Close();
}
}

n baza de date parolele se pstreaz n form criptat. Funciile prin care se realizeaz
criptarea i decriptarea sunt redate mai jos:
public string criptare(string s) //admin="ccohp`flkm"
{
int i;
char[] r = s.ToCharArray();
char[] x = s.ToCharArray();
for (i = 0; i < s.Length; i++)
{
if (i % 2 != 0)
{
r[i] = (char)((int)r[i] - 1);
x[i] = (char)((int)x[i] + 2);
}
else
{
r[i] = (char)((int)r[i] + 2);
x[i] = (char)((int)x[i] - 1);
}
}
return new string(r) + new string(x);
}
public string decriptare(string s)
{
s = s.Substring(0, s.Length / 2);
char[] r = s.ToCharArray();
int i;
for (i = 0; i < s.Length; i++)
{
if (i % 2 != 0)
r[i] = (char)((int)r[i] + 1);
else
r[i] = (char)((int)r[i] - 2);
}
return new string(r);
}

4. 2. Formularul de prezentare i stabilire a opiunilor


Pentru a face mai atractiv softul realizat, am inclus mai multe opiuni cu caracter
grafic: instruciunile de joc, personalizarea contului, alegerea unui hri dintre cele
disponibile, afiarea clasamentului opiuni vizibile pentru ambele drepturi de acces, i

opiuni de administrare vizibile numai pentru profesor. Din acelai motiv, am creat
posibilitatea utilizatorului de a schimba fundalul1.
Acest lucru a fost realizat cu ajutorul mai multor obiecte de tip Panel suprapuse,
fiecare dintre acestea avnd ca i corespondent cte un buton care face comutarea ntre
panouri. Mai jos sunt detaliate opiunile oferite:
a) Instruciuni de joc
La ncrcarea ferestrei de opiuni, elevul este ntmpinat de instruciunile de joc. Este
prezentat scopul jocului, este descris modul de funcionare a dragonului, se face trimiterea
ctre opiunile de personalizare a contului, sunt prezentate rangurile pe care le poate obine i
o scurt descriere a lor.
b) Contul meu
Prin intermediul acestei categorii de opiuni, elevul poate s i schimbe personajul i
steagul care o s l reperezinte. Fiecare steag are ascociat un scut cu aceleai culori i acelai
model, care marcheaz poziia eroului pe hart.

Fig. 2. Formularul de opiuni (elev): Contul meu Skin 1

Pentru a ilustra acest lucru, unele capturi de capturi de ecran vor avea avea fundal maro, iar altele albastru.

10

Fig. 3. Formularul de opiuni (profesor): Contul meu Skin 2

Secvena de cod prin care se face salvarea datelor utilizatorului este redat mai jos:
if (txtNume.Text.Trim() == "" || txtP1.Text.Trim()=="")
{
if (MessageBox.Show("Trebuie sa fie completate toate
campurile!", "Atenie", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
== DialogResult.OK) return;
}
else
if (MessageBox.Show("Eti sigur c vrei s modifici numele
de joc?", "Nume nou de joc", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.No) return;
OleDbConnection con = new
OleDbConnection("provider=Microsoft.Jet.OleDB.4.0; Data Source =
mathheroes.mdb");
string qs = "Update Useri Set img='" + idp + "',nick='" +
txtNume.Text + "',steag='" + ids +"',parola='" + txtP1.Text + "' where
idu=" + idu;
OleDbCommand com = new OleDbCommand(qs, con);
con.Open();
com.ExecuteNonQuery();
con.Close();

c) Joc nou
La alegerea acestei opiuni se ncarc un panou care prezint imagini cu harile
validate din sistem i o descriere a fiecrei hri. Este selectat automat prima hart valid.
Fiecare hart are o scurt poveste datorit nivelului de vrst cruia i se adreseaz

11

Comutarea ntre hri se realizeaz cu ajutorul sgeilor de sub aceasta. Pentru joc sunt
disponibile numai hrile validate (despre validarea hrilor se poate citi la formularul Hri).
La apsarea butonului Joac se ncarc harta aleas i ncepe jocul.
d) Clasament
Aceast opiune face un clasament descresctor al elevilor n funcie de punctajele
obinute. Se afieaz informaii precum locul n clasament, numele de juctor, numele real i
clasa elevului, rangul n clasament. La ncrcarea panoului se ncarc primul loc din
clasament. Prin derularea butoanelor Stnga i Dreapta se face trecerea de la un juctor la
altul.

Fig. 4. Formularul de opiuni: Clasament

Secvena de cod prin care se realizeaz clasamentul este redat mai jos:
OleDbConnection con = new
OleDbConnection( "Provider=Microsoft.Jet.OleDB.4.0; Data Source =
mathheroes.mdb");
string qs = "select nume,nick,sum(puncte) as cate,clasa
from
useri,clasament where useri.idu=clasament.idu and rol='elev' group by
nume,nick,useri.idu,clasa order by sum(puncte) desc";
OleDbCommand com = new OleDbCommand(qs, con);
con.Open();
OleDbDataReader r = com.ExecuteReader();

12

while (r.Read())
{
lc++;
nume[lc] = r["nume"].ToString();
nick[lc] = r["nick"].ToString();
clasa[lc] = r["clasa"].ToString();
puncte[lc] = Convert.ToInt16(r["cate"].ToString());
}
r.Close();
con.Close();
if (lc > 0)
{
idc = 1;
loc_clasament();
}

Pentru stabilirea locului n clasament se selecteaz elevii n ordine descresctoare a


punctajului total obinut de fiecare. Primul elev selectat se afl pe primul loc. La
deplasarea ntre elevi, se stabilete locul elevului afiat, astfel:
-

primul eslev afiat se afl pe primul loc;

la deplasarea spre dreapta, locul elevului care urmeaz s fie afiat este egal cu
locul elevului curent sau se incrementeaz dac punctajul elevului curent este
mai mare dect al celui care urmeaz s fie afiat;

la deplasarea spre stnga, locul elevului care urmeaz s fie afiat este egal cu
locul elevului curent sau se decrementeaz dac punctajul elevului curent este
mai mic dect al celui care urmeaz s fie afiat.

e) Utilizatori
Aceast opiune este vizibil numai pentru profesor i are ca efect afiarea
formularului de administrare a utilizatorilor, prezentat la punctul 4.3.
f) Probleme
Aceast opiune este vizibil numai pentru profesor i are ca efect afiarea
formularului de administrare a problemelor din sistem, prezentat la punctul 4.4.
g) Hri
Aceast opiune este vizibil numai pentru profesor i are ca efect afiarea
formularului de administrare a hrilor, prezentat la punctul 4.5.
h) Ieire
Are rol de a nchide toate ferestrele.
4. 3. Formularul administrare a utilizatorilor Utilizatori

13

Este disponibil numai pentru profesor, prin intermediul acestuia profesorul poate
aduga, terge,modifica utilizatori, poate exporta i importa lista utilizatorilor din sistem.
Formularul este structurat la fel ca formularul de instruciuni panouri suprapuse i
butoane de comutare ntre panouri. Conine panouri destinate urmtoarelor operaii:
a) Adugare cont
Permite adugarea datelor unui elev n sistem. Fiecare elev are un nume de utilizator
unic, fapt care se verific la adugarea datelor. n cazul n care datele sunt inconsistente (nume
de utilizator duplicat, date incomplete) se genereaz un mesaj de eroare, iar n caz contrar se
genereaz un mesaj care confirm adugarea datelor.
b) Modificare cont
Permite modificarea datelor unui utilizator existent n sistem. Pentru a nu se genera o
inconsisten a datelor din sistem se face validarea acestora nainte de modificare, iar cmpul
Utilizator care determin n mod unic fiecare utilizator din sistem nu poate fi editat.
Pentru a modifica datele, se alege dintr-o list numele utilizatorului, fapt care
genereaz afiarea automat a datelor acestuia. Acionarea butonului Salveaz are ca efect
efectuarea modificrilor n baza de date.

Fig. 5. Formularul Utilizatori: Modificarea datelor unui utilizator

14

c) tergere cont
Permite tergerea contului unui utilizator existent n sistem. Pentru a modifica datele,
se alege dintr-o list numele utilizatorului, fapt care genereaz afiarea automat a datelor
acestuia. Acionarea butonului tergere are ca efect tergerea datelor din baza de date.
Deoarece operaia este ireversibil, utilizatorul este atentionat asupra acestui lucru, astfel c
operaia poate fi anulat.
d) Export conturi
Deoarece aplicaia se instaleaz pe fiecare staie i dispune de propria baz de date,
sistemul vine n ajutorul profesorului cu opiunile Export conturi i Import conturi. Astfel,
profesorul poate crea pe o singur staie toate conturile necesare i prin intermediul acestei
opiuni poate exporta datele elevilor, iar mai apoi acestea pot fi importate pe celelalte staii.

Fig. 6. Formularul Utilizatori: Export conturi

Pentru a realiza exportul, se afieaz un panou n care utilizatorul poate alege clasa
pentru care se face exportul, poate alege s vad doar conturile profesorilor sau toate
conturile. Pentru a selecta mai multe conturi se pot utiliza tastele Ctrl sau Shift. Odat

15

efectuat selecia, la acionarea butonului Export se verific dac s-a selectat cel puin un
cont (n caz contrar se genereaz un mesaj de avertizare) i n caz afirmativ se deschide o
csu de dialog pentru stabilirea locului unde urmeaz s se salveze fiierul de export.
Secvena de cod prin care se face exportul datelor este redat mai jos:
string cale = Path.GetDirectoryName(Application.ExecutablePath);
if (lstElevi.SelectedIndices.Count == 0)
{
err("Nu ai selectat niciun utilizator.");
return;
}
if (sfd.ShowDialog() == DialogResult.OK)
{
StreamWriter w = File.CreateText(sfd.FileName);
string listaH = "(-1";
foreach (int i in lstElevi.SelectedIndices)
{
listaH += "," + lstCodU.Items[i].ToString();
}
listaH += ")";
OleDbConnection con = new
OleDbConnection("Provider=Microsoft.Jet.OleDB.4.0; Data Source =" + cale +
"\\mathheroes.mdb");
string qs = "select * from useri where idu in " + listaH;
OleDbCommand com = new OleDbCommand(qs, con);
con.Open();
OleDbDataReader r = com.ExecuteReader();
while (r.Read()) //citete din BD si creaz fiierul text
{
w.WriteLine(r["nume"].ToString());
w.WriteLine(r["parola"].ToString());
w.WriteLine(r["nick"].ToString());
w.WriteLine(r["img"].ToString());
w.WriteLine(r["steag"].ToString());
w.WriteLine(r["rol"].ToString());
w.WriteLine(r["utilizator"].ToString());
w.WriteLine(r["clasa"].ToString());
}
r.Close();
con.Close();
w.Close();
}

e) Import conturi
La deschiderea panoului de import, se deschide o csu de dialog prin care utilizatorul
alege fiierul exportat. Odat fiierul ales, se completeaz o list cu numele i clasa
utilizatorilor exportai. Pentru a realiza importul efectiv, se selecteaz din list elevii care
urmeaz a fi importai i se acioneaz butonul Import. n cazul n care nu a fost selectat
niciun utilizator, se va genera un mesaj de avertizare.

16

Fig. 7. Formularul Utilizatori: Import conturi eroare la import

Secvena de cod prin care se face importul datelor este redat mai jos:
string cale = Path.GetDirectoryName(Application.ExecutablePath);
if (lstEleviImp.SelectedIndices.Count == 0)
{
err("Nu ai selectat niciun utilizator.");
return;
}
StreamReader r = File.OpenText(ofd.FileName);
int i = -1;
string nume = r.ReadLine(), parola, nick, img, steag, rol,
utilizator, clasa;
while (nume != null)
{
parola = r.ReadLine();
nick = r.ReadLine();
img = r.ReadLine();
steag = r.ReadLine();
rol = r.ReadLine();
utilizator = r.ReadLine();
clasa = r.ReadLine();
i++;
if (lstEleviImp.SelectedIndices.Contains(i))
{
OleDbConnection con = new OleDbConnection ("Provider=
Microsoft.Jet.OleDB.4.0; Data Source =" + cale + "\\mathheroes.mdb");
OleDbCommand com = new OleDbCommand("", con);
con.Open();
com.CommandText = "insert into useri(nume, parola,
nick,img,steag,rol,utilizator,clasa) values (@nume, @parola, @nick, @img,
@steag, @rol, @utilizator, @clasa)";

17

com.Parameters.AddWithValue("nume", nume);
com.Parameters.AddWithValue("parola", parola);
com.Parameters.AddWithValue("nick", nick);
com.Parameters.AddWithValue("img", img);
com.Parameters.AddWithValue("steag", steag);
com.Parameters.AddWithValue("rol", rol);
com.Parameters.AddWithValue("utilizator", utilizator);
com.Parameters.AddWithValue("clasa", rol);
int cate = 0;
cate = com.ExecuteNonQuery();
con.Close();
if (cate > 0)
{
info("Import cu succes!");
}
}
nume = r.ReadLine();
}
r.Close();

Butonul Ieire are rol de a nchide fereastra curent i de a reveni n fereastra de


opiuni.
4. 4. Formularul administrare a problemelor Probleme
Este disponibil numai pentru profesor, prin intermediul acestuia profesorul poate
aduga, terge,modifica utilizatori, poate exporta i importa lista problemelor din sistem din
sistem. Pentru a aceesa un set de probleme se alege mai nti harta din care face parte setul.
Pentru operaiile de adugare, modificare i tergere trecerea de la o hart la alta se face cu
ajutorul sgeilor (mod de derulare ales pe consideraii estetice), iar pentru export i import
hrile se aleg dintr-o list derulant (dat fiind volumul mai mare de date care trebuie afiat).
Panourile de care dispune formularul sunt:
a) Adugare problem
Prin aceast opiune se pot aduga probleme n sistem. Problemele nu pot fi adugate
independent, ci sunt dependente de o hart. Astfel, pentru introducerea problemelor n sistem,
se alege harta creia i se ataeaz problema, se completeaz enunul problemei i rspunsul
corect la aceasta, numrul de puncte pe care le poate ctiga elevul n urma rspunsului
corect, precum i numrul de puncte pe care le pierde n cazul rspunsului greit. Problemele
sunt mprite n dou clase de dificultate, fapt care se stabilete de asemenea la adugare.
b) Modificare problem
Prin aceast opiune se poate modifica enunul problemelor din sistem, rspunsul
corect, punctajul acordat sau gradul de dificultate asociat. Pentru acest lucru, utilizatorul alege

18

harta (prin derulare stnga-dreapta), fapt care duce la ncrcarea ntr-o list a problemelor
asociate hrii. La alegerea unei probleme din list, se ncarc toate informaiile
corespunztoare acesteia spre a fi modificate.

Fig. 8. Formularul Probleme: Modificare problem

c) tergere problem
Prin aceast opiune se pot terge problemele din sistem. Pentru acest lucru,
utilizatorul alege harta (prin derulare stnga-dreapta), fapt care duce la ncrcarea ntr-o list a
problemelor asociate hrii. La alegerea unei probleme din list, se afieaz anunul acesteia.
tergerea efectiv are loc la apsarea butonului terge.
d) Export probleme
Deoarece aplicaia se instaleaz pe fiecare staie i dispune de propria baz de date,
sistemul vine n ajutorul profesorului cu opiunile Export probleme i Import probleme.
Astfel, profesorul poate aduga pe o singur staie toate problemele necesare i prin
intermediul acestei opiuni le poate exporta, iar mai apoi acestea pot fi importate pe celelalte
staii.
Pentru a realiza exportul, se afieaz un panou n care utilizatorul poate alege harta
care conine problemele pentru care se face exportul. Pentru a selecta mai multe probleme se
pot utiliza tastele Ctrl sau Shift. Odat efectuat selecia, la acionarea butonului Export se

19

verific dac s-a selectat cel puin o problem (n caz contrar se genereaz un mesaj de
avertizare) i n caz afirmativ se deschide o csu de dialog pentru stabilirea locului unde
urmeaz s se salveze fiierul de export.
e) Import probleme
La deschiderea panoului de import, se deschide o csu de dialog prin care utilizatorul
alege fiierul exportat. Odat fiierul ales, se completeaz o list cu enunul problemelor din
export. Panoul de import conine lista hrilor din sistem. Pentru a realiza importul efectiv, se
alege lista pentru care se face importul, se selecteaz din lista de import problemele i se
acioneaz butonul Import. n cazul n care nu a fost selectat nicio problem, se va genera un
mesaj de avertizare.
Butonul Ieire are rol de a nchide fereastra curent i de a reveni n fereastra de
opiuni.
4. 6. Formularul administrare a hrilor Hari
Este disponibil numai pentru profesor, prin intermediul acestuia profesorul poate crea
i modifica hri, poate verifica validitatea hrilor din sistem, poate exporta i importa hri.
Operaiile posibile sunt redate mai jos:
a) Creare hart
Prin intermediul acestei opiuni se pot aduga hri noi la sistem. Utilizatorul are la
dispoziie trei tipuri de teren pe care s construiasc harta iarb, deert, zpad, nou tipuri
de obstacole, nou tipuri de trupe i cte dou tipuri de castel pentru fiecare tip de teren.
Pentru aeza un obiect pe hart, acesta se selecteaz din list i se alege un loc gol pe hart.
Pentru a terge un obiect aezat deja, se efectueaz un click asupra acestuia. Pentru a salva
harta creat se acioneaz butonul Salveaz. Butonul Ieire are ca efect revenirea la fereastra
de gestionare a hrilor.
Pentru fiecare hart se rein:
-

un fiier text cu descrierea hrii, care conine: poziiile celor dou castele,
poziia iniial i cea final a juctorului, tipul de teren i codificarea efectiv a
hrii (spaiu gol, obstacole sau trupe);

un fiier imagine (.png), care conine imaginea compactat a hrii;

un fiier imagine (.png), care conine prezentarea hrii.

20

Fig. 9. Formularul Creare hart

b) Modificare hart
Prin intermediul acestei opiuni se pot modifica hrile create de utilizator.
Modificrile efectuate asupra unei hri sunt de dou feluri: modificri asupra datelor reinute
n legtur cu harta titlu, descriere, timp maxim de lucru, i modificri de design.
Pentru hrile incluse n sistem designul nu poate fi modificate, deoarece au fost
generate de alt editor dect cel inclus n sistem. Utilizatorul are la dispoziie aceleai obiecte
pentru design ca i n fereastra de creare a hrii. Butonul Modific design este vizibil numai
pentru hrile care se pot modifica.
c) Validare hri
Pentru ca o hart s poat fi jucat trebuie mai nti s fie validat. Pentru ca o hart s
fie valid trebuie s ndeplineasc urmtoarele condiii:
-

trebuie s conin dou castele;

trebuie s aib ataate un numr de probleme cel puin egal cu numrul de


trupe;

trebuie s aib cel pun un drum ntre cele dou castele.

21

Fig. 10. Formularul Hri Validare hart

Secvena de cutare a drumului este redat mai jos:


private Boolean cauta_drum(int xi, int yi, int xf, int yf)
{
int nrl = 19, nrc = 22;
Point p, i;
Queue<Point> q = new Queue<Point>();
q.Enqueue(new Point(xi, yi));
Boolean gasit = false;
while (q.Count > 0 && !gasit)
{
p = q.Dequeue();
//dreapta
i = p;
while (h[i.X + 1, i.Y].Substring(0, 1) != "o" && i.X + 1 < nrl)
{
i.X++;
h[i.X, i.Y] = "o0";
if (i.X == xf && i.Y == yf)
{
gasit = true; break;
}
if (!q.Contains(i))
q.Enqueue(i);
}
//stanga
i = p;
while (h[i.X - 1, i.Y].Substring(0, 1) != "o" && i.X - 1 > 0)
{
i.X--;
h[i.X, i.Y] = "o0";

22

if (i.X == xf && i.Y == yf)


{
gasit = true; break;
}
if (!q.Contains(i))
q.Enqueue(i);

}
//jos
i = p;
while (h[i.X, i.Y + 1].Substring(0, 1) != "o" && i.Y + 1 < nrc)
{
i.Y++; h[i.X, i.Y] = "o0";
if (i.X == xf && i.Y == yf)
{
gasit = true; break;
}
if (!q.Contains(i))
q.Enqueue(i);
}
//sus
i = p;
while (h[i.X, i.Y - 1].Substring(0, 1) != "o" && i.Y - 1 > 0)
{
i.Y--; h[i.X, i.Y] = "o0";
if (i.X == xf && i.Y == yf)
{
gasit = true; break;
}
if (!q.Contains(i))
q.Enqueue(i);
}
}
}

return gasit;

Pentru cutarea drumului am utilizat o coad (Queue) cu elemente de tip Point. Harta
este codificat prin elemente de tip string, astfel:
-

oX reprezint un obstacol de tip X

tX reprezint trupe de tipul X

0 reprezint spaiu liber

Se consider c se poate trece printr-un punct dac acesta nu este obstacol.


Cutarea ncepe din punctul (xi, yi) i se consider ncheiat cu succes dac s-a atins
punctul (xf, yf). Se adaug punctul de plecare n coad. Se adaug toate punctele la care se
poate ajunge din acesta prin deplasri pe vertical i orizontal i se marcheaz ca fiind
vizitate. Cutarea se ncheie la atingerea punctului final sau la epuizarea punctelor care se pot
atinge.
d) Export hri
Pentru a pune la dispoziia utilizatorului o gam ct mai larg de elemente i pentru a
acorda libertate n alegerea coninuturilor i a modurilor de prezentare a acestora, precum i

23

pentru a preveni rutina (se tie c copiii se plictisesc repede) i concomitent a economisi timp,
sistemul pune la dispoziia utilizatorului opiunea de export a hrilor, prin intermediul creia
hrile se pot crea pe un singur calculator i prin operaii de import/export acestea pot fi apoi
multiplicate pe mai multe calculatoare.
Pentru realizarea exportului se acioneaz butonul Export hri. Aceasta are ca efect
afiare panoului de export n care sunt ncrcate hrile valide (nu are sens exportul hrilor
invalide care mai apoi trebuie completate). Se selecteaz hrile care urmeaz s fie exportate
i se acioneaz butonul Export. n urma acestei operaii, n cazul n care s-a selectat cel
puin o hart, apare o csu de dialog prin intermediul creia se stabilete folderul n care se
face exportul. Exportul se constituie din:
-

un fiier text n care se rein caracterisiticile hrilor exportate (din baza de


date);

fiiere corespunztoare hrilor exportate.

Secvena de cod prin care se realizeaz exportul hrilor este redat mai jos:
if (lstExport.SelectedIndices.Count == 0)
{
err("Nu ai selectat nimic!");
return;
}
if (fld.ShowDialog() == DialogResult.OK)
{
string folder = fld.SelectedPath + @"\export";
if (Directory.Exists(folder))
{
Directory.Delete(folder, true);
}
Directory.CreateDirectory(folder);
StreamWriter w = File.CreateText(folder + @"\harti.exh");
string listaH = "(-1";
foreach (int i in lstExport.SelectedIndices)
{
listaH += "," + lstCodE.Items[i].ToString();
}
listaH += ")";
OleDbConnection con = new
OleDbConnection("Provider=Microsoft.Jet.OleDB.4.0; Data Source =" + cale +
"\\mathheroes.mdb");
string qs = "select * from harti where idh in "+listaH;
OleDbCommand com = new OleDbCommand(qs, con);
con.Open();
OleDbDataReader r = com.ExecuteReader();
while (r.Read())
{
w.WriteLine(r["titlu"].ToString());
w.WriteLine(r["fisier"].ToString());
w.WriteLine(r["timp"].ToString());
w.WriteLine(r["descriere"].ToString());

24

w.WriteLine(r["posibil"].ToString());
w.WriteLine(r["valid"].ToString());
File.Copy(cale + @"\h\" + r["fisier"].ToString() +
".png", folder + @"\" + r["fisier"].ToString() + ".png");
File.Copy(cale + @"\h\" + r["fisier"].ToString() +
"_mic.png", folder + @"\" + r["fisier"].ToString() + "_mic.png");
File.Copy(cale + @"\h\" + r["fisier"].ToString() +
".txt", folder + @"\" + r["fisier"].ToString() + ".txt");
}
r.Close();
con.Close();
w.Close();
}

e) Import hri
I

Pentru a importa hri n sistem, se acioneaz butonul Import hri. Prima etap n

import este selectarea folderului care conine exportul. n urma efecturii acestei selecii, n
panoul de import se ncarc lista hrilor disponibile pentru import. Din acesta se vor selecta
hrile care se dorete a fi importate. Utilizatorul dispune de opiunea de nlocuire a hrilor
existente cu cele importate. n cazul n care aceast opiune nu este bifat, fiierele importate
se adaug la cele existente.
Secvena prin care se realizeaz importul este redat mai jos:
if (lstImport.SelectedIndices.Count == 0)
{
err("Nu ai selectat nimic!");
return;
}
string folder = Path.GetDirectoryName(ofd.FileName);
int nrFis = Directory.GetFiles(cale+@"\h\", "*.txt").Count()+1;
StreamReader r = File.OpenText(ofd.FileName);
int i = -1;
string titlu = r.ReadLine(), fisier, timp, descriere, old,
posibil, valid;
while (titlu != null)
{
old=fisier = r.ReadLine();
timp = r.ReadLine();
descriere = r.ReadLine();
posibil = r.ReadLine();
valid = r.ReadLine();
i++;
if (lstImport.SelectedIndices.Contains(i))
{
OleDbConnection con = new
OleDbConnection("Provider=Microsoft.Jet.OleDB.4.0; Data Source =" + cale +
"\\mathheroes.mdb");
OleDbCommand com = new OleDbCommand("", con);
con.Open();
if (chkReplace.Checked && File.Exists(cale + @"\h\" +
fisier + ".txt"))
{
com.CommandText = "update harti set
timp=@timp,descriere=@descriere,titlu=@titlu,posibil=@posibil, valid=@valid

25

where fisier=@fisier";//'"+fisier+"'";
}
else
{
com.CommandText = "insert into
harti(timp,descriere,titlu,posibil,valid,fisier) values
(@timp,@descriere,@titlu,@posibil,@valid,@fisier)";
fisier=nrFis.ToString();
nrFis++;
}
File.Copy(folder + "\\" + old + ".txt", cale + @"\h\" +
fisier + ".txt", true);
File.Copy(folder + "\\" + old + ".png", cale + @"\h\" +
fisier + ".png", true);
File.Copy(folder + "\\" + old + "_mic.png", cale +
@"\h\" + fisier + "_mic.png", true);
com.Parameters.AddWithValue("timp", timp);
com.Parameters.AddWithValue("descriere", descriere);
com.Parameters.AddWithValue("titlu", titlu);
com.Parameters.AddWithValue("posibil", posibil);
com.Parameters["posibil"].DbType = DbType.Boolean;
com.Parameters.AddWithValue("valid", valid);
com.Parameters["valid"].DbType = DbType.Boolean;
com.Parameters.AddWithValue("fisier",fisier );
int cate=com.ExecuteNonQuery();
con.Close();
}
titlu = r.ReadLine();
}
r.Close();

Butonul Ieire are rol de a nchide fereastra curent i de a reveni n fereastra de


opiuni.
4.6. Formularul de generare a jocului
Pentru generarea unui joc se utilizeaz dou fiiere auxiliare:
-

un fiier de tip imagine, n care se pstreaz imaginea hrii;

un fiier text care conine datele necesare generrii hrii: coordonatele celor dou
castele, cordoonatele iniiale i cele finale ale eroului, numrul de minute alocat
pentru rezolvarea problemelor, harta labirintului sub form de matrice de stringuri.

26

Fig. 11. Formularul de joc

Generarea labirintului se face pe baza informailor din fiier, astfel:


-

se selecteaz din baza de date problemele asociate hrii

se citesc datele din fiier

se construiete matricea labirintului

pentru fiecare personaj din labirint se ncarc dinamic un picture box cu imaginea
acestuia i i se asociaz aleator o problem

pentru dragon se geneaz aleator o problem cu grad ridicat de dificultate.

Harta este alctuit din dou tipuri de obstacole: fixe i mobile. Obstacolele fixe sunt
cldiri, tufiuri, copaci etc, mpiedic trecerea prin ele i nu genereaz ntrebri. Obstacolele
mobile sunt personajele, permit trecerea i genereaz ntrebri.
Parcurgea labirintului se realizeaz cu ajutorul sgeilor, astfel:
-

se identific tasta care a fost apsat (se iau n considerare numai sgeile)

pe baza acesteia se stabilete direcia de deplasare

odata cu schimbarea direciei de deplasare se schimb i orientarea imaginii

dac deplasarea este posibil, aceasta se efectueaz

27

se verific dac personajul a ajuns la castelul destinaie, situaie n care jocul este
finalizat.

Deplasarea n punctul de coordonate (i,j) este posibil dac:


-

punctul (i,j) reprezint un spaiu gol n labirint

punctul (i,j) este ocupat de un personaj, altul dect dragonul, caz n care personajul
pune ntrebare iar apoi dispare de pe hart

punctul (i,j) este ocupat de un dragon, i ne aflm la primul contact cu acesta

Dragonul este un personaj special, care nu dispare dect dac rspunsul la ntrebare
este corect. n acest caz, dragonul se aliaz cu eroul i punctajul obinut la final crete cu un
bonus acordat dragonului. Dac eroul nu rspunde corect la ntrebare, dragonul rmne pe loc
i blocheaz trecerea n labirint. n funcie de alegerea poziiei dragonului pe hart, se poate
bloca cu acesta accesul la castel sau la alte personaje.
Secvena de cod prin care se realizeaz deplasarea este redat mai jos:
if (!canGo)
return;
int tasta;
switch (e.KeyValue)
{
case 38: tasta =
break;
case 39: tasta =
break;
case 40: tasta =
break;
case 37: tasta =
break;
default: return;

2; dx = -1; dy = 0;
1; dx = 0; dy = 1;
0; dx = 1; dy = 0;
3; dx = 0; dy = -1;

}
if (px + dx < 0 || py + dy < 0)
return;
if(tasta!=dant)
{
pbScut.Image=new Bitmap("sc/" + scut.ToString() + tasta.ToString()
+ ".png");
dant = tasta;
}
else
{
if (px + dx == xf && py + dy == yf)
{
if (cate < nrt)
{
if (MessageBox.Show("Nu ai invins toi dumanii. Eti
sigur c vrei s termini?", "Atenie!", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.No) return;
}
px += dx; py += dy;
pbScut.Location = new Point((py - 1) * 40 + 11, (px - 1) * 40
+ 14);
joc_terminat(); return;

28

}
if (h[px + dx, py + dy] == "00" || h[px + dx, py + dy].Substring(0,
1) == "t" && h[px + dx, py + dy]!="td")
{
px += dx;
py += dy;
pbScut.Location=new Point((py-1)*40+11, (px-1)*40+14);
}
if (h[px, py].Substring(0, 1) == "t" && h[px + dx, py + dy]!= "td")
{
cate++;
h[px, py] = "00";
tr[m[px,py]].Visible=false;
pnProbleme.Visible = true;
canGo = false;
pbOp.Image = new Bitmap(tr[m[px, py]].Tag.ToString());
lblEnunt.Text = p[pa[m[px, py]]];
lblPlus.Text = "Raspuns corect: " + plus[pa[m[px,
py]]].ToString() + " plusuri";
lblMinus.Text = "Raspuns gresit: " + minus[pa[m[px,
py]]].ToString() + " minusuri";
}
if (h[px+dx, py+dy] == "td" && !DViz)//am ajuns la dragon
{
cate++;
DViz = true;
pnProbleme.Visible = true;
canGo = false;
pbOp.Image=new Bitmap(tr[m[px+dx, py+dy]].Tag.ToString());
lblEnunt.Text = p[0];
lblPlus.Text = "Raspuns corect:"+plus[0].ToString()+"
plusuri";
lblMinus.Text = "Raspuns gresit: " + minus[0].ToString() +
"minusuri";
}
}

Dup ce elevul rspunde la o ntrebare, se face evaluarea rspunsului, astfel:


int care=(h[px, py] == "td"? 0:pa[m[px, py]]);
if (txtR.Text.Trim() == ra[care])
{
cplus += plus[care];
corect = true;
}
else
{
cminus += minus[care];
corect = false;
}
if (h[px+dx, py+dy] == "td" && corect)
{
tr[m[px+dx, py+dy]].Visible = false;
h[px+dx, py+dy] = "00";
px += dx;
py += dy;
pbScut.Location = new Point((py - 1) * 40 + 11, (px - 1) * 40 +
dluat = 100;

29

pbD.Image = new Bitmap("t/cud.png");


}
pnProbleme.Visible = false;
this.KeyPreview = true;
txtR.Text = "";
lblStatusM.Text = cminus.ToString();
lblStatusP.Text = cplus.ToString();
canGo = true;

Fig. 12. Formularul de joc: Afiarea unei probleme

Parcurgerea hrii se face contra cronometru, fiecare hart avnd specificat numrul de
minute asociat parcurgerii.
Jocul se finalizeaz n dou situaii:
a) La intrarea eroului n castel: elevul este ntrebat dac dorete s finalizeze harta n
cazul n care mai exist personaje nevizitate pe aceasta i jocul este finalizat numai
la confirmarea acestui fapt de ctre elev.
b) La expirarea timpului de joc.
La finalizarea jocului, se nregistreaz in baza de date scorul obinut. n cazul n care
utilizatorul dorete prsirea ferestrei este avertizat c jocul nu este finalizat si drept urmare
nu va fi nregistrat punctajul. Fereastra va fi nchis numai cu confirmarea utilizatorului.

30

4.7. Formulare de generare a mesajelor


Din aceleai consideraii de design, clasicele csue de mesaj (MessageBox) au fost
nlocuite cu ferestre proprii sistemului. Astfel, au fost proiectate trei ferestre:
-

pentru mesaje de informare

pentru mesaje de eroare

pentru ntrebri adresate utilizatorului

Fiecare fereastr dispune de un cmp public de tip string prin care primete mesajul
care urmeaz s fie afiat i de butoane care returneaz rezultate de tip DialogResult.

Fig. 13. Formulare de mesaj: Tip mesaj - informare

Fig. 14. Formulare de mesaj: Tip mesaj - eroare

Fig. 15. Formulare de mesaj: Tip mesaj - ntrebare

31

3. Concluzii

Softul educaional Heroes of Math i realizeaz obiectivele propuse, putnd fi


utilizat att de profesori la clas, ct i de elevi n mod individual.
Proiectul propune o soluie de nvare modern i complet, adaptat exigenelor noii
generaii de elevi. Astfel, acetia descoper i exerseaz matematica cu jocuri educative i i
verific cunotinele prin teste sub form de joc.
Proiectul poate fi utilizat ca metod alternativ n cadrul programului coala altfel,
ocazie cu care va fi i testat de ctre chiar publicul int. Dac softul are impact, acesta va fi
dezvoltat, permind consultarea i generarea unui clasament online.
Prin grafica atractiv i prin metodele interactive utilizate, nvarea matematicii
devine relaxant i plcut!
Prin intermediul modulului de administrare, proiectul poate fi utilizat i pentru alte
clase, profesorul avnd posibilitatea de schimbare a problemelor. Cu unele rezerve sub
aspectul titlului, softul educaional Heroes of Math poate fi utilizat chiar i la alte discipline.

32

Bibliografie

SITE-uri
http://www.csharp-station.com/Tutorial.aspx
http://www.csharpcorner.com
http://csharp.net-tutorials.com
http://msdn.microsoft.com/
http://en.csharp-online.net/
http://stackoverflow.com
http://www.dreamincode.net
http://www.csharp-examples.net/get-files-from-directory/
http://www.codeproject.com/Articles/
http://www.dotnetperls.com/folderbrowserdialog

CRI
Radu Boriga ACCESS - Curs pentru liceu, Ed. L&S Info-mat
Andrew Faulkner Adobe Photoshop, Ed. Teora
Constantin Glnan, susana Glnan Curs de C#, Ed. L&S Info-mat
Vlad T. Hutanu, Carmen Popescu - Manual de informatica intensiv clasa a XII-a, Ed. L&S
Info-mat
Carmen Popescu - Manual de informatica intensiv clasa a XI-a, Ed. L&S Info-mat
33

S-ar putea să vă placă și