| | Rajouter un compteur de bloc.[ Résolu ] | |
| | Auteur | Message |
---|
Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 12:27 | |
| Yop, est ce qu'il y aurait quelqu'un de dispo qui pourrait jeter un oeil a mon gmk, pour y rajouter un code qui me permettrait de compter le nombre de bloc que je peux mettre ? Touches provisoires : Espace : Générer la map Keypad 0 : Restart room Keypad 1 : Afficher/désactiver la grille J'arrive vraiment pas a utiliser de variables dans le code, étant donné que c'est Onilink qui l'as fait. En gros on a le droit a 75 blocs ( pour l'instant ..histoire de voir ce que sa donne ) et dés qu'une case foncée ( bloc terrain ) est créée, bin terrainleft -= 1 Mais je n'arrive pas a l'implémenter dans le code... Je filerais la source par Mp a une âme charitable
Dernière édition par Qual le Mer 18 Aoû 2010 - 13:35, édité 1 fois |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 13:16 | |
| Dans create tu ajoute : - Code:
-
compteur = nombre de blocks et dans draw tu remplace - Code:
-
if(mouse_check_button(mb_left)) { if(empty) { if(mouse_in(x, y, largeur*TAILLE+x-1, hauteur*TAILLE+y-1)) { terrain[(mouse_x-x) div TAILLE, (mouse_y-y) div TAILLE] = 1 empty = 0 compteur -= 1 } } else if(compteur && mouse_in(x, y, largeur*TAILLE+x-1, hauteur*TAILLE+y-1)) { px = (mouse_x-x) div TAILLE py = (mouse_y-y) div TAILLE
if( terrain[px, max(0, py-1)] || terrain[px, min(hauteur-1, py+1)] || terrain[max(0, px-1), py] || terrain[min(largeur-1, px+1), py] && !terrain[px,py]) { terrain[px, py] = 1 compteur -= 1 } } } |
| | | Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 13:35 | |
| Ça fonctionne ! Ralalalalala xD Cimouze ! |
| | | glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 14:30 | |
| c'etait rapide XD En tout cas tes screens ont l'air pas mal |
| | | Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 15:13 | |
| Merci ^^ Mais j'en suis qu'au début la Sinon voici une image du concept - Spoiler:
|
| | | red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 16:33 | |
| Dire que je trime sur un système de tiles depuis si longtemps et que le tien me fait envie... :gniah: |
| | | Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 16:35 | |
| Je peux te filer la source si tu veux |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 16:58 | |
| Create - Code:
-
largeur = 16 hauteur = 16
//On initialise notre carte for(i=0 ; i<largeur ; i+=1) { for(j=0 ; j<hauteur ; j+=1) { terrain[i, j] = 0 } }
//A-t-on crée notre ile ? create = 0 empty = 1 Step - Code:
-
//Taille des blocs TAILLE = 32
if(!create) { for(i=0 ; i<largeur ; i+=1) { for(j=0 ; j<hauteur ; j+=1) { draw_sprite(sprite1, terrain[i, j], x + i*TAILLE, y + j*TAILLE) } } if(mouse_check_button(mb_left)) { if(empty) { if(mouse_in(x, y, largeur*TAILLE+x-1, hauteur*TAILLE+y-1)) { terrain[(mouse_x-x) div TAILLE, (mouse_y-y) div TAILLE] = 1 empty = 0 } } else if(mouse_in(x, y, largeur*TAILLE+x-1, hauteur*TAILLE+y-1)) { px = (mouse_x-x) div TAILLE py = (mouse_y-y) div TAILLE
if( terrain[px, max(0, py-1)] || terrain[px, min(hauteur-1, py+1)] || terrain[max(0, px-1), py] || terrain[min(largeur-1, px+1), py]) terrain[px, py] = 1 } } } else { for(i=0 ; i<largeur ; i+=1) { for(j=0 ; j<hauteur ; j+=1) { if(gen[i,j] != -1) draw_sprite(sprite0, gen[i, j], x + i*TAILLE, y + j*TAILLE) } } } Space - Code:
-
//Génération de la carte
for(i=0 ; i<largeur ; i+=1) { for(j=0 ; j<hauteur ; j+=1) { gen[i,j] = -1 if(terrain[i,j]) { gen[i, j] = 4 continue } tl = terrain[max(0,i-1), j] tr = terrain[min(largeur-1,i+1), j] tu = terrain[i, max(0,j-1)] td = terrain[i, min(hauteur-1, j+1)] if(tl && !tr && !tu && !td) gen[i,j] = 3 if(!tl && tr && !tu && !td) gen[i,j] = 5 if(!tl && !tr && tu && !td) gen[i,j] = 1 if(!tl && !tr && !tu && td) gen[i,j] = 7 if(tl && !tr && tu && !td) gen[i,j] = 0 if(!tl && tr && tu && !td) gen[i,j] = 2 if(tl && !tr && !tu && td) gen[i,j] = 6 if(!tl && tr && !tu && td) gen[i,j] = 8 } }
create = 1 mouse_in - Code:
-
return mouse_x >= argument0 && mouse_x <= argument2 && mouse_y >= argument1 && mouse_y <= argument3 Tout est parfaitement parametrable. |
| | | Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 17:19 | |
| bin oui mais avec seulement - Code:
-
if(tl && !tr && !tu && !td) gen[i,j] = 3 if(!tl && tr && !tu && !td) gen[i,j] = 5 if(!tl && !tr && tu && !td) gen[i,j] = 1 if(!tl && !tr && !tu && td) gen[i,j] = 7 if(tl && !tr && tu && !td) gen[i,j] = 0 if(!tl && tr && tu && !td) gen[i,j] = 2 if(tl && !tr && !tu && td) gen[i,j] = 6 if(!tl && tr && !tu && td) gen[i,j] = 8 tu va pas aller loin... moi j'ai : - Code:
-
tlu = terrain[max(0,i-1), max(0,j-1)] tld = terrain[max(0,i-1), min(hauteur-1, j+1)] tru = terrain[min(largeur-1,i+1), max(0,j-1)] trd = terrain[min(largeur-1,i+1), min(hauteur-1, j+1)] tl = terrain[max(0,i-1), j] tr = terrain[min(largeur-1,i+1), j] tu = terrain[i, max(0,j-1)] td = terrain[i, min(hauteur-1, j+1)] if(!tl && !tr && !tu && !td) gen[i,j] = 9 if(!tl && !tr && tu && !td && !tld && ! trd) gen[i,j] = 1 if(!tl && !tr && !tu && td) gen[i,j] = 7 if(tl && !tr && tu && !td) gen[i,j] = 0 if(!tl && tr && tu && !td) gen[i,j] = 2 if(!tl && !tr && !tu && !td && !tlu && tld && !tru && !trd) gen[i,j] = 11 if(!tl && !tr && !tu && !td && !tlu && !tld && !tru && trd) gen[i,j] = 12 if(!tl && !tr && !tu && !td && tlu && !tld && !tru && !trd) gen[i,j] = 13 if(!tl && !tr && !tu && !td && !tlu && !tld && tru && !trd) gen[i,j] = 14 if(!tu && !td && tl && tr) gen[i,j] = 15 if(tu && td && !tl && !tr) gen[i,j] = 16 if(tl && tr && td) gen[i,j] = 17 if(tl && tr && tu) gen[i,j] = 18 if(tu && td && tl ) gen[i,j] = 19 if(tu && td && tr ) gen[i,j] = 20 if(!tu && !td && !tr && !tlu && !tl && !tld && tru && trd) gen[i,j] = 21 if(!tu && !td && !tr && tlu && !tl && tld && !tru && !trd) gen[i,j] = 22 if(tru && tlu && tld && trd && !tu && !tr && !tl && !td) gen[i,j] = 23 //deux cas possibles if(tlu && tr && td && !tu && !tl) gen[i,j] = 24 if(tlu && tld && td && trd && tr && !tl && !tru && !tu) gen[i,j] = 24 //deux cas possibles if(!tu && tru && !tr && td && tl) gen[i,j] = 25 if(!tlu && !tu && tru && tl && tld && td && trd && !tr) gen[i,j] = 25 if(!td && !tlu && !tu && !tl && !tr && tld && trd &&!tru) gen[i,j] = 26 if(tu && !tld && !td &&!tl && !tr && trd) gen[i,j] = 27 if(tu && tld && !td &&!tl && !tr && !trd) gen[i,j] = 28 if(tlu && !tu && !tru && !tl && !tr && td) gen[i,j] = 29 if(!tlu && !tu && tru && !tl && !tr && td ) gen[i,j] = 30 if(tlu && !tu && tru && !tl && !tr && !td && !trd && !tld) gen[i,j] = 31 if(tlu && !tu && tru && !tl && !tr && !td && trd && !tld) gen[i,j] = 32 if(tlu && !tu && tru && !tl && !tr && !td && !trd && tld) gen[i,j] = 33 if(tlu && tru && td && !tu && !tl && !tr ) gen[i,j] = 34 if(tlu && !tu && ! tru && ! tr && !tl && ! tld && !td && trd ) gen[i,j] = 35 if(!tlu && !tu && tru && ! tr && !tl && tld && !td && !trd ) gen[i,j] = 36 if(!tlu && ! tu && ! tl && !td && tr && tld ) gen[i,j] = 37 if(!tu && ! tru && ! tr && ! td && tl && trd ) gen[i,j] = 38 if( !tu && !tl && !td && !tld && tr && tlu ) gen[i,j] = 39 if(!tu && !trd && !tr && !td & tl && tru ) gen[i,j] = 40 if( tu && tl && trd && !td && !tr ) gen[i,j] = 41 if( tu && tr && tld && !td && !tl ) gen[i,j] = 42 if( tu && tld && trd && !tl && !tr &&!td ) gen[i,j] = 43 if(!tu && tru && !tr && tl && !td && trd ) gen[i,j] = 44 if(tlu && !tu && !td && tld && !tl && tr) gen[i,j] = 45 if(!tlu && ! tl && !tld && ! tu && !td && tr) gen[i,j] = 5 if(!tu && !td && !tr && ! tru && !trd && tl) gen[i,j] = 3 if(tl && !tr && !tu && td && !tru) gen[i,j] = 6 if(!tl && tr && !tu && td &&!tlu) gen[i,j] = 8 if(tl && tr && tu && td ) gen[i,j] = 10 et il faut le sprite qui va avec pour avoir toute les combinaisons possibles ( jme suis bien fait ch*** avec ca xD prise de tête assurée ) |
| | | M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 17:27 | |
| oh mon dieu quelle horreur 0_o Par pitié, faut utiliser les data structures! |
| | | Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 17:30 | |
| comment ca ? Bah ya pas le choix o_o Le code la , il sert a changer le sprite d'un bloc situer a coté d'un bloc de terrain. Y'a aucun moyen de simplifier le truc étant donné toute les possibilités differentes Si a droite, ya un bloc de terrain, c'est pas le même sprite de bordure que si il y'a un bloc de terrain au dessus, un en dessous etc etc ... La sur ce coup je te comprend pas Pareil pour si ya un bloc en haut a droite, ou un en haut a droite + un en haut a gauche... |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 17:46 | |
| Il y a toujours moyen d'optimiser, et la aussi. En tout cas vu la taille de ton code t'as intérêt oO |
| | | Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 17:47 | |
| Hey oh j'ai fait que completer ce qui manquait a ton code |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 17:48 | |
| Si je n'ai pas optimisé mon code c'est qu'il était déjà court, par contre la hohoho, t'as du courage :p |
| | | red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 19:18 | |
| Wow intéressant... Je vois à peu près, en fait je comprends la différence entre mon système et le tient. Je crois que le tient allie simplicité de programmation avec longueur du code (toutes les possibilités) et longueur du sprite (toutes les possibilités). C'est bien joli et ça marche si on a un seul sprite c'est pas trop lourd. Je devrais regarder ça... Moi j'avais un autre système qui séparait chaque case en 4 petites cases, ce qui diminuait considérablement le nombre d'images à avoir, mais en contrepartie permettait moins de personnalisation (comme ta carte avec des arbres et tout ça). Et j'ai que essayé en 16*16. Tu as combien d'images de 32*32, juste par curiosité ? Je vais bûcher sur ça moi... Merci ! Edit : ça peut être optimisé en utilisant la logique des chiffres binaires... Au lieu de faire des else if gen, un petit calcul qui donnerai directement l'image... Mais faut les ranger dans un certain ordre logique alors. > Edit : Sauf que avec les diagonales ça fait plein d'images inutiles (identiques à d'autres) qui font 256 image... 46 images donc. |
| | | Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Mer 18 Aoû 2010 - 20:19 | |
| + les 2 qui manquait 48 Mais pas besoin d'optimiser ce code, c'est pas comme si il était dans un step event... La c'est la génération d'une map qui ne se fait qu'une seule fois :p |
| | | red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Jeu 19 Aoû 2010 - 13:01 | |
| Je laisse tomber à trouver une logique, çe revenait à compter combien de fois untel côté et untel côté se sont retrouvés ensembles en même temps et retirer ceux-là du chiffre... (Les cases en rouge sont les inutiles (faciles à passer, il suffit d'annuler les coins) Les chiffres en noir ce que je veux et en rouge (quand il y en a) ce que me donne mon calcul (à savoir haut+2*droite+4*bas+8*gauche+16*hautdroite+32*basdroite+64*basgauche+128*hautgauche=image... ) À moins de faire 256 images dont la plupart sont vides...) Je préfère avoir des quarts de cases. |
| | | Qual Utilisateur confirmé: Rang ****
Messages : 1450 Projet Actuel : Tower Defence
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Jeu 19 Aoû 2010 - 20:26 | |
| Trop compliqué pour rien |
| | | glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Jeu 19 Aoû 2010 - 20:34 | |
| Perso, je m'y connais pas du tout, mais ca ce voit que c'est compliquer ta technique. On dirait les sprite de la nes (qu'on peut voir dans les roms avec virtual nes je crois) |
| | | red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] Jeu 19 Aoû 2010 - 22:47 | |
| Nan mais j'ai une technique plus simple qui fonctionne nickel et qui ne nécessite qu'un petit tileset : (utilisé dans Noelgame par exemple... Euh, c'est le seul jeu montrable que j'aie fait en fait.) Mais je travaille actuellement sur une version supérieure qui n'aboutit pas, c'est pour ça que j'ai jamais mis de GMX mais maintenant, j'en toucherai bien un mot quelque part... C'est juste que j'étais certain de pouvoir éviter les 100 lignes de code sans pour autant pomper plus, mais maintenant j'en doute... Je connais pas assez les binaires pour ça. |
| | | Contenu sponsorisé
| Sujet: Re: Rajouter un compteur de bloc.[ Résolu ] | |
| |
| | | | Rajouter un compteur de bloc.[ Résolu ] | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |