CATEGORII DOCUMENTE |
Jocul "Snake" este unul dintre primele jocuri electronice aparute. Odata cu evolutia tehnologiei, se imbunatateste si grafica acestui joc, devenind cunoscut in toata lumea si adresandu-se oamenilor de toate varstele. Exista variante ale acestui joc atat pe calculator cat si pe telefonul mobil, deci se poate juca pe computerul de acasa, de la servici sau de la scoala. Telefonul mobil este un aparat indispensabil oricarei persoane, in momente libere acest joc este un mod de ocuparea timpului si de relaxare.
"Snake" este simplu de jucat, insa presupune dexteritate, rabdare si o minte agera. Este distractiv si antrenant. Jocul consta in deplasarea sarpelui pe o suprafata inconjurata de margini. Trebuie sa ghidati sarpele dupa mancare astfel incat acesta sa creasca. In momentul in care ati luat mancarea, va aparea alta mancare in chenar, coordonatele acesteia stabilindu-se in mod aleator. Incercati sa nu va loviti de pereti si de propria coada, unul din aceste doua lucruri vor aduce sfarsitul jocului. La inceput scorul este 0, iar acesta creste cu o unitate de fiecare data cand se ia o mancare. Scopul acestui joc este de a acumula cat mai multe puncte. La fiecare incercare se doreste obtinerea unui scor cat mai bun. Multi oameni concureaza intre ei, comparand de fiecare data punctajul si observand care dintre ei se pricepe mai bine.
Am creat acest joc pentru a vedea cum se transpune in mod DOS o asfel de aplicatie. Nu am intalnit pana acuma nici o implementare a jocului in modul DOS. Am incercat sa realizez o varianta de "Snake" cat mai apropiata de cea de pe telefonul mobil, pentru a vedea diferenta de grafica si pentru a vedea daca pot crea o astfel de aplicatie intr-un mediu de programare utilizand cunostintele acumulate pana acum.
Programul este o implemantare DOS a jocului "Snake". Am foslosit mediul de programare Borland C pentru realizarea algoritmului. Programul se afla intr-un singur fisier de tip cpp si este structurat in unsprezece subprograme si programul principal.
Programul incepe cu o interfata in care este scris "Atestat profesional", numele jocului si numele realizatorului programului. Desenarea interfetei de inceput am realizat-o intr-un subprogram separat. Urmeaza un meniu (al doilea subprogram) in care utilizatorul are 3 optiuni: prima optiune este inceperea unui joc nou, a doua este consultarea paginii de ajutor, iar ultima este optiunea de iesire din joc. Pentru realizarea meniului am folosit o structura repetitiva "while", iar conditia de oprire este apasarea tastei "Escape". La alegerea primei optiuni este lansat in executie jocul, iar la alegerea celei de-a doua se deschide o pagina in care sunt prezentate butoanele cu care se ghideaza sarpele si sunt explicate regulile jocului. La alegerea ultimei optiuni se va iesi din meniu. Inainte de iesirea din program apare pagina de sfarsit, care contine cuvantul "Fin". Pentru realizarea ei am folosit o alta functie, apoi programul se termina.
Pagina de inceput:
Meniul principal:
Pagina ajutor:
Pagina de sfarsit:
La inceperea jocului se deseneaza chenarul in interiorul caruia se deplaseaza sarpele, se deseneaza sarpele si mancarea. Chenarul este alb, sarpele este verde si mancarea este rosie.
Pentru implementarea informatica a sarpelui am folosit un tablou bidimensional cu maxim 2 linii si 1000 de coloane cu elementele numere intregi. Sarpele se compune dintr-o insiruire de cercuri cu raza de 2 pixeli, astfel pe prima linie a matricii se va retine coordonata x a fiecarui centru de cerc, iar pe a doua linie se vor retine coordonatele y a centrelor. Mancarea este un cerc cu raza tot de 2 pixeli, iar coordonatele lui se vor tine minte in 2 variabile intregi. Coordonatele mancarii se vor genera de calculator, ele vor avea valori aleatorii, valori cuprinse intre coordonatele chenarului. Se va avea grija ca mancarea sa nu fie desenata peste sarpe. Am folosit o functie care nu permite ca aceasta suprapunere sa se realizeze.
La inceperea jocului sarpele are o lungime n stabilita de programator, iar aceasta creste de fiecare data cand se ia o mancare. Viteza acestuia este stabilita tot de programator si este fixa. Pentru miscarea sarpelui am folosit 5 functii. Prima este functia in care se muta coordonatele sarpelui cu o pozitie pentru a putea modifica prima coordonata. Am foslosit cate o functie pentru fiecare directie: sus, jos, stanga, dreapta. In functie de directie se schimba prima coordonata. Pentru a realize deplasarea, se se deseneaza un cerc in fata sarpelui si se sterge un cerc din coada lui. De fiecare data cand sarpele colecteaza o mancare lungimea lui creste, n-ul modificandu-se crescator.
Scorul este afisat in coltul din dreapta de sus si este actualizat de fiecare data cand sarpele ajunge la mancare. Deasupra marginii de jos apare mesajul care informeaza utilizatorul despre tasta de iesire din joc.
Dupa termiarea unei runde, se afiseaza automat punctajul, dupa care se revine in meniul principal.
Matricea este declarata global, pentru a o putea folosi in toate subprogramele. Scorcul este declarat ca numar intreg in programul principal, iar pentru a putea fi afisat pe ecran el este transformat in sir de caractere.
Astfel, algoritmul este realizat prin functii, in programul principal se initializeaza modul grafic si se apeleaza functiile, iar la sfarsit se inchide modul grafic.
Borland C, Help
Ana Intuneric, Cristina Sichim , "Informatica Teste grila C/C++", Editura Polirom, 2003
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <graphics.h>
#include <dos.h>
#include <process.h>
#include <stdlib.h>
int a[2][1000],n,iesire;
void functie (int a[][1000])
void dreapta (int a[][1000],int &sem,int &scor)
setcolor(BLACK);
pieslice(a[1][1],a[2][1],0,360,2);
void stanga (int a[][1000],int &sem,int &scor)
setcolor(0);
pieslice(a[1][1],a[2][1],0,360,2);
void sus (int a[][1000],int &sem,int &scor)
setcolor(0);
pieslice(a[1][1],a[2][1],0,360,2);
void jos (int a[][1000],int &sem,int &scor)
setcolor(0);
pieslice(a[1][1],a[2][1],0,360,2);
int verif(int xbob,int ybob)
return 0;
void joc (int &scor)
setfillstyle(1,BLACK);
bar (0,0,getmaxx(),getmaxy());
setcolor(WHITE);
outtextxy(10,5,'SCOR');
outtextxy(100,5,'0');
scor=0;
int x1=150,x2=getmaxx()-150,y1=150,y2=getmaxy()-150;
settextstyle(1,0,1);
outtextxy(10,getmaxy()-20,'Apasati esc pentru a reveni in meniul principal');
rectangle (x1,y1,x2,y2);
n=80;
for (i=1;i<=n;i++)
setcolor(GREEN);
setfillstyle(1,GREEN);
for (i=1;i<=n;i++)
pieslice(a[1][i],a[2][i],0,360,2);
int k='d';
int l='d';
setcolor(RED);
setfillstyle(1,RED);
randomize();
do
while(verif(xbob,ybob));
pieslice(xbob,ybob,0,360,2);
do
while(verif(xbob,ybob));
pieslice(xbob,ybob,0,360,2);
sem=0;
}
setcolor(GREEN);
setfillstyle(1,GREEN);
pieslice(a[1][n],a[2][n],0,360,2);
functie(a);
if (kbhit())
}
while (k!=27);
nimik++;
char scor2[1000];
setcolor(BLACK);
setfillstyle(1,BLACK);
bar(0,0,getmaxx(),getmaxy());
k='0';
do
while (k!=27);
void ajutor (int &scor)
case'2':
}
}
while (k!=27);
void meniu (int &scor)
case'2':
}
}
while (k!=27);
void introd ()
for (i=0;i<357;i++)
void sf ()
void main (void)
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2340
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved