• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kingless

[PHP]Jogo do galo em PHP

12 mensagens neste tópico

Jogo do galo em PHP.

Demo:

http://www.kingless.net/jogo.php

Download:

http://www.kingless.net/download.php?filename=jogo.php

Source Code:

http://www.kingless.net/download.php?filename=jogo.php;source

O jogo ainda esta em fase de testes e por isso ainda não funciona muito bem já foram reportados varios bugs e já a estou a corrigir os bugs em breve lançarei a versão final.  ;)

/**
* @version $Id: jogo.php,v 1.5 10-03-2007 19:01:07 kingless Exp $
* @package Jogo do Galo
* @copyright Copyright (c) 2007 by Luis Filipe (http://www.kingless.net).
* 
* Jogo do Galo is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Jogo do Galo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*
* @license http://www.gnu.org/copyleft/gpl.txt
*
* @version Jogo do Galo 1.0 (Beta)
* @author Luis Filipe (kingless) - <blastelf@gmail.com>
*/
<html>
<head>
<title>Jogo do Galo - Desenvolvido por kingless</title>
<style type="text/css">
body {
margin-top: 10%;
background-color: #fcfcfc;
}
#jogo {
margin-right: auto;
margin-left: auto;
border: 1px solid #e7e7e7;
background-color: #f0f0f0;
text-align: center;
width: 250px;
height: 250px;
}
#blocks {
border: 1px solid #ffffff;
width: 60px;
height: 60px;
}
input {
border: 0px;
background-color: transparent;
text-align: center;
width: 80px;
height: 25px;
font-size: 18px;
font-weight: bold;
cursor: pointer;
}
#won {
font-size: 18px;
font-weight: bold;
color: green;
}
#lost {
font-size: 18px;
font-weight: bold;
color: red;
}
#draw {
font-size: 18px;
font-weight: bold;
color: blue;
}
a {
font-size: 14px;
font-weight: bold;
color: #0b55c4;
text-decoration: none;
}
#msg {
position: absolute;
left: 37.5%;
border: 1px solid #e7e7e7;
background: #ffffff;
width:  254px;
height: 249px;
opacity:.60;
filter: alpha(opacity=60); 
-moz-opacity: 0.6;
}
#msg {
position: absolute;
left: 37.5%;
border: 1px solid #e7e7e7;
background: #ffffff;
width:  254px;
height: 249px;
opacity:.60;
filter: alpha(opacity=60);
-moz-opacity: 0.6;
}
</style>
<script type="text/javascript">
function play ( id ) {
value = document.getElementById( id ).value;
if( value != '' ) {
	return false;
}
document.getElementById( id ).value = 'X';
document.getElementById( 'game' ).submit()
}

</script>
</head>
<body>
<?php
$game = new game();
$game->play();
?>
</table>
</form>
</body>
</html>

<?php

class game {

var $wins = array( 123, 147, 159, 258, 369, 357, 456, 789 );
var $free = array();
var $values = array( 1 => '', 2 => '', 3 => '', 4 => '', 5 => '', 6 => '', 7 => '', 8 => '', 9 => '' );
var $plays = array( 'X' => array(), 'O' => array());
var $computer = 'O';
var $player = 'X';
var $msg = array( 'won' => 'Venceste o jogo', 'lost' => 'Perdeste o jogo', 'draw' => 'Empate', 'playagain' => 'Jogar outra vez' ); 
var $colors = array( 'O' => 'blue', 'X' => 'red' );

function game() {

	if(!isset( $_POST['play'] )) {
		 $this->tableRow(1);
		 $this->tableRow(2);
		 $this->tableRow(3);
		 die();
	}

	foreach( $_POST['play'] as $num => $player ) {
		if($player == $this->computer || $player == $this->player ) {
			array_push( $this->plays[$player], $num );
		} else {
			$this->free[] = $num;
		}
	}

	$msg = (!$this->verify()) ? false : $this->verify();

	if(!empty( $msg )) {
		$this->setValues();
		$this->tableRow(1, $msg);
		$this->tableRow(2);
		$this->tableRow(3);
		die();
	}
}

function play() {

	$player = $this->plays[$this->player];
	$computer = $this->plays[$this->computer];

	$num = count( $player );
	$win = 0;
	$comp = 0;
	$played = false;

	foreach( $this->wins as $wins ) {
		for($x = 0; $x <  $num;$x++ ) {

			$win = ereg( $player[$x], $wins ) ? $win+1 : $win;
			$comp = @ereg( $computer[$x], $wins ) ? $comp+1 : $win;

			if(!$played) {
				if($comp == 2) {
					foreach( $this->free as $free ) {
						if(ereg( $free, $wins )) {
							array_push( $this->plays[$this->computer], $free );
							$played = true;
						}
					}
				} elseif($win == 2) {
					foreach( $this->free as $free ) {
						if(ereg( $free, $wins )) {
							array_push( $this->plays[$this->computer], $free );
							$played = true;
						}
					}
				} 
			}
		}

		$win = 0;
		$comp = 0;
	}

	if(!$played) {
		srand((float) microtime() * 10000000);
		$rand = @array_rand($this->free, 1);
		$free = isset($this->free[$rand]) ? $this->free[$rand] : '';
		array_push( $this->plays[$this->computer], $free );
		$played = true;
	}

	$msg = (!$this->verify()) ? false : $this->verify(); 

	$this->setValues();
	$this->tableRow(1, $msg);
	$this->tableRow(2);
	$this->tableRow(3);
}

function setValues() {
	foreach( $this->plays[$this->computer] as $play ) {
		$this->values[$play] = $this->computer;
	}

	foreach( $this->plays[$this->player] as $play ) {
		$this->values[$play] = $this->player;
	}
}

function verify() {

	$player = $this->plays[$this->player];
	$computer = $this->plays[$this->computer];

	$plays = count( $player );
	$num['player'] = 0;
	$num['computer'] = 0;

	foreach( $this->wins as $win ) {
		for($x = 0; $x < $plays; $x++ ) {
			if(ereg( $player[$x], $win )) {
				$num['player'] += 1;
			} elseif(@ereg( $computer[$x], $win )) {
				$num['computer'] += 1;
			}
		}

		if( $num['computer'] == 3 ) {
			return $this->msg( 'lost' );
		} elseif( $num['player'] == 3 ) {
			return $this->msg( 'won'  );
		} elseif(count( $this->free ) == 0) {
			return $this->msg( 'draw' );
		} else {
			$num['player'] = 0;
			$num['computer'] = 0;
		}
	}
	return false;
}

function msg( $type ) {

	$msg = false;

	switch( $type ) {
		case "won":
			$msg =  '<center><span id="won">'. $this->msg['won'] .'</span></center>';
		break;
		case "lost":
			$msg = '<center><span id="lost">'. $this->msg['lost'] .'</span></center>';
		break;
		case "draw":
			$msg = '<center><span id="draw">'. $this->msg['draw'] .'</span></center>';
		break;
		case "playagain":
			$msg = '<center><a href="'. $_SERVER['PHP_SELF'] .'"><span id="playagain">'. $this->msg['playagain'] .'</span></a></center>';
	}
	return $msg;
}

function getColor( $player = '' ) {
	if(empty( $player )) {
		return false;
	}

	return 'style="color: '. $this->colors[$player] .';" ';
}

function tableRow( $num, $msg = '' ) {

	$value = $this->values;

	if(!empty( $msg )) {
		echo '<div id="msg">'. $msg .'<br />'. $this->msg( 'playagain' ) ."</div>\r\n";
	}

	switch( $num ) {
		case '1':
			echo '<form action="jogo.php" method="post" id="game">
<table id="jogo" cellspacing="0">
<tr>
<td id="blocks" style="border-right: 1px solid #e7e7e7; border-bottom: 1px solid #e7e7e7;">
<input type="text" name="play[1]" id="play1" value="'. $value[1] .'" readonly="readonly" onclick="play( \'play1\' )" '. $this->getColor( $value[1] ) .'/>
</td>
<td id="blocks" style="border-right: 1px solid #e7e7e7; border-bottom: 1px solid #e7e7e7;">
<input type="text" name="play[2]" id="play2" value="'. $value[2] .'" readonly="readonly" onclick="play( \'play2\' )" '. $this->getColor( $value[2] ) .'/>
</td>
<td id="blocks" style="border-bottom: 1px solid #e7e7e7;">
<input type="text" name="play[3]" id="play3" value="'. $value[3] .'" readonly="readonly"  onclick="play( \'play3\' )" '. $this->getColor( $value[3] ) .'/>
</td>
</tr>';
			break;
		case '2':
			echo '<tr>
<td id="blocks" style="border-right: 1px solid #e7e7e7; border-bottom: 1px solid #e7e7e7;">
<input type="text" name="play[4]" id="play4" value="'. $value[4] .'" readonly="readonly"  onclick="play( \'play4\' )" '. $this->getColor( $value[4] ) .'/></td>
<td id="blocks" style="border-right: 1px solid #e7e7e7; border-bottom: 1px solid #e7e7e7;">
<input type="text" name="play[5]" id="play5" value="'. $value[5] .'" readonly="readonly"   onclick="play( \'play5\' )" '. $this->getColor( $value[5] ) .'/>
</td>
<td id="blocks" style="border-bottom: 1px solid #e7e7e7;">
<input type="text" name="play[6]" id="play6" value="'. $value[6] .'" readonly="readonly"  onclick="play( \'play6\' )" '. $this->getColor( $value[6] ) .'/>
</td>
</tr>';
			break;
		case '3':
			echo '<tr>
<td id="blocks" style="border-right: 1px solid #e7e7e7;">
<input type="text" name="play[7]" id="play7" value="'. $value[7] .'" readonly="readonly"  onclick="play( \'play7\' )" '. $this->getColor( $value[7] ) .'/>
</td>
<td id="blocks" style="border-right: 1px solid #e7e7e7;">
<input type="text" name="play[8]" id="play8" value="'. $value[8] .'" readonly="readonly"  onclick="play( \'play8\' )" '. $this->getColor( $value[8] ) .'/>
</td>
<td id="blocks">
<input type="text" name="play[9]" id="play9" value="'. $value[9] .'" readonly="readonly"  onclick="play( \'play9\' )" '. $this->getColor( $value[9] ) .'/>
</td>
</tr>';
			break;
	}
	return true;
}
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Encontrei um erro:

Mesmo eu tendo ganho diz que houve um empate e pergunta se quero jogar outra vez....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E ele continua a preferir defender, mesmo quando pode ganhar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu já tinha reportado isso ontem...

Mas o kingless diz que aind está em fase de testes daí ter erros...

No entanto sempre podes corrigir, kingless.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, tambem ja ontem tinha visto isso, mas pensei que ele ja tivesse alterado o codigo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ontem eu tentei corrigir todos os erros mas não consegui hoje quando tiver tempo vou acabar de corrigir os erros ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya, também ganhei e ele diz que empatei... not fair... ;) e o gajo faz sempre as mesmas jogadas... eu joguei no meio, e ele joga sempre no mesmo sitio...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou com um bocado de dificuldade em corrigir algumas bugs mas acho que vou conseguir corrigir ainda hoje ;)

PS: Já agora, estou a pensar em fazer um jogo de damas em PHP mas como é muito mais difícil não sei se vou fazer mesmo :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bah.. tens de melhorar isso... ;)

Principalmente a parte onde diz que empatei quando na realidade ganhei... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que devias primeiro terminar o jogo do galo e eliminar os bugs antes de começares um novo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora