Discussão para a 5ª reunião

1 view
Skip to first unread message

Diogo_RBG

unread,
Sep 14, 2009, 9:37:33 PM9/14/09
to GrupoJ
Por enquanto a coisa tá indo, mas a gente não pode facilitar. Principalmente com as reuniões.

Durante a semana é onde cada um se submete a fazer algo pelo projeto e usa o grupo para levantar questões que serão discutidas na reunião... ou até antes mesmo.
A discussão sobre o sistema de batalha está se desenvolvendo bem. Só que ainda falta discutir sobre o servidor em PHP.

Eu criei uma pequena parte do código do servidor hoje. O arquivo velha/jogo.php. O qual é responsável pelo andamento do jogo.
Até agora ele tem duas funções:
* &jogar
Se o código receber o parâmetro jogar, jogar_3x3 ou jogar_4x4 ele imediatamente cria uma partida para que isso seja possível.
- Se não existir ninguém no servidor querendo jogar ele cria uma nova partida. e informa se é 3x3 (default) ou 4x4. Se por acaso ele clicar em jogar de novo a partida é apenas atualizada com os novos dados 3x3 ou 4x4.
- Se já houver uma partida significa que existe alguém querendo jogar. Neste caso ele inicia a partida imediatamente (muda seu estado para em_jogo) e avisa para seu oponente que a partida foi iniciada (insere o aviso no banco de dados para que o cliente fique ciente... se por acaso ele acessar index.php ou info.php).

* &partidas
Lista todas partidas em aberto do jogador: agd_jogador, agd_convite, em_jogo. Só não lista as finalizada.

O próximo passo é enviar jogadas para o jogo.php?partida=1&jogada=4&vetJogo=####x####
* partida - é o id da partida. Ele deve ser enviado caso haja mais de uma partida em jogo.
* jogada - as jogadas vão de 0 a 9. e indicam a posição onde foi jogado. 4 significa jogar no centro.
* vetJogo - envia todo o jogo ao servidor. Serve para que ele certifique que o cliente realmente saba como está o estado atual do jogo. (optativo)

Para que o cliente não fique como um maluco enviando GET pra tudo quanto é código que irei criar eu fiz o index.php incluir todos os arquivos php. basta chamar index.php?jogo que ele inclui o jogo.php tbm. Já as mensagens de info (info.php) nem precisa pedir pra incluir.

Quem quiser conferir eu coloquei alguns arquivos. Estão muito pequenos por enquanto... o que é bom !

--
Diogo Rigo de Brito Guimarães
Bacharel em Ciência da Computação - UFT
Portal C++ - http://diogorbg.blogspot.com

jogo.php
index.php
func.php

Renan Alan

unread,
Sep 15, 2009, 12:01:41 AM9/15/09
to Grupo de Desenvolvimento de Jogos - UFT
Muito bom Diogo !!!

Diogo_RBG

unread,
Sep 16, 2009, 6:58:36 PM9/16/09
to grupo...@googlegroups.com


Já tenho mais coisas definidas sobre o servidor.
Chamando: http://127.0.0.1/servidorphp/serv/velha/index.php?jogo&partidas
Temos como resposta:
<?xml version='1.0' encoding='utf-8'?>
<index>
<login id='diogorbg' sessao='e2ee77743b5e9d8fe0c8556d78117389'/>

<!-- info.php -->
<info>
</info>


<!-- jogo.php -->
<jogo>
<partidas num='1'>
<partida id='14' est='agd_jogador' tipo='3x3' dt_inic='2009-09-16 19:32:19'>
<jogadores login1='diogorbg' login2=''/>
      <placar jogos='0' vit1='0' vit2='0'/>
</partida>
</partidas>
<jogos num='2'>
<partida id='13' tipo='3x3' dt_inic='2009-09-15 22:07:37'>
<jogadores login1='fulano' login2='diogorbg'/>
<placar jogos='0' vit1='0' vit2='0'/>
<jogo est='em_jogo' jogo='x-o-x----' jogador='o' jogada='0' dt_inic='2009-09-16 15:58:07'/>
</partida>
    <partida id='11' tipo='4x4' dt_inic='2009-09-15 21:13:33'>
<jogadores login1='diogorbg' login2='fulano'/>
<placar jogos='0' vit1='0' vit2='0'/>
<jogo est='iniciado' jogo='----------------' jogador='x' jogada='-1' jogada2='-1' dt_inic='2009-09-15 22:02:05'/>
</partida>
</jogos>
</jogo>

</index>
O parâmetro jogo inclui jogo.php dentro do index... e o parâmetro jogadas lista as jogadas pendentes... seja adg_jogador ou adg_convite. (posso até chamá-las de pendentes depois !)

A novidade é a tag jogos. Ela lista as partidas em_jogo e o atual estado do jogo. A tag não diferencia em quase nada.. a não ser a tag extra jogo. Que informa diversas informações sobre o jogo:
est - estado do jogo. que pode ser {iniciado, em_jogo ou finalizado}
jogo - é a matriz de peças em forma de vetor.
jogador - é o jogador atual... o jogador que deve jogar neste instante
login - não incluí ainda... mas diz qual o login atual que deve jogar. Que é bem parecido com o jogador... mas sem informar a peça da vez. Vamos supor que o x sempre começa... isso significa que os jogadores trocam de peça para trocar a ordem de quem começa o jogo. No jogo de xadrez as brancas sempre começam... no jogo da velha não importa muito.. mas pode ser sempre o x.
jogada - indica qual foi a ultima jogada... se tiver -1 ou não informado é porque não teve ultima jogada (o estado do jogo ainda permanece em iniciado)
dt_inic - a data de inicio do jogo.

Diogo_RBG

unread,
Sep 17, 2009, 5:42:33 PM9/17/09
to grupo...@googlegroups.com
E a implementação do servidor continua...

O XML vai ser daquele jeito msm. Quem não vou mudar mais nada... a não ser mais informações do tipo:
<info id='seuTurno'>É sua vez de jogar</info>
Que virá dentro da tag jogos.

E mais uma informação na tag jogo:
<jogo est='finalisado' analise='vitoria_x' jogo='x-oxxoxo-' jogador='o' jogada='0' dt_inic='2009-09-16 15:58:07'/>
Quando o jogo estiver finalizado irá aparecer o atributo análise informando quem ganhou.. se deu empate... estas coisas.

Agora eu estou trabalhando em uma classe em PHP que irá controlar todos os estados do jogo. Ao enviar jogadas o jogo irá analisar se aquela é uma jogada válida... e tbm se é sua vez de jogar ! claro !
Por enquanto a classe é capaz de analisar o objetivo do jogo (se alguém ganhou):

//! Analisa se deu empate, vitoria_x, vitoria_o ou permanece em_jogo.
function analisarObjetivo($jogo){
    $n = $this->num;
    $lin = array(0, 0, 0, 0);
    $col = array(0, 0, 0, 0);
    $diag = array(0, 0);
    $_ = 0;

    for($j=0; $j<$n; $j++){
        for($i=0; $i<$n; $i++){
            $p = $jogo[ $this->getId($i, $j) ];
            if($p=='x'){
                $lin[$j] ++;
                $col[$i] ++;
                if($i==$j) $diag[0] ++;
                if($i==$n-($j+1)) $diag[1] ++;
            }else if($p=='o'){
                $lin[$j] --;
                $col[$i] --;
                if($i==$j) $diag[0] --;
                if($i==$n-($j+1)) $diag[1] --;
            }else
                $_ = 1;
        }
    }

    if($diag[0]==$n || $diag[1]==$n)
        return 'vitoria_x';
    if($diag[0]==-$n || $diag[1]==-$n)
        return 'vitoria_o';
    for($i=0; $i<$this->num; $i++){
        if($lin[$i]==$n || $col[i]==$n)
            return 'vitoria_x';
        if($lin[$i]==-$n || $col[i]==-$n)
            return 'vitoria_o';
    }
    if($_==0)
        return 'empate';

    return 'em_jogo';
}

Ela analisa jogos 3x3 ou 4x4. E até que não tá grande !!!
jogo_class.php
Reply all
Reply to author
Forward
0 new messages