Vamos Programar? – Introdução à Programação #24

14 Comentários

Desafio 2

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécie Humana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”, “mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

desafiofinal2

Este é o penúltimo artigo da saga “Introdução à Programação”, onde encontra o último desafio final desta série: a criação de um jogo de batalha naval.

No jogo de Batalha Naval a construir são pedidas algumas metas diferentes relativamente às regras reais do jogo. Ora vejamos.

Regras Base

  • Num tabuleiro de 5×9, cada utilizador (dos 2) deve colocar os seus 3 navios em três posições diferentes;
  • Cada utilizador deve tentar aniquilar os navios do inimigo, colocando as coordenadas da posição a atirar;
  • O primeiro utilizador a derrotar os navios adversários, ganha.

Objetivo 1

Construir um tabuleiro de 5 linhas por 9 colunas utilizando o sistema de arrays. Todas as posições do array devem ser do tipo inteiro. Por padrão, o valor de cada posição deve ser -1. Temos os seguintes valores:

  • -1 – sem tiros naquele bloco (~)
  • 0 – com tiros, mas não existiam navios (*)
  • 1 – com tiros e com um navio destruído (X)
  • 2 – existe um navio (~)

Objetivo 2

Devem existir dois modos: jogar contra o computador e jogar contra um amigo.

As diferenças entre os dois modos é que no primeiro, jogar contra um computador, este deve colocar os seus navios em locais aleatórios e fazer jogadas aleatórias.

Quando se joga com um amigo, deve-se ter em atenção o conteúdo que aparece na linha de comandos de forma a que o jogador A não veja as posições colocadas pelo jogador B.

Dicas

Para limpar o ecrã, não utilize as funções do sistema. Ao invés imprima uma boa quantidade de linhas novas no ecrã.

Se está a pensar em criar uma função que crie os tabuleiros, lembre-se que estas não podem retornar arrays, mas podem retornar apontadores. Pesquise sobre a função malloc.

A criação de apontadores para apontadores também poderá ser útil e é feita através do operador ** (duplo asterisco).

Atualização: A proposta de resolução pode ser encontrada aqui.


Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode sempre utilizar os comentários para colocar a questão. Caso o faça,  pedimos que utilize a keyword [DUVIDA] no início do seu comentários.

Resoluções de exercícios.

Esta saga

Henrique Dias

Mais episódios: 
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13][12] [14] [15] [16]
[17] [18] [19] [20] [21] [22] [23][24]

homefacebookgoogle-plus

Comentários

14

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de José Carlos Ferreira
    José Carlos Ferreira

    Boas…

    Este é um bom desafio. Para a faculdade já fiz o jogo do galo com base de dados de users (com password) e também com Player vs Player e Player vs PC.

    Este ano fiz um outro jogo mas para o microcontrolador 8051 da Intel que era jogado num LCD. Basicamente era um boneco que, no nível básico, apenas tinha que fugir de uma mina lançada aleatoriamente, e no nível avançado, adicionalmente ao básico, o jogador lançava uma bala para rebentar com a mina.

    Foi engraçado mas trabalhoso!

    1. Avatar de Josuee
      Josuee

      Who the well cares?!

      1. Avatar de Alex
        Alex

        Deixa o José desabafar

  2. Avatar de Miguel
    Miguel

    penso que o segundo desafio de programação devia ser algo um pouco mais difícil sem se encontrar no mesmo patamar que o anterior (sinceramente fazer um computador a bombardear random é ridículo), um jogo como o minesweeper por exemplo, cuja a implementação poderia recorrer a recursividade para limpar as áreas do jogo sem minas seria muito mais desafiante.

    1. Avatar de Henrique Dias

      Nada o impede de fazer uma Batalha Naval onde o computador tem inteligência para escolher se deve atacar o navio, ou não, dependendo de um modo de dificuldade inicialmente escolhido. Fica o desafio 🙂

  3. Avatar de JMCS
    JMCS

    O meu último programa em C foi no final de 2002: Um filtro para converter texto para impressoras Epson/IBM em PostScript. Gastei horas após o trabalho e fins de semana durante 4 meses, mas continua em utilização…

  4. Avatar de sakura
    sakura

    em guerra c/
    http://en.wikipedia.org/wiki/Regular_expression
    “^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$”
    in linux no ide any tool?

    1. Avatar de lmx
      lmx

      ??

      ide para quê? queres fazer um processador de expressões regulares é isso?

  5. Avatar de sakura
    sakura

    maquina (sevidor) A —->html—->maquina B
    ^|——–>html—-> maquinaC (broadcast c/ hub)
    A—>B ok
    A—>C faill no mem only 64Mb impossivel update. (linux2.4 + DotGNU).
    A—>html–>wget http://……
    Encoding encoding = Encoding.GetEncoding(charset);
    reader = new StreamReader(InputFileName, encoding);
    “””
    string line;
    string match= @”??????????”;
    StreamReader sr = new StreamReader(InputFileName, encoding);
    string input;
    string pattern = @”??????????????” ; // ?????????????????????????
    Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);

    while (sr.Peek() >= 0)
    {
    input = sr.ReadLine();
    MatchCollection matches = rgx.Matches(input);
    if (matches.Count > 0)
    {
    // Console.WriteLine(“{0} ({1} matches):” input, matches.Count);
    foreach (Match match in matches)
    Console.WriteLine(” ” + match.Value );
    }
    // Console.WriteLine(“….”+ pattern);
    } “”
    O obj. é extarir só os valoes “string match= @”??????????”; ” ex: valida 1 email “^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$” So que 1 operario não entede Regualar.Exp.
    mas vai haver updates, de todas das forams TK, you.

    Boss: http://www.plm.automation.siemens.com/en_us/
    É o i7 ok, Microsoft Surface Pro 3

  6. Avatar de sakura
    sakura

    tk, for tip . thebinarysearchtree.

  7. Avatar de Osvander
    Osvander

    Bom dia Pessoal!!
    Tem alguém por aqui que seja bom na linguagem C que possa me ajudar nesta questão?

    Numa empresa trabalham até 50 analistas divididos em três grupos:
    J(junior) – Atendem até 10 chamadas por mês
    P(Pleno) – Atendem de 11 até 20 chamados por mês
    S(Sênior) – Atendem mais de 20 chamados por mês
    O junior recebe um salário de R$ 700 e não recebe comissão por produção
    O pleno recebe R$ 1000 e mais 3% do salário do junior por chamado acima de 16
    O Sênior recebe R$ 2000 mais 3% do salário do pleno por chamado acima de 30.
    Faça um algoritmo que gerencie os funcionários (CRUD)
    por meio de um menu. Campos dos funcionários:
    número, nome, número de chamados atendidos por ele no mês.
    Crie itens no menu pafa visualizar os pontos abaixo:
    – O salário de cada funcionários e sua classe (apresente na tela)
    – O Total da folha mensal de pagamento da empresa
    – O número total de chamados atendidos por mês
    – A média de chamados por cada grupo
    – O número e a classe do funcionário de menor salário.

    Desde já agradeço, sou leigo ainda, Obrigado