Anuncios Google

[El desafío][FINALIZADO]- Ejercicio 1 - 50 scenebitos al ganador

Bueno, visto un problema que ha planteado un forero y como veo que a la gente le parece más complicado de lo que parece, voy a plantear este problema, el que lo solucione, se ganará 50scenebitos y la "fama" de ser un buen coder ;-).

Hacer una función que lea las tecla y que detecte que se ha pulsado 2 veces seguidas la tecla X, y que cuando se cumpla esta condición hago algo en consecuencia.

Se puede hacer en cualquier lenguaje, incluso se puede usar seudocódigo, más importante es el planteamiento que el uso del lenguaje en sí. Por ejemplo, se puede usar una "seudofunción" tipo "LeerTecla()" en lugar de un pad:read().

EDITADO: En primer lugar gracias por vuestra participación, en segundo quería dejar claro algo que parece ser que me he explicado mal y la gente no lo ha entendido.

Cuando digo 2 veces seguidas, no me refiero en X tiempo (pueden ser unos segundos o varias horas, es lo de menos). Quiero decir que no se pulse otra teclan en X y X.

Por ejemplo, si se pulsa X, Círculo y X, no debe de ser condición válida. Si se pulsa X y luego X (sin pulsar ninguna otra tecla Sí).


El ganador ha sido ktix007, en mi opinión la solución de Arkanist era más elegante, pero la dijo después.

Enhorabuena al coder ganador que se lleva 50 scenebitos y porsupuesto la consideración de todos de que es un buen coder.

 


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Arkanist

Esto lo hace muchísimo más facil. Dios bendiga el PGE.

--Función de doble confirmación por Arkanist en Lua PGE (18/8/09)
function doble_confirmacion()
local pulsado = false -- variable si se ha pulsado o no el primer "X"
	if pge.controls.pressed(PGE_CTRL_CROSS) then --si pulsamos el boton "X", pulsado será true
		pulsado = true -- activa el bucle
	end
while pulsado = true do -- empieza bucle si pulsado es true
 
	if pge.controls.pressed(PGE_CTRL_CROSS) then -- se comprueba si se vuelve a pulsar el botón X
		-- Aquí va la acción que se quiera hacer.
       elseif pge.controls.pressedany() then -- Sino se pulsó "X" pero se pulsa cualquier otro botón, pulsado será falso.
               pulsado = false -- se rompe el bucle
	end
 
end
end

Aquí esta.

A reveure i sort!

Imagen de ktix007

Creo que ahora si...

oldpad = Controls.read()
rojo = Color.new(255,0,0)
crosspulsada = 0
 
function pulsar2()
if pad:cross() and oldpad:cross() ~= pad:cross() then
crosspulsada = crosspulsada + 1
else if pad:square() or pad:triangle() or pad:circle() or pad:r() or pad:right() or pad:left() or pad:up() or pad:down() or pad:l() then
crosspulsada = 0
end
end
end
 
function consecuencia()
if crosspulsada == 2 then
screen:clear(rojo)
end
end
 
while true do
pad = Controls.read()
pulsar2()
consecuencia()
screen.waitVblankStart()
screen:flip()
oldpad = pad
end

Imagen de pspgorrister

Pregunta

Como no sé bien el comportamiento de Lua, creo que usando

oldpad:cross() ~= pad:cross()

No funcionaría, porque daría false al ser el anterior igual (otro cross). Como digo, no estoy seguro, si no es así y es válido, eres el ganador. Sino ganaría Arkanist.

¿Lo has probado, funciona?. Confirmamelo porfavor.

Un saludo.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de ktix007

Si que funciona... siempre

Si que funciona... siempre lo he hecho asi eso del oldpad.

En este tuto lo enseña: http://psp.scenebeta.com/tutorial/4-tablas-arrays

Saludos ;-)

Imagen de Arkanist

Y...

Si se pulsa select en tu codigo? xd.

En fin, creo que has ganado, una pena no haber visto la noticia antes xD.

 

Imagen de el__QAT

Igualmente...

La estoy viendo por primera vez :-(

sAlud0s!

uuuuu

abre una paguina en el nabegador de internet y pulsa dos beses x en un link en nabegador lo detectara y abrira el link

Imagen de Arkanist

WTF?

Acaso te has leido lo que pone en el post? Hay que hacer una función en cualquier lenguaje de programación ¬¬.

PD: Con un clic ya basta.

A reveure.

Imagen de Arkanist

Dudo un poco que funcione.

Pero ahi va:

-- Función de doble confirmación en Lua PGE, por Arkanist (17/8/09)
function doble_confirmacion()
local pulsado = false -- variable si se ha pulsado o no el primer "X"
local contador = pge.timer.create()-- se crea el contador
	if pge.controls.released(PGE_CTRL_CROSS) then --si soltamos el boton "X", pulsado será true
		pulsado = true -- activa el bucle
	end
while pulsado = true do -- empieza bucle si pulsado es true
contador:update() -- se reinicia el contador
local tiempo = contador:peekdelta() -- se crea una local para guardar el tiempo
	if pge.controls.pressed(PGE_CTRL_CROSS) then -- se comprueba si se vuelve a pulsar el botón X
		-- Aquí va la acción que se quiera hacer.
	end
	if tiempo > 1 then -- si tiempo llega a 1 segundo, se sale del bucle (puede ser un segundo, medio o lo que se quiera)
		pulsado = false	   -- se rompe el bucle
	end
end
end

A reveure.

Imagen de rubenelportero

puff

tio, macho no se como lo puedes hacer, veo eso y me parece a chino xD!

salu2

Imagen de ktix007

Al pulsar 2 veces la pantalla se vuelve roja

oldpad = Controls.readpad
rojo = Color.new(255,0,0)
crosspulsada = 0
 
function pulsar2()
if pad:cross() and oldpad:cross() ~= pad:cross() then
crosspulsada = crosspulsada + 1
end
end
 
function consecuencia()
if crosspulsada == 2 then
screen:clear(rojo)
end
end
 
while true do
pad = Controls.read()
pulsar2()
consecuencia()
screen.waitVblankStart()
screen:flip()
oldpad = pad
end

PD: Puedes ayudarme con esto: http://psp.scenebeta.com/node/37305

Imagen de Arkanist

El problema de tu código.

Es que no tienen que estar seguidas las pulsaciones.

Puedes pulsar "X" una vez, y pulsarla al cabo de 20 minutos y funcionará igual.

A reveure.

Imagen de ktix007

A tiene que ser seguidas! Ok

A tiene que ser seguidas! Ok ahora lo edito

Imagen de ktix007

Ya esta xD!

oldpad = Controls.read()
rojo = Color.new(255,0,0)
crosspulsada = 0
 
esperar = Timer.new()
esperar:stop()
esperar:reset()
 
function pulsar2()
if pad:cross() and oldpad:cross() ~= pad:cross() then
crosspulsada = crosspulsada + 1
esperar:start()
end
end
 
function consecuencia()
if crosspulsada > 0 and esperar:time() > 500 then
crosspulsada = 0
esperar:stop()
esperar:reset()
else if crosspulsada == 2 and esperar:time() < 500 then
screen:clear(rojo)
esperar:stop()
esperar:reset()
end
end
end
 
while true do
pad = Controls.read()
pulsar2()
consecuencia()
screen.waitVblankStart()
screen:flip()
oldpad = pad
end

Me ha salido un poco largo...

Imagen de rubenelportero

bueno,

lo de crear el temporizador veo es muy complicado no? no seria mas facil sin contador?

salu2

Imagen de rubenelportero

pues bueno,

pongo aqui lo que haria:

-- al pulsar 2 veces consecutivas X a la variable "ganador" será 1--
ganador = 0
pulsadas = 0
NoPad = 0
function doblepulsacion()
if pad:cross() and NoPad== 0 then
 pulsadas = pulsadas + 1.5
 NoPad = 1
end
if not pad:cross() then
 NoPad = 0
 if pulsadas >= 0 then
  pulsadas = pulsadas - 0.10
 end
end
if pulsadas >= 2 then
 ganador = 1
end
end
while true do
pad = Controls.read()
doblepulsacion()
screen.waitVblankStart()
screen:flip()
end

:P, lo he probado y me funciona, a  velocidad 333 de CPUy ha 20 y funciona igual,  y no creo que haya ningun problema en otras velocidades, pruebalo si quieres, está hecho en lua

salu2

Imagen de Arkanist

Lol.

Se parece al ejemplo que di yo, cuando se pulsa X se suma un contador, y el contador se va restando, asi hay que pulsarlo ràpido.

A reveure.

Imagen de rubenelportero

si pero no,

los 2 se basan en una variable que al sumar tal cantidad hace esto otro, pero en mi codigo está todo de otra manera, NoPad en vez de old pad, y demas, además, tu codigo me e dado cuenta que estaria mal creo, porque a la variable solo se le debe restar cuando no se está pulsando X, mejora el rendimiento de tó,

salu2

Imagen de Arkanist

En realidad..

Sólo se resta si la variable es más grande de 0, así menos problemas con los controles (:

PD: En el último código que dejé uso temporizador para evitar los problemas que dijo pspgorrister.

A reveure

Imagen de Arkanist

Interesante...

Por cierto, se puede intentar más de una vez? Me refeiro, yo publico una función, pero resulta no funcionar del todo, entonces, se puede volver a intentar? ;P

Saludos y voy a empezar ya.

 

Imagen de pspgorrister

Sí, no hay problema

Sí, no hay problema

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.