Jogo da Velha#

Vamos considerar um exemplo de robô que inicia um jogo da velha, implementado no Sherpa Robot.

O projeto do robô consiste em seis diagramas. Descrevendo passo a passo, este robô funciona da seguinte maneira:

  1. Inicia o jogo, oferecendo a escolha do símbolo que o usuário irá jogar.
  1. Abre o tabuleiro, após o que o usuário e o computador escolhem alternadamente uma célula para jogar.
  1. Em caso de vitória do usuário, exibe uma janela com a mensagem sobre isso.

O diagrama principal do projeto é chamado “JogoDaVelha” e se parece com isso (para conveniência, os blocos do diagrama estão numerados):

  1. Bloco “Início” (todas as diagramas começam a partir deste bloco).
  2. Bloco “Obter caminho” permite descobrir o caminho completo para o arquivo. Para este bloco, as seguintes propriedades são especificadas:
  • Nome do arquivo (nome do arquivo);
  • Gerar nome (com a flag ativada, um nome de arquivo aleatório será gerado, incluindo a extensão).
  1. Bloco “Obter caminho” permite descobrir o caminho completo para o arquivo. Para este bloco, as seguintes propriedades são especificadas:
  • Nome do arquivo (nome do arquivo);
  • Gerar nome (com a flag ativada, um nome de arquivo aleatório será gerado, incluindo a extensão).
  1. Bloco “Mostrar janela” permite criar suas próprias janelas (formulários) e exibi-las em modo modal e não modal, incluindo de forma assíncrona em relação ao fluxo do script. Se um seletor for definido, as coordenadas da janela criada serão vinculadas ao controle em outro aplicativo. Para este bloco, as seguintes propriedades são especificadas:
  • Configuração (string de configuração);
  • Objeto da janela (variável com o objeto da janela);
  • Modal (com a flag ativada, a janela será exibida como modal);
  • ID do processo (variável que armazena o identificador do processo).

Para criar e editar a janela, utiliza-se o botão “Editar…”, localizado no bloco. Ao clicar neste botão, abre-se o “Editor de Janelas”.

  1. Bloco “Switch/Case”. O operador switch compara a expressão com os valores especificados e sai pelo conector indicado. Se nenhuma correspondência for encontrada, sai pelo conector “Padrão”. Para este bloco, as seguintes propriedades são especificadas:
  • Expressão (expressão a ser comparada);
  • Condição 1 (se houver correspondência, sairá pelo conector 1, e a expressão 1 será executada se estiver definida. Se o conector não estiver definido, a saída será feita por padrão);
  • Executar expressão 1 (se a condição 1 for atendida, esta expressão será executada e a saída será feita pelo conector correspondente. Se o conector não estiver conectado, a saída será feita por padrão);
  • Condição 2 (se houver correspondência, sairá pelo conector 2, e a expressão 2 será executada se estiver definida. Se o conector não estiver definido, a saída será feita por padrão);
  • Executar expressão 2 (se a condição 2 for atendida, esta expressão será executada e a saída será feita pelo conector correspondente. Se o conector não estiver conectado, a saída será feita por padrão);
  1. Bloco “Atribuir valor à variável” define novos valores para uma ou mais variáveis. Neste caso, nas propriedades, é especificado um valor que deve ser atribuído a uma variável, respectivamente.
  1. Bloco “Processo” permite criar scripts compostos por vários diagramas. A execução do script continuará a partir do bloco “Início” do diagrama especificado. A execução do script retornará ao bloco atual e continuará no diagrama atual assim que o bloco “Fim” for alcançado no diagrama externo. Para o bloco “Processo”, a propriedade “Nome do diagrama” é especificada (nome do arquivo do diagrama onde a execução do script continuará).
  1. Bloco “Condição” verifica a condição especificada para ver se é verdadeira, após o que a execução do script continua na saída “Sim” (se a condição for atendida) ou na saída “Não” (se a condição não for atendida).

A condição é escrita no formato: “variável” igual a (==)/ maior que (>)/ menor que (<) “valor”.

Por exemplo: $a == “Olá”, ou seja, se o valor da variável $a for igual a “Olá”, então a saída é “Sim”, caso contrário – a saída é “Não”.

$Result > 5, ou seja, se o valor da variável $Result for menor que 5, então a saída é “Sim”, caso contrário – a saída é “Não”.

Neste caso, a condição estabelecida é: $IsFinal. Ou seja, está sendo verificado se é a finalização.

9. **Bloco “Processo”** permite criar cenários compostos por vários diagramas. A execução do cenário continuará a partir do bloco “Início” do diagrama do projeto especificado. A execução do cenário retornará ao bloco atual e continuará no diagrama atual assim que o bloco “Fim” no diagrama externo for alcançado. Para o bloco “Processo” está especificada a propriedade “Nome do diagrama” (nome do arquivo do diagrama onde a execução do cenário continuará).
  1. Bloco “Condição” verifica a condição especificada quanto à veracidade, após o que a execução do cenário continua na saída “Sim” (se a condição for atendida) ou na saída “Não” (se a condição não for atendida).

A condição é escrita no formato: “variável” igual (==)/ maior (>)/ menor (<) “valor”.

Por exemplo: $a == “Olá”, ou seja, se o valor da variável $a for igual a “Olá”, então a saída é “Sim”, caso contrário – a saída é “Não”.

$Result > 5, ou seja, se o valor da variável $Result for menor que 5, então a saída é “Sim”, caso contrário – a saída é “Não”. Neste caso, a condição estabelecida é: $IsStepUser. Ou seja, está sendo verificado o movimento do jogador.

  1. Bloco “Processo” permite criar cenários compostos por vários diagramas. A execução do cenário continuará a partir do bloco “Início” do diagrama do projeto especificado. A execução do cenário retornará ao bloco atual e continuará no diagrama atual assim que o bloco “Fim” no diagrama externo for alcançado. Para o bloco “Processo” está especificada a propriedade “Nome do diagrama” (nome do arquivo do diagrama onde a execução do cenário continuará).
  1. Bloco “Processo” permite criar cenários compostos por vários diagramas. A execução do cenário continuará a partir do bloco “Início” do diagrama do projeto especificado. A execução do cenário retornará ao bloco atual e continuará no diagrama atual assim que o bloco “Fim” no diagrama externo for alcançado. Para o bloco “Processo” está especificada a propriedade “Nome do diagrama” (nome do arquivo do diagrama onde a execução do cenário continuará).
  1. Bloco “Atribuir valor à variável” estabelece novos valores para uma ou mais variáveis. Neste caso, nas propriedades está especificado um valor que deve ser atribuído a uma variável, respectivamente.
  1. – 15. Blocos “Fim” (esses blocos encerram a execução do cenário ou retornam o diagrama do subprocesso ao processo principal).

Diagrama “Executar movimento”

Este diagrama consiste em pares de blocos “Condição” e “Fim”. O diagrama “Executar movimento” realiza cada movimento subsequente e verifica a conformidade da condição.

Diagrama “Movimento do jogador”

  1. Bloco “Início” (a partir deste bloco começa qualquer diagrama).
  2. Bloco “Mostrar janela” permite criar suas próprias janelas (formulários) e exibi-las em modo modal e não modal, inclusive de forma assíncrona em relação ao movimento do cenário. Se um seletor for especificado, as coordenadas da janela criada serão vinculadas ao controle em outro aplicativo. Para este bloco estão especificadas as seguintes propriedades:
  • Configuração (string de configuração);
  • Objeto da janela (variável com o objeto da janela);
  • ID do processo (variável que armazena o identificador do processo).

Para criar e editar a janela, utiliza-se o botão “Editar…”, que se encontra no bloco. Ao clicar neste botão, o “Editor de janelas” é aberto.

  1. Bloco “Condição” verifica a condição especificada quanto à veracidade, após o que a execução do cenário continua na saída “Sim” (se a condição for atendida) ou na saída “Não” (se a condição não for atendida).

A condição é escrita no formato: “variável” igual (==)/ maior (>)/ menor (<) “valor”.

Por exemplo: $a == “Olá”, ou seja, se o valor da variável $a for igual a “Olá”, então a saída é “Sim”, caso contrário – a saída é “Não”.

$Result > 5, ou seja, se o valor da variável $Result for menor que 5, então a saída é “Sim”, caso contrário – a saída é “Não”. Neste caso, a condição estabelecida é: $ControlEvent -ne "linkStop.LinkClicked". Ou seja, está sendo verificado se o link “Encerrar jogo” não foi clicado.

  1. Bloco “Processo” permite criar cenários compostos por vários diagramas. A execução do cenário continuará a partir do bloco “Início” do diagrama do projeto especificado. A execução do cenário retornará ao bloco atual e continuará no diagrama atual assim que o bloco “Fim” no diagrama externo for alcançado. Para este bloco estão especificadas as seguintes propriedades:
  • Nome do diagrama (nome do arquivo do diagrama onde a execução do cenário continuará);
  • Variável 1 (nome da primeira variável à qual um novo valor deve ser atribuído);
  • Valor 1 (novo valor da primeira variável);
  • Variável 2 (nome da segunda variável à qual um novo valor deve ser atribuído);
  • Valor 2 (novo valor da segunda variável).
  1. Bloco “Condição” verifica a condição especificada quanto à veracidade, após o que a execução do cenário continua na saída “Sim” (se a condição for atendida) ou na saída “Não” (se a condição não for atendida).

A condição é escrita no formato: “variável” igual (==)/ maior (>)/ menor (<) “valor”.

Por exemplo: $a == “Olá”, ou seja, se o valor da variável $a for igual a “Olá”, então a saída é “Sim”, caso contrário – a saída é “Não”.```markdown $Result > 5, ou seja, se o valor da variável $Result for menor que 5, a saída será “Sim”, caso contrário – a saída será “Não”. Neste caso, a condição estabelecida é: $IsCorrectMove. Ou seja, verifica-se a correção da jogada do jogador.

  1. Bloco “Parar” interrompe a execução do script ou gera um erro.
  2. Bloco “Fim” (este bloco encerra a execução do script ou retorna o diagrama do subprocesso ao processo principal).

Diagrama “Jogada do computador”

  1. Bloco “Início” (a partir deste bloco começa qualquer diagrama).
  2. Bloco “Número aleatório” gera números aleatórios com parâmetros definidos. Para este bloco, as seguintes propriedades estão definidas:
  • Valor mínimo (o número aleatório não será menor que este valor);
  • Valor máximo (o número aleatório não será maior que este valor);
  • Passo (passo do número aleatório).
  1. Bloco “Atribuir valor à variável” define novos valores para uma ou mais variáveis. Neste caso, nas propriedades está indicado um valor que deve ser atribuído a uma variável, respectivamente.
  1. Bloco “Processo” permite criar scripts compostos por vários diagramas. A execução do script continuará a partir do bloco “Início” do diagrama do projeto indicado. A execução do script retornará ao bloco atual e continuará no diagrama atual assim que o bloco “Fim” for alcançado no diagrama externo. Para este bloco, as seguintes propriedades estão definidas:
  • Nome do diagrama (nome do arquivo do diagrama onde a execução do script continuará);
  • Variável 1 (nome da primeira variável à qual um novo valor deve ser atribuído);
  • Valor 1 (novo valor da primeira variável);
  • Variável 2 (nome da segunda variável à qual um novo valor deve ser atribuído);
  • Valor 2 (novo valor da segunda variável).

  1. Bloco “Condição” verifica a condição especificada quanto à veracidade, após o que a execução do script continua na direção da saída “Sim” (se a condição for atendida) ou na direção da saída “Não” (se a condição não for atendida).

A condição é registrada no formato: “variável” igual a (==)/ maior que (>)/ menor que (<) “valor”.

Por exemplo: $a == “Olá”, ou seja, se o valor da variável $a for igual a “Olá”, a saída será “Sim”, caso contrário – a saída será “Não”.

$Result > 5, ou seja, se o valor da variável $Result for menor que 5, a saída será “Sim”, caso contrário – a saída será “Não”. Neste caso, a condição estabelecida é: $IsCorrectMove. Ou seja, verifica-se a correção da jogada do jogador.

  1. Bloco “Fim” (este bloco encerra a execução do script ou retorna o diagrama do subprocesso ao processo principal).

Diagrama “Verificação de fim”

Este diagrama consiste em pares de blocos “Condição” e “Atribuir valor à variável”. O diagrama “Verificação de fim” realiza a verificação após cada jogada do jogador ou do computador.


Diagrama “Jogo terminado”

  1. Bloco “Início” (a partir deste bloco começa qualquer diagrama).
  2. Bloco “Mostrar janela” permite criar suas próprias janelas (formulários) e exibi-las em modo modal e não modal, inclusive de forma assíncrona em relação à execução do script. Se um seletor for definido, as coordenadas da janela criada serão vinculadas a um controle em outro aplicativo. Para este bloco, as seguintes propriedades estão definidas:
  • Configuração (string de configuração);
  • Objeto da janela (variável com o objeto da janela);
  • Modal (com a flag definida, a janela será exibida como modal);
  • ID do processo (variável onde o identificador do processo é armazenado).

Para criar e editar a janela, utiliza-se o botão “Editar…”, que está localizado no bloco. Ao clicar neste botão, o “Editor de janelas” é aberto.

  1. Bloco “Condição” verifica a condição especificada quanto à veracidade, após o que a execução do script continua na direção da saída “Sim” (se a condição for atendida) ou na direção da saída “Não” (se a condição não for atendida).

A condição é registrada no formato: “variável” igual a (==)/ maior que (>)/ menor que (<) “valor”.

Por exemplo: $a == “Olá”, ou seja, se o valor da variável $a for igual a “Olá”, a saída será “Sim”, caso contrário – a saída será “Não”.

$Result > 5, ou seja, se o valor da variável $Result for menor que 5, a saída será “Sim”, caso contrário – a saída será “Não”. Neste caso, a condição estabelecida é: $UserWon. Ou seja, verifica-se se o jogador ganhou.

  1. Bloco “Janela de mensagem” mostra ao usuário uma janela de diálogo modal com um título, texto e um conjunto de botões definidos. Se uma janela com vários botões for utilizada, o bloco permite gravar em uma variável uma constante de texto correspondente ao botão pressionado pelo usuário. Para este bloco, as seguintes propriedades estão definidas:
  • Mensagem (texto que será exibido dentro da janela de diálogo);
  • Botões (botões que estarão disponíveis para o usuário pressionar).

5. O bloco “Janela de Mensagem” mostra ao usuário uma caixa de diálogo modal com um título, texto e um conjunto de botões definidos. Se uma janela com vários botões for utilizada, o bloco permite gravar em uma variável uma constante de texto correspondente ao botão pressionado pelo usuário. Para este bloco, as seguintes propriedades são especificadas:

* Mensagem (texto que será exibido dentro da caixa de diálogo);
* Botões (botões que estarão disponíveis para o usuário pressionar).

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc_E6Yi_mrjKkApFIXseb5l0Z8ENSH-atYtQtFfAVG2MAB2ilr_DLlSBKsnuRHuWrudU1uxKX4OHKVu38h_jZkA1hppF_k7oI9UQjQijk4YqJohP5DVC0dT2HWSYcfSueKi3I5Xiw?key=8OqHXqKR2hFCRM0MvJDUmXXN" alt=""><figcaption></figcaption></figure>

6. \- 7. **Blocos “Fim”** (esses blocos encerram a execução do script ou retornam o diagrama do subprocesso ao processo principal).