Comment faire une action quand un chiffre est appuyé?
20 posts
• Page 2 of 2 • 1, 2
Re: Comment faire une action quand un chiffre est appuyé?
N'hésite pas à poster ton code ici, si tu n'y arrives toujours pas, tu as peut-êtr un soucis autre part qui affecte cette variable...
MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)My calculator programs
Mes programmes pour calculatrices
-
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)- Posts: 14896
- Images: 1211
- Joined: 01 Jun 2007, 00:00
- Location: France
- Gender:
- Calculator(s):→ MyCalcs profile
- Twitter: adriweb
- GitHub: adriweb
Re: Comment faire une action quand un chiffre est appuyé?
J'aimerais savoir ce qui foire là dedans:
- Code: Select all
tps = 3
score = 0
function on.timer()
timer.stop() -- stops the current timer. Not necessary.
tps = tps - 0.1
platform.window:invalidate() -- screen refresh (on.paint is called)
end
function on.paint(gc)
local h=platform.window:height()
local w=platform.window:width()
gc:setFont("sansserif", "b", 200)
gc:setColorRGB(158, 5, 8)
local sw = gc:getStringWidth("TITRE")
local sh = gc:getStringHeight("TITRE")
gc:drawString("TITRE", w/2 - sw/2, h/2)
gc:setFont("serif", "b", 20)
gc:setColorRGB(0, 0, 0)
local th = gc:getStringHeight("Appuyez sur ENTER pour commencer")
local tw = gc:getStringWidth("Appuyez sur ENTER pour commencer")
gc:drawString("Appuyez sur ENTER pour commencer", w/2 - tw/2, h/2 + th)
if screen == 1 then
local juste = true
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(0,0,0)
local scorew = gc:getStringWidth(score)
local scoreh = gc:getStringHeight(score)
gc:drawString(score, w/2,0,"top")
if juste == true then
alea = math.random(1,9)
if alea == 1 then
gc:setColorRGB(255,0,0)
gc:fillRect(1*w/6,1*h/6,2*w/3,2*h/3)
timer.start(0.1)
gc:drawString(tps,0,0,"top")
function on.charin(ch)
if(ch=="1") then
juste = true
score =score +1
alea = math.random(1,9)
else
juste = false
end
end
elseif alea == 2 then
gc:setColorRGB(255,255,0)
gc:fillRect(1*w/6,1*h/6,2*w/3,2*h/3)
timer.start(0.1)
gc:drawString(tps,0,0,"top")
function on.charin(ch)
if(ch=="2") then
juste = true
score =score +1
alea = math.random(1,9)
else
juste = false
end
end
elseif alea == 3 then
gc:setColorRGB(0,0,255)
gc:fillRect(1*w/6,1*h/6,2*w/3,2*h/3)
timer.start(0.1)
gc:drawString(tps,0,0,"top")
function on.charin(ch)
if(ch=="3") then
juste = true
score =score +1
alea = math.random(1,9)
else
juste = false
end
end
elseif alea == 4 then
gc:setColorRGB(255,0,0)
gc:fillPolygon({w/6,5*h/6,5*w/6,5*h/6,w/2,h/6,w/6,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
function on.charin(ch)
if(ch=="4") then
juste = true
score =score +1
alea = math.random(1,9)
else
juste = false
end
end
elseif alea == 5 then
gc:setColorRGB(255,255,0)
gc:fillPolygon({w/6,5*h/6,5*w/6,5*h/6,w/2,h/6,w/6,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
function on.charin(ch)
if(ch=="5") then
juste = true
score =score +1
alea = math.random(1,9)
else
juste = false
end
end
elseif alea == 6 then
gc:setColorRGB(0,0,255)
gc:fillPolygon({w/6,5*h/6,5*w/6,5*h/6,w/2,h/6,w/6,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
function on.charin(ch)
if(ch=="6") then
juste = true
score =score +1
alea = math.random(1,9)
else
juste = false
end
end
elseif alea == 7 then
gc:setColorRGB(255,0,0)
gc:fillPolygon({w/3,5*h/6,2*w/3,5*h/6,5*w/6,h/2,2*w/3,h/6,w/3,h/6,w/6,h/2,w/3,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
function on.charin(ch)
if(ch=="7") then
juste = true
score =score +1
alea = math.random(1,9)
else
juste = false
end
end
elseif alea == 8 then
gc:setColorRGB(255,255,0)
gc:fillPolygon({w/3,5*h/6,2*w/3,5*h/6,5*w/6,h/2,2*w/3,h/6,w/3,h/6,w/6,h/2,w/3,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
function on.charin(ch)
if(ch=="8") then
juste = true
score =score +1
alea = math.random(1,9)
else
juste = false
end
end
elseif alea == 9 then
gc:setColorRGB(0,0,255)
gc:fillPolygon({w/3,5*h/6,2*w/3,5*h/6,5*w/6,h/2,2*w/3,h/6,w/3,h/6,w/6,h/2,w/3,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
function on.charin(ch)
if(ch=="9") then
juste = true
score =score +1
alea = math.random(1,9)
else
juste = false
end
end
end
end
if juste == false then
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:drawString("PERDU!", w/2 - tw/2, h/2 + th)
end
end
end
function on.enterKey()
screen = 1
end
-
tiganaki
Niveau 7: EP (Espèce Protégée: geek)- Posts: 75
- Joined: 28 Dec 2012, 16:37
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: TS
Re: Comment faire une action quand un chiffre est appuyé?
Tout d'abord, tu (re)déclare une fonction d'évenement (on.charIn) (que tu as mal orthographié, il faut mettre un I majuscule !) dans une autre fonction (on.paint), ce qui est, en gros, "interdit". Il faut penser autrement.
J'ai pas bien vu dans le détail, mais tu pourrais la déclarer une bonne fois pour toute, à la fin par exemple, en mettant (ou un truc du genre):
et sinon du coup, le timer.start(0.1), tu n'en mets qu'un seul à la fin par exemple.
J'ai pas bien vu dans le détail, mais tu pourrais la déclarer une bonne fois pour toute, à la fin par exemple, en mettant (ou un truc du genre):
- Code: Select all
function on.charIn(ch)
if (tonumber(ch) == alea) then
juste = true
score = score + 1
alea = math.random(1, 9)
else
juste = false
end
platform.window:invalidate()
end
et sinon du coup, le timer.start(0.1), tu n'en mets qu'un seul à la fin par exemple.
MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)My calculator programs
Mes programmes pour calculatrices
-
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)- Posts: 14896
- Images: 1211
- Joined: 01 Jun 2007, 00:00
- Location: France
- Gender:
- Calculator(s):→ MyCalcs profile
- Twitter: adriweb
- GitHub: adriweb
Re: Comment faire une action quand un chiffre est appuyé?
Vous pouvez me dire pourquoi là, quand j'appuie sur une mauvaise touche, j'ai pas perdu. Je perds juste quand le temps se termine.
- Code: Select all
tps = 1.5
score = 0
alea = math.random(1,9)
function on.timer()
timer.stop()
tps = tps - 0.1
platform.window:invalidate()
end
function on.paint(gc)
local h=platform.window:height()
local w=platform.window:width()
gc:setFont("sansserif", "b", 200)
gc:setColorRGB(158, 5, 8)
local sw = gc:getStringWidth("TITRE")
local sh = gc:getStringHeight("TITRE")
gc:drawString("TITRE", w/2 - sw/2, h/2)
gc:setFont("serif", "b", 10)
gc:setColorRGB(0, 0, 0)
local th = gc:getStringHeight("Appuyez sur ENTER pour commencer")
local tw = gc:getStringWidth("Appuyez sur ENTER pour commencer")
gc:drawString("Appuyez sur ENTER pour commencer", w/2 - tw/2, h/2 + th)
if screen == 1 then
local juste = true
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(0,0,0)
local scorew = gc:getStringWidth(score)
local scoreh = gc:getStringHeight(score)
gc:drawString(score, w/2,0,"top")
if juste == true then
if alea == 1 then
gc:setColorRGB(255,0,0)
gc:fillRect(1*w/6,1*h/6,2*w/3,2*h/3)
timer.start(0.1)
gc:drawString(tps,0,0,"top")
if tps <= 0 then
timer.stop()
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:setFont("serif", "b", 200, "middle")
local pw = gc:getStringWidth("PERDU!")
gc:drawString("PERDU!", w/2 - pw/2, h/2)
gc:setColorRGB(0,0,0)
gc:drawString(score, w/2, h/2,"top")
end
elseif alea == 2 then
gc:setColorRGB(255,255,0)
gc:fillRect(1*w/6,1*h/6,2*w/3,2*h/3)
timer.start(0.1)
gc:drawString(tps,0,0,"top")
if tps <= 0 then
timer.stop()
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:setFont("serif", "b", 200, "middle")
local pw = gc:getStringWidth("PERDU!")
gc:drawString("PERDU!", w/2 - pw/2, h/2)
gc:setColorRGB(0,0,0)
gc:drawString(score, w/2, h/2,"top")
end
elseif alea == 3 then
gc:setColorRGB(0,0,255)
gc:fillRect(1*w/6,1*h/6,2*w/3,2*h/3)
timer.start(0.1)
gc:drawString(tps,0,0,"top")
if tps <= 0 then
timer.stop()
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:setFont("serif", "b", 200, "middle")
local pw = gc:getStringWidth("PERDU!")
gc:drawString("PERDU!", w/2 - pw/2, h/2)
gc:setColorRGB(0,0,0)
gc:drawString(score, w/2, h/2,"top")
end
elseif alea == 4 then
gc:setColorRGB(255,0,0)
gc:fillPolygon({w/6,5*h/6,5*w/6,5*h/6,w/2,h/6,w/6,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
if tps <= 0 then
timer.stop()
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:setFont("serif", "b", 200, "middle")
local pw = gc:getStringWidth("PERDU!")
gc:drawString("PERDU!", w/2 - pw/2, h/2)
gc:setColorRGB(0,0,0)
gc:drawString(score, w/2, h/2,"top")
end
elseif alea == 5 then
gc:setColorRGB(255,255,0)
gc:fillPolygon({w/6,5*h/6,5*w/6,5*h/6,w/2,h/6,w/6,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
if tps <= 0 then
timer.stop()
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:setFont("serif", "b", 200, "middle")
local pw = gc:getStringWidth("PERDU!")
gc:drawString("PERDU!", w/2 - pw/2, h/2)
gc:setColorRGB(0,0,0)
gc:drawString(score, w/2, h/2,"top")
end
elseif alea == 6 then
gc:setColorRGB(0,0,255)
gc:fillPolygon({w/6,5*h/6,5*w/6,5*h/6,w/2,h/6,w/6,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
if tps <= 0 then
timer.stop()
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:setFont("serif", "b", 200, "middle")
local pw = gc:getStringWidth("PERDU!")
gc:drawString("PERDU!", w/2 - pw/2, h/2)
gc:setColorRGB(0,0,0)
gc:drawString(score, w/2, h/2,"top")
end
elseif alea == 7 then
gc:setColorRGB(255,0,0)
gc:fillPolygon({w/3,5*h/6,2*w/3,5*h/6,5*w/6,h/2,2*w/3,h/6,w/3,h/6,w/6,h/2,w/3,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
if tps <= 0 then
timer.stop()
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:setFont("serif", "b", 200, "middle")
local pw = gc:getStringWidth("PERDU!")
gc:drawString("PERDU!", w/2 - pw/2, h/2)
gc:setColorRGB(0,0,0)
gc:drawString(score, w/2, h/2,"top")
end
elseif alea == 8 then
gc:setColorRGB(255,255,0)
gc:fillPolygon({w/3,5*h/6,2*w/3,5*h/6,5*w/6,h/2,2*w/3,h/6,w/3,h/6,w/6,h/2,w/3,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
if tps <= 0 then
timer.stop()
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:setFont("serif", "b", 200, "middle")
local pw = gc:getStringWidth("PERDU!")
gc:drawString("PERDU!", w/2 - pw/2, h/2)
gc:setColorRGB(0,0,0)
gc:drawString(score, w/2, h/2,"top")
end
elseif alea == 9 then
gc:setColorRGB(0,0,255)
gc:fillPolygon({w/3,5*h/6,2*w/3,5*h/6,5*w/6,h/2,2*w/3,h/6,w/3,h/6,w/6,h/2,w/3,5*h/6})
timer.start(0.1)
gc:drawString(tps,0,0,"top")
if tps <= 0 then
timer.stop()
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:setFont("serif", "b", 200, "middle")
local pw = gc:getStringWidth("PERDU!")
gc:drawString("PERDU!", w/2 - pw/2, h/2)
gc:setColorRGB(0,0,0)
gc:drawString(score, w/2, h/2,"top")
end
end
end
if juste == false then
timer.stop()
gc:setColorRGB(255,255,255)
gc:fillRect(0,0,w,h)
gc:setColorRGB(255,0,0)
gc:setFont("serif", "b", 200, "middle")
local pw = gc:getStringWidth("PERDU!")
gc:drawString("PERDU!", w/2 - pw/2, h/2)
gc:setColorRGB(0,0,0)
gc:drawString(score, w/2, h/2,"top")
end
end
end
function on.enterKey()
screen = 1
end
function on.charIn(ch)
if (tonumber(ch) == alea) then
juste = true
score = score + 1
tps = 1.5
alea = math.random(1, 9)
else
juste = false
end
platform.window:invalidate()
end
-
tiganaki
Niveau 7: EP (Espèce Protégée: geek)- Posts: 75
- Joined: 28 Dec 2012, 16:37
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: TS
Re: Comment faire une action quand un chiffre est appuyé?
Retire
et met tout au début du script
Ton erreur, c'est que "local juste" dans le on.paint n'a pas de portée à l'extérieur de la fonction on.paint au moment où elle est exécutée.
Alors quand dans on.charIn tu crois changer la valeur de "juste", en réalité tu crées/modifies une variable globale "juste".
Pourquoi alors si elle est globale ça ne fonctionne pas dans on.paint ? A cause de ton "local juste" qui écrase temporairement dans le bloc où il se trouve la signification de "juste".
Voici ton erreur vu d'un autre angle ::
Edit : Aussi, il faudrait commencer à factoriser ton code.
Là ton on.paint() est bourré de choses inutiles et répétées.
Penses à cos() et sin() pour générer des polygones régulier sans avoir à les sauvegarder.
- Code: Select all
local juste = true
et met tout au début du script
- Code: Select all
juste = true
Ton erreur, c'est que "local juste" dans le on.paint n'a pas de portée à l'extérieur de la fonction on.paint au moment où elle est exécutée.
Alors quand dans on.charIn tu crois changer la valeur de "juste", en réalité tu crées/modifies une variable globale "juste".
Pourquoi alors si elle est globale ça ne fonctionne pas dans on.paint ? A cause de ton "local juste" qui écrase temporairement dans le bloc où il se trouve la signification de "juste".
Voici ton erreur vu d'un autre angle ::
- Code: Select all
function add(x, y)
local a = 0
return a + y
end
function main()
a = 1
b = 2
print(add(a,b)) -- affiche 2
end
Edit : Aussi, il faudrait commencer à factoriser ton code.
Là ton on.paint() est bourré de choses inutiles et répétées.
Penses à cos() et sin() pour générer des polygones régulier sans avoir à les sauvegarder.
-
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)- Posts: 6414
- Images: 22
- Joined: 27 Nov 2008, 00:00
- Location: 0x1AACC355
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: BAC+5: Epita (ING3)
Re: Comment faire une action quand un chiffre est appuyé?
factoriser?
c'est à dire?
c'est à dire?
-
tiganaki
Niveau 7: EP (Espèce Protégée: geek)- Posts: 75
- Joined: 28 Dec 2012, 16:37
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: TS
Re: Comment faire une action quand un chiffre est appuyé?
tiganaki wrote:factoriser?
c'est à dire?
Le fait de transformer ça:
- Code: Select all
function on.paint(gc)
gc:drawString("Hello", 0, 0, "top")
gc:drawString("World", 0, 20, "top")
gc:drawString("This", 0, 40, "top")
gc:drawString("is", 0, 60, "top")
gc:drawString("a", 0, 80, "top")
gc:drawString("multiline", 0, 100, "top")
gc:drawString("text", 0, 120, "top")
end
en
- Code: Select all
text = {"Hello", "World", "This", "is", "a", "multiline", "text"}
function on.paint(gc)
for i in ipairs(text) do
gc:drawString(text[i], 0, 20*(i-1), "top")
end
end
Aussi, penses bien que on.paint() est exécuté a chaque fois que l'écran est rafraîchi. Raison de plus pour en mettre le moins possible.
-
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)- Posts: 6414
- Images: 22
- Joined: 27 Nov 2008, 00:00
- Location: 0x1AACC355
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: BAC+5: Epita (ING3)
Re: Comment faire une action quand un chiffre est appuyé?
J'ai un autre problème:
Le titre qui est en taille 200 s'affiche à la même taille que le record qui est en taille 20. Ce problème est uniquement en mode calculatrice, en mode ordi, ça va.
- Code: Select all
h=platform.window:height()
w=platform.window:width()
gc:setFont("sansserif", "b", 200)
gc:setColorRGB(158, 5, 8)
local sw = gc:getStringWidth("TITRE")
local sh = gc:getStringHeight("TITRE")
gc:drawString("TITRE", w/2 - sw/2, h/2)
gc:setFont("serif", "r", 10)
gc:setColorRGB(0, 0, 0)
local th = gc:getStringHeight("Appuyez sur ENTER pour commencer")
local tw = gc:getStringWidth("Appuyez sur ENTER pour commencer")
gc:drawString("Appuyez sur ENTER pour commencer", w/2 - tw/2, h/2 + th)
local rw = gc:getStringWidth("Record"..record)
gc:setFont("sansserif", "r", 20)
gc:drawString("Record:"..record, w/2-rw, h, "bottom")
Le titre qui est en taille 200 s'affiche à la même taille que le record qui est en taille 20. Ce problème est uniquement en mode calculatrice, en mode ordi, ça va.
-
tiganaki
Niveau 7: EP (Espèce Protégée: geek)- Posts: 75
- Joined: 28 Dec 2012, 16:37
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: TS
Re: Comment faire une action quand un chiffre est appuyé?
Oui, sur calculatrice, tu as un nombre fini de tailles de polices, et on ne peut rien y faire.... (par ailleurs, une taille 200 sur calculatrice, tu ne verrais pas grand chose
)

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)My calculator programs
Mes programmes pour calculatrices
-
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)- Posts: 14896
- Images: 1211
- Joined: 01 Jun 2007, 00:00
- Location: France
- Gender:
- Calculator(s):→ MyCalcs profile
- Twitter: adriweb
- GitHub: adriweb
Re: Comment faire une action quand un chiffre est appuyé?
quelle taille devrais-je donner au titre et au record alors?
-
tiganaki
Niveau 7: EP (Espèce Protégée: geek)- Posts: 75
- Joined: 28 Dec 2012, 16:37
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: TS
20 posts
• Page 2 of 2 • 1, 2
Who is online
Users browsing this forum: No registered users and 6 guests