Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Hartile google nu mai au chenarul...

Tomate in ghiveci la curte?

Idei cale de actiune recuperare g...

Intoleranța lactoza- vegan v...
 Tobe acustice insonorizare in blo...

Cine canta? Fragment din melodie...

Tablou sigurante Dacia Sandero 2012

Baby Reindeer - 2024
 Hotii voteaza hoti?!

Camera video masina

Zilele emailului din gospodaria n...

Best gaming laptop?
 Humane (2024)

Recomandare casti 100-150 lei

Schimbare bec far VW Touran 1T3

Plata impozit PF
 

[C-Builder] Proiect Sah - Incarcare imagine din fisier (OOP)

- - - - -
  • Please log in to reply
62 replies to this topic

#19
enterspeed

enterspeed

    Junior Member

  • Grup: Junior Members
  • Posts: 27
  • Înscris: 23.12.2016
Sa-mi mai spuna cineva odata ce trebuie sa am in fiecare clasa va rog. Adica ce functii.

#20
enterspeed

enterspeed

    Junior Member

  • Grup: Junior Members
  • Posts: 27
  • Înscris: 23.12.2016
Cineva care stie C-Builder poate sa imi arate si mie cum se face Sah cu clase?

Gen ca programul asta: https://people.duke....land/chess2.txt

Nu stiu in ce clase sa pun functiile de mai sus si nici cum sa le pun (virtual, protected, public). Un mic ajutor ar fi generos.

Vreau sa fac separat clasa Board, clasa Piece si alte clase si in fiecare sa pun functiile corespunzatoare, iar in clasa aia pre-definita din c-builder sa am doar astea cu

void __fastcall

De exemplu am clasa pre-definita:
void __fastcall TForm1::ButtonSetUpBoardClick(TObject *Sender)
{
setupBeginGame();
}


Si in clasa board sa am:
void setupBeginGame (void) {
												 // INTERNAL REPRESENTATION
												 // Set board to empty or not
for (row = 0; row < 8; row++) {
	 for (col = 0; col < 8; col++) {
		 if (row > 1 && row < 6) board[row][col].empty = true;
		 else board[row][col].empty = false;
	 }
}
												 // INTERNAL REPRESENTATION
								 // Set board.piece to their appropriate IDs
for (col = 0; col < 8; col++) {
	 board[0][col].piece = col + 0;
	 board[1][col].piece = col + 8;
	 board[6][col].piece = col + 16;
	 board[7][col].piece = col + 24;
}
												 // GRAPHIC USER INTERFACE
														 // Show All Pices
for (int i = 0; i < 32; i++) hideShow(i, SHOW);
								 // Move All Pieces to the Starting Position
for (int i = 0; i < 32; i++) {
	 if (i < 16) movePiece(i, i%8, i/8);
	 else movePiece(i, i%8, i/8 + 4);
}
}


Dar dupa da eroare ca nu am row si col si trebuie cumva sa le definesc sa pot fi folosite in orice clasa. Si la fel cu functia void MovePiece. Pe aia sa zicem ca o bag in clasa Piece, dar vreau ca si clasa board sa o ia in considerare cand o foloseste.

Edited by enterspeed, 23 December 2016 - 14:51.


#21
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postenterspeed, on 23 decembrie 2016 - 13:56, said:

Sa-mi mai spuna cineva odata ce trebuie sa am in fiecare clasa va rog. Adica ce functii.
Pentru un inceput ai avea aceasta diagrama UML pentru biblioteca reutilizabila din src/chess/.

[ https://i.imgur.com/BixkksR.png - Pentru incarcare in pagina (embed) Click aici ]

Piece cu subclasele sale:

[ https://i.imgur.com/W7z5g6Z.png - Pentru incarcare in pagina (embed) Click aici ]

Update:

[ https://i.imgur.com/MSDO3FI.png - Pentru incarcare in pagina (embed) Click aici ]

Daca vrei sa inveti cum se programeaza curat, lasa "C++ Builder" deoparte pentru o vreme, si fa dezvoltarea strict in C++, folosind 0 alte biblioteci, si folosind TDD.

Avantaj: e un antrenament bun si la sfarsit vei fi angajabil ca junior.

Apoi treci la interfata efectiva, ca o fi ea C++ Builder sau altceva. In interfata doar vei folosi biblioteca asta deja construita intre timp.

#22
enterspeed

enterspeed

    Junior Member

  • Grup: Junior Members
  • Posts: 27
  • Înscris: 23.12.2016
Mersi. Am o mica problema. Am o functie in clasa Board si vreau sa o accesez in clasa pre-definita din c-builder, cam asa:

void __fastcall TfJoc::btnStartClick(TObject *Sender)
{
	 setupBeginGame();	
}


Imi da eroarea asta:

Call to undefined function 'setupBeginGame'


Cum fac sa o pot accesa? (functia este publica in clasa Board)

Edited by dani.user, 23 December 2016 - 16:10.
quote inutil


#23
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Update:

[ https://i.imgur.com/dTJJrrb.png - Pentru incarcare in pagina (embed) Click aici ]

#24
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,239
  • Înscris: 24.02.2007
Mi-a luat-o OriginalCopy inainte cu diagrama :D
Varianta mea: Attached File  Untitled.png   54.57K   15 downloads

#25
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Nu cunosc acest C++ Builder, dar o idee simpla ar fi:

In functia main() iti creezi o instanta src/chess/Board, si o salvezi ca membru in diferitele formulare / dialoguri / etc, in care ai nevoie de ceva legat de joc.

In acele formulare nu faci nimic legat de logica jocului, ci doar de afisare.

Cand vrei sa faci ceva ce tine de logica jocului, doar apelezi functii ale board, de exemplu in cazul concret despre care intrebi:

this->board->resetStartPosition();

Cineva cu cunostinte de C++ Builder iti poate raspunde la intrebare, dar dupa cum am spus: nu te grabi cu acest C++ Builder, tu fa mai intai TDD si focuseaza-te pe jocul efectiv, nu pe interfata grafica.

E usor apoi sa ii tragi o interfata grafica peste.

View Postdani.user, on 23 decembrie 2016 - 15:54, said:

Mi-a luat-o OriginalCopy inainte cu diagrama Posted Image
Varianta mea: Attachment Untitled.png
Da, dar diagrama ta e mai completa :D

#26
enterspeed

enterspeed

    Junior Member

  • Grup: Junior Members
  • Posts: 27
  • Înscris: 23.12.2016

View PostOriginalCopy, on 23 decembrie 2016 - 16:00, said:

Nu cunosc acest C++ Builder, dar o idee simpla ar fi:

In functia main() iti creezi o instanta src/chess/Board, si o salvezi ca membru in diferitele formulare / dialoguri / etc, in care ai nevoie de ceva legat de joc.

In acele formulare nu faci nimic legat de logica jocului, ci doar de afisare.

Cand vrei sa faci ceva ce tine de logica jocului, doar apelezi functii ale board, de exemplu in cazul concret despre care intrebi:

this->board->resetStartPosition();

Cineva cu cunostinte de C++ Builder iti poate raspunde la intrebare, dar dupa cum am spus: nu te grabi cu acest C++ Builder, tu fa mai intai TDD si focuseaza-te pe jocul efectiv, nu pe interfata grafica.

E usor apoi sa ii tragi o interfata grafica peste.


Da, dar diagrama ta e mai completa Posted Image

Mersi de diagrame. O sa incerc sa fac asa acum ca am o mai mare idee despre ce sa fac.

Legat de ce ziceam adineauri, nu are legatura neaparat cu C-Builder. E vorba de o functie dintr-o clasa care sa poata fi folosita si in alta clasa.

#27
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postenterspeed, on 23 decembrie 2016 - 15:46, said:

Am o functie in clasa Board si vreau sa o accesez in clasa pre-definita din c-builder, cam asa:
In clasele din src/chess/ nu accesezi niciodata nimic altceva decat clase aflate deasemenea in src/chess/ - clase scrise de tine manual.

Altfel intorci directia dependintelor pe dos. O biblioteca reutilizabila precum "libChessGame" nu are voie sa depinda da tehnologii concrete - precum C++ Builder.

Dependinta e invers: interfata grafica depinde de libChessGame. In interfata grafica apelezi functii din libChessGame, nu invers.

View Postenterspeed, on 23 decembrie 2016 - 16:05, said:


Mersi de diagrame. O sa incerc sa fac asa acum ca am o mai mare idee despre ce sa fac.

Legat de ce ziceam adineauri, nu are legatura neaparat cu C-Builder. E vorba de o functie dintr-o clasa care sa poata fi folosita si in alta clasa.
Lasa deoparte acest C++ Builder, si fa TDD "din consola" pentru a-ti programa mai intai libChessGame.

Aceasta abordare are multe avantaje: 1. te pregateste pentru a deveni angajabil 2. iti da posibilitatea sa "cresti" impreuna cu codul: pe masura ce programezi, se rafineaza si modelul tau mental al codului. 3. Calitate superioara / decuplare mare, s.a.m.d.


Documenteaza-te despre TDD. Projectul de pe github iti prezinta o librarie de testare, cred ca ai acolo toata infrastructura necesara pentru a porni, inclusiv Makefiles & co.

#28
enterspeed

enterspeed

    Junior Member

  • Grup: Junior Members
  • Posts: 27
  • Înscris: 23.12.2016

View PostOriginalCopy, on 23 decembrie 2016 - 16:12, said:

In clasele din src/chess/ nu accesezi niciodata nimic altceva decat clase aflate deasemenea in src/chess/ - clase scrise de tine manual.

Altfel intorci directia dependintelor pe dos. O biblioteca reutilizabila precum "libChessGame" nu are voie sa depinda da tehnologii concrete - precum C++ Builder.

Dependinta e invers: interfata grafica depinde de libChessGame. In interfata grafica apelezi functii din libChessGame, nu invers.


Lasa deoparte acest C++ Builder, si fa TDD "din consola" pentru a-ti programa mai intai libChessGame.

Aceasta abordare are multe avantaje: 1. te pregateste pentru a deveni angajabil 2. iti da posibilitatea sa "cresti" impreuna cu codul: pe masura ce programezi, se rafineaza si modelul tau mental al codului. 3. Calitate superioara / decuplare mare, s.a.m.d.


Documenteaza-te despre TDD. Projectul de pe github iti prezinta o librarie de testare, cred ca ai acolo toata infrastructura necesara pentru a porni, inclusiv Makefiles & co.

Ok. Ma voi documenta. Mersi! Posted Image

Edited by enterspeed, 23 December 2016 - 16:18.


#29
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,239
  • Înscris: 24.02.2007
Partea de testare din acel proiect e prea tintita spre linux.
Pana te prinzi cum sta treaba, un proiect de test poate fi ceva simplu: o aplicatie tip consola unde ai diverse functii pt fiecare test si pe care le apelezi pe toate din main.

#30
andreim77

andreim77

    Senior Member

  • Grup: Senior Members
  • Posts: 4,235
  • Înscris: 11.04.2006
dani,

la ce iti trebuie getPieceType? mostenirea si functiile virtuale o sa-ti automatizeze procesul, sa lucreze cu piese, nu cu turn, cal, pion, etc.

#31
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,239
  • Înscris: 24.02.2007
Pt a determina ce poza sa afiseze pt fiecare piesa

#32
andreim77

andreim77

    Senior Member

  • Grup: Senior Members
  • Posts: 4,235
  • Înscris: 11.04.2006
si nu poti face asta tot cu virtuale? in loc de if(cal)... else if(turn) else..... else else...?

#33
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
pai getPieceType() ar fi acea virtuala. Si in view are o functie pe undeva care returneaza un string pentru ce se intampla sa returneze getPieceType(). Concatenat apoi cu culoarea player-ului, obtine calea catre imagine.

#34
andreim77

andreim77

    Senior Member

  • Grup: Senior Members
  • Posts: 4,235
  • Înscris: 11.04.2006
eu vad un enum in dreapta, la ce-ti mai trebuie daca oricum ai ierarhia pieasa<--pion/turn?
in cazul asta pt ca piesele au asociate o imagine fixa, cred ca se poate simplifica f mult punand in clasa piesa (baza) un string catre calea cu imagine care ori e fixa ori o setezi in contructor sau cu un setter. si atunci functia de desenare va prima calea spre imagine (piesa->getImagePath()).

#35
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postandreim77, on 23 decembrie 2016 - 17:24, said:

eu vad un enum in dreapta, la ce-ti mai trebuie daca oricum ai ierarhia pieasa<--pion/turn?
in cazul asta pt ca piesele au asociate o imagine fixa, cred ca se poate simplifica f mult punand in clasa piesa (baza) un string catre calea cu imagine care ori e fixa ori o setezi in contructor sau cu un setter. si atunci functia de desenare va prima calea spre imagine (piesa->getImagePath()).
Pentru ca libChessGame n-are de-a face cu imagini. Imaginile sunt specifice interfetei grafice.

Imagineaza-ti de exemplu ca faci o interfata pentru oameni cu dizabilitati, si "calea catre imagine" trebuie sa fie un .wav.

Sau o interfata OpenGL, unde "imaginea" trebuie sa fie un model 3D salvat deja in memorie - deci nu are o cale anume.

#36
andreim77

andreim77

    Senior Member

  • Grup: Senior Members
  • Posts: 4,235
  • Înscris: 11.04.2006
ok, dar cu enum o sa ai if in if in if si tot asa pt fiecare enum: tipuri de piese, tipuri de output, etc.

in cazul asta pt piese tipul lor e fix si mic. dar cand apare un nou tip de output? mai pun un enum in tipul de output, mai adaugi un if, mai compilezi tot.

se poate abstractiza mai departe, cu  o interfata PieceRenderer { void renderPiece()=0; } or something din care derivezi, PieceDrawer, PieceSpeller, Piece3DRenderer, etc. care va lucra cu piese nu call, turn, etc. si scapi de enum, if...

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate