Re: 2 on.paint ?
Posté: 06 Sep 2017, 18:26
D'ac, merci ^^, et je t'inquiete, une fois que je sais le faire c'est bon, je pourrai l'utiliser pour tout !
News, programmes, tutoriaux, forum sur les calculatrices TI !
https://tiplanet.org/forum/
-- Template code - Morpion (tic tac toe)
-- Adriweb
-- Pour https://tiplanet.org/forum/viewtopic.php?f=15&t=20453
---------------------
-- Au départ, on a une grille vide, donc une matrice (tableau 2D) de 3x3 cases vides
local grille -- cf. ci-dessous pour l'initialisation
-- On remet-a-zéro la grille quand on appuie sur Esc
function on.escapeKey()
grille =
{
{ "", "", "" },
{ "", "", "" },
{ "", "", "" },
}
platform.window:invalidate()
end
on.escapeKey() -- on initialise la grille au début
local taille -- de la police
function on.resize()
taille = platform.hw() > 5 and 80 or 255 -- si c'est sur ordi, mettre moins grand, sinon max
end
-- Les marques de chacun
local j1, j1couleur = "X", 0xFF0000 -- rouge
local j2, j2couleur = "O", 0x0000FF -- bleu
-- Le joueur en cours ; on commence par le X
local joueur = j1
-- Est-ce qu'un joueur a gagné ?
local win = false -- 0 si egalité, 1 si joueur 1, 2 si joueur 2
function checkWin()
-- A coder...
-- win = ...
end
-- On regarde quand l'utilisateur appuie sur une touche représentant un nombre de 1 à 9...
function on.charIn(ch)
if win then return end -- on ne traite plus si la partie est terminée
local num = tonumber(ch)
if num >= 1 and num <= 9 then
-- récupération de la ligne et de la colonne pour la matrice
local ligne = 3 - math.floor((num-1)/3)
local colonne = ((num-1)%3) + 1
grille[ligne][colonne] = joueur
-- on change la marque pour le coup d'après
if joueur == j1 then joueur = j2 else joueur = j1 end
-- on verifie s'il y a un gagnant
checkWin()
-- on veut que l'écran se redessine
platform.window:invalidate()
end
end
function on.paint(gc, x, y, w, h)
-- affichage du titre au milieu en haut
gc:setFont("sansserif", "bi", 12)
gc:setColorRGB(100, 200, 8)
gc:drawString("Morpion", (w-gc:getStringWidth("Morpion"))/2, h/40)
-- dessin de la grille
gc:drawLine(w/5, h/3, 4*w/5, h/3)
gc:drawLine(w/5, 3*h/5, 4*w/5, 3*h/5)
gc:drawLine(2*w/5, h/7, 2*w/5, 4*h/5)
gc:drawLine(3*w/5, h/7, 3*w/5, 4*h/5)
-- dessin des choix des joueurs
gc:setFont("sansserif", "b", taille)
for ligne=1,3 do
for colonne=1,3 do
local marque = grille[ligne][colonne]
gc:setColorRGB(marque == j1 and j1couleur or j2couleur)
gc:drawString(marque, colonne * w/4.75 + colonne*w/50, ligne * h/4.5 - h/12)
end
end
-- dessin du reste en fonction du statut
-- if win >= 0 then
-- ... à coder
-- end
end
function on.escapeKey()
grille =
{
{ "", "", "" },
{ "", "", "" },
{ "", "", "" },
}
platform.window:invalidate()
end
function on.resize()
taille = platform.hw() > 5 and 80 or 255 -- si c'est sur ordi, mettre moins grand, sinon max
end
local j1, j1couleur = "X", 0xFF0000 -- rouge
local j2, j2couleur = "O", 0x0000FF
function on.charIn(ch)
if win then return end -- on ne traite plus si la partie est terminée
local num = tonumber(ch)
if num >= 1 and num <= 9 then
-- récupération de la ligne et de la colonne pour la matrice
local ligne = 3 - math.floor((num-1)/3)
local colonne = ((num-1)%3) + 1
grille[ligne][colonne] = joueur
-- on change la marque pour le coup d'après
if joueur == j1 then joueur = j2 else joueur = j1 end
-- on verifie s'il y a un gagnant
checkWin()
-- on veut que l'écran se redessine
platform.window:invalidate()
end
end
function on.paint(gc, x, y, w, h)
-- affichage du titre au milieu en haut
gc:setFont("sansserif", "bi", 12)
gc:setColorRGB(100, 200, 8)
gc:drawString("Morpion", (w-gc:getStringWidth("Morpion"))/2, h/40)
-- dessin de la grille
gc:drawLine(w/5, h/3, 4*w/5, h/3)
gc:drawLine(w/5, 3*h/5, 4*w/5, 3*h/5)
gc:drawLine(2*w/5, h/7, 2*w/5, 4*h/5)
gc:drawLine(3*w/5, h/7, 3*w/5, 4*h/5)
gc:setFont("sansserif", "b", taille)
for ligne=1,3 do
for colonne=1,3 do
local marque = grille[ligne][colonne]
gc:setColorRGB(marque == j1 and j1couleur or j2couleur)
gc:drawString(marque, colonne * w/4.75 + colonne*w/50, ligne * h/4.5 - h/12)
end
end
GreenTree0 a écrit:-Pour le coup je comprends plus mais j'ai encore des trucs à savoir sur ça :
- Code: Tout sélectionner
local j1, j1couleur = "X", 0xFF0000 -- rouge
local j2, j2couleur = "O", 0x0000FF
Le j1couleur est égal à un symbole ? Et quand tu met une virgule ce qu'il y a apres ne va pas etre défini comme une autre variable ?
local mavar, monautrevar = valeur1, valeur2
cela affecte valeur1 a mavar et valeur2 a monautrevar GreenTree0 a écrit:-Rien que par exemple ceci :
- Code: Tout sélectionner
function on.escapeKey()
grille =
{
{ "", "", "" },
{ "", "", "" },
{ "", "", "" },
}
platform.window:invalidate()
end
Je ne comprends pas exactement à quoi il sert, qu'est ce que c'est, et ce que c'est une commande officielle etc...
on.escapeKey
est une fonction qui va être appelée quand tu vas appuyer sur la touche Escde ta calculatrice
GreenTree0 a écrit:-ceci :
- Code: Tout sélectionner
function on.resize()
taille = platform.hw() > 5 and 80 or 255 -- si c'est sur ordi, mettre moins grand, sinon max
end
Je ne comprends pas vraiment l'ensemble, sachant que taille est la variable de la police :/, qu'est ce que "platform.hw()" encore.
on.resize
est une fonction qui va être appelée lorsqu'on redimensionne la fenetre du script sur le Nspire computer Software, ainsi qu'au début (lancement du script).GreenTree0 a écrit:-Pour le coup je comprends plus mais j'ai encore des trucs à savoir sur ça :
- Code: Tout sélectionner
local j1, j1couleur = "X", 0xFF0000 -- rouge
local j2, j2couleur = "O", 0x0000FF
Le j1couleur est égal à un symbole ? Et quand tu met une virgule ce qu'il y a apres ne va pas etre défini comme une autre variable ?
GreenTree0 a écrit:-On attaque un des piliers :
- Code: Tout sélectionner
function on.charIn(ch)
if win then return end -- on ne traite plus si la partie est terminée
local num = tonumber(ch)
if num >= 1 and num <= 9 then
-- récupération de la ligne et de la colonne pour la matrice
local ligne = 3 - math.floor((num-1)/3)
local colonne = ((num-1)%3) + 1
grille[ligne][colonne] = joueur
-- on change la marque pour le coup d'après
if joueur == j1 then joueur = j2 else joueur = j1 end
-- on verifie s'il y a un gagnant
checkWin()
-- on veut que l'écran se redessine
platform.window:invalidate()
end
end
Alors, que veut dire le "local num = tonumber(ch) ? Et le plus compliqué pour moi c'est les lignes : "local ligne = 3 - math.floor((num-1)/3)" et "local collone = ((num-1)%3)+1" et "grille[ligne][colonne]=joueur", je ne comprends en aucun point ces lignes, c'est l'endroit ou je sèche vraiment.
GreenTree0 a écrit:-Autre pilier :
- Code: Tout sélectionner
function on.paint(gc, x, y, w, h)
-- affichage du titre au milieu en haut
gc:setFont("sansserif", "bi", 12)
gc:setColorRGB(100, 200, 8)
gc:drawString("Morpion", (w-gc:getStringWidth("Morpion"))/2, h/40)
-- dessin de la grille
gc:drawLine(w/5, h/3, 4*w/5, h/3)
gc:drawLine(w/5, 3*h/5, 4*w/5, 3*h/5)
gc:drawLine(2*w/5, h/7, 2*w/5, 4*h/5)
gc:drawLine(3*w/5, h/7, 3*w/5, 4*h/5)
Pourquoi les lignes sont de couleurs vertes ? Comment as-tu fait les lignes ? Je veut dire, je comprends pas comment tu les as positionnées à partir des 2*w etc... Que veut dire "(w-gc:getStringWidth("Morpion"))/2, h/40)" ?
GreenTree0 a écrit:-Suite du pilier :
- Code: Tout sélectionner
gc:setFont("sansserif", "b", taille)
for ligne=1,3 do
for colonne=1,3 do
local marque = grille[ligne][colonne]
gc:setColorRGB(marque == j1 and j1couleur or j2couleur)
gc:drawString(marque, colonne * w/4.75 + colonne*w/50, ligne * h/4.5 - h/12)
end
end
Je comprends pas à quoi correspondent : "for ligne=1,3 do", "for colonne=1,3 do" et toute celles qui vont après enfait.