Skip to content

Commit 6a15dee

Browse files
committed
Merge branch 'dev'
2 parents 846cfa0 + eb442a0 commit 6a15dee

File tree

8 files changed

+357
-82
lines changed

8 files changed

+357
-82
lines changed
Lines changed: 218 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,231 @@
11
package connecta4;
22

33
public class Game {
4-
Player player1;
5-
Player player2;
6-
Table main_Table;
7-
8-
public Game(Player player1, Player player2, Table main_Table) {
9-
this.player1 = player1;
10-
this.player2 = player2;
11-
this.main_Table = main_Table;
12-
}
4+
public static final String RESET = "\u001B[0m";
5+
public static final String BLACK = "\u001B[30m";
6+
public static final String RED = "\u001B[31m";
7+
public static final String GREEN = "\u001B[32m";
8+
public static final String YELLOW = "\u001B[33m";
9+
public static final String BLUE = "\u001B[34m";
10+
public static final String PURPLE = "\u001B[35m";
11+
public static final String CYAN = "\u001B[36m";
12+
public static final String WHITE = "\u001B[37m";
1313

14-
public Player getPlayer1() {
15-
return player1;
16-
}
14+
private Player player1;
15+
private Player player2;
16+
private int turns;
17+
private Table main_Table;
1718

18-
public void setPlayer1(Player player1) {
19-
this.player1 = player1;
20-
}
19+
/**
20+
* Constructor de la classe Game.
21+
* Inicialitza els jugadors, el comptador de torns i el taulell del joc.
22+
*
23+
* @param player1 El primer jugador.
24+
* @param player2 El segon jugador.
25+
* @param main_Table El taulell del joc.
26+
*/
27+
public Game(Player player1, Player player2, Table main_Table) {
28+
this.player1 = player1;
29+
this.player2 = player2;
30+
this.turns = 0;
31+
this.main_Table = main_Table;
32+
}
2133

22-
public Player getPlayer2() {
23-
return player2;
24-
}
34+
/**
35+
* Obté el primer jugador.
36+
*
37+
* @return El primer jugador.
38+
*/
39+
public Player getPlayer1() {
40+
return player1;
41+
}
2542

26-
public void setPlayer2(Player player2) {
27-
this.player2 = player2;
28-
}
43+
/**
44+
* Estableix el primer jugador.
45+
*
46+
* @param player1 El primer jugador.
47+
*/
48+
public void setPlayer1(Player player1) {
49+
this.player1 = player1;
50+
}
2951

30-
public Table getMain_Table() {
31-
return main_Table;
32-
}
52+
/**
53+
* Obté el segon jugador.
54+
*
55+
* @return El segon jugador.
56+
*/
57+
public Player getPlayer2() {
58+
return player2;
59+
}
3360

34-
public void setMain_Table(Table main_Table) {
35-
this.main_Table = main_Table;
36-
}
61+
/**
62+
* Estableix el segon jugador.
63+
*
64+
* @param player2 El segon jugador.
65+
*/
66+
public void setPlayer2(Player player2) {
67+
this.player2 = player2;
68+
}
3769

38-
public boolean remakeGame (String confirmation){
39-
if (confirmation.toUpperCase() == "Y") {
40-
return true;
41-
} else {
42-
return false;
43-
}
44-
}
45-
public void printTable(){
46-
for (int i = 0; i < array.length; i++) {
47-
48-
}
70+
/**
71+
* Obté el nombre de torns.
72+
*
73+
* @return El nombre de torns.
74+
*/
75+
public int getTurns() {
76+
return turns;
77+
}
4978

50-
}
79+
/**
80+
* Estableix el nombre de torns.
81+
*
82+
* @param turns El nombre de torns.
83+
*/
84+
public void setTurns(int turns) {
85+
this.turns = turns;
86+
}
87+
88+
public Table getMain_Table() {
89+
return main_Table;
90+
}
91+
92+
public void setMain_Table(Table main_Table) {
93+
this.main_Table = main_Table;
94+
}
95+
96+
public boolean remakeGame(String respuesta) {
97+
return respuesta.toUpperCase().equals("Y");
98+
}
99+
100+
/**
101+
* Metode per imprimir taulell pasant-li una array de chars
102+
*
103+
* @param char[][]
104+
*/
105+
public void printTable(char[][] taulell) {
106+
107+
System.out.println(PURPLE + " " + "--".repeat(taulell[0].length) + RESET);
108+
for (int row = 0; row < taulell.length; row++) {
109+
System.out.print(GREEN + (row + 1) + " |");
110+
for (int col = 0; col < taulell[0].length; col++) {
111+
System.out.print(taulell[row][col] + GREEN);
112+
System.out.print("|" + GREEN);
113+
}
114+
System.out.println(RESET);
115+
System.out.println(PURPLE + " " + ("--".repeat(taulell[0].length) + RESET));
116+
}
117+
System.out.print(" ");
118+
for (int i = 1; i <= taulell[0].length; i++) {
119+
System.out.print(GREEN + " " + i);
120+
}
121+
System.out.println(RESET);
122+
123+
}
124+
125+
public void tirada(char[][] taulell, int columna, char fitxa) {
126+
columna -= 1;
127+
this.turns++;
128+
boolean torbat = false;
129+
// Recorro de forma recursiva per comprobar primer l'ultim index
130+
do {
131+
for (int i = taulell.length - 1; i >= 0; i--) {
132+
if (torbat) {
133+
break;
134+
}
135+
for (int j = 0; j < taulell.length; j++) {
136+
if (taulell[i][columna] == ' ') {
137+
taulell[i][columna] = fitxa;
138+
torbat = true;
139+
}
140+
}
141+
}
142+
} while (!torbat);
143+
}
144+
145+
public boolean comprovaVictoria(char fitxa) {
146+
char jugador = fitxa;
147+
int files = this.main_Table.grid.length;
148+
int columnes = this.main_Table.grid[0].length;
149+
150+
// Comprovar files
151+
for (int i = 0; i < files; i++) {
152+
for (int j = 0; j < columnes - 3; j++) { // -3 per no sortir del rang
153+
if (this.main_Table.grid[i][j] == jugador &&
154+
this.main_Table.grid[i][j + 1] == jugador &&
155+
this.main_Table.grid[i][j + 2] == jugador &&
156+
this.main_Table.grid[i][j + 3] == jugador) {
157+
return true;
158+
}
159+
}
160+
}
161+
162+
// Comprovar columnes
163+
for (int i = 0; i < files - 3; i++) { // -3 per no sortir del rang
164+
for (int j = 0; j < columnes; j++) {
165+
if (this.main_Table.grid[i][j] == jugador &&
166+
this.main_Table.grid[i + 1][j] == jugador &&
167+
this.main_Table.grid[i + 2][j] == jugador &&
168+
this.main_Table.grid[i + 3][j] == jugador) {
169+
return true;
170+
}
171+
}
172+
}
173+
174+
// Comprovar diagonal principal (de dalt a baix)
175+
for (int i = 0; i < files - 3; i++) {
176+
for (int j = 0; j < columnes - 3; j++) {
177+
if (this.main_Table.grid[i][j] == jugador &&
178+
this.main_Table.grid[i + 1][j + 1] == jugador &&
179+
this.main_Table.grid[i + 2][j + 2] == jugador &&
180+
this.main_Table.grid[i + 3][j + 3] == jugador) {
181+
return true;
182+
}
183+
}
184+
}
185+
186+
// Comprovar diagonal inversa (de baix a dalt)
187+
for (int i = 3; i < files; i++) { // Comença des de 3 per evitar sortir del rang
188+
for (int j = 0; j < columnes - 3; j++) {
189+
if (this.main_Table.grid[i][j] == jugador &&
190+
this.main_Table.grid[i - 1][j + 1] == jugador &&
191+
this.main_Table.grid[i - 2][j + 2] == jugador &&
192+
this.main_Table.grid[i - 3][j + 3] == jugador) {
193+
return true;
194+
}
195+
}
196+
}
197+
198+
return false; // No hi ha 4 en ratlla
199+
}
200+
201+
public boolean validarColumnaTirada(int columna) {
202+
if (columna < 1 ) {
203+
return false;
204+
}
205+
if (columna > this.main_Table.getColumns()) {
206+
return false;
207+
208+
}
209+
return true;
210+
211+
}
212+
213+
public boolean comprovaEmpat(){
214+
return this.turns == (this.main_Table.getColumns() * this.main_Table.getRows()) - 8; // -8 perque a partir de 4 tirades restants ja no es pot guanyar
215+
}
51216

217+
/**
218+
* Comprova si una columna està plena.
219+
*
220+
* @param columna L'índex de la columna a verificar.
221+
* @return true si la columna està plena, false en cas contrari.
222+
*/
223+
public boolean columnaPlena(int columna) {
224+
for (int i = 0; i < this.main_Table.grid.length; i++) {
225+
if (this.main_Table.grid[i][columna-1] == ' ') {
226+
return false;
227+
}
228+
}
229+
return true;
230+
}
52231
}

cabreraalejandro_main/src/main/java/connecta4/Main.java

Lines changed: 80 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,93 @@
33
import java.util.Scanner;
44

55
public class Main {
6+
public static final String RESET = "\u001B[0m";
7+
public static final String BLACK = "\u001B[30m";
8+
public static final String RED = "\u001B[31m";
9+
public static final String GREEN = "\u001B[32m";
10+
public static final String YELLOW = "\u001B[33m";
11+
public static final String BLUE = "\u001B[34m";
12+
public static final String PURPLE = "\u001B[35m";
13+
public static final String CYAN = "\u001B[36m";
14+
public static final String WHITE = "\u001B[37m";
15+
616
public static void main(String[] args) {
7-
// Utilizem la clase Scanner per llegir l'input de l'usuari
17+
// Utilizem la clase Scanner per llegir l'input de l'usuari
818
Scanner input = new Scanner(System.in);
919

20+
// Preguntem el nom dels jugador i creem nous objectes "Player".
21+
System.out.println("Introdueix el nom del jugador 1");
22+
Player player1 = new Player(input.nextLine(), 'X');
23+
System.out.println("Introdueix el nom del jugador 2");
24+
Player player2 = new Player(input.nextLine(), 'O');
25+
26+
// Ara crearem un nou Taulell indicant el nombre de files i columnes
27+
Table main_Table = null;
28+
System.out.println("Introdueix el nombre de files");
29+
int files = input.nextInt();
30+
System.out.println("Introudeix el nombre de columnes");
31+
int columnes = input.nextInt();
1032

11-
// Preguntem el nom dels jugador i creem nous objectes "Player".
12-
System.out.println("Introdueix el nom del jugador 1");
13-
Player player1 = new Player(input.nextLine());
14-
System.out.println("Introdueix el nom del jugador 2");
15-
Player player2 = new Player(input.nextLine());
33+
while (files < 4 || files > 9 || columnes < 4 || columnes > 9) {
34+
System.out.println("El nombre de files i columnes ha de ser entre 4 i 9");
35+
System.out.println("Introdueix el nombre de files");
36+
files = input.nextInt();
37+
System.out.println("Introudeix el nombre de columnes");
38+
columnes = input.nextInt();
1639

17-
// Ara crearem un nou Taulell indicant el nombre de files i columnes
40+
}
41+
main_Table = new Table(files, columnes);
1842

19-
System.out.println("Introdueix el nombre de files");
20-
Table main_Table = new Table (input.nextInt(), 1);
21-
System.out.println("Introudeix el nombre de columnes");
22-
main_Table.setColumns(input.nextInt());
43+
// Amb aixó ja podem crear un objecte Game a qui li pasarem els jugadors i
44+
// taulell per parametre
45+
Game game1 = null;
46+
boolean victoria = false;
47+
String jugador;
48+
boolean empat;
49+
do {
50+
main_Table.getArray();
51+
game1 = new Game(player1, player2, main_Table);
52+
game1.printTable(main_Table.grid);
53+
victoria = false;
54+
empat = false;
55+
do {
56+
jugador = game1.getTurns() % 2 == 0 ? player1.getName() : player2.getName();
57+
char fitxa = game1.getTurns() % 2 == 0 ? player1.getFicha() : player2.getFicha();
58+
System.out.println(jugador.toUpperCase() + " és el teu torn");
59+
System.out.println("Introdueix la columna on vols tirar " + ":");
60+
int selectedColumn = input.nextInt();
61+
while (selectedColumn <= 0 || selectedColumn > columnes) {
62+
System.out.println("Columna no vàlida, introdueix una altra columna");
63+
selectedColumn = input.nextInt();
2364

24-
// Amb aixó ja podem crear un objecte Game a qui li pasarem els jugadors i taulell per parametre
65+
}
66+
while (game1.columnaPlena(selectedColumn)) {
67+
System.out.println("La columna està plena, introdueix una altra columna");
68+
selectedColumn = input.nextInt();
69+
}
70+
game1.tirada(main_Table.grid, selectedColumn, fitxa);
71+
game1.printTable(main_Table.grid);
72+
victoria = game1.comprovaVictoria(fitxa);
73+
empat = game1.comprovaEmpat();
74+
} while (!victoria && !empat);
75+
if (empat) {
76+
System.out.println("Empat!");
77+
78+
}else{
79+
System.out.println(jugador + " has guanyat!");
80+
}
81+
if (player1.afegirVictoria(jugador)) {
82+
System.out.println("El jugador " + player1.getName() + " té " + player1.getWins() + " victòries");
83+
System.out.println("El jugador " + player2.getName() + " té " + player2.getWins() + " victòries");
84+
} else {
85+
player2.afegirVictoria(jugador);
86+
System.out.println("El jugador " + player1.getName() + " té " + player1.getWins() + " victòries");
87+
System.out.println("El jugador " + player2.getName() + " té " + player2.getWins() + " victòries");
88+
}
2589

26-
Game game1 = new Game(player1, player2, main_Table);
27-
do {
28-
29-
System.out.println("Vols tornar a jugar?");
30-
} while (game1.remakeGame(input.nextLine()));
90+
System.out.println("Vols tornar a jugar? Y/N");
91+
} while (game1.remakeGame(input.next()));
3192

93+
input.close();
3294
}
33-
}
95+
}

0 commit comments

Comments
 (0)