Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Nu pot activa Memory Integrity

Supratensiuni accidentale

Cuțit/ briceag drumetie

Cum am acces la o parte dintr-un ...
 Mother's Day

Recomandare aparat de vidat alime...

Izolatie exterioara casa parter P...

Cuvinte si expresii neclare
 Mod de lucru Purmo Tempco Digital...

Samsung S90C vs LG C3

Problema sunet RCS

Amortizor sertare bucatarie
 Codrea Pallady

Blocurile goale! Orase in car...

Motorul pe benzina 1.0 SCe65

Mostenire In 1986
 

[TEMA]Tic Tac Toe || X si O

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

#1
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014
Sal'tare! Am vorbit cu cineva si m-a sfatuit urmatorul lucru:
"Ca sa inveti mai bine C++ incearca niste proiecte simple, dar care necesita mai multe clase, functii etc. Astfel incat te vei putea descurca, dar vei avea de lucru, de descoperit."
Eu m-am gandit la un joc Tic Tac Toe. Am vazut multe tutoriale, coduri ale acestui joc, doar ca unele sunt prea ciudate, dupa parerea mea. Difera foarte mult.
M-am gandit ca tabla de joc sa fie formata dintr-un array bidimensional ( cSquare[3][3] ), pentru a forma cele 9 patrate.
Dupa fiecare mutare, sa se verifice daca meciul s-a terminat sau se poate continua.
In final sa existe o optiune de a relua jocul.
Toate acestea nu vor avea interfata, jocul se va derula in consola.
Atasez si o poza cu o schita rapida realizata de mine... In cateva minute. Proiectul in capul meu e dezvoltat.
Acum sa inceapa problemele:
-Cum pot permuta intre jucatori? Cand sa mute X, cand O.
-Cum pot inlocui cifra din joc cu litera X, respectiv O?
Uitati si poza de care ziceam:
http://imgur.com/pXuOjri

#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,252
  • Înscris: 24.02.2007
Matricea aceea poate fi o matrice de pointeri la jucatori. Adica fiecare element poate tinti spre X, O sau null (neocupat).
Daca stii clase, incepe prin a cea o clasa ce sa encapsuleze logica tablei.

#3
Rhesus

Rhesus

    Senior Member

  • Grup: Senior Members
  • Posts: 2,884
  • Înscris: 22.04.2014
Iar ca o completare la ce a zis dani, poti face clasa jucator sa aiba un membru boolean alive, iar algoritmul de verificare al tablei il faci doar din/prin alive.

Edited by Rhesus, 09 July 2014 - 17:59.


#4
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014

 dani.user, on 09 iulie 2014 - 17:54, said:

incepe prin a cea o clasa ce sa encapsuleze logica tablei.
A? Nu uita, sunt inca incepator...
Cam asa arata tabla de joc:
	string cSquare[3][3];
	cSquare[0][0]="1";
	cSquare[0][1]="2";
	cSquare[0][2]="3";
	cSquare[1][0]="4";
	cSquare[1][1]="5";
	cSquare[1][2]="6";
	cSquare[2][0]="7";
	cSquare[2][1]="8";
	cSquare[2][2]="9";
	cout << cSquare[0][0] << "|" << cSquare[0][1] << "|" << cSquare[0][2] << "\n";
	cout << "-" << "+" << "-" << "+" << "-" << "\n";
	cout << cSquare[1][0] << "|" << cSquare[1][1] << "|" << cSquare[1][2] << "\n";
	cout << "-" << "+" << "-" << "+" << "-" << "\n";
	cout << cSquare[2][0] << "|" << cSquare[2][1] << "|" << cSquare[2][2] << "\n";

Ma apuc de lucru pe la jucatori... Dar si la "terminarea jocului", la toate optiunile posibile.

#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,252
  • Înscris: 24.02.2007
De ce ai tine acea informatie in matrice? Cu ce te ajuta acel numar (pe care-l poti afla oricum printr-o simpla formula stiind i si j)?

#6
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014

 dani.user, on 09 iulie 2014 - 19:48, said:

De ce ai tine acea informatie in matrice? Cu ce te ajuta acel numar (pe care-l poti afla oricum printr-o simpla formula stiind i si j)?

La ce informatie te referi? Nu inteleg despre ce i si j vorbesti....
string cSquare[i][j];

?

#7
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,252
  • Înscris: 24.02.2007
"1", "2", "3", ...

#8
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014

 dani.user, on 09 iulie 2014 - 20:03, said:

"1", "2", "3", ...
Am scris o foaie inteaga incercand sa gasesc 'formula' de care zici... Dar, degeaba.

#9
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,252
  • Înscris: 24.02.2007
cSquare[i][j] = 3*i+j+1;

#10
96andrei

96andrei

    New Member

  • Grup: Members
  • Posts: 17
  • Înscris: 20.04.2008
Eu propun sa gandesti matricea(array bidimensional) astfel:
Codifici X cu cifra 1, 0 cu 0 si un spatiu gol cu -1.
Daca pe o pozitie se afla valoarea -1, atunci locul acela este liber.
Daca pe o pozitie este valoarea 0, atunci acolo se alfa un 0.
Daca pe o pozitie este valoarea 1, atunci acolo se afla un X.

Verificarea o poti face parcurgand matricea pe linie, coloana, diagonala principala si diagonala secundara. Nu folosi metode precum
if(cSquare[0][0] == cSquare[0][1]==cSquare[0][2])

pentru ca nu inveti nimic din chestia asta. Imagineaza-ti daca faceai un joc de sah, cate chestii trebuia sa scrii in acel if?

Ca sa decizi ce jucator face urmatorea miscare, poti numara miscarile facute pana acum, iar daca numarul miscarii este un numar par, atunci muta X, altfel muta 0.

X si 0 nu e un joc tocmai potrivit pentru un proiect cu multe clase, in modul text poate fi facut cu doar cateva functii, dar e un exercitiu bun pentru manipularea matricelor si pentru codificarile unor date cu numere.


PS: mai gandeste-te la formula de care ziceau cei de mai sus, chiar daca nu-ti trebuie acum, o sa ai nevoie sa gasesti mici formule pe loc daca vrei sa programezi, in orice limbaj.

#11
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014
Multumesc de sfaturi. Imediat iau un creion si un caiet si toata seara ma voi gandi la asta.

#12
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,252
  • Înscris: 24.02.2007
Take your time, intoarce problema pe toate partile.
Cel mai bine te simti cand ajungi tu la o solutie.

#13
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,474
  • Înscris: 10.08.2005
Eu zic sa te folosesti de numarul 15 pentru verificare.

#14
EnachescuAlin

EnachescuAlin

    Active Member

  • Grup: Members
  • Posts: 1,008
  • Înscris: 08.07.2013
Eu cand am facut un joc de X si O pentru permutarea jucatorilor foloseam o variabila booleana care daca avea valoarea true atunci punea primul jucator iar daca era false atunci punea al doilea jucator sau robotul. Si dupa ce primul jucator punea atunci ii schimbam valoarea (adica o faceam false), dupa ce robotul sau al doilea jucator punea ii schimbam valoarea (adica o faceam true).

#15
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014
Multumesc pentru raspunsuri. Inteleg ce vreti sa ziceti, doar ca nu reusesc sa imi dau seama cum pot pune jucatorul sa introduca numarul, iar acesta sa se modifice in O sau X. Inca incerc sa gasesc o modalitate.

#16
stefanutz13

stefanutz13

    Member

  • Grup: Members
  • Posts: 742
  • Înscris: 04.12.2011
Pai ai putea sa faci ceva de genu:
-declari si tu inainte :
 a[0][0] = ' 1 ' , a[0][1] = ' 2 ' 
...intelegi tu...

-introduce numarul

-dupa care verifici:  
 if(numar_introdus == ' 1 ') a[0][0] = ' X ' 

Sper ca ai prins ideea...

Edited by stefanutz13, 10 July 2014 - 17:48.


#17
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,252
  • Înscris: 24.02.2007
Asta a inceput si el sa faca dar i-am explicat ca se poate calcula foarte usor matematic, nu trebuie if'uri sau for'uri.

#18
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014

 dani.user, on 10 iulie 2014 - 18:49, said:

Asta a inceput si el sa faca dar i-am explicat ca se poate calcula foarte usor matematic, nu trebuie if'uri sau for'uri.

Da... Am facut tabla de joc cam de aseara, dar am uitat sa postez:
int cSquare[3][3];
	for (int i=0; i<3; i++){
		for (int j=0; j<3; j++){
			cSquare[i][j]=3*i+j+1;
		}
	}
	cout << cSquare[0][0] << "|" << cSquare[0][1] << "|" << cSquare[0][2] << "\n";
	cout << "-" << "+" << "-" << "+" << "-" << "\n";
	cout << cSquare[1][0] << "|" << cSquare[1][1] << "|" << cSquare[1][2] << "\n";
	cout << "-" << "+" << "-" << "+" << "-" << "\n";
	cout << cSquare[2][0] << "|" << cSquare[2][1] << "|" << cSquare[2][2] << "\n";


Faza e ca nu am idee cum sa pun jucatorii sa introduca alegerile...

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