Sunteți pe pagina 1din 25

COLEGIUL NAȚIONAL „MIHAIL KOGĂLNICEANU”

LUCRARE PENTRU ATESTAREA COMPETENȚELOR PROFESIONALE


LA DISCIPLINA INFORMATICA

Jocul ”SPÂNZURĂTOAREA”
APLICAȚII ALE ȘIRURILOR DE CARACTERE

PROFESOR COORDONATOR: ELEV: BĂLAN FLORENTINO ADELIN


NEAGU VIOLETA CLASA: a XII-a F
Profil REAL
Specializarea MATEMATICĂ-INFORMATICĂ

GALAȚI
2019
Cuprins

• Tema proiectului
• Considerații teoretice
• Cerințele și specificațiile aplicației
• Prezentarea aplicației
• Concluzie
• Bibliografie
• Anexe
CAPITOLUL 1

Tema proiectului

Să se realizeze o aplicație software implementată în limbajul C++,


prin intermediul mediului de programare Code::Blocks, folosind biblioteca
cstrings a sirurilor de caractere, care să simuleze jocul spânzurătoarea.
Aplicația va permite operații elementare: generarea unui cuvânt nou,
selecția unui caracter, verificarea la fiecare pas a unui caracter nou citit.
De asemenea aplicația se va folosi de modulul grafic pentru a
exemplifica vizual schimbările care au loc la nivelul șirurilor de caracter.
CAPITOLUL 2

Considerații teoretice

2.1 Introducere în șiruri de carcatere

Un şir de caractere este păstrat într-un tablou unidimensional de tip char.


Fiecare caracter se păstrează într-un octet prin codul ASCII al său. Ultimul caracter
al şirului, terminatorul şirului cel care marchează sfarșitul șirului de caractere, este
caracterul NUL (‘\0’).
Numele tabloului care păstrează şirul de caractere este un pointer constant
spre şirul de caractere.
Exemplu:
char sir []=”SIR DE CARACTERE”;
În memorie, reprezentarea sa va fi (în hexazecimal):

sir are ca valoare adresa zonei de memorie care conţine şirul.


Avem următoarele relaţii:
 sir[i] , unde i={0,,16} – reprezintă codul ASCII al celui de al i-lea
caracter din şirul de caractere;
 sir+i , unde i={0,,16}, reprezintă adresa celui de al i-lea caracter din
şirul de caractere;
 *(sir+i) are acelaşi efect ca sir[i].
Pentru a prelucra șirurile de caractere cu ajutorul unor funcții standard este
nevoie de biblioteca cstring(string.h) care se poate include în program astfel:
#include <cstring> //// #include <string.h>
Funcții standard:
• strlen(sir) -oferă lungimea unui șir fără delimitatorul de șir;
• strcpy(sir1,sir2) -copiază in șirul sir1 ,șirul sir2;
• strcat(sir1,sir2) -alipește la sir1 ,șirul s2;
• strchr(sir,caracter) -verifică dacă un caracter se gasește în șirul
sir,afișând prima apariție a acestuia
• strcmp(sir1,sir2) -verifică dacă cele 2 șiruri sunt ordonate
lexicografic,etc;

2.2 Operații pe șiruri


• Declararea și afișarea unui șir de caracatere

• Determinarea codurilor ascii


• Prelucrarea caracterelor unui șir(transformarea caracterelor mici în caractere
mari folosind codurile ascii)

• Citirea din fișier a unui șir de caracatere


2.3 Inițializarea unei ferestre in modulul grafic
Folosind biblioteca graphics.h vom deschide o fereastra noua de lucru

Funcţia getch citeşte de la tastatură fără ecou, deci caracterul tastat la


display nu se afişează pe ecranul acestuia. La apelarea lor se vizualizează fereastra
utilizator şi se aşteaptă tastarea unui caracter. Programul continuă după tastarea
caracterului.
Se utilizează în cazul în care dorim să vizualizăm fereastra utilizator şi să
blocăm programul pentru a analiza conţinutul curent al ecranului.
CAPITOLUL 3

Cerințele și specificațiile aplicației

Aplicația prelucrează șirurile de caracter în ideea


de a simula jocul clasic "Spânzuratoarea". Utilizatorul
va putea astfel să interacționeze cu calculatorul prin
consolă și poate vizualiza parcusul său în joc prin fereastra
liberă.
CAPITOLUL 4

Prezentarea aplicației

Jocul Spânzuratoarea este un joc clasic, jucat de obicei pe hârtie


înre doua persoane și care este adresat tuturor vârstelor. Aplicația face
posibilă o interacțiune similară ,însă într-un mediu nou.
Aplicația constă în verificarea în fiecare moment al literei alese de către utilizator.
În cazul în care ultilzatorul greșeste litera, "omulețul" va începe să fie desenat în
partea stânga totodată fiindu-i afișate și viețile rămase.

Construcția aplicației este simplă și constă în câțiva pași ușori, corespondenți al


unor funcții predefinite pentru lizibilitatea aplicației:
Prima etapă : alegerea unui cuvânt aleatoriu

A doua etapă : afișarea la fiecare moment a cuvântului care se vrea ghicit și


mulțimea de litere de ghicit

A treia etapă și cea mai grea ghicirea cuvântului


• Verificarea literei odată cu citirea acestuia
• Verificarea cuvantului

• Actualizarea datelor se realizează destul de inteligent utilizânt codurile


ascii ale caracaterelor

Toate aceste etape se efectuează atât timp cât utilizatorul mai are vieți
Finalul jocului este determinat în mare parte de către utilizator. Dacă acesta
reușește să ghicească cuvântul acestuia i se va afișa
Dacă utilizatorul greșește consola și fereastra vor afișa :
Reprezentarea imaginilor in modulul grafic a fost determinata de catre numarul de
vieti al utilizatorului

astfel încât după fiecare pas greșit imaginea veche se suprascrie cu una nouă Când
utilizatorul are toate viețile
Când mai are doar 2 vieți
CAPITOLUL 6

Bibliografie
• www.google.com
• http://users.utcluj.ro/~igiosan/Resources/PC/Lab/L09.pdf
• https://profs.info.uaic.ro/~infogim/2017/lectii/78/783_stringuri.pdf
• http://www.codeblocks.org/
• http://staff.fmi.uvt.ro/~victoria.iordan/Programare_MI/Curs4.pdf

CAPITOLUL 7

Anexe
#include <iostream>
#include <graphics.h>
#include <cstring>
#include <fstream>
#include <time.h>
using namespace std;
int v[90];
///---------- CUVANT
void cuvant(char s[20])
{
srand(time(NULL));
int n,i=1;
ifstream f("cuvinte.in");
n=rand()%11;
while(f>>s && n!=i)
{
i++;
}
}
///---------- AFISARE
void AfisareTabela(char s[20],int vieti)
{
if(vieti==6)
readimagefile("6.jpg",0,160,500,500);
else if(vieti==5)
readimagefile("5.jpg",0,160,500,500);
else if(vieti==4)
readimagefile("4.jpg",0,160,500,500);
else if(vieti==3)
readimagefile("3.jpg",0,160,500,500);
else if(vieti==2)
readimagefile("2.jpg",0,160,500,500);
else if(vieti==1)
readimagefile("1.jpg",0,160,500,500);
else if(vieti==0)
readimagefile("0.jpg",0,160,500,500);
int i,n;

n=strlen(s);
for(i='A'; i<='Z'; i++)
if(i==(int)s[0] || i==(int)s[n-1])
v[i]++;

cout<<endl<<endl;
for(i='A'; i<='Z'; i++)
{
if(v[i]>0)
cout<<"[-]"<<" ";
else
cout<<"["<<(char)i<<"]"<<" ";
if(i==77)
cout<<endl;
}
cout<<endl<<endl;
cout<<"Vieti ramase: "<<vieti<<endl;

for(i=0; i<n; i++)


if(i==0 || i==n-1 || v[(int)s[i]]>0)
cout<<s[i]<<" ";
else
cout<<" _ ";
cout<<endl<<endl;
}
///-----------Citirea de la tastatura a caracaterului
void CitireCaracter(char &a)
{
cout << "ALEGETI O LITERA ";
cin>>a;
if(a>=97 && a<=122)
{
a=a-32;
}
else if(isalpha(a)==0)
cout<<"Nu ai introdus o litera. Te rugam sa introduci o litera";
v[(int)a]++;

}
///--------------Verificarea Literei
void VerificareCaracter(char s[20],char a,int &vieti)
{
int ok=0;
if(strchr(s,a)!=0)
ok=1;
if(ok==0)
vieti--;
}
int VerificareCuvant(char s[20],int &vieti)
{
int ok=1,i;
for(i=0; i<strlen(s); i++)
if(v[(int)s[i]]==0)
ok=0;
if(ok==1)
readimagefile("felicitari.jpg",0,160,500,500);
return ok;
}
void SfarsitDeJoc()
{
cout<<"Jocul a luat sfarsit ";
readimagefile("sfarsit.jpg",0,0,500,500);
}
void IncepeJocul(char s[20],char a,int &vieti)
{ cuvant(s);
while(vieti>0)
{
cout<<"MULT SUCCES";
AfisareTabela(s,vieti);
CitireCaracter(a);
VerificareCaracter(s,a,vieti);
system("CLS");
if(VerificareCuvant(s,vieti)==1)
break;
}
if(vieti>0)
cout<<"Cuvantul ghicit este "<<s;
else{
cout<<"Imi pare rau insa nu ai ghicit cuvantul -_- "<<endl;
cout<<"Cuvantul necunoscut era "<<s<<endl;
SfarsitDeJoc();
}

}
///----------INT MAIN()
int main()
{
initwindow(500,500,"SPANZURATOAREA");
readimagefile("titlu.jpg",0,0,500,150);
char s[20],a;
int vieti=6;
IncepeJocul(s,a,vieti);
getch();

return 0;
}

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