FJOM On The Run
Mis Bookmarks
Textpattern Forums
Textpattern
Bloglines
Ask Metafilter
Metafilter
Esta es una versión de ahorcado que hice el mes pasado mientras esperaba que Z terminara de trabajar en su cierre. Hasta eso esta entretenido. Lo más tardado fué encontrar un diccionario decente y usable en formato de texto
require 'Win32API'
def getkey
(Win32API.new("crtdll", "_getch", [], "L").Call)
end
DEBUG=nil INTERACTIVE=1 SHOW_ON_LOSE=1
class Ahorcado
ETAPAS=['','O','O+','O+-','O+-/','O+-<']
LETRAS=('a'..'z').to_a
def initialize
@etapa=0
@dicc=genera_diccionario
@palabra=elegir_palabra
@preguntadas=[]
@estatus=0
p @palabra if DEBUG
end
def juega
puts self
while @estatus==0
letra=obtener_letra
turno(letra)
end
puts "\nLa palabra era #{@palabra.join().upcase}" if (@estatus==-1 and SHOW_ON_LOSE)
return @estatus
end
private
def genera_diccionario
File.open("diccionario.txt","r").read.split(' ')
end
def obtener_letra
if INTERACTIVE
print "Siguiente letra: "
x=getkey.chr
puts x
puts
x
else
LETRAS[rand(LETRAS.length)]
end
end
def turno(letra)
@preguntadas.push(letra)
@etapa+=1 unless @palabra.include?(letra)
puts self
@estatus=evaluar_posicion
end
def to_s
st=""
@palabra.each do |a|
st+= @preguntadas.include?(a) ? "#{a} " : "_ "
end
st+=" "+ETAPAS[@etapa]+"\nPreguntadas: "+@preguntadas.uniq.sort.join(" ")+"\nFaltan: "+(LETRAS-@preguntadas).join(" ")+"\n"
end
def elegir_palabra
return @dicc[rand(@dicc.length)].downcase.split("")
end
def evaluar_posicion
return 1 if (@palabra-@preguntadas).empty?
return -1 if @etapa==ETAPAS.length-1
return 0
end
end
if __FILE__ == $0
while true
puts "Juguemos a.... Ahorcados"
x=Ahorcado.new
r=x.juega
puts "Ganaste!" if r==1
puts "Perdiste!" if r==-1
puts "\nJugar de nuevo? (s/n)"
break unless getkey.chr.downcase == "s"
end
end
Newer: Status | Home | Older: Project Euler 18
En línea desde hace 4 años, 7 meses, 7 dÃas, 11 horas y 2 minutos.