Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice



Acasa » referate » informatica » c
Joc de dame - proiect c++

Joc de dame - proiect c++





Universitatea „Stefan cel Mare” Suceava

Facultatea de Inginerie Electrica

Sectia Automatica si Informatica Aplicata

JOC DE DAME

- PROIECT -

Joc de DAME

1. Descriere Proiect

           

            Aceasta tema de proiect a implicat realizarea unui joc de dame, joc care a fost denumit „Damisah Versiunea 1.0”. Datorita faptului ca jocul este unic prin interfata, stil de programare si prin numele programator/creator-ului, i s-a adaugat la denumire si versiunea (Versiunea 1.0).

            Jocul este implementat cu ajutorul limbajului de programare C++ si folosind mediul de programare BORLAND C++ 3.1.

„Damisah Versiunea 1.0” prezinta cat mai fidel cu putinta regulile internationale ale jocului de dame („Checkers”). Se foloseste o tabla asemenea tablei pentru sah, adica formata din 64 de campuri (patrate), asezate intr-un grid de 8x8. Acestea sunt culorate alternant in 2 culori, una inchisa si una deschisa. Dame se joaca numai pe campurile inchise la culoare. Astfel fiecare jucator are la dreapta sa un patrat deschis la culoare, iar la stanga unul inchis la culoare. Cei 2 jucatori au la dispozitie cate 12 piese de 2 culori diferite; deobicei acestea sunt Rosii si Albe. Pieselor Rosii li se spun piese Negre sau Rosii. In „Damisah Versiunea 1.0” piesele sunt initial Albe si Negre.

Regulile jocului de Dame

            Jucatorii incep cu cele 12 piese pozitionate pe acele 12 campuri  care sunt cele mai apropiate de marginea lui/ei.

            Piesele sunt de 2 feluri: normale si regi. O piesa normala se poate muta numai cate un patrat, diagonal, spre inainte. O data ajunsa la marginea adversa, piesa devine rege (i se mai adauga o piesa deasupra). Un rege poate fi mutat si diagonal inapoi, tot cate un patrat.

            Scopul jocului este sa capturezi piesele adversarului. O piesa poate fi capturata prin saritura. Astfel piesa care captureaza se va muta la 2 campuri distanta, adica dupa piesa capturata. O mutare poate fi formata dintr-o serie de mai multe sarituri (capturari). Nu se poate sari decat peste o piesa adversa. Daca exista posibilitatea de a captura o piesa a adversarului, atunci jucatorul este obligat sa o faca. De asemenea un jucator este obligat sa efectueze tota seria de capturari posibile. O piesa devenita rege nu poate captura decat la urmatoarea tura.  Piesa capturata se ridica de pe tabla.

            Jocul se termina atunci cand unui jucator i-au fost capturate toate piesele, sau se afla in imposibilitate de a mai muta.

            Reguli pentru „Damisah Versiunea 1.0”

„Damisah Versiunea 1.0” respecta regulile prezentate mai sus cu cateva exceptii:

-          castiga cel care captureaza toate piesele adversarului

-          nu se poate efectua mai mult de o mutare pe tura

-          nu se pot efectua capturari multiple (serii de sarituri)

Interfata

La rularea executabilului corespunzator, utilizatorul este pus in fata unei serii de intrebari cu privire la culorile ce vor doresc a fi folosite in cadrul jocului. Daca se alege a nu se modifica nici unul dintre acesti parametri, culorile vor fi:

-          tabla cu campuri Rosii si Galbene

-          piesele negre - Negre

-          piesele albe - Albe

Apoi apare interfeta specifica. Tabla de joc se afla in partea stanga. Aceasta are pe margini gradatii asemenea celor utilizate pentru jocul de sah. Astfel se poate citi si introduce de la tastatura mutarea ce va fi efectuata.

In partea dreapta, alternativ, apare:

            „Primul jucator de la mutare : ”

            „Al doilea jucator e la mutare : ”

si fiecare jucator in parte poate sa-si introduca mutarea dorita.

           

            Jocul dispune si de HELP. Acesta poate fi accesat prin apasarea tastei F1 dupa cum este scris in partea de jos a ecranului. Acesta consta din cateva explicatii minore referitor la modul de utilizare al jocului.

  2. Baza teoretica

           

            Clase

           

            Notiunea de clasa introdusa de C++ se apropie de notiunea de structura dar apar undele diferente:

-          structura are ca membri doar date in viziune C

-          clasa contine si date si functii

Variabilele de tip clasa sunt denumite instante (obiecte – ce sunt notiuni fizice (nu au memorie alocata)). Variabilele de tip clasa exista in memorie.

Clase si obiecte

Sintaxa generala pentru definirea unei clase:

Class <id_clasa> [:[specificator_acces] <id_clasa_baza>[…] ]

[<lista_obiecte>];

Unde:

Id_clasa : un identificator (numele clasei similar cu structurile)

Id_clasa_baza : numele clasei/claselor de baza din care deriva clasa id_clasa

Specificator?acces : indica tipul mosteniriice poate fi impartita in:

-          mostenire publica

-          mostenire privata

-          mostenire protected

lista_membri : lista tuturor membrilor clasei cu observatia ca pe langa date membre intalnim si si functii membre.

Lista_obiecte : lista variabilelor apartinand clasei respective (a obiectelor).

Operatorii de acces

Operatorii de acces la datele unei clase sunt:

Obiect.membru

Pointer_ob->membru

Datele private nu sunt accesibile din exteriorul clasei, in schimb functiile publice pot returna valori private.

Operatorul de rezolutie ::

Operatorul de rezolutie apare utilizat in limbajul C++ in 2 situatii:

1.            la accesarea unor variabile mascate de existenta altor variabile locale

2.            in cazul stabilirii apartenentei unei functii la o anumita clasa:

-    cazul definirii functiilor membre ale unei clase

-    cazul apelului unei functii dintr-o clasa de baza mascata de o functie in clasa derivata.

Stream-uri

Stream-urile au in principal rolul de a abstractiza operatiile de intrare/iesire. Ele ofera metode de scriere si citire a datelor independente de dispozitivul I/O si chiar independente de platforma. Stream-urile incapsuleaza problemele specifice dispozitivului cu care se lucreaza, sub biblioteca standard iostream.

Alt avantaj al utilizarii stream-urilor se datoreaza implementarii bibliotecii iostream, care utilizeaza un sistem de buffer-e. Se stie ca in general operatiile de intrare/iesire cu dispozitivele periferice sunt relativ mari consumatoare de timp, astfel incat aplicatiile sunt uneori nevoite sa astepte terminarea acestor operatiuni.

Informatiile trimise catre un stream nu sunt scise imediat in dispozitivul in cauza, ci sunt transmise intr-o zona de memorie tampon, din care sunt descircate catre dispozitiv abia in momentul umplerii acestei zone de memorie.

In C++, stream-urile au fost implementate utulizand clase dupa cum urmeaza:

-          clasa streambuf gestioneaza buffer-ele

-          clasa ios este clasa de baza pentru clasele de stream-uri de intrare si de iesire. Clasa ios are ca variabila membru un oviect de tip streambuf.

-          clasele istream si ostream sunt derivate din ios.

-          clasa iostream este derivata din istream si ostream si ofera metode pentru lucrul cu terminalul

-          clasa fstream ofera metode pentru operatii cu fisiere.

Obiecte standard

Cand un program C++ care include iostream.h este lansat in executie, sunt create si initializate automat 4 obiecte:

-          cin gestioneaza intrarea de la intrarea standard (tastatura)

-          cout gestioneaza iesirea de la iesirea standard (tastatura)

-          cerr  gestioneaza iesirea catre dispozitivul standard de eroare (ecranul), neutilizand buffer-e

-          clog gstioneaza iesirea catre dispozitivul standard (ecranul), utilizand buffer-e

Constructorii clasei

Deoarece nicaieri nu este specificat faptul ca un obiect trebuie initializat, un programator poate uita sa faca acest lucru, sau (adesea cu rezultate dezastruoase) sa faca acest lucru de 2 ori.

            O conceptie mai buna este aceea de a permite programatorului sa declare o functie cu scopul explicit de a initializa obiecte. Deoarece aceasta functie construieste obiecte de un tip dat, ea se numeste constructor.

            Utilitatea constructorilor este evidenta cel putin sub 2 aspecte:

  1. constructorul asigura initializarea corecta a tuturor variabilelor membu ale unui obiect
  2. constructorul ofera o garantie ca initializarea unui obiect se va realizy o data.

Observatii:

Un constructor poarta numele clasei careia ii apartine.

Constructorii nu pot returna valori. In plus, prin conventie, nici la declararea si nici la definirea lor nu poate fi specificat tipul void  ca tip returnat.

Adresa constructorilor nu este accesibila programatorului

Constructorii sunt apelati implicit ori de cate ori este nevoie.

In cazul in care o clasa nu are nici un constructor declarat de programator, compilatorul va generea implicit unul. Acesta va fi public, fara nici  un parametru si va avea o lista vida de instructiuni.

Constructorul implicit se numeste si constructorul fara lista de argumente declarat de programator.

Daca constructorul are argumente, ele pot fi furnizate.

3.      Tehnici utilizate

La inceputul jocului sunt cititi 4 culori pentru tabla respectiv piese.

Toti acesti parametri sunt retinuti intr-un obiect. Functia culoare() care se ocupa cu afisarea acestor intrebari e membra publica a class tabla.

class tabla;

Clasa dispune de 2 constructori, dintre care unul este cel implicit. In constructorul implicit se initializeaza valorile variabilelor ce retin intregi corespunzatori culorilor respective. Initial cs1=4 (RED), cs2=14 (YELLOW), cp1=0 (BLACK), cp2=15 (WHITE).

Al doilea constructor atribuie acestor variabile valori noi, citite in functia culoare(). Constructorul se apeleaza in cadrul acestei functii. Functia returneaza ca parametru obiectul astfel creat

            In esenta, mutarea unei piese pe tabla de dame, se efectueaza prin afisari repetate una peste alta. Pentru a jongla cu afisari s-a folosit biblioteca conio.h. Din aceasta biblioteca (console input and output)  s-au folosit functiile:

            Getch();//citeste un caracter de la consola

            Getche();//citeste un caracter de la consola cu ecou

            Gotoxy(int x,int y);//muta cursorul pe ecran la pozitia(x,y)

            Clrscr();//sterge ecranul

            Textbackground(int newcolor);//seteaza culoarea de fundal a textului

            Textcolor(int newcolor);//seteaza culoarea textului

            S-a folosit        Cprintf(); in loc de cout acolo unde era necesar de afisat folosind functiile textbackground si textcolor.

            Exemplu:

            Tabla se afiseaza folosind :

                        Textbackground(culoare) si apoi cprintf(„ „);

            Astfel se afiseaza spatii cu fundal colorat.

            Pentru piese:

                        Textbackground(culoare);

                        Textcolor(culoare1);

                        Cprintf(„O”);



            Totodata, pentru a face verificarea asupra pozitiilor in care exista sau nu piese sau pentru a face verificarea de sfarsit de joc, intreaga tabla de dame este retinuta intr-un tablou bidimensional (matrice) de 9x9 si se utilizeaza numai pozitiile de la 1 la 8.

            Aceasta matrice se initializeaza cu 0 la inceput, apoi fiecarui element de pe  o pozitie corespunzatoare unei piese a priumului jucator i se atribuie valoarea 1, iar pentru al doilea jucator -1. In momentul in care una dintre piese ajunge la marginea adversa (devine rege), elementele devin 2 respectiv -2.

            Alternarea intre jucatori se face cu ajutorul unei variabile player transmise ca parametru functiei mutare_buna. Aceasta initial este -1, iar pentru a schimba tura se inmulteste cu -1.

4.      Descriere algoritm

Cunoscandu-se acum culorile necesare, se afiseaza pe ecran careul (careu()), pisesle (piese()) si gradatiile (gradatii()).

In afara de partea de inceput a jocului (cea cu setarile de culori), tot algoritmul este structurat intr-o structura repetitiva. Se paraseste aceasta structura in momentul apasarii tastei ESC.

In cadrul acestei structuri se executa urmatorul algoritm:

Daca inca nu s-a ajuns la sfarsit de joc

-          citeste alternativ mutarile jucatorilor, caracter cu caracter

§         daca s-a citit BACKSPACE atunci se reia citirea mutarii

§         altfel, daca s-a citit F1, se apeleaza functia de afisare HELP help()

§         altfel, daca s-a citit ESC atunci se apeleaza exit(0) si executia  programului se incheie

-          daca s-a citit o mutare, atunci se verifica daca e corecta cu functia mutare_buna (char [5],int [9][9], int)

-          daca mutarea a fost introdusa corect atunci in aceeasi functie se va executa si mutarea piesei

-          altfel, se va afisa „Mutare incorecta” si tot ALGORITMUL SE REIA

      Functia mutare_buna (char [5],int [9][9], int) are dublu rol, de a verifica corectitudinea mutarii citite, si de a efectua mutarea in caz ca e corecta. Se returneaza 0 daca mutarea e incorecta, sau 1 daca e corecta si mutarea s-a efectuat.

            Mutarile se introduc sub forma: a3-b4. Algoritmul verifica ca:    

-          pe pozitia 2 sa existe caracterul „-„

-          pe pozitiile 0 si 3 sa existe litere intre A si H

-          pe pozitiile 1 si 4 sa existe cifre de la 1 la 8

Daca toate acestea sunt adevarate atunci se trece la efectuarea mutarii. Astfel se fac verificari pentru toate posibilitatile de miscare a unei piese normale, apoi a unui rege, ambele pentru ambii jucatori. Se muta piesa, si se sterge piesa de pe pozitia sa anterioara. Daca s-a capturat piesa, se sterge si piesa capturata. Stergerea se efectueaza afisand spatiu(„ ”) peste.

Cat timp se executa instructiunile din aceasta structura, utilizatorul are de ales intre urmatoarele actiuni:

-          sa iasa din joc prin apasarea tastei ESC

-          sa acceseze HELP prin apasarea tastei F1

-          sa introduca o mutare de la tastatura

§         daca mutarea introdusa este corecta, se va observa piesa de pe tabla de dame efectuand o deplasare catre pozitia data.

§         daca mutarea introdusa este invalida, atunci se va afisa „Mutare incorecta”

            In momentul introducerii unei mutari de la tastatura, acest sir se memoreaza caracter cu caracter intr-un sir de caractere. Se face citirea caracter cu caracter pentru ca la orice moment dat  din timpul citirii sa se poata:

-          apasa tasta ESC pentru a iesi din joc

-          apasa tasta BACKSPACE pentru a anula ce s-a introdus

-          apasa tasta F1 pentru a accesa HELP.

Jocul se termina in momentul in care unuia dintre jucatori i se captureaza tote piesele. In acel moment se va afisa pe ecran :

„GAME OVER! Alb  a castigat”    sau

„GAME OVER! Negru  a castigat”

5. Formatul datelor de intrare/iesire

            Ca si date de intrare, utilizatorul poate introduce de la tastatura:

-          culorile tablei

§         campuri inchise la culoare

§         campuri deschise la culoare

-          culorile pieselor

§         piese negre

§         piese albe

-          mutarea ce se doreste a fi efectuata

In urma citirii culorilor se observa schimbarea coloritului interfetei.

In urma citirii unei mutari:

-          daca mutarea e incorect scrisa atunci se afiseaza „Mutare incorecta”

-          daca mutarea e corecta atunci se executa mutarea, vizual, pe tabla

6. Concluzii

           

            Acest joc reprezinta o varianta rudimentara a jocului de dame.

            In urma efectuarii unor partide experimentale, s-a observat ca se poate intampla ca la o capturare de piesa, piesa capturata sa nu dispara de pe tabla, in consecinta incurcand restul partidei.

            Pe viitor ar fi util daca s-ar implementa toate regulile jocului de dame si daca s-ar rezolva toate micile erori de afisare.

BIBLIOGRAFIE

1.        Suport laborator „Programare Orientata pe Obiecte”, anul II, prof.dr.ing. Prodan Catalin Remus.

2.        HELP BORLAND C++ 3.1

3.        http://www.jimloy.com/checkers/rules2.htm

CUPRINS

1. Descriere proiect

2

2. Baza teoretica

4

3. Tehnici utilizate

7

4. Descriere algoritm

9

5. Formatul datelor de intrare/iesire

10

6. Concluzii

11

Bibliografie

12

Cuprins

13





Proiecte

vezi toate proiectele
 PROIECT DE LECTIE Clasa: I Matematica - Adunarea si scaderea numerelor naturale de la 0 la 30, fara trecere peste ordin
 Proiect didactic Grupa: mijlocie - Consolidarea mersului in echilibru pe o linie trasata pe sol (30 cm)
 Redresor electronic automat pentru incarcarea bateriilor auto - proiect atestat
 Proiectarea instalatiilor de alimentare ale motoarelor cu aprindere prin scanteie cu carburator

Lucrari de diploma

vezi toate lucrarile de diploma
 Lucrare de diploma - eritrodermia psoriazica
 ACTIUNEA DIPLOMATICA A ROMANIEI LA CONFERINTA DE PACE DE LA PARIS (1946-1947)
 Proiect diploma Finante Banci - REALIZAREA INSPECTIEI FISCALE LA O SOCIETATE COMERCIALA
 Lucrare de diploma managementul firmei “diagnosticul si evaluarea firmei”

Lucrari licenta

vezi toate lucrarile de licenta
 CONTABILITATEA FINANCIARA TESTE GRILA LICENTA
 LUCRARE DE LICENTA - FACULTATEA DE EDUCATIE FIZICA SI SPORT
 Lucrare de licenta stiintele naturii siecologie - 'surse de poluare a clisurii dunarii”
 LUCRARE DE LICENTA - Gestiunea stocurilor de materii prime si materiale

Lucrari doctorat

vezi toate lucrarile de doctorat
 Doctorat - Modele dinamice de simulare ale accidentelor rutiere produse intre autovehicul si pieton
 Diagnosticul ecografic in unele afectiuni gastroduodenale si hepatobiliare la animalele de companie - TEZA DE DOCTORAT
 LUCRARE DE DOCTORAT ZOOTEHNIE - AMELIORARE - Estimarea valorii economice a caracterelor din obiectivul ameliorarii intr-o linie materna de porcine

Proiecte de atestat

vezi toate proiectele de atestat
 Proiect atestat informatica- Tehnician operator tehnica de calcul - Unitati de Stocare
 LUCRARE DE ATESTAT ELECTRONIST - TEHNICA DE CALCUL - Placa de baza
 ATESTAT PROFESIONAL LA INFORMATICA - programare FoxPro for Windows
 Proiect atestat tehnician in turism - carnaval la venezia





Tablouri unidimensionale: vectori
ALGORITMI DIN TEORIA GRAFURILOR - Algoritmul lui Floyd, Warshall
LISTA - Exemple de liste, stergerea si adaugarea in lista
CORBA
Programare vizuala - Mediul Borland Delphi
ARBORELE - Arbore binar, parcurgerea arborelui
ALGORITMI DE SORTARE - prin insertie, interschimbare, QuickSort, HeapSort, prin interclasare
STIVA - adaugarea unui element si extragerea unui element din stiva
Tiparire si Previzualizare
Joc de dame - proiect c++


Termeni si conditii
Contact
Creeaza si tu

 


Referate C.com Copyright © 2019 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.