Array
(
)

Construir Array Multidimencional

PHP
Danilo Conrado
   - 10 jun 2016

Bom dia, estou cursando TSI, e estou finalizando um trabalho onde preciso construir um jogo batalha naval simples.
O tabuleiro precisa ser feito todo em php, o jogo em si com JS + AJAX+JQUERY, consegui fazer tudo.
Porem estou com uma duvida enorme, pois para construir o tabuleiro precisei fazer varios IF pois onde fica o navio nao pode ter nenhum outro ao lado, e tem varios tipos de navios com varios tamanhos, precisava otimizar o codigo, queri ver se tem alguma forma de verificar se uma determinada posição nessa matriz nao tem algo ao lado, lembrando que tenho que verificar todas as posições onde vai ficar partes do navio.

segue o codigo que hoje estou usando.

#Código

<html>
	<head>
	<link rel="stylesheet" type="text/css" href="style.css">
	<script src="jquery.js" type="text/javascript" charset="utf-8"></script>
	<style>
	#tabuleiro{
		margin-top:50px;
		margin-left:50px;
	}
	.celltabuleiro{
		border-style: groove;
		width:30px;
		height:30px;
		position :absolute;
	}
	.btnreset{
		margin-left: 1200px;
	}
	#agua{
		background-color: blue;
	}

	
	
	
	
	</style>
	
	
	
	
	</head>
	<body>
	<div id="tabuleiro">
		<?php
		error_reporting(E_ERROR | E_WARNING | E_PARSE); 
		function resetar(){
			echo '<script>location.href="index.php"</script>';
		}
		$tabuleiro= array();
			for($j=0;$j<30;$j++){
				

					
					for($i=0;$i<30;$i++){
						$tabuleiro[$j][$i]='';
						

					}

			}
			
			
			
			//////////////////////////////////CONTRUTOR DE NAVIOS

		$destroier = new StdClass;
		$destroier->tipo= "Destroier";
		$destroier->tamanho= 3;
		$destroier->qtd = 4;
		$destroier->img[0] ="<img id='destroier' src='img/destroier0.gif'>";
		$destroier->img[1] ="<img id='destroier' src='img/destroier1.gif'>";
		$destroier->img[2] ="<img id='destroier' src='img/destroier2.gif'>";
		$destroier->img[100] ="<img id='destroier' src='img/destroier100.gif'>";
		$destroier->img[101] ="<img id='destroier' src='img/destroier101.gif'>";
		$destroier->img[102] ="<img id='destroier' src='img/destroier102.gif'>";
		
		
		$boteinflavel = new StdClass;
		$boteinflavel->tipo= "Bote";
		$boteinflavel->tamanho= 1;
		$boteinflavel->qtd = 10;
		$boteinflavel->img[0] = "<img id='bote' src='img/bote_inflavel.gif'>";
		$boteinflavel->img[100] = "<img id='bote' src='img/bote_inflavel100.gif'>";
		
		$submarino = new StdClass;
		$submarino->tipo= "Submarino";
		$submarino->tamanho= 2;
		$submarino->qtd = 7;
		$submarino->img[0] = "<img id='submarino' src='img/submarino0.gif'>";
		$submarino->img[1] = "<img id='submarino' src='img/submarino1.gif'>";
		$submarino->img[100] = "<img id='submarino' src='img/submarino100.gif'>";
		$submarino->img[101] = "<img id='submarino' src='img/submarino101.gif'>";
			
		$portaavioes = new StdClass;
		$portaavioes->tipo= "Porta avioes";
		$portaavioes->tamanho= 5;
		$portaavioes->qtd = 3;
		$portaavioes->img[0] = "<img id='portaavioes' src='img/portaavioes0.gif'>";
		$portaavioes->img[1] = "<img id='portaavioes'  src='img/portaavioes1.gif'>";
		$portaavioes->img[2] = "<img id='portaavioes' src='img/portaavioes2.gif'>";
		$portaavioes->img[3] = "<img id='portaavioes'  src='img/portaavioes3.gif'>";
		$portaavioes->img[4] = "<img id='portaavioes'  src='img/portaavioes4.gif'>";
		$portaavioes->img[100] = "<img id='portaavioes' src='img/portaavioes100.gif'>";
		$portaavioes->img[101] = "<img id='portaavioes'  src='img/portaavioes101.gif'>";
		$portaavioes->img[102] = "<img id='portaavioes' src='img/portaavioes102.gif'>";
		$portaavioes->img[103] = "<img id='portaavioes'  src='img/portaavioes103.gif'>";
		$portaavioes->img[104] = "<img id='portaavioes'  src='img/portaavioes104.gif'>";

			
			
	function constroiNavio($tamanho,$tipo,$tabuleiro,$qtd,$img){

			for($x=0;$x<$qtd;$x++){
				$valido = false;
				$limite = 30-$tamanho;
				while(!$valido){
				  $posicao=rand(0,1);
					if($posicao==0){
						$randcoluna= rand(0,29);
						$randlinha= rand(0,29);
							if($tabuleiro[$randlinha-1][$randcoluna] == ''){$espacovalido = true;}else{$espacovalido = false;}
							  if($espacovalido == true){
									if($randlinha< $limite){

										for($i=0;$i<$tamanho;$i++){
											$espacovalido=false;

											for($es=0;$es<$tamanho;$es++){
																	   
																		
																			if($tabuleiro[$randlinha+$es][$randcoluna] == ''
												&& $tabuleiro[$randlinha+$es-1][$randcoluna-1] == ''
												&& $tabuleiro[$randlinha+$es-1][$randcoluna+1] == ''
												&& $tabuleiro[$randlinha+$es][$randcoluna-1]  == ''
												&& $tabuleiro[$randlinha+$es][$randcoluna+1] == ''
																			&& $tabuleiro[$randlinha+$es+1][$randcoluna] == ''
																			&& $tabuleiro[$randlinha+$es+2][$randcoluna] == ''
												&& $tabuleiro[$randlinha+$es+1][$randcoluna-1] == ''
												&& $tabuleiro[$randlinha+$es+1][$randcoluna+1] == ''       
																			 ){
																				
													$espacovalido=true;
													
												}
												else{
													$espacovalido=false;
												}

											}

												if($espacovalido == true){
													if($tabuleiro[$randlinha+$i][$randcoluna] == ''
													&& $tabuleiro[$randlinha+$i-1][$randcoluna-1] == ''
													&& $tabuleiro[$randlinha+$i-1][$randcoluna+1] == ''
													&& $tabuleiro[$randlinha+$i][$randcoluna-1]  == ''
													&& $tabuleiro[$randlinha+$i][$randcoluna+1] == ''
													&& $tabuleiro[$randlinha+$i+1][$randcoluna] == ''
													&& $tabuleiro[$randlinha+$i+1][$randcoluna-1] == ''
													&& $tabuleiro[$randlinha+$i+1][$randcoluna+1] == ''
													){
														$tabuleiro[$randlinha+$i][$randcoluna] = $img[$i];
														$valido=true;
													}
													else{
														$valido=false;
														break;
													}
												}
												if($valido==false){
													break;
												}
										}
									}
						}
					}
					else{
						$randlinha= rand(0,29);
						$randcoluna= rand(0,29);
							if($tabuleiro[$randlinha][$randcoluna-1] == ''){$espacovalido = true;}else{$espacovalido = false;}
							  if($espacovalido == true){
									if($randcoluna< $limite){

										for($i=0;$i<$tamanho;$i++){
											$espacovalido=false;

											for($es=0;$es<$tamanho;$es++){
																	   
																		
												if($tabuleiro[$randlinha][$randcoluna+$es] == ''
												&& $tabuleiro[$randlinha-1][$randcoluna+$es-1] == ''
												&& $tabuleiro[$randlinha+1][$randcoluna+$es-1] == ''
												&& $tabuleiro[$randlinha-1][$randcoluna+$es]  == ''
												&& $tabuleiro[$randlinha+1][$randcoluna+$es] == ''
												&& $tabuleiro[$randlinha][$randcoluna+$es+1] == ''
												&& $tabuleiro[$randlinha][$randcoluna+$es+2] == ''
												&& $tabuleiro[$randlinha-1][$randcoluna+$es+1] == ''
												&& $tabuleiro[$randlinha+1][$randcoluna+$es+1] == ''       
																			 ){
																				
													$espacovalido=true;
													
												}
												else{
													$espacovalido=false;
												}

											}

												if($espacovalido == true){
													if($tabuleiro[$randlinha][$randcoluna+$i] == ''
													&& $tabuleiro[$randlinha-1][$randcoluna+$i-1] == ''
													&& $tabuleiro[$randlinha+1][$randcoluna+$i-1] == ''
													&& $tabuleiro[$randlinha-1][$randcoluna+$i]  == ''
													&& $tabuleiro[$randlinha+1][$randcoluna+$i] == ''
													&& $tabuleiro[$randlinha][$randcoluna+$i+1] == ''
													&& $tabuleiro[$randlinha-1][$randcoluna+$i+1] == ''
													&& $tabuleiro[$randlinha+1][$randcoluna+$i+1] == ''
													){
														$tabuleiro[$randlinha][$randcoluna+$i] = $img["10".$i];
														$valido=true;
													}
													else{
														$valido=false;
														break;
													}
												}
												if($valido==false){
													break;
												}
										}
									}
						}
					}
				}
			}
		return $tabuleiro;
	}

	$tabuleiro = constroiNavio($portaavioes->tamanho,$portaavioes->tipo,$tabuleiro,$portaavioes->qtd,$portaavioes->img);
    $tabuleiro = constroiNavio($destroier->tamanho,$destroier->tipo,$tabuleiro,$destroier->qtd,$destroier->img);
    $tabuleiro = constroiNavio($submarino->tamanho,$submarino->tipo,$tabuleiro,$submarino->qtd,$submarino->img);
	$tabuleiro = constroiNavio($boteinflavel->tamanho,$boteinflavel->tipo,$tabuleiro,$boteinflavel->qtd,$boteinflavel->img);

	$celltop = 0;
	$cellleft = 0;

			for($j=0;$j<30;$j++){
				
					
					
					for($i=0;$i<30;$i++){
					$varia = rand(0,1);
						
						echo "<div class='celltabuleiro' id='".$j."_".$i."' style='top:".$celltop."px; left:".$cellleft."px;'>".$tabuleiro[$j][$i]."</div>";
                                                
                                                
						$cellleft= $cellleft+35;
						if($cellleft == 1050){
							$cellleft = 0;
							$celltop = $celltop+35;
						}
					
					}
					

				
			}
		
		
		
		?>
		
		
	</div> 	
		<input type="button" onclick="<?phpresetar()?>" value="Resetar" class="btnreset">





	</body>
</html>
<script>
$( ".celltabuleiro" ).click(function() {
	var verifica = $(this).children().attr('id');
	
	if( typeof verifica == 'undefined'){
		$(this).attr('id', 'agua');
	}
	else{
		$(this).children().attr('src','img/fogo.png');
		alert(verifica);
	}
  
});



































</script>