O Barqueiro
Publicado por Washington Luis de O Santos (última atualização em 16/01/2019)
[ Hits: 2.740 ]
Não deixe seu barco afundar, você só pode levar um passageiro de cada vez, mas tem um porém, você não pode deixar o Lobo sozinho com a Cabra porque ele ira comer ela e nem pode deixar a Cabra sozinha com o Pasto porque é ele que será comido. Resumindo, deem seus pulos e aproveitem para aprender mais um pouquinho sobre o módulo 'ncurses' e o python.
E se gostarem deem um like...
#!/usr/bin/env python3 # -*- coding:UTF-8 -*- #coding: cp1252 #coding: latin1 u''' O B A R Q U E I R O version 1.0 - Program Copyright (c) 2002-2004 Washington Luis de O. Santos < owashington@terra.com.br > This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. POR: Washington Luis de Oliveira Santos Taubaté - SP, 10 de janeiro de 2019 ''' import sys import time import curses from random import randrange from threading import Timer # janela principal screen = curses.initscr() # tamanho da janela principal screen_x, screen_y = screen.getmaxyx() if screen_x < 24 or screen_y < 80: screen.clear() curses.endwin() print('\nO seu terminal tem que ter no minimo 24 linhas por 80 colunas.\n') print('Reajuste o tamanho do seu terminal para poder jogar... \n') sys.exit(0) screen.keypad(True) #screen.notimeout(False) curses.cbreak() # Não retorna caracteres na tela curses.noecho() # esconde o cursor do mouse e do terminal curses.curs_set(0) # limpa a tela screen.clear() # atualiza a tela automaticamente mais causa perda de performance # pode ser usado no lugar das chamadas da funcao screen.refresh() screen.immedok(True) # iniciando cores curses.start_color() curses.init_pair( 1, curses.COLOR_RED, curses.COLOR_WHITE) curses.init_pair( 2, curses.COLOR_GREEN, curses.COLOR_BLACK) curses.init_pair( 3, curses.COLOR_RED, curses.COLOR_BLACK) curses.init_pair( 4, curses.COLOR_WHITE, curses.COLOR_BLUE) curses.init_pair( 5, curses.COLOR_WHITE, curses.COLOR_BLUE) curses.init_pair( 6, curses.COLOR_RED, curses.COLOR_BLUE) curses.init_pair(11, curses.COLOR_BLUE, curses.COLOR_WHITE) curses.init_pair(13, curses.COLOR_GREEN, curses.COLOR_WHITE) curses.init_pair(18, curses.COLOR_BLACK, curses.COLOR_WHITE) # Define Constantes usadas como caracteres especiais # Single-line # Chr( 218 ) + Chr( 196 ) + Chr( 191 ) ┌ ─ ┐ # Chr( 179 ) + Chr( 32 ) + Chr( 179 ) │ │ # Chr( 192 ) + Chr( 196 ) + Chr( 217 ) └ ─ ┘ c_032 = 32 c_168 = 9608 c_177 = 9617 c_178 = 9618 c_179 = 9474 c_191 = 9488 c_192 = 9492 c_196 = 9472 c_217 = 9496 c_218 = 9484 c_219 = 9604 c_223 = 9600 # Executando Funções em Intervalos de Tempo # Tirado do link: # https://wiki.python.org.br/ExecutandoEmIntervalos def setInterval(function, interval, *params, **kwparams): def setTimer(wrapper): wrapper.timer = Timer(interval, wrapper) wrapper.timer.start() def wrapper(): function(*params, **kwparams) setTimer(wrapper) setTimer(wrapper) return wrapper def clearInterval(wrapper): wrapper.timer.cancel() # Esta é uma tentativa de manter o prg compativel com o python 2.7 # para isto comente as duas linhas abaixo def unichr(ch): return chr(ch) def pause(tempo): # Atualiza a tela #screen.refresh() # Pausa por um tempo time.sleep(tempo) # Funcao para imprimir a tela de abertura def autor(): DispBox_Shadow(2,10,21,67, 11) screen.addstr( 5, 12, ' ___ ____ _ ', curses.color_pair(13) | curses.A_BOLD) screen.addstr( 6, 12, ' / _ \ | __ ) __ _ _ __ __ _ _ _ ___(_)_ __ ___ ', curses.color_pair(13) | curses.A_BOLD) screen.addstr( 7, 12, '| | | | | _ \ / _` | \'__/ _` | | | |/ _ \ | \'__/ _ \ ', curses.color_pair(13) | curses.A_BOLD) screen.addstr( 8, 12, '| |_| | | |_) | (_| | | | (_| | |_| | __/ | | | (_) |', curses.color_pair(13) | curses.A_BOLD) screen.addstr( 9, 12, ' \___/ |____/ \__,_|_| \__, |\__,_|\___|_|_| \___/ ', curses.color_pair(13) | curses.A_BOLD) screen.addstr(10, 12, ' |_| ', curses.color_pair(13) | curses.A_BOLD) screen.addstr(14, 52, 'Versão 1.0', curses.color_pair(18)) screen.addstr(18, 15, 'Autor: Washington Luis de Oliveira Santos', curses.color_pair(11)) screen.addstr(19, 15, 'End. : Av. Campinas, 749 - Chácara do Visconde', curses.color_pair(11)) screen.addstr(20, 28, 'Taubaté - São Paulo', curses.color_pair(11)) def Box(lt,ce,lb,cd, cor): for x in range(lt,lb): screen.addstr(x, ce, ' ' * (cd-ce+1), curses.color_pair(cor)) def DispBox(lt,ce,lb,cd, cor): Box(lt,ce,lb,cd, cor) screen.addstr(lt, ce, unichr(c_196) * (cd-ce), curses.color_pair(cor)) screen.addstr(lt, ce, unichr(c_218), curses.color_pair(cor)) screen.addstr(lt, cd, unichr(c_191), curses.color_pair(cor)) screen.addstr(lb, ce, unichr(c_196) * (cd-ce), curses.color_pair(cor)) screen.addstr(lb, ce, unichr(c_192), curses.color_pair(cor)) screen.addstr(lb, cd, unichr(c_217), curses.color_pair(cor)) for x in range(lt+1,lb): screen.addstr(x, ce, unichr(c_179), curses.color_pair(cor)) screen.addstr(x, cd, unichr(c_179), curses.color_pair(cor)) def DispBox_Shadow(lt,ce,lb,cd, cor): DispBox(lt,ce,lb,cd, cor) #Desenha a Sombra da Caixa for x in range(lt+1,lb+1): screen.addstr(x, cd+1, unichr(c_168), curses.color_pair(18)) screen.addstr(lb+1, ce+1, unichr(c_168) * (cd-ce+1), curses.color_pair(18)) def ENCERRA(): #Restaura a cor do terminal screen.refresh() screen.clear() screen.keypad(True) curses.nocbreak() curses.echo() curses.endwin() sys.exit(0) def water_display(l_ini=13, l_end=19): for line in range(l_ini, l_end): water_line = '' while len(water_line) <= 80: water_line += ('^' * randrange(0,6)) + (' ' * randrange(1,6)) screen.addstr(line, 0, water_line[:80], curses.color_pair(4)) def chk_cais(cais): cais = ''.join(cais) quem = 'O Lobo' if cais == 'LC ' else 'A Cabra' if cais == ' CP' else '' #'ninguem' vitima = 'a Cabra' if cais == 'LC ' else 'o Pasto' if cais == ' CP' else '' #'nada ' if quem+vitima: screen.addstr(21, 1, 'Sinto muito...', curses.color_pair(1)) screen.addstr(22, 1, quem + ' comeu ' + vitima, curses.color_pair(1)) pause(1) return True def chk_lotacao(carga): if carga.count(' ') == 1: screen.addstr(21, 1, 'Sinto muito... Lotado', curses.color_pair(1)) screen.addstr(22, 1, 'O Barco afundou...', curses.color_pair(1)) pause(1) screen.addstr(10,38, ' ', curses.color_pair(2)) # f preto screen.addstr(11,38, ' ', curses.color_pair(1)) # f branco for line in range(13,18): water_display() screen.addstr(line+0,37, ' M ', curses.color_pair(6)) screen.addstr(line+1,37, '\~~~/', curses.color_pair(6)) # | curses.A_UNDERLINE) pause(.2) return True def chk_fim(cais_2): if ''.join(cais_2) == 'LCP': screen.addstr(21, 1, ' Muito Bem !!!', curses.color_pair(1)) return True def embarque(cais, carga): if ''.join(cais) != ' ': screen.addstr(21, 1, 'Por no Barco? ', curses.color_pair(3) | curses.A_BOLD | curses.A_BLINK) key = chr(screen.getch()).upper() screen.addstr(21, 1, ' '*15, curses.color_pair(3)) if key == chr(27): return True elif key != chr(32): try: i = cais.index(key) cais [i] = ' ' carga [i] = key except: pass def desembarque(cais, carga): if ''.join(carga) != ' ': screen.addstr(21, 1, 'Tirar do Barco?', curses.color_pair(3) | curses.A_BOLD | curses.A_BLINK) key = chr(screen.getch()).upper() screen.addstr(21, 1, ' '*15, curses.color_pair(3)) if key == chr(27): return True elif key != chr(32): try: i = carga.index(key) cais [i] = key carga [i] = ' ' except: pass def gameloop(): # Define Variaveis usadas no jogo cais_1 = ['L','C','P'] cais_2 = [' ',' ',' '] carga = [' ',' ',' '] barco = ' \___/ ' nv = 0 # numero de viagens screen.addstr(21,62, ' Nº de Viagens: {:2}'.format(nv), curses.color_pair(4)) while True: if desembarque(cais_1, carga): return screen.addstr(10, 2, ''.join(cais_1), curses.color_pair(2)) screen.addstr(10, 9, ''.join(carga), curses.color_pair(2)) if embarque(cais_1, carga): return screen.addstr(10, 2, ''.join(cais_1), curses.color_pair(2)) screen.addstr(10, 9, ''.join(carga), curses.color_pair(2)) # Movimenta o barco de C1 para C2 (atravessa) aux = ' '+''.join(carga)+' ' for col in range(7,67): #water_display() screen.addstr(10, col, aux, curses.color_pair(2)) screen.addstr(11, col, barco, curses.color_pair(1)) pause(.1) if col == 37 and chk_lotacao(carga): return nv += 1 screen.addstr(21,62, ' Nº de Viagens: {:2}'.format(nv), curses.color_pair(4)) if chk_cais(cais_1): return if desembarque(cais_2, carga): return screen.addstr(10,75, ''.join(cais_2), curses.color_pair(2)) screen.addstr(10,68, ''.join(carga), curses.color_pair(2)) if chk_fim(cais_2): return if embarque(cais_2, carga): return screen.addstr(10,75, ''.join(cais_2), curses.color_pair(2)) screen.addstr(10,68, ''.join(carga), curses.color_pair(2)) # Movimenta o barco de C2 para C1 (volta) aux = ' '+''.join(carga)+' ' for col in range(66,6,-1): #water_display() screen.addstr(10, col, aux, curses.color_pair(2)) screen.addstr(11, col, barco, curses.color_pair(1)) pause(.1) if col == 37 and chk_lotacao(carga): return nv += 1 screen.addstr(21,62, ' Nº de Viagens: {:2}'.format(nv), curses.color_pair(4)) if chk_cais(cais_2): return def main(): while True: screen.clear() #Imprimi a tela de abertura water_display(1,24) autor() pause(4) screen.clear() screen.addstr( 2,30, ' O B A R Q U E I R O ', curses.color_pair(4) | curses.A_BOLD) screen.addstr(10, 2, 'LCP', curses.color_pair(2)) screen.addstr(10, 9, ' ', curses.color_pair(2)) screen.addstr(11, 0, '|-----. \ /' + (' ' * 60)+'.-----|', curses.color_pair(1)) screen.addstr(12, 0, ('~' * 80), curses.color_pair(4)) screen.addstr(12, 0, '|', curses.color_pair(6) | curses.A_UNDERLINE) screen.addstr(12, 6, '|', curses.color_pair(6) | curses.A_UNDERLINE) screen.addstr(12,73, '|', curses.color_pair(6) | curses.A_UNDERLINE) screen.addstr(12,79, '|', curses.color_pair(6) | curses.A_UNDERLINE) screen.addstr(19, 0, ('~' * 80), curses.color_pair(4)) interval_monitor = setInterval(water_display, .5) gameloop() clearInterval(interval_monitor) # Verifica o que fazer ao final do jogo screen.addstr(23, 1, 'Quer tentar outra vez? (S/N)', curses.color_pair(1)) key = chr(screen.getch()).upper() if key != 'S': ENCERRA() if __name__ == '__main__': try: curses.wrapper(main()) except KeyboardInterrupt: curses.endwin()
Conversor de dólares em reais e vice-versa
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
VMs e Interfaces de Rede desapareceram (12)
Instalação do drive do adaptador wiffi (7)