Construir Array Multidimencional

10/06/2016

0

PHP

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.



<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>
Danilo Conrado

Danilo Conrado

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar