#include "LedControl.h"
LedControl lc=LedControl(12,10,11,2);
const int SW_pin = 2;
const int xpin = 0;
const int ypin = 1;
int filas=3, col=3;
int filaini = 0; int colini = 0;
bool check = 0;
bool barcos1[8][8];
bool barcos2[8][8];
bool tablero1[8][8];
bool tablero2[8][8];
bool jugador[8][8];
bool ganador1,ganador2,turno1,turno2;
bool agua1[8][8],agua2[8][8],agua[8][8];
bool ahogado1[8][8],ahogado2[8][8];
bool tocado1[8][8],tocado2[8][8];
int pollo=20;
bool volver = false;
bool acierto = false;
void setup() {
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(9600);
Serial.println("Iniciando");
lc.shutdown(0,false);
lc.shutdown(1,false);
lc.setIntensity(0,8);
lc.setIntensity(1,8);
lc.clearDisplay(0);
lc.clearDisplay(1);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
barcos1[i][j] = false;
barcos2[i][j] = false;
tablero1[i][j] = false;
tablero2[i][j] = false;
agua1[i][j]=false;agua2[i][j]=false;
ahogado1[i][j]=false;ahogado2[i][j];
jugador[i][j]= false;
}
}
Serial.println("Jugador 1, coloca posición inicial de tu Portaaviones");
turno1=true;
posicioninicial(4);
posicioninicial(3);
posicioninicial(2);
posicioninicial(2);
posicioninicial(1);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
barcos1[i][j] = jugador[i][j];
jugador[i][j] = false;
Serial.print(barcos1[i][j]);
}
Serial.println();
}
lc.clearDisplay(0);
posicioninicial(4);
posicioninicial(3);
posicioninicial(2);
posicioninicial(2);
posicioninicial(1);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
barcos2[i][j] = jugador[i][j];
jugador[i][j] = false;
Serial.print(barcos2[i][j]);
}
Serial.println();
}
lc.clearDisplay(0);
lc.clearDisplay(1);
col = 3;
filas = 3;
}
void loop() {
if (!ganador1 && !ganador2){
if (turno1){
Serial.print("Turno 1:");
pollo=50;
posicionatacar(agua1,ahogado1);
if (acierto){
turno1=true;
turno2=false;
}
else{
turno1=false;
turno2=true;
}
}
if (yagano(ahogado1,barcos2)){
ganador1=true;
Serial.print("GANO EL UNOOOOO");
}
if (turno2){
Serial.print("Turno 2:");
pollo=60;
posicionatacar(agua2,ahogado2);
if (acierto){
turno1=false;
turno2=true;
}
else{
turno1=true;
turno2=false;
}
if (yagano(ahogado2,barcos1)){
ganador2=true;
Serial.print("GANO EL DOOOOOS");
}
}
}
}
bool yagano(bool ahogado[8][8], bool barco[][8]) {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (ahogado[i][j] != barco[i][j]) {
return false; // Si encuentra algún elemento diferente, las matrices no son iguales
}
}
}
return true; // Si termina de recorrer ambas matrices sin encontrar diferencias, son iguales
}
void posicionjuego(bool barco[8][8], bool ahogado[8][8], bool agua[8][8]) {
bool atino = barco[col][filas];
if (atino) {
ahogado[col][filas] = true;
acierto = true;
Serial.println("Le atinaste papuowowo");
} else {
agua[col][filas] = true;
acierto = false;
Serial.println("Pues le dio al agua");
}
check = 1; // Establecer el indicador de botón presionado
}
void orientacion(int longitud){
bool check = 0; //check de si ya se coloco el barco
Serial.println("Elegir direccion con jostick");
while (check==0) {
if (analogRead(xpin) > 525) { // izquierda (aumentan las filas)
if ((filaini + longitud) < 8) {
for (int i = filaini + 1, j = 0; i < (filaini + longitud + 1) && j == 0; i++) {
bool isOn = jugador[colini][i];
if (isOn) {
j = 1;
check = 1;
}
}
if (!check) { // colocar barco
for (int i = filaini; i < (filaini + longitud + 1); i++) {
jugador[colini][i] = true;
lc.setLed(0, colini, i, true);
}
Serial.println("Barco colocado");
check = 1;
}
else {
Serial.println("Invalido");
check=1;
volver = 1;
}
}
else {
Serial.println("Invalido");
check=1;
volver = 1;
}
}
else if (analogRead(xpin)<510){ //derecha (disminuyen las filas)
if ((filaini-longitud)>-1){
for (int i=filaini-1,j=0; i>(filaini-longitud-1) && j==0;i--)//i es la fila, j es un check
{
bool isOn = jugador[colini][i];
if (isOn) {j=1;check = 1;}//Barco en esa posición, que se termine el loop y diga que fallo
}
if (check == 0){ // colocar barco
for (int i=filaini; i>(filaini-longitud-1);i--)//i es la fila, j es un check
{
jugador[colini][i] = true;
lc.setLed(0,colini,i,true);
}
Serial.println("Barco colocado");
check = 1;} //izquierda
else{
Serial.println("Invalido");
check=1;
volver = 1;
}
}
else{
Serial.println("Invalido");
check=1;
volver = 1;
}
}
else if (analogRead(ypin)>520){ //arriba (disminuyen las colinis)
if ((colini-longitud)>-1){
for (int i=colini-1,j=0; i>(colini-longitud-1) && j==0;i--)//i es la fila, j es un check
{
bool isOn = jugador[i][filaini];
if (isOn) {j=1;check = 1;}//Barco en esa posición, que se termine el loop y diga que fallo
}
if (check == 0){ // colocar barco
for (int i=colini; i>(colini-longitud-1);i--)//i es la fila, j es un check
{
jugador[i][filaini] = true;
lc.setLed(0,i,filaini,true);
}
Serial.println("Barco colocado");
check = 1;} //izquierda
else{
Serial.println("Invalido");
check=1;
volver = 1;
}
}
else{
Serial.println("Invalido");
check=1;
volver = 1;
}
}
else if (analogRead(ypin)<500){ //abajo (aumentan las colinis)
if ((colini+longitud)<8){
for (int i=colini+1,j=0; i<(colini+longitud+1) && j==0;i++)//i es la fila, j es un check
{
bool isOn = jugador[i][filaini];
if (isOn) {j=1;check = 1;}//Barco en esa posición, que se termine el loop y diga que fallo
}
if (check == 0){ // colocar barco
for (int i=colini; i<(colini+longitud+1);i++)//i es la fila, j es un check
{
jugador[i][filaini] = true;
lc.setLed(0,i,filaini,true);
}
Serial.println("Barco colocado");
check = 1;} //izquierda
else{
Serial.println("Invalido");
check=1;
volver = 1;
}
}
else{
Serial.println("Invalido");
check=1;
volver = 1;
}
}
delay(100);
}
}
void posicioninicial(int numerito) {
int check = 0;
lc.setLed(1,col,filas,true);
while (check==0){
if(digitalRead(SW_pin) == 0 && pollo==20){
bool isOn = jugador[col][filas];
if (isOn) {
Serial.println("Ya hay un barco ahi");
check=0;
}
else{
filaini=filas;
colini=col;
lc.setLed(0,colini,filaini,true);
orientacion(numerito);
if(volver){
check = 0;
volver = 0;
lc.setLed(0,colini,filaini,false);
}
else{check = 1;}
}
}
else if(analogRead(xpin)>525 && filas<7){
lc.setLed(1,col,filas,false);
filas++;
lc.setLed(1,col,filas,true);
Serial.println("["+ String(col) + ","+ String(filas) +"]");
}
else if(analogRead(xpin)<510 && filas > 0){
lc.setLed(1,col,filas,false);
filas--;
lc.setLed(1,col,filas,true);
Serial.println("["+ String(col) + ","+ String(filas) +"]");
}
else if(analogRead(ypin)>520 && col > 0){
lc.setLed(1,col,filas,false);
col--;
lc.setLed(1,col,filas,true);
Serial.println("["+ String(col) + ","+ String(filas) +"]");
}
else if(analogRead(ypin)<500 && col < 7){
lc.setLed(1,col,filas,false);
col++;
lc.setLed(1,col,filas,true);
Serial.println("["+ String(col) + ","+ String(filas) +"]");
}
delay(100);
}
}
void posicionatacar(bool misses[8][8],bool hits[8][8]) {
lc.clearDisplay(0);
int check = 0;
bool cambio = 0;
int timer = 0;
lc.setLed(1,col,filas,true);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (misses[i][j]){
lc.setLed(0,i,j,true);
}
if (hits[i][j]){
lc.setLed(0,i,j,true);
}
}
}
while (check==0){
if(timer==10){
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (hits[i][j]){
lc.setLed(0,i,j,cambio);
}
}
}
cambio = !cambio;
timer = 0;
}
if (digitalRead(SW_pin) == 0 && pollo==50) {
posicionjuego(barcos2,ahogado1,agua1);
check = 1;
}
else if (digitalRead(SW_pin)==0 && pollo==60)
{
posicionjuego(barcos1,ahogado2,agua2);
check = 1;
}
else if(analogRead(xpin)>525 && filas<7){
lc.setLed(1,col,filas,false);
filas++;
lc.setLed(1,col,filas,true);
Serial.println("["+ String(col) + ","+ String(filas) +"]");
}
else if(analogRead(xpin)<510 && filas > 0){
lc.setLed(1,col,filas,false);
filas--;
lc.setLed(1,col,filas,true);
Serial.println("["+ String(col) + ","+ String(filas) +"]");
}
else if(analogRead(ypin)>520 && col > 0){
lc.setLed(1,col,filas,false);
col--;
lc.setLed(1,col,filas,true);
Serial.println("["+ String(col) + ","+ String(filas) +"]");
}
else if(analogRead(ypin)<500 && col < 7){
lc.setLed(1,col,filas,false);
col++;
lc.setLed(1,col,filas,true);
Serial.println("["+ String(col) + ","+ String(filas) +"]");
}
timer++;
delay(100);
}
}