🤔 Para Refletir :
"Mais vale um jogo publicado que um jogo perfeito que não sai do projeto."
- HenriqueGibi

Gincana de Natal - Central de Pesquisas

Estado
Tópico fechado. Não é possível fazer postagens nela.
Brandt comentou:
t3VWJPU.gif

Terminei: XMas Tree Deco
Fiz usando PyGame, pra dar uma variada. Pra instalar é só seguir as instruções.

Manda um vermelho aí agora por favor, que eu tô me sentindo comunista.

[member=78]Brandt[/member]

De acordo com as regras da Central de Pesquisa, preciso de um vídeo mais elaborado exibindo o gameplay ou uma demo exportada para que a análise seja concluída:

• Você deverá gravar um vídeo de demonstração ou uma demo exportada.



Kazzter comentou:
https://www.condadobraveheart.com/forum/index.php?topic=4917.new#new

Acabou virando um joguinho, então resolvi aproveitar a oportunidade para postar lá, mas se quiser eu posso colocar na Academia também.

Se estiver tudo certo, outra caixa amarela.

Sistema em análise.


Uma caixa amarela saindo [member=1820]Kazzter[/member]!

Sistema - Corrida do Papei Noel

- O Sistema permitir que o jogador controle o Papai Noel em uma trilha na neve;
- O jogador precisa manter evitar que o Papai Noel saia da trilha derrape na neve;
- Caso o papai fique preso na neve, o percurso terá de ser refeito do inicio;
- A velocidade do trenó ficará cada vez mais rapida ao longo do percurso.

- O sistema deve ser configurável para que:

  1) A velocidade inicial seja de fácil personalização.




HermesPasser comentou:
Aqui. Manda um verde agora.

Sistema em análise.



Uma caixa verde saindo [member=1330]HermesPasser[/member]!

Sistema - Capture as Renas

- O sitema deve permitir que o jogador controle o Papai Noel que precisa capiturar o maior número de renas no tempo de 60 segundos (Configurável).
- Várias renas precisam se mover pelo mapa, e ao colidirem com o Papai Noel, são capturadas.
- O sistema deve exibir a contagem de renas capturadas em tempo real.

- O sistema deve ser configurável para que:

  1) A quantidade de renas seja de fácil personalização;
  2) O tempo limite de captura deve ser de fácil personalização.
 
Análise - Sistema de Comida

[member=1330]HermesPasser[/member]

Linha #167 e #168

Código:
    for (let i in ingredients) {
      const ingredient = ingredients[i];

Nessa parte do código, você utilizou um loop para atribuir valores para uma constante.
Constantes devem ser definidas com um valor fixo que nunca vai mudar.



Linha #184, #185 e #186
Código:
    for (let i in ingredients) {
      const ingredient = ingredients[i];
      const item = $dataItems[ingredient.id];

Nessa parte do código, você utilizou um loop para atribuir valores para duas constantes.
Constantes devem ser definidas com um valor fixo que nunca vai mudar.
 

 
Código:
    switch (args[0].toLowerCase()){
      // Open cook book
      case 'book':

        if (args.length < 2)
          throw new Error('CookSystem: Recipe id not given.');    
        
        currentRecipe = Recipe.getRecipe(parseInt(args[1]));
        SceneManager.push(Scene_Cook);
        break;

      // Cook something
      default:
        currentRecipe = Recipe.getRecipe(parseInt(args[0]));
        currentRecipe.cook();
    }

Para efeitos de organização, você poderia criar métodos para deixar o swith-case mais fácil de ser lido:

EX:

Código:
if (args[0].toLowerCase() == 'book')
  Recipe.getRecipe(args[1]).openBook();
else
  Recipe.getRecipe(args[0]).cook();

E passar a responsabilidade do parseInt para a função GetRecipe:

Código:
  Recipe.getRecipe = function(id){
    id = parseInt(id)
    
    for (let i in recipes) {

Pontuação: 185P.
 
Feito. Um azul

_____

Resque comentou:
Análise - Sistema de Comida

[member=1330]HermesPasser[/member]

Linha #167 e #168

Código:
    for (let i in ingredients) {
      const ingredient = ingredients[i];

Nessa parte do código, você utilizou um loop para atribuir valores para uma constante.
Constantes devem ser definidas com um valor fixo que nunca vai mudar.

Não necessariamente, usei constante justamente pois o valor não deve mudar (e se mudar tem algo de errado e deve-se jogar um erro) além de que o desempenho em teoria melhora já que o interpretador não precisa se preocupar em realocar memória para ela.

Por sinal por mais vale lembrar que elas não são constantes de fato, elas servem para exatamente o que queria, uma variável de atribuição unica.

E por fim, o fato de seu valor ser atribuído dentro do loop é irrelevante já que ela será destruída no fim da interação e uma nova será criada, teria problema se ela fosse criada antes do loop.
 
Resque comentou:
Brandt comentou:
t3VWJPU.gif

Terminei: XMas Tree Deco
Fiz usando PyGame, pra dar uma variada. Pra instalar é só seguir as instruções.

Manda um vermelho aí agora por favor, que eu tô me sentindo comunista.

[member=78]Brandt[/member]

De acordo com as regras da Central de Pesquisa, preciso de um vídeo mais elaborado exibindo o gameplay ou uma demo exportada para que a análise seja concluída:

• Você deverá gravar um vídeo de demonstração ou uma demo exportada.

Tem um link pra download no tópico. O vídeo seria só isso aí do gif mesmo, não tem muito o que mostrar...
 
Kazzter comentou:
Quero devolver a caixa e pegar outra, se for possível :X
Uma caixa ['Amarela', 'Azul', 'Verde', 'Vermelha'][Math.floor(Math.random() * 4)] saindo [member=1820]Kazzter[/member]!

Sistema - Encantamento de itens

- O Sistema permitir que o jogador encante equipamentos com gemas elementais¹
- O resultado do encantamento é o mesmo equipamento com um nome condizente com seu elemento e atributos aprimorados
- Cada elemento deve dar um efeito especial pra arma à seu critério. Pode ser um uso específico no mapa como Pokemons. Pode ser uma skill que só é liberada usando arma daquele elemento...

[1] - Não precisa ser exatamente gemas.




HermesPasser comentou:

Sua última caixa será avaliada assim que nosso avaliador voltar da pesquisa de campo.

Uma caixa azul saindo [member=1330]HermesPasser[/member]

Sistema - Geração procedural de terreno

- O Sistema deve gerar um/o mapa conforme o jogador o explora, alá Minecraft.
- O terreno gerado deve variar conforme a posição do explorador em seu espaço, alá biomas do Minecraft.




HermesPasser comentou:
Não necessariamente, usei constante justamente pois o valor não deve mudar (e se mudar tem algo de errado e deve-se jogar um erro) além de que o desempenho em teoria melhora já que o interpretador não precisa se preocupar em realocar memória para ela.

Por sinal por mais vale lembrar que elas não são constantes de fato, elas servem para exatamente o que queria, uma variável de atribuição unica.

E por fim, o fato de seu valor ser atribuído dentro do loop é irrelevante já que ela será destruída no fim da interação e uma nova será criada, teria problema se ela fosse criada antes do loop.

Off: Concordo. Constante em Javascript funciona de outra forma então acho justa a possibilidade de ser interpretada de outra forma, mas não sou avaliadora então ¯\_(?)_/¯
 
Uma caixa azul saindo [member=1330]HermesPasser[/member]

Sistema - Geração procedural de terreno

- O Sistema deve gerar um/o mapa conforme o jogador o explora, alá Minecraft.
- O terreno gerado deve variar conforme a posição do explorador em seu espaço, alá biomas do Minecraft.



Dropando esse, me manda outro quando bater as 24h.
 
[member=770]Resque[/member] não curto copos. Troca pra mim please, manda uma vermelha de novo.
 
HermesPasser comentou:
Feito. Um azul

_____

Resque comentou:
Análise - Sistema de Comida

[member=1330]HermesPasser[/member]

Linha #167 e #168

Código:
    for (let i in ingredients) {
      const ingredient = ingredients[i];

Nessa parte do código, você utilizou um loop para atribuir valores para uma constante.
Constantes devem ser definidas com um valor fixo que nunca vai mudar.

Não necessariamente, usei constante justamente pois o valor não deve mudar (e se mudar tem algo de errado e deve-se jogar um erro) além de que o desempenho em teoria melhora já que o interpretador não precisa se preocupar em realocar memória para ela.

Por sinal por mais vale lembrar que elas não são constantes de fato, elas servem para exatamente o que queria, uma variável de atribuição unica.

E por fim, o fato de seu valor ser atribuído dentro do loop é irrelevante já que ela será destruída no fim da interação e uma nova será criada, teria problema se ela fosse criada antes do loop.

Pontuação alterada de 185P para 195P.
 
Brandt comentou:
[member=770]Resque[/member] não curto copos. Troca pra mim please, manda uma vermelha de novo.


Uma caixa vermelha saindo [member=78]Brandt[/member]!

Sistema - Corrida do Papei Noel

- O Sistema permitir que o jogador controle o Papai Noel em uma trilha na neve;
- O jogador precisa manter evitar que o Papai Noel saia da trilha derrape na neve;
- Caso o papai fique preso na neve, o percurso terá de ser refeito do inicio;
- A velocidade do trenó ficará cada vez mais rapida ao longo do percurso.

- O sistema deve ser configurável para que:

  1) A velocidade inicial seja de fácil personalização.
 
[member=770]Resque[/member] done https://www.condadobraveheart.com/forum/index.php?topic=4933
Me dá um amarelinho ae o/
 
Avaliação - Sistema de Árvore de Natal

[member=78]Brandt[/member]

Linha #66

Código:
  if key == 13:

Deixar apenas a referência numérica da tecla do no código acaba dificultando a leitura, fazendo que alguém tenha que pesquisar na internet a qual tecla o código está se referindo.

Você poderia ter utilizado uma constante dar o nome da tecla ao #13.

EX:

Código:
KEY_ENTER = 13

...
if key == KEY_ENTER:
...



Linha #229 até #255

Código:
    if len(phrase) > 0 or len(xmas_phrases) > 0:
        typos_text = font.render("%dx" % typos, False, (255, 50, 50))
        screen.blit(typos_text, (16, 16))

        text_x = WINDOW_WIDTH - text_scroll
        text_y = WINDOW_HEIGHT - font.get_linesize()

        text_strip.set_alpha(127)
        screen.blit(text_strip, (0, text_y))

        text1 = font.render(typed, False, (75, 255, 50))
        screen.blit(text1, (text_x, text_y))
        text_x += text1.get_width()

        if WINDOW_WIDTH - text_scroll + text1.get_width() > 32:
            text_scroll += SCROLL_SPEED
        
        if len(phrase) > 0:
            text2 = font.render(phrase[0], False, (255, 50, 50))
            screen.blit(text2, (text_x, text_y))
            text_x += text2.get_width()

            text3 = font.render(phrase[1:], False, (255, 255, 255))
            screen.blit(text3, (text_x, text_y))

        time_text = font.render("%d" % (time() - game_start), False, (255, 255, 255))
        screen.blit(time_text, (WINDOW_WIDTH - time_text.get_width() - 16, 16))

Gostei da estruturação do código como um todo, você utilizou métodos em vários locais para deixar o script mais fácil de se ler e organizado.

O trecho acima exibe 26 linhas dentro de um "if', para o computador ler, é tudo beleza, mas em questão de organização de código, fica um pouco difícil de saber onde começa e onde termina as coisas, ainda mas com Python, que não tem chaves como delimitadores de função, utilizando apenas indentação de código.

Você poderia fazer algo do tipo para deixar o script mais organizado:

EX:

Código:
if len(phrase) > 0 or len(xmas_phrases) > 0:
  do_something()
else:
  do_anything()

Código:
def do_something():
...

Código:
def do_anything():
...


Pontuação: 200P.
 
Eranot comentou:
[member=770]Resque[/member] done https://www.condadobraveheart.com/forum/index.php?topic=4933
Me dá um amarelinho ae o/



Uma caixa amarela saindo [member=1324]Eranot[/member]!!

Sistema - Geração procedural de terreno

- O Sistema deve gerar um/o mapa conforme o jogador o explora. EX:
- O terreno gerado deve variar conforme a posição do explorador em seu espaço, alá biomas do Minecraft.

Exemplo:

E2PJq.png

 
Kazzter comentou:
https://www.condadobraveheart.com/forum/index.php?topic=4937.new#new

Outra caixa, mesma cor.


Uma caixa amarela saindo [member=1820]Kazzter[/member]!!

Sistema - Barba do Papai Noel

- O sistema deve permitir que o jogador tenha uma barbearia e precisa fazer a barba de vários papais noéis;
- Para fazer a barba de cada papai noel, o jogador precisa apertar os botões que aparecem na tela em uma ordem aleatória;
- Cada vez que o jogador errar 3 teclas, o papai noel ficará bravo e sairá do estabelecimento, com isso o jogador precisará começar fazer a barba do próximo papai noel (do zero);
- O jogador precisa concluir o maior número de barbas possíveis em um curto tempo em minutos ou segundos (configurável);

- O sistema deve ser configurável para que:
 
  1) O tempo máximo seja de fácil personalização;

  2) O número de teclas que o jogador pode errar, deve ser de fácil configuração.

Exemplo:

[youtube]https://www.youtube.com/watch?v=y9K13WNG71M[/youtube]

 
Resque comentou:
Linha #229 até #255

<code>

O trecho acima exibe 26 linhas dentro de um "if', para o computador ler, é tudo beleza, mas em questão de organização de código, fica um pouco difícil de saber onde começa e onde termina as coisas, ainda mas com Python, que não tem chaves como delimitadores de função, utilizando apenas indentação de código

Você poderia fazer algo do tipo para deixar o script mais organizado:

EX:

Código:
if len(phrase) > 0 or len(xmas_phrases) > 0:
  do_something()
else:
  do_anything()

Código:
def do_something():
...

Código:
def do_anything():
...


Pontuação: 200P.
E o que isso mudaria o que você está criticando?

Supondo que ele separasse o if/else em suas funções, continuaria com o problema de "exibir muitas linhas e não ter delimitador pra função".

Isso
Código:
if 1 > 0 or 3 < 4:
  # if com 5 linhas de código
  # .
  # .
  # .

else:
  # else com 5 linhas de código
  # .
  # .
  # .
Vai ocupar a mesma quantidade de linhas do que isso
Código:
def do_something():
  # def do if com 5 linhas de código
  # .
  # .
  # .

def do_otherthing():
  # def do else com 5 linhas de código
  # .
  # .
  # .
Ou seja, do jeito que ele fez ou do jeito que você sugeriu, no final, ambos teriam 26 linhas e ambos não teriam como saber "onde termina", justamente pela ausência de delimitadores pro bloco (e já que a função não retorna nada e Python não tem uma keyword end pro final do bloco, colocar numa função é a mesma coisa).

A única diferença entre os 2 é que no seu exemplo você teria que definir o bloco em outro local do código, nesse caso eu já não posso opinar por ser puramente preferência do programador.
 
[member=1052]Kawthar[/member]

Sei que as duas formas ainda vão gerar as 26 linhas, mas o ponto que levantei é sobre organização e facilidade na leitura.
 
[member=770]Resque[/member] terminei o/




[member=1052]Kawthar[/member] É questão de boas práticas mesmo não fazer funções monumentais como aquela ali que eu fiz. Pra ler depois fica horrível, aí pra estudar (que imagino que seja o objetivo) e/ou manter o código acaba gerando problemas.
Se você for ver as classes padrão do RPG Maker, por exemplo, dificilmente tem função com mais de 10 linhas, quem dirá 20. Em programação de jogos, principalmente, é sempre bom abstrair as coisas e separar tudo em funções.

Sinceramente, deixei desse jeito mesmo por preguiça e por não saber que nome dar pras funções (do_something e do_other_thing não vale), rs.



[quote author=Resque]Você poderia ter utilizado uma constante dar o nome da tecla ao #13.

EX:

Código:
KEY_ENTER = 13;

...
if key == KEY_ENTER:
...
[/quote]

Vou seguir o exemplo do python e fingir que não vi aquele ; ali... :u.uzzz:



Não sei se eu consigo fazer em tempo, mas vamos lá né. Manda mais uma azul aí please.
 
Estado
Tópico fechado. Não é possível fazer postagens nela.
Voltar
Topo Inferior