Jogo labirinto

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

[ Hits: 4.515 ]

Homepage:

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 ctw6av 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

votacao.py

Afinador de Violão/guitarra em python e gtk.

Sudoku

Interface para qemu

Validador de cartão de crédito


  

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