Les variables, comme dans tout langages, sont uniquement des outils de stockage de données (en gros), et c'est en jouant avec elle que tu peux créer des boucles ou des algorythmes.
Mais pour ton problème, savoir utiliser les variables ne te donneras pas la solution.
Sinon, si tu veux pouvoir:
cliquer sur un bloc, le détruire, stocker se bloc et pouvoir le poser ailleurs c'est assez facile.
En gros, il te faut, un objet Bloc, une variable global de stockage (ex: global.bloc_terre) égal à zero, et un objet (invisible et persistant) pour placer les bloc (Clic_joueur).
dans l'event clic_left_mouse de Bloc, destroy (self) et global.bloc_terre=global.bloc_terre+1
ainssi, ta variable qui indique le nbr de blocs stockés augmente de 1, et le bloc est détruit.
L'objet Clic_joueur contient dans sont event clic_right_mouse (clic droit de souris), un code pour créer un objet Bloc en mouse.x mouse.y, si global.bloc_terre>0.
"if (global.bloc_terre>0)
{
instance_create(mouse.x,mouse.y,Bloc)
}"
Voilà en gros, à mon avis, comment on peut faire, mais ça ne gère qu'un bloc, il faut donc peaufiner certains objet pour que tu puisses gerer d'autres blocs.
Et intégrer un système de quadrillage pour que tes blocs s'empilent !