Jeu de plateau

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Jeu de plateau

Message par Thyphoon »

Bonjour

je viens juste d'acheter PureBasic. Je retrouve enfin le même plaisir a programmé qu'avec BlitzBasic. Mais comme ça fait 5 ans que j'ai pas pratiqué je m'y remet doucement ! :D

pour commencer je veux faire un petit jeu de plateau.Autrefois pour savoir si mon personage était bien sur le sol ou si il devait tomber je testais la couleur sous les pieds du personage dans le decore!
Ou si l'element du décore ne le permettait pas alors j'utilisait un if tout bête

if (xperso>=xobjet and xperso<=(xobjet+longueurobjet)) alors je suis sur l'objet!

Ma question est la suivante ! Est ce que c'est bien comme ça qu'on fait ou bien il y a d'autre technique. ce n'est pas trop une question de programmation. Mais plus une question de technique.
heuuuuu je sais pas si je suis tres claire, vous comprenez ce que je veux dire ? :roll:

merci d'avance

Thyphoon
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Il faut faire comme on aime :)

Pour ma part , je ferais des essais comme ça aussi , avec deux images , une image qui comporte le décor , et une image qui comporte les traits à tester pour bloquer le passage . et jouer éventuellement sur les couleurs pour gérer des actions différentes .

Exemple un trait blanc interdit le passage à ton personnage , un trait bleu n'a pas d'influence sur ton personnage ,mais signale à l'ennemi ta présence dans un secteur , ça permet de faire une petite IA simplifié . etc ..

ensuite , j'ai déjà vu un tut sur les jeux de plateforme , et dans ce tut , il y a 7 points à tester autour du personnage . je ne me souviens pas des 7
il faudrait que je relise le tut , et que je le retrouve surtout .

point 1 : au dessus de la tête ( arrête un saut )
point 2 : sur le côté droit ( on ne peut plus avancer sur le côté droit)
point 3 : sur le côté gauche ( idem pour le côté gauche)
point 4 : l'extrémité du pied droit ( permet de faire une animation du personnage en déséquilibre , il ne tombe pas encore )
point 5 : idem pour le pied gauche
point 6 : au centre du personnage , au niveau du sol ( arrête la chute )
point 7 : au centre du personnage , plus bas que le niveau du sol , mais je ne sais plus à quoi il sert

remarque , et je crois que les points 2 et 3 sont des traits en fait , qui font à peu près le tiers du personnage placés à mi hauteur du personnage , sinon si tu testes seulement un point , et que tu chutes en courbe, tu risques de passer à côté d'une collision avec une plateforme.

si je retrouve le tut je t'en dirai plus . mais tu peux déjà bosser avec ça :)

ensuite qu'est-ce qui est le plus rapide à tester sous purebasic , sprite ou couleur ? il faut faire des tests et adapter cette technique avec ce qui est le plus rapide et le plus pratique , je n'ai pas encore fait d'essais , j'y songeais , mais j'attends les longues nuits d'hiver pour m'y mettre :)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

merci comtois pour l'info ! :) Si jammais tu retrouves le tuto ça m'interesse mais ce que tu m'as dit vas déjà bien m'aider !! merci beaucoup :)
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message par hackotedelaplaque »

moi je fais autrement.

je m'explique, la logique est la suivante :
- si il y a collision entre le sprite du joueur et un élément du décor ET que la touche "droite" est pressée alors c'est forcemment une collision "latérale".
- idem avec la touche "gauche"
- s'il y a collision alors que la touche "saut" est pressée alors c'est forcemment un "obstacle" au niveau de la tête et le saut ne doit pas aller plus haut.
- s'il y a collision sans touche pressée alors c'est due à la gravité, donc c'est une collision "vers le bas".

Pour ces 4 possibilités, s'il y a collision, je redessine le sprite à la bonne position en fonction des "types" rencontrés.

En tout cas ça marche et cette logique me plait.
A noter que c'est valable si deux ou trois possibilités interviennent en même temps (eg : saut "interrompu" à la fois par le haut et par la droite).
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

oui pourquoi pas, ça peut aussi fonctionner comme ça , sauf peut-être pour le saut , en principe tu n'as pas à maintenir la touche pour sauter ,tu donnes une impulsion , et pendant la chute tu peux très bien appuyer sur les touches gauche ou droite , donc tu peux très bien avoir une collision dûe à la gravité en ayant une touche pressée.

du moment que cette logique te plait , ça me convient très bien aussi :)
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message par hackotedelaplaque »

pour le saut je suis d'accord, mon programme n'agit pas sous la forme d'impulsion.
Je suppose que ce que tu entends par là c'est que quelque soit la durée de pression sur la touche saut, visuelement le résultat sera le même.

Je n'ai pas mis en place ce type de comportement.
Pour ma part, si la touche saut est préssée alors sprite\y=sprite\y-1 pour faire simple.
Une courte pression fera donc un tout petit saut, une grande fera un saut plus haut.
Evidemment j'ai mis une limite, à savoir que si je reste 105 ans appuyé sur la touche, le sprite finit quand même par redescendre au bout d'une certaine limite.

Donc ma technique fonctionne très bien avec le "principe des touches".

En gros j'aurai pu aussi bien l'exprimer comme suit :

- si la touche droite est pressée et qu'au pixel sprite\x+1 il n'y a pas collision (en gros la place est libre à droite) alors je peux redessiner mon sprite en sprite\x+1
- idem pour gauche
- idem pour haut sauf que là on vérifie que la "place du haut" c'est à dire sprite\y - 1 soit libre

Et pour la gravité : si sprite\saut=0 (donc si je n'ai pas pressé la touche "saut") alors si la "place du dessous" c'est à dire sprite\y+1 ne génère pas de collision alors il y a gravité c'est à dire sprite\y=sprite\y+1.
S'il y a collision en sprite\y+1 alors cela veut dire que les pieds de mon sprite touchent le sol donc gravité=0.

J'espère m'être mieux exprimé ainsi.

Je reste à ta disposition pour poursuivre ce post, ce genre de discussions enrichissantes étant hélas trop rare en PureBasic.

Vive les petits jeux de plateforme 2D !! :-)
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

j'ai fait une petite démo en testant les couleurs comme je le disais , elle fonctionne à peu près. Bon ok ce n'est pas tout à fait au point , j'y ai consacré moins d'une heure , mais ça me suffit pour me convaincre que c'est possible de cette façon .

Maintenant je voudrais faire des tests avec des sprites , pour l'instant j'en suis à les récupérer un par un , ensuite faudra que j'anime tout ça , et surtout que j'écrive un petit prog pour tester avec quelques plateformes .

si j'y arrive , je mettrai le source à disposition et on pourra échanger les points de vues sur du concret :)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Moi aussi j'ai testé en utilisant le test des couleurs...
le code est un peu gros (en plus j'utilise pas mal de sprite)
mais si ça t'interesse je peux t'envoyer par email les sources actuel ! (donne la moi par mp)

En vérité je suis en train d'essayer de refaire l'exelent le jeu "Dark Caste" qui existe sur Mac ! J'ai réussi a récupéré les graphismes et donc je fais le moteur !! :) C'est un vieu rêve car j'avais déjà essayer de le refaire sur CPC 6128 en Basic.
Répondre