Jump to content
juniorquadros

Jogo da Velha em PHP

Recommended Posts

Bom dia pessoal, tô tentando fazer a validação das possibilidades de combinações de um jogo da velha. Horizontais, verticais e diagonais.

Matriz 3x3

00 - 01 - 02

10 - 11 - 12

20 - 21 - 22

Se o preenchimento for por Exemplo: Jogador 1, joga na (02), jogador 2 (11), jogador 1 (12), jogador 2(21), jogador 1(22). No caso jogador 1 ganharia, a validação ocorre de forma correta, porém se esse jogador tivesse preenchido outro campo, quebrando essa sequência, a validação não ocorre. Lógica que usei para validar, vejo se os 3 campos possuem conteúdo e dps comparo o conteúdo de todos, porém estou com esse problema. Obrigado!!

Share this post


Link to post
Share on other sites
16 minutos atrás, ygor.anjos disse:

como assim preenchido outro campo?

Por exemplo, se o jogador tivesse jogado

                 x

----|--------|-----

 O     O       x
----|--------|-----

 x     O       x

 

Apenas um exemplo da anomalia. Jogador 1, jogou primeira vez X na 02, depois jogador 2 O na 11, jogador 1 jogou X na 12, jogador 2 jogou O na 21, pela lógica JOGADOR 1 JOGARIA X NA 22 E GANHARIA O JOGO, mas digamos que ele jogou X na 21, e depois o jogador 2 jogou O na 10, e por ultimo ai sim agora o jogador 1 jogou X na 22 e completou a sequencia de 3 X. O correto era aparecer ganhador, pois nao aparece, caso eu tivesse feito a inserção na ordem lógica de um jogador, ele ganharia, porém fui testar sla, e não da, caso fuja de uma ''ordem de jogadas lógicas"

Share this post


Link to post
Share on other sites

entendi, você não pode usar uma sequencia lógica nesse caso, pois nem sempre o jogador vai colocar na ordem que você deseja, você precisa recuperar quais campos o jogador 1 colocou X e quais campos o jogador 2 colocou O, coloca eles em um array exemplo: $jogador1= [02,12,20,22]

 

e então você compara esse array com as combinações possíveis:

$combinacao1 = [02,20,22];

 

 

Share this post


Link to post
Share on other sites
55 minutos atrás, ygor.anjos disse:

entendi, você não pode usar uma sequencia lógica nesse caso, pois nem sempre o jogador vai colocar na ordem que você deseja, você precisa recuperar quais campos o jogador 1 colocou X e quais campos o jogador 2 colocou O, coloca eles em um array exemplo: $jogador1= [02,12,20,22]

 

e então você compara esse array com as combinações possíveis:

$combinacao1 = [02,20,22];

 

 

Tipo, eu uso isset nos campos que formariam uma combinação, para ver se tem conteudo, e depois realizava o teste para verificar se todos são iguais, não era pra funcionar mesmo não sendo na ordem, por que o resultado dos issets seriam verdadeiros, mesmo não sendo na mesma ordem?

Share this post


Link to post
Share on other sites
19 minutos atrás, ygor.anjos disse:

posta o código, fica mais facil

<?php
session_start();

error_reporting(E_ERROR | E_WARNING | E_PARSE);

function ganhador(){
	if(isset($_SESSION['game'][0][0]) && isset($_SESSION['game'][0][1]) && isset($_SESSION['game'][0][2])){
		if(($_SESSION['game'][0][0]==$_SESSION['game'][0][1]) && ($_SESSION['game'][0][1]==$_SESSION['game'][0][2])){
			echo "ganhador"; //linha 1 --->
		}
	}else if(isset($_SESSION['game'][1][0]) && isset($_SESSION['game'][1][1]) && isset($_SESSION['game'][1][2])){
		if(($_SESSION['game'][1][0]==$_SESSION['game'][1][1]) && ($_SESSION['game'][1][1]==$_SESSION['game'][1][2])){
			echo "ganhador"; //linha 2 --->
		}
	}else if(isset($_SESSION['game'][2][0]) && isset($_SESSION['game'][2][1]) && isset($_SESSION['game'][2][2])){
		if(($_SESSION['game'][2][0]==$_SESSION['game'][2][1]) && ($_SESSION['game'][2][1]==$_SESSION['game'][2][2])){
			echo "ganhador"; //linha 3 --->
		}
	}else if(isset($_SESSION['game'][0][0]) && isset($_SESSION['game'][1][0]) && isset($_SESSION['game'][2][0])){
		if(($_SESSION['game'][0][0]==$_SESSION['game'][1][0]) && ($_SESSION['game'][1][0]==$_SESSION['game'][2][0])){
			echo "ganhador"; //linha 4 | esquerda
		}
	}else if(isset($_SESSION['game'][0][1]) && isset($_SESSION['game'][1][1]) && isset($_SESSION['game'][2][1])){
		if(($_SESSION['game'][0][1]==$_SESSION['game'][1][1]) && ($_SESSION['game'][1][1]==$_SESSION['game'][2][1])){
			echo "ganhador"; //linha 5 | meio
		}
	}else if(isset($_SESSION['game'][0][2]) && isset($_SESSION['game'][1][2]) && isset($_SESSION['game'][2][2])){
		if(($_SESSION['game'][0][2]==$_SESSION['game'][1][2]) && ($_SESSION['game'][1][2]==$_SESSION['game'][2][2] && ($_SESSION['game'][2][2]==$_SESSION['game'][0][2]))){
			echo "ganhador"; //linha 6 | direita
		}
	}else if(isset($_SESSION['game'][0][0]) && isset($_SESSION['game'][1][1]) && isset($_SESSION['game'][2][2])){
		if(($_SESSION['game'][0][0]==$_SESSION['game'][1][1]) && ($_SESSION['game'][1][1]==$_SESSION['game'][2][2])){
			echo "ganhador"; //diagonal esq-dir
		}
	}
}

if(isset($_SESSION['jogada'])==0){
	$_SESSION['jogada']=0;
	if(isset($_SESSION['jogada'])){
		if($_SESSION['jogada']%2==0){
			$valor='x';
		}else{
			$valor='y';
		}
	}
}else{
	$_SESSION['jogada']++;
		if(isset($_SESSION['jogada'])){
			if($_SESSION['jogada']%2==0){
				$valor='x';
			}else{
				$valor='y';
		}
	}
}

if(isset($_SESSION['game'])==0){
	$_SESSION['game']=array(
						array($_POST['botao0'],$_POST['botao1'],$_POST['botao2']),
						array($_POST['botao3'],$_POST['botao4'],$_POST['botao5']),
						array($_POST['botao6'],$_POST['botao7'],$_POST['botao8']));
}

if(isset($_SESSION['game'])){
	if(isset($_POST['botao0'])){
		$_SESSION['game'][0][0]=$valor;
		ganhador();
	}
	if(isset($_POST['botao1'])){
		$_SESSION['game'][0][1]=$valor;
		ganhador();
	}
	if(isset($_POST['botao2'])){
		$_SESSION['game'][0][2]=$valor;
		ganhador();
	}
	if(isset($_POST['botao3'])){
		$_SESSION['game'][1][0]=$valor;
		ganhador();
	}
	if(isset($_POST['botao4'])){
		$_SESSION['game'][1][1]=$valor;
		ganhador();
	}
	if(isset($_POST['botao5'])){
		$_SESSION['game'][1][2]=$valor;
		ganhador();
	}
	if(isset($_POST['botao6'])){
		$_SESSION['game'][2][0]=$valor;
		ganhador();
	}
	if(isset($_POST['botao7'])){
		$_SESSION['game'][2][1]=$valor;
		ganhador();
	}
	if(isset($_POST['botao8'])){
		$_SESSION['game'][2][2]=$valor;
		ganhador();
	}
}

if(isset($_SESSION['game'])){
	print_r($_SESSION['game']);
}


if(isset($_POST['destruir'])){
	session_destroy();
}
	
?>
<!DOCTYPE html>
<html>
<head>
	<title>Jogo da Velha</title>
</head>
<body>
<form action="" name="form" method="POST">
 	<input type="submit" name="botao0" value="<?php 
 		if(isset($_SESSION['game'][0][0])==0){
 			echo " "; 
 		}else{ 
 			echo $_SESSION['game'][0][0];
 		}?>">	
	<input type="submit" name="botao1" value="<?php 
 		if(isset($_SESSION['game'][0][1])==0){
 			echo " "; 
 		}else{ 
 			echo $_SESSION['game'][0][1];
 		}?>">
	<input type="submit" name="botao2" value="<?php 
 		if(isset($_SESSION['game'][0][2])==0){
 			echo " "; 
 		}else{ 
 			echo $_SESSION['game'][0][2];
 		}?>">
	<br>
	<input type="submit" name="botao3" value="<?php 
 		if(isset($_SESSION['game'][1][0])==0){
 			echo " "; 
 		}else{ 
 			echo $_SESSION['game'][1][0];
 		}?>">	
	<input type="submit" name="botao4" value="<?php 
 		if(isset($_SESSION['game'][1][1])==0){
 			echo " "; 
 		}else{ 
 			echo $_SESSION['game'][1][1];
 		}?>">
	<input type="submit" name="botao5" value="<?php 
 		if(isset($_SESSION['game'][1][2])==0){
 			echo " "; 
 		}else{ 
 			echo $_SESSION['game'][1][2];
 		}?>">
	<br>
	<input type="submit" name="botao6" value="<?php 
 		if(isset($_SESSION['game'][2][0])==0){
 			echo " "; 
 		}else{ 
 			echo $_SESSION['game'][2][0];
 		}?>">	
	<input type="submit" name="botao7" value="<?php 
 		if(isset($_SESSION['game'][2][1])==0){
 			echo " "; 
 		}else{ 
 			echo $_SESSION['game'][2][1];
 		}?>">
	<input type="submit" name="botao8" value="<?php 
 		if(isset($_SESSION['game'][2][2])==0){
 			echo " "; 
 		}else{ 
 			echo $_SESSION['game'][2][2];
 		}?>">
	<br>
	<br>
	<input type="submit" name="mostrar" value="mostrar">
	<input type="submit" name="destruir" value="destruir">
</form>
</body>
</html>

 

20 minutos atrás, ygor.anjos disse:

posta o código, fica mais facil

Postei ele, talvez tenha maneira melhor, porém só pensei essa forma de fazer e estava convicto que funcionaria, mas de última notei a anomalia que citei.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By helkton
      Bom galera tenho um cardápio, onde cada categoria do cardápio tem um limite de itens que podem ser adicionados, agora preciso limitar os inputs selecionados de acordo com limite de cada categoria..
      olha meu código como esta...
      ////////////////////////////// aqui pego as categorias juntamente com os limites /////////////////////////////////// <?php $sqlConsultExtrasDelivery = "SELECT * FROM extras_delivery_item INNER JOIN extras_delivery ON(extras_delivery_item.idExtraItem = extras_delivery.idExtraDelivery) WHERE extras_delivery_item.idItem = '".$resultItemCardapio->iditemCategoria."' AND extras_delivery_item.checked = '1' "; $conectaConsultExtrasDelivery = $conectaDelivery->query($sqlConsultExtrasDelivery); while($resultExtrasDelivery = $conectaConsultExtrasDelivery->fetch_object()){ $limteExtra = $resultExtrasDelivery->limiteExtra;?> ////////////////////////////// aqui pego as categorias juntamente com os limites /////////////////////////////////// ////////////////////////////// aqui monto os itens de cada categoria /////////////////////////////////// <?php $sqlConsultItensExtras = "SELECT * FROM item_extra WHERE idItemExtra = '".$resultExtrasDelivery->idExtraDelivery."' "; $conectaConsultItensExtras = $conectaDelivery->query($sqlConsultItensExtras); while($resultItensExtras = $conectaConsultItensExtras->fetch_object()){?> ////////////////////////////// aqui monto os itens de cada categoria /////////////////////////////////// <input type="checkbox" class='limited' name="idExtraSelects[]" id="check<?php echo $resultItensExtras->idExtra?>" value="<?php echo $resultItensExtras->idExtra?>"> <label class="custom-control-description" for="check<?php echo $resultItensExtras->idExtra?>"> <?php echo utf8_encode($resultItensExtras->nomeItemExtra)?> </label> <script> $(function(){ var MAX_SELECT = <?php echo $limteExtra?>; // Máximo de 'input' selecionados $('input.limited').on('change', function(){ if( $(this).siblings(':checked').length >= MAX_SELECT ){ this.checked = false; } }); }); </script> <?php }?> <?php }?> não sei o que esta acontecendo pois ele esta limitando a 1 item no geral independente dos itens que seleciono 
    • By dkpimentel
      Olá.
      Estou tendo problemas na lib gd, quado gero um imagem na tela estando em um VM localhost a imagem gera normal, quando envio o projeto para uma VPS a imagem não gera e fica com a tela toda branca, já verifiquei se nas duas versões do php e a lib gd estão iguais, já tentei vários procedimentos e ainda não consegui, alguém pode dar uma ajuda?
       
      Grato pela atenção...
    • By Chris Martin
      Pessoal, estou com um problema com relacionamentos no laravel. (Inclusive pode ser até falta de atenção minha), mas quebrei a cabeça demais e não consegui; Tenho as tabelas 'arquiteto' e 'cliente' e um arquiteto tem vários clientes, só que não consegui fazer o relacionamento aparecer na tabela 'cliente' tenho o campo `arquiteto_id' que referencia o 'id' da tabela 'arquitetos', só que quando fiz a relação na model Arquiteto ela não está aparecendo class Arquiteto extends Model{ protected $fillable = [...]; public function clientes() { return $this->hasMany('App\Cliente'); } }  
    • By inousi
      Quando faço login, não reconhece user/email já registrado anteriormente no bd.
      Scripts para registro e login de usuário:
      - registro usuário.php
      - server.php
      - login.php
      O de registro de usuário está ok. Faz o registro no bd (mysql).
      O de login resulta na mensagem: "Wrong username/password". (linha 79 do server.php) - apesar de ter sido confirmado o registro e conferida sua gravação no bd (users.php)
       
      script server.php
      <?php session_start(); // initializing variables $user_name = ""; $user_email = ""; $errors = array(); // connect to the database $db_sys = mysqli_connect('localhost', 'root', '', 'sys'); // REGISTER USER if (isset($_POST['user_reg'])) { // receive all input values from the form $user_name = mysqli_real_escape_string($db_sys, $_POST['user_name']); $user_email = mysqli_real_escape_string($db_sys, $_POST['user_email']); $user_pass1 = mysqli_real_escape_string($db_sys, $_POST['user_pass1']); $user_pass2 = mysqli_real_escape_string($db_sys, $_POST['user_pass2']); // form validation: ensure that the form is correctly filled ... // by adding (array_push()) corresponding error unto $errors array if (empty($user_name)) { array_push($errors, "Username is required"); } if (empty($user_email)) { array_push($errors, "Email is required"); } if (empty($user_pass1)) { array_push($errors, "Password is required"); } if ($user_pass1 != $user_pass2) { array_push($errors, "The two passwords do not match"); } // check the database a user does not already exist with the same username and/or email $user_check_query = "SELECT * FROM users WHERE user_name='$user_name' OR user_email='$user_email' LIMIT 1"; $result = mysqli_query($db_sysgo, $user_check_query); $user = mysqli_fetch_assoc($result); if ($user) { // if user exists if ($user['user_name'] === $user_name) { array_push($errors, "Username already exists"); } if ($user['user_email'] === $user_email) { array_push($errors, "email already exists"); } } // Register user if there are no errors if (count($errors) == 0) { //encrypt the password $user_pass = md5($user_pass1); $query = "INSERT INTO users (user_name, user_email, user_pass) VALUES('$user_name', '$user_email', '$user_pass')"; mysqli_query($db_sys, $query); $_SESSION['user_name'] = $user_name; $_SESSION['success'] = "You are now logged in"; header('location: index.php'); } } // LOGIN USER if (isset($_POST['login'])) { $user_name = mysqli_real_escape_string($db_sys, $_POST['user_name']); $user_pass = mysqli_real_escape_string($db_sys, $_POST['user_pass']); if (empty($user_name)) { array_push($errors, "Username is required"); } if (empty($user_pass)) { array_push($errors, "Password is required"); } if (count($errors) == 0) { $user_pass = md5($user_pass); $query = "SELECT * FROM users WHERE user_name='$user_name' AND user_pass='$user_pass'"; $results = mysqli_query($db_sys, $query); if (mysqli_num_rows($results) == 1) { $_SESSION['user_name'] = $user_name; $_SESSION['success'] = "You are now logged in"; header('location: index.php'); }else { //AQUI ESTÁ O ERRO QUE MOSTRA array_push($errors, "Wrong username/password"); } } } ?> <?php if (count($errors) > 0) : ?> <div class="error"> <?php foreach ($errors as $error) : ?> <p><?php echo $error ?></p> <?php endforeach ?> </div> <?php endif ?>  
      login.php
      <?php include('server.php') ?> <!DOCTYPE html> <html> <head> <title>Login</title> <link rel="stylesheet" type="text/css" href="user_style.css"> </head> <body> <div class="header"> <h2>Login</h2> </div> <form method="post" action="login.php"> <?php include('errors.php'); ?> <div class="input-group"> <label>Username</label> <input type="text" name="user_name" > </div> <div class="input-group"> <label>Password</label> <input type="password" name="user_pass"> </div> <div class="input-group"> <button type="submit" class="btn" name="login">Login</button> </div> <p> Not yet a member? <a href="reg_user.php">Sign up</a> </p> </form> </body> </html>  
    • By Sapinn
      Salveee! Certo a dúvida que trarei aqui agora é bem complexa e eu sinceramente não sei se é realmente possível mas acho que não custa nada perguntar.
       
      Fiz um site de envio de textos, onde o aluno envia um texto e o professor corrigi até ai blz, queria saber como eu poderia fazer pra quando o professor marcar uma palavra aprece-se uma caixa de dialogo onde ele colocaria, por exemplo, a correção da palavra ou alguma explicação e essas informações seriam enviadas para o banco de dados quando o aluno acessa a correção desse texto e o ele passa-se  mouse por cima dessa palavra apareceria a correção em um balãozinho. Como exemplo desse comportamento que acabei de citar temos o google documents que faz algo desse jeito. Queria saber se isso pode ser possível sem exigir muito código ou muita coisa. Desde já agradeço.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.