Então João, apesar das funções estarem declaradas, como o seu código não está indentado, o Python está interpretando que ele não faz parte da função.
Tente fazer:
import random
def jogar():
print("*********************************")
print("Bem vindo ao jogo de adivinhação!")
print("*********************************")
numero_secreto = round(random.randrange(1, 51))
total_de_tentativas = 0
print("Qual o nível de dificuldade que você quer?")
print("(1) Fácil; (2) Médio; (3) Difícil")
nivel_de_dificuldade = int(input("Qual o nível de dificuldade?"))
if(nivel_de_dificuldade == 1):
total_de_tentativas = 20
if(nivel_de_dificuldade == 2):
total_de_tentativas = 10
if(nivel_de_dificuldade == 3):
total_de_tentativas = 5
pontos = 1000
rodada = 1
for rodada in range(1, total_de_tentativas + 1):
print("Tentativa {} de {}".format(rodada, total_de_tentativas))
chute_str = input("Digite um número de 1 a 50: ")
print("Você digitou: ", chute_str)
chute = int(chute_str)
if (chute > 50):
print("O número deve ser menor ou igual a 50!")
continue
acertou = numero_secreto == chute
maior = chute > numero_secreto
menor = chute < numero_secreto
if (acertou):
print("Você acertou!")
print("Parabéns! Você fez ", pontos, " pontos!")
break
else:
if (maior):
print("Você errou! O seu chute foi maior que o número secreto.")
elif (menor):
print("Você errou! O seu chute foi menor que o número secreto.")
pontos_perdidos = abs(numero_secreto - chute)
pontos = pontos - pontos_perdidos
print("O", "número", "secreto", "era", numero_secreto, sep=" ")
print("Fim do jogo")
def jogar():
print("***************************")
print("Bem-vindo ao jogo da forca!")
print("***************************")
print("Fim do jogo")