[C-Builder] Proiect Sah - Incarcare imagine din fisier (OOP)
Last Updated: Nov 07 2018 11:54, Started by
enterspeed
, Dec 23 2016 10:26
·
0
#38
Posted 23 December 2016 - 17:53
andreim77, on 23 decembrie 2016 - 17:46, said:
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. 2. Sau view helper ia intreaga Piece, care are si pointer catre Player, si returneaza calea. Oricare ar fi, 1 sau 2, e oarecum un detaliu pana la urma urmei. Nu ai if in if cu oricare dintre abordari in acest view helper, ci un switch. |
#39
Posted 23 December 2016 - 17:54
dar tot il testezi, nu?
if(piesa==turn) { if(output==jpg) desenazaTurn() else if (output==wav) playTurn() ... } else if(piesa=pion) { .... } switch, if, tot niste ramuri care trebuie actualizate pt orice tip nou de output. Edited by andreim77, 23 December 2016 - 17:55. |
#40
Posted 23 December 2016 - 17:59
andreim77, on 23 decembrie 2016 - 17:54, said:
dar tot il testezi, nu? if(piesa==turn) { if(output==jpg) desenazaTurn() else if (output==wav) playTurn() ... } else if(piesa=pion) { .... } prin faptul ca ai diferite interfete nu ma refer la ingramadirea diferitelor interfete intr-o singura componenta, ci la posibilitatea (flexibilitatea) de a avea diferite componente (numeste-le plug-ins, namespaces, packages, whatever fits you), fiecare cu specificul sau, fara ca, in libChessGame, care e generic, sa fortezi o anumita structura. Daca ai returna un string din libChessGame, ai avea o functie care "atarna in aer" dpv logistic in acele interfete in care nu e vorba despre niciun fisier - ci de asset-uri in RAM sau cine mai stie ce. Tocmai asta e ideea: ca nu stii, si nu ar trebui sa-ti pese, ce fel de interfete vor folosi biblioteca ta generica libChessGame. Quote dar tot il testezi, nu? Dar poate peste un an va face o interfata in OpenGL. Un alt proiect, complet nou, diferit de interfata scrisa in C++ Builder. Edited by OriginalCopy, 23 December 2016 - 18:02. |
#41
Posted 23 December 2016 - 18:02
Cum e mai simplu de facut? Sa fac o variabila id si sa am cate un id = ? la fiecare piesa? Sau sa pun cu #define ? (#define Pawn 1, #define Rook 2, #define white/black)
|
#43
Posted 23 December 2016 - 18:05
enterspeed, on 23 decembrie 2016 - 18:02, said:
Cum e mai simplu de facut? Sa fac o variabila id si sa am cate un id = ? la fiecare piesa? Sau sa pun cu #define ? (#define Pawn 1, #define Rook 2, #define white/black) Diagrama lui dani.user iti spune practic ce ai de facut, nu vad loc de niciun id deocamdata. |
#44
Posted 23 December 2016 - 18:09
#45
Posted 23 December 2016 - 18:11
#46
Posted 23 December 2016 - 18:13
as vrea sa vad interfata care asigura "afisarea" pieselor catre jucator (jpg, wav, etc) cu acele enum la treaba. care cumva duplica ierarhia pieselor.
|
|
#47
Posted 23 December 2016 - 18:24
In proiectul C++ Builder, ar avea ceva de genul:
imPiesa->Picture->LoadFromFile(build_image_path_for_piece(piece)); In alt proiect pentru dizabilitati ar avea: play_sound(build_sound_path_for_piece(piece)); Sunt proiecte complet diferite, disjuncte, nu ai if-uri in functie de tipul interfetei, pentru ca interfata insasi stie deja ce fel de interfata este. build_image_path_for_piece sau build_sound_path_for_piece sunt helperele despre care vorbeam. In ele ai switch in functie de acel ChessPieceType. Nu if in if. andreim77, on 23 decembrie 2016 - 18:13, said: care cumva duplica ierarhia pieselor. andreim77, on 23 decembrie 2016 - 17:54, said:
switch, if, tot niste ramuri care trebuie actualizate pt orice tip nou de output. Interesting fact: in Rust, programul nici nu ar compila intr-o astfel de situatie, daca scrii codul curat, pentru ca match necesita matching exhaustiv: https://doc.rust-lan...ook/match.html. Edited by OriginalCopy, 23 December 2016 - 18:26. |
#48
Posted 23 December 2016 - 18:27
si in toate build alea o sa ai un switch sa testezi piesa. ok. noroc ca tipul de piese in jocul asta e fix. altfel...
bine, mai filozofam zilele urmatoare. |
#49
Posted 23 December 2016 - 18:31
andreim77, on 23 decembrie 2016 - 18:27, said:
si in toate build alea o sa ai un switch sa testezi piesa. ok. noroc ca tipul de piese in jocul asta e fix. altfel... bine, mai filozofam zilele urmatoare. Sunt multe lucruri pe marginea carora am putea filozofa, dar acesta nu este unul dintre ele. Vorbim despre separation of concerns, despre "model vs view", sau cum vrei tu sa le botezi. Sau sa punem altfel problema: daca ai un bug in afisare, unde cauti mai degraba cauza, in view layer (proiectul C++ Builder) sau in biblioteca generica libChessGame? |
#50
Posted 23 December 2016 - 18:31
De ce sa testezi piesa?
std::string imagePath = std::string("chess_piece-") + std::to_string(static_cast<int>(piece->getType())) + std::to_string(static_cast<int>(piece->getPlayer->getColor())) + std::string(".jpg"); Edited by dani.user, 23 December 2016 - 18:32. |
#51
Posted 23 December 2016 - 18:55
enum ChessPieceType { Pawn, Knight, Bishop, Rook, Queen, King }; -> se pun in .h sau .cpp?
Edit: nvm, se pun in .h Edited by enterspeed, 23 December 2016 - 18:57. |
|
#53
Posted 23 December 2016 - 18:59
#54
Posted 23 December 2016 - 19:09
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users