Ragazzi ciao a tutti, sto studiando il C++ e nel libro che posseggo "il deitel " mi viene chiesto di realizzare il gioco del Tris utilizzando gli oggetti,
volevo un vostro parere tecnico su come ho strutturato il codice.
Premessa: la mia conoscenza della programmazione ad oggetti è basilare, devo ancora approfondire l'argomento, ecco il codice:
IL MAIN:
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include "tris.h"
using std::cout;
using std::cin;
using std::endl;
using std::string;
tris tris;
string giocatore1,giocatore2;
int main(){
cout << "\nINSERIRE IL NOME DEL PRIMO GIOCATORE: ";
cin >> giocatore1;
cout << "\nINSERIRE IL NOME DEL SECONDO GIOCATORE: ";
cin >> giocatore2;
for(int i = 0; i < 15; i++){
tris.get_table();
tris.player_1(giocatore1);
tris.get_table();
tris.setting_point_1();
if(tris.P_giocatore1 == 1){
cout << "\nHA VINTO " << giocatore1 << " !!!!" << endl;
break;
}
tris.player_2(giocatore2);
tris.setting_point_2();
if(tris.P_giocatore2 == 1){
cout << "\nHA VINTO " << giocatore2 << " !!!!" << endl;
break;
}
}
return 0;
}
IL file.h:
#ifndef TRIS_H_INCLUDED
#define TRIS_H_INCLUDED
using std::string;
class tris{
public:
tris();
void player_1(string);
void player_2(string);
void set_game();
void get_table();
void setting_point_1();
void setting_point_2();
void controll_game();
int P_giocatore1;
int P_giocatore2;
private:
char table[3][5] = {{' ','|',' ','|',' '},
{' ','|',' ','|',' '},
{' ','|',' ','|',' '}};
};
#endif // TRIS_H_INCLUDED
il CPP:
#include <iostream>
#include <cstdlib>
#include "tris.h"
#include <conio.h>
using std::cout;
using std::cin;
using std::endl;
using std::string;
tris::tris(){P_giocatore1 = 0, P_giocatore2 = 0;}
void tris::get_table(){
cout << "\n";
for(int x = 0; x < 3; x++){
cout << "\t\t\t\t";
for(int y = 0; y < 5; y++){
cout << table[x][y];
if(y == 4){
cout << endl;
}
}
}
}
////TURN GIOCATORE1/////////////////////////////////////////
void tris::player_1(string nome1){
int assegnazione = 0,flag_full = 0;
bool flag_scelta = false;
do{
for(int x = 0; x < 3; x++){
for(int y = 0; y < 5; y++){
if(table[x][y]!=' '){
++flag_full;
}
}
}
if(flag_full == 15){
cout << " \nPARTITA FINITA IN PARITA!" <<endl;
getch();
break;
}
cout << "\n" << nome1 << " TOCCA A TE: " << endl;
cin >> assegnazione;
switch(assegnazione){
case 7:
if(table[0][0] != 'X' && table[0][0] != 'O'){
table[0][0] = 'X';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 8:
if(table[0][2] != 'X' && table[0][2] != 'O'){
table[0][2] = 'X';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 9:
if(table[0][4] != 'X' && table[0][4] != 'O'){
table[0][4] = 'X';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 4:
if(table[1][0] != 'X' && table[1][0] != 'O'){
table[1][0] = 'X';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 5:
if(table[1][2] != 'X' && table[1][2] != 'O'){
table[1][2] = 'X';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 6:
if(table[1][4] != 'X' && table[1][4] != 'O'){
table[1][4] = 'X';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 1:
if(table[2][0] != 'X' && table[2][0] != 'O'){
table[2][0] = 'X';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 2:
if(table[2][2] != 'X' && table[2][2] != 'O'){
table[2][2] = 'X';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 3:
if(table[2][4] != 'X' && table[2][4] != 'O'){
table[2][4] = 'X';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
default:
cout << "\nSCELTA NON VALIDA RIPROVA!" <<endl;
}
}while(flag_scelta == false);
system("cls");
}
////TURNO SECONDO GIOCATORE////////////////////////////////////
void tris::player_2(string nome2){
int assegnazione = 0, flag_full = 0;
bool flag_scelta = false;
do{
for(int x = 0; x < 3; x++){
for(int y = 0; y < 5; y++){
if(table[x][y]!=' '){
++flag_full;
}
}
}
if(flag_full == 15){
cout << " \nPARTITA FINITA IN PARITA!" <<endl;
getch();
break;
}
cout << "\n" << nome2 <<" TOCCA A TE: " << endl;
cin >> assegnazione;
switch(assegnazione){
case 7:
if(table[0][0] != 'X' && table[0][0] != 'O'){
table[0][0] = 'O';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 8:
if(table[0][2] != 'X' && table[0][2] != 'O'){
table[0][2] = 'O';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 9:
if(table[0][4] != 'X' && table[0][4] != 'O'){
table[0][4] = 'O';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 4:
if(table[1][0] != 'X' && table[1][0] != 'O'){
table[1][0] = 'O';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 5:
if(table[1][2] != 'X' && table[1][2] != 'O'){
table[1][2] = 'O';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 6:
if(table[1][4] != 'X' && table[1][4] != 'O'){
table[1][4] = 'O';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 1:
if(table[2][0] != 'X' && table[2][0] != 'O'){
table[2][0] = 'O';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 2:
if(table[2][2] != 'X' && table[2][2] != 'O'){
table[2][2] = 'O';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
case 3:
if(table[2][4] != 'X' && table[2][4] != 'O'){
table[2][4] = 'O';
flag_scelta = true;
}
else
cout <<"\nCASELLA OCCUPATA!!" << endl;
break;
default:
cout << "\nSCELTA NON VALIDA RIPROVA!" <<endl;
}
}while(flag_scelta == false);
system("cls");
}
////////////////////////////CONTROLLO GIOCATORE 1///////////////////////////////////
void tris::setting_point_1(){
bool flag_X = false;
for(int x = 0; x < 3; x++){
for(int y = 0; y < 5; y++){
/////////////////////////////TRIS ORIZZONTALE///////////////////////////////////////
if(table[0][0] == 'X' && table[0][2] == 'X' && table[0][4] == 'X'){
flag_X = true;
break;
}
if(table[1][0] == 'X' && table[1][2] == 'X' && table[1][4] == 'X'){
flag_X = true;
break;
}
if(table[2][0] == 'X' && table[2][2] == 'X' && table[2][4] == 'X'){
flag_X = true;
break;
}
//////////////////////////////////TRIS VERTICALE////////////////////////////////////
if(table[0][0] == 'X' && table[1][0] == 'X' && table[2][0] == 'X'){
flag_X = true;
break;
}
if(table[0][2] == 'X' && table[1][2] == 'X' && table[2][2] == 'X'){
flag_X = true;
break;
}
if(table[0][4] == 'X' && table[1][4] == 'X' && table[2][4] == 'X'){
flag_X = true;
break;
}
////////////////////////////// TRIS OBLIQUO///////////////////////////////////////
if(table[0][0] == 'X' && table[1][2] == 'X' && table[2][4] == 'X'){
flag_X = true;
break;
}
if(table[0][4] == 'X' && table[1][2] == 'X' && table[2][0] == 'X'){
flag_X = true;
break;
}
}
}
if(flag_X == true){
++P_giocatore1;
}
}
////////////////////////////CONTROLLO GIOCATORE 2///////////////////////////////////
void tris::setting_point_2(){
bool flag_X = false;
for(int x = 0; x < 3; x++){
for(int y = 0; y < 5; y++){
/////////////////////////////TRIS ORIZZONTALE///////////////////////////////////////
if(table[0][0] == 'O' && table[0][2] == 'O' && table[0][4] == 'O'){
flag_X = true;
break;
}
if(table[1][0] == 'O' && table[1][2] == 'O' && table[1][4] == 'O'){
flag_X = true;
break;
}
if(table[2][0] == 'O' && table[2][2] == 'O' && table[2][4] == 'O'){
flag_X = true;
break;
}
//////////////////////////////////TRIS VERTICALE////////////////////////////////////
if(table[0][0] == 'O' && table[1][0] == 'O' && table[2][0] == 'O'){
flag_X = true;
break;
}
if(table[0][2] == 'O' && table[1][2] == 'O' && table[2][2] == 'O'){
flag_X = true;
break;
}
if(table[0][4] == 'O' && table[1][4] == 'O' && table[2][4] == 'O'){
flag_X = true;
break;
}
////////////////////////////// TRIS OBLIQUO///////////////////////////////////////
if(table[0][0] == 'O' && table[1][2] == 'O' && table[2][4] == 'O'){
flag_X = true;
break;
}
if(table[0][4] == 'O' && table[1][2] == 'O' && table[2][0] == 'O'){
flag_X = true;
break;
}
}
}
if(flag_X == true){
++P_giocatore2;
}
}