Django Wars [Parte 28]: Hospital é bom e eu gosto

O Django Wars foi idealizado e desenvolvido no Django 1.4. Algumas funcionalidades aqui descritas podem não funcionar ou funcionar de forma diferente em outras versões do Django

Depois que o usuário entra no fight tenso e sai todo quebrado, com certeza ele vai precisar de cuidados médicos.
Como ele não possui plano de saúde, e é um criminoso procurado pela polícia, ele vai ter que pagar bem caro por um bom tratamento médico.
Vamos criar a página do hospital para cuidar do usuário.

Depois de tudo que já passamos, essa view virou trivial.
Vou fazer aquele passo-a-passo com poucos comentários.

Primeiro, colocando 3 entradas no urls.py

url(r'^hospital/$', djangowars.views.hospital.hospital, name='pagina_do_hospital'),
url(r'^hospital/curar/(\d+)/$', djangowars.views.hospital.curar),
url(r'^hospital/curar/x/$', djangowars.views.hospital.curarx),

A primeira URL serve para listar as opções do hospital, definidas na view hospital, que ocloquei dentro do arquivo views/hospital.py.
A segunda e a terceira URL são formas de comprar cura.

from django.shortcuts import render_to_response # funcoes de renderizacao dos templates
from django.shortcuts import redirect # Funcao para executar um http-redirect


#pagina do hospital
def hospital(request):
    if not request.user.is_authenticated():
        return redirect('pagina_de_login')
    
    #da um refrash no hp, energia e raiva do player
    player = request.user.get_profile()
    player.refresh()
    player.save()
    
    return render_to_response("hospital.html", {"player": request.user.get_profile(),
                                                "vida": request.user.get_profile().vida * 10}) # para exibir o total de vida do usuario


#curar um numero qualquer
def curar(request, valor):
    if not request.user.is_authenticated():
        return redirect('pagina_de_login')
    
    player = request.user.get_profile()

    valor = int(valor) #o valor eh passado para a view como string, precisamos q ele seja integer

    #se for um valor menor que 11, cura
    #se nao for, ignora para nao "travar" o site com um mega loop
    if valor < 11:
        for i in range(valor):
            if player.carteira >= 100 and player.hp <= player.vida * 10:
                player.hp = player.hp + 1
                player.carteira = player.carteira - 100
            else:
                break

        #atualiza o jogador
        player.save()

    #retorna para a pagina do hospital
    return redirect(hospital)


#pagina para curar o quanto der
def curarx(request):
    if not request.user.is_authenticated():
        return redirect('pagina_de_login')
    
    player = request.user.get_profile()

    #verifica se o jogador esta full hp
    if player.hp == player.vida * 10:
        redirect(hospital)

    #enquanto o hp do jogador for menor que o maximo
    #e enquanto ele tiver dinheiro para pagar
    while player.hp < player.vida * 10 and player.carteira >= 100:
        player.hp = player.hp + 1
        player.carteira = player.carteira - 100

    #salva as alteracoes
    player.save()
    
    #volta para o hospital
    return redirect(hospital)

Eu não sei se tá fácil para caramba ou se eu estou com preguiça de explicar cada view.
O código Python fala por si só, ele é lindo!
Qualquer coisa, perguntem nos comentários 😀

Por fim, o template do hospital com as opções para selecionar o que se deseja.
hospital.html

<div class="container">
    <p>
        Informações do usuário:
        Nível {{  player.nivel }}
        |
        Energia {{  player.energia_atual }}/{{ player.energia }}
        |
        Raiva {{ player.raiva_atual }}/{{ player.raiva }}
        HP: {{ player.hp }}/{{ vida }}
        |
        Carteira {{ player.carteira }}
    </p>

    <p><a href="curar/1">Curar 1 de hp $100</a></p>
    <p><a href="curar/5">Curar 5 de hp $500</a></p>
    <p><a href="curar/10">Curar 10 de hp $1000</a></p>
    <p><a href="curar/x">Curar o máximo que der</a></p>

</div> <!-- /container -->

Por fim, o código fonte encontra-se em:
https://github.com/frenetic/django-wars

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *