Jogo labirinto

Publicado por Jeffersson Abreu (última atualização em 23/10/2018)

[ Hits: 9.828 ]

Homepage: https://www.linkedin.com/in/jeffersson-abreu/

Download 6468.labirinto.py

Download labirinto-2.0.py (versão 2)

Download labirinto-2.1.py (versão 3)




Este é uma adaptação do jogo "Labirinto", feita baseada no que foi escrito em C pelo colega SamL.

Diferenciais:

* Mapas começam com 10x30 no ultimo nível com 20x60
* Contador de nível
* Contador de movimentos
* Timer de nível

Bugs:

* Para se mover é necessário pressionar dois botões (direção + enter)
* As vezes o mapa fica sem saída (é facilmente resolvido com "r + enter")

Divirtam-se.

  



Versões atualizadas deste script

Versão 2 - Enviado por Jeffersson Abreu em 15/11/2016

Changelog: Completamente mudado, sem mais palavras!
Somente imagens >>> http://imgur.com/a/fqqZK
mude a cor do labirinto com a tecla backspace!

Download labirinto-2.0.py


Versão 3 - Enviado por Washington Luis de O Santos em 15/10/2018

Changelog: Foi modificado a forma que é alterada a cor do labirinto usando um recurso do próprio módulo 'curses' o que tornou o prg mais simples e mais rápido.

Agora o jogador deixa pegadas pelos lugares onde já passou

O jogador agora também pode voltar para o inicio do jogo sem apagar as pegadas, através das teclas [F1 ou R/r]

Download labirinto-2.1.py


Esconder código-fonte

#!/usr/bin/env python3

"""
Versão em python do jogo "Labirinto" escrito em C pelo colega
SamL
        Versão 0.01
"""

from random import randrange
import time
import os

difficult = {'height': 10, 'width': 30}
y, x = 1, 1
moving = 0


def build(levels):
    height = levels['height']
    width = levels['width']
    matrix = []
    for line in range(height):
        if line == 0 or line == height - 1:
            matrix.append(['#'] * width)
        elif line == 1:
            matrix.append([' '] * width)
            matrix[line][0] = '#'
            matrix[line][-1] = '#'
        else:
            matrix.append(['#'] * width)
            for column in range(width):
                matrix[line][randrange(1, width - 1)] = ' '
    matrix[-2][width // 2] = ' '
    matrix[-3][width // 2] = ' '
    matrix[-1][width // 2 - 1] = '|'
    matrix[-1][width // 2] = ' '
    matrix[-1][width // 2 + 1] = '|'
    return matrix


def draw(built):
    global y, x, moving
    os.system('clear')
    built[y][x] = '$'
    print('\n\t\tLabirinto Version 0.1\n')
    for line in range(len(built)):
        print('\t\t', end='')
        for column in range(len(built[line])):
            if column != len(built[line]) - 1:
                print('{}'.format(built[line][column]), end='')
            else:
                print('{}'.format(built[line][column]), end='\n')


def new_world():
    global y, x, world
    world = build(difficult)
    draw(world)


def move():
    global y, x, world, moving
    key = input('Move: ')
    if key == 'w' and world[y - 1][x] == ' ':
        world[y][x] = ' '
        y -= 1
    elif key == 'd' and world[y][x + 1] == ' ':
        world[y][x] = ' '
        x += 1

    elif key == 's' and world[y + 1][x] == ' ' or world[y + 1][x] == '_':
        world[y][x] = ' '
        y += 1

    elif key == 'a' and world[y][x - 1] == ' ':
        world[y][x] = ' '
        x -= 1

    elif key == 'r':
        moving -= 1
        new_world()

    elif key == '':
        moving -= 1

    moving += 1
    draw(world)


if __name__ == '__main__':
    world = build(difficult)
    draw(world)
    for level in range(1, 11):
        try:
            start = time.time()
            while world[y][x] != world[-1][difficult['width'] // 2]:

                print('Level: {}'.format(level))
                print('\n\tUp: s, Right: d, Down: s, Left: a')
                print('\tMoviment: {}\n'.format(moving))
                move()

            finish = time.time()
            os.system('clear')
            seconds = finish - start
            print('\n\n\n\t\t\tCongratilations... your time was {} seconds'.format(int(seconds)))
            time.sleep(3)
            y, x = 1, 1
            moving = 0
            difficult['height'] += 2
            difficult['width'] += 6
            world = build(difficult)
            draw(world)
        except KeyboardInterrupt:
            print('\rIncompleto...')
            exit(0)

print('You win!!!')
exit(0)

Scripts recomendados

Diferença de dias entre datas

PyShot

Cálculo de um número binomial

Calculadora do IMC em Tkinter

Conversor 2


  

Comentários
[1] Comentário enviado por removido em 03/10/2016 - 18:08h

Gostei muito!, bem interessante seu game, vou deixar uma dica que pode mudar o seu game para melhor do que já está, seria interessante se você usar o comando "clear" no python para quando a pessoa digitar o comando de movimento não aparecer outro quadro embaixo do antigo, e sim apagar o antigo e dar o print com o novo quadro.
Encontrei um video que pode deixar mais simples o entendimento:
https://www.youtube.com/watch?v=VGoKODKk_2Q#t=6.804612

[2] Comentário enviado por Nerdiarretado em 30/10/2018 - 13:35h

CARAAAA. Parabéns, achei muito legal e bem feito!
Para este script, você usou quais tipos de conhecimento?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts