Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Panorabrique pour Android | |
| | Auteur | Message |
---|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Panorabrique pour Android Mar 18 Nov 2014 - 11:09 | |
| Bien , j'ai déjà posté mon code dans la partie lié à la version de test de Panoramic pour Android. Actuellement, c'est une version de test limité à 20 objets et 20 subs, ce qui n'empèche pas de faire des tests et de petits programmes tout à fait opérationnel. Pour le prouver, vous trouverez ci dessous un petit casse-brique (il y a des problèmes dessus de détection de collision qu iserait à améliorer, des problème d'effacement partiel de briques qui peut facilement être résolu en faisant par exemple une procédure retrace pour redessiner les briques non cassées) mais ce n'est pas l'objet de ce jeu / test. L'objectif est de montrer que les fonctions de dessins fonctionne, Que les boutons, les évenements, les timers, les sub, les sous programmes, les champs texte (alpha), les boucles et les tests fonctionnent. Il y a donc de quoi faire pour les tests ou les applis. - Code:
-
' Panorabric la version Android de test (limitée à 20 objets) ' Prevu pour Samsung S3 ' Resolution de l'écran 600 x 380
label clic,fin, boucle_principale
' Déclarations dim objet%, i, j, i2, j2, ecran%, aff_vies%, aff_score% dim h,l : h=600: l=380 dim x_r , y_r, hauteur_r, largeur_r : ' Variables de la raquette dim hauteur_b, largeur_b : hauteur_b = 8 : largeur_b=21 : ' constantes des briques dim xb, yb, Nb_lignes, Nb_briques_restantes : ' variables pour la gestion des briques dim x_ball,y_ball, r_ball, c, r, n_ball : r_ball = 10 : ' variables de la balle dim vies, score : vies = 3 : score = 0 dim nom_couleur$, Nb_couleur% : Nb_couleur% = 18 : ' Tableau des couleurs dim t_c(Nb_couleur%,3) dim ombre, lumiere : ombre=30 : lumiere = 30 dim marge_cote, marge_haut, hauteur_menu : marge_cote = 8 : marge_haut = 30 :hauteur_menu = 100 dim Nb_b_ligne : Nb_b_ligne = int((l - 3*marge_cote)/(largeur_b+5))
' Initialisation de la fenêtre height 0, h: width 0,l : caption 0, "PANORABRIC Android - V1.0" border_small 0 : i = h - hauteur_menu + 20 button 1 : hide 1 : ' Creation du bouton gauche top 1, i : left 1,10 : caption 1,"<" : on_click 1,clic button 2 : hide 2 : ' Creation du bouton droite top 2, i : left 2,50+width(1) : caption 2,">" : on_click 2,clic button 3 : hide 3 : ' Creation du bouton quitter top 3, i : left 3,l-width(3)-28 : caption 3,"Quitter" : on_click 3,clic timer 4 : objet% = 5 : ' On prend 3 objets hauteur_r = 10 : largeur_r=60 : y_r = h-120-hauteur_r
' Données à charger dans le tableau des couleurs data "0 - Noir", 0, 0, 0, "1 - Blanc", 255,255,255 data "2 - couleur de fond - kaki foncé", 155,155, 55 data "3 - Kaki", 180,180,80, "4 - gris foncé", 80, 80, 80 data "5 - bleu" ,80, 80,215, "6 - rouge", 215, 80, 80 data "7 - vert", 80,215, 80, "8 - gris", 155,133,155 data "9 - vert clair", 100,215,100, "10 - violet", 215, 80,215 data "11 - kaki clair", 215,215, 80, "12 - bleu cyan", 80,215,215 data "13 - bleu moyen", 100,100,215, "14 - vert moyen",55,215,133 data "15 - violet",133, 55,215, "16 - marron clair",215,133, 55 data "17 - bleu nuit", 55, 55,133
' Chargement du tableau des couleurs for i = 1 to Nb_couleur% read nom_couleur$ for j = 1 to 3 : read c : t_c(i,j)=c : next j next i
' Dessin de l'aire de jeu ecran% = objet% : picture ecran% top ecran%,0: left ecran%,1 h = h - hauteur_menu : height ecran%, h: width ecran%,l-2*marge_cote 2D_target_is ecran%: objet% = objet% +1
' Trace le contour 2d_pen_color t_c(3,1), t_c(3,2), t_c(3,3) : 2d_fill_color t_c(3,1), t_c(3,2), t_c(3,3) 2d_rectangle 0,h,marge_cote,0 : 2d_rectangle marge_cote,0,l-2*marge_cote,20 2d_rectangle l-3*marge_cote,h,l-2*marge_cote,0
' Créations des compteurs de vies et du score aff_vies% = objet% : alpha aff_vies% : objet% = objet% + 1 color aff_vies%, t_c(3,1), t_c(3,2), t_c(3,3) top aff_vies%,2 : left aff_vies%, 30 : width aff_vies%,140 caption aff_vies%, "Vies = "+str$(vies)
aff_score% = objet% : alpha aff_score% : objet% = objet% + 1 color aff_score%, t_c(3,1), t_c(3,2), t_c(3,3) top aff_score%,2 : left aff_score%, 200 : width aff_score%,140 caption aff_score%, "Score = "+str$(score)
Init_niveau()
' timer pour deplacements timer_interval 4,40 : on_timer 4,boucle_principale
' Tout est prêt, on affiche les boutons et on attend le démarrage de la boucle show 1: show 2: show 3 end
Sub Dessine_raquette() ' On trace la forme de la raquette 2d_pen_width 2 : 2d_pen_color t_c(5,1), t_c(5,2), t_c(5,3) : 2d_fill_color t_c(6,1), t_c(6,2), t_c(6,3) 2d_rectangle x_r+4,y_r+4,x_r+largeur_r-3,y_r+hauteur_r-3 ' On ajoute la partie claire 2d_pen_color t_c(5,1)+lumiere, t_c(5,2)+lumiere, t_c(5,3)+lumiere 2d_poly_from x_r+2,y_r+hauteur_r-2 : 2d_poly_to x_r+2,y_r+2 : 2d_poly_to x_r+largeur_r-2,y_r+2 ' On ajoute les ombres 2d_pen_color t_c(5,1)-ombre, t_c(5,2)-ombre, t_c(5,3)-ombre 2d_poly_to x_r +largeur_r-2,y_r+hauteur_r-2 : 2D_poly_to x_r+2,y_r+hauteur_r-2: 2d_pen_width 1 End_sub
Sub Efface_raquette() 2d_pen_color t_c(2,1), t_c(2,2), t_c(2,3) : 2d_fill_color t_c(2,1), t_c(2,2), t_c(2,3) 2d_rectangle x_r,y_r,x_r+largeur_r,y_r+hauteur_r End_sub
Sub init_niveau() Nb_lignes = 6: Dessine_briques() x_r = 0.5 * (l - largeur_r - 2*marge_cote) Dessine_raquette() Lance_balle() End_sub
Sub Dessine_briques() if variable("t_br")=1 then free t_br dim t_br(Nb_lignes*Nb_b_ligne,5) dim k: k=0 : Nb_briques_restantes = 0 for i= 1 to Nb_lignes yb = 2*marge_haut + (hauteur_b + 15) * i For j = 1 to Nb_b_ligne xb = 2*marge_cote + (largeur_b + 5) * (j-1) k=k+1 : t_br(k,1) = 1 : t_br(k,5) = 100 t_br(k,2) = t_c(5+i,1): t_br(k,3) = t_c(5+i,2): t_br(k,4) = t_c(5+i,3) Nb_briques_restantes = Nb_briques_restantes + 1 2d_pen_color t_br(k,2), t_br(k,3), t_br(k,4) : trace_brique() next j next i free k End_sub
Sub retrace() ' dim k: k=0 ' For i2= 1 to Nb_lignes ' yb = 2*marge_haut + (hauteur_b + 15) * i2 ' For j2 = 1 to Nb_b_ligne ' xb = 2*marge_cote + (largeur_b + 5) * (j2-1) ' k=k+1 : if t_br(k,1)=1 then trace_brique() ' Next j2 ' Next i2 ' free k ' dessine_raquette() End_sub
Sub trace_brique() 2d_pen_width 3 2d_pen_color t_br(k,2), t_br(k,3), t_br(k,4) 2d_fill_color t_br(k,2), t_br(k,3), t_br(k,4) 2d_rectangle xb+2,yb+2,xb+largeur_b-2, yb+hauteur_b-2 2d_pen_color t_br(k,2)+lumiere, t_br(k,3)+lumiere, t_br(k,4)+lumiere 2d_poly_from xb,yb+hauteur_b : 2d_poly_to xb,yb : 2d_poly_to xb+largeur_b,yb 2d_pen_color t_br(k,2)-ombre, t_br(k,3)-ombre, t_br(k,4)-ombre 2d_poly_to xb+largeur_b,yb+hauteur_b : 2d_poly_to xb,yb+hauteur_b 2d_pen_width 1 End_sub
Sub efface_brique() 2d_pen_width 3 2d_pen_color t_c(2,1), t_c(2,2), t_c(2,3) xb = 2*marge_cote + (largeur_b + 5) * (i-1) : yb = 2*marge_haut + (hauteur_b + 15) * (temp) 2d_rectangle xb,yb,xb+largeur_b+1, yb+hauteur_b+1 2d_pen_width 1 End_sub
Sub Lance_balle() y_ball = y_r - 2*r_ball : x_ball = int(rnd(l-60)) + 2*marge_cote : r=1 End_sub
Sub efface_balle() 2d_pen_color t_c(2,1), t_c(2,2), t_c(2,3) : 2d_fill_color t_c(2,1), t_c(2,2), t_c(2,3) 2d_circle x_ball+r_ball, y_ball+r_ball, r_ball End_sub
Sub trace_balle() 2d_pen_color t_c(3,1)-ombre, t_c(3,2)-ombre, t_c(3,3)-ombre 2d_fill_color t_c(3,1), t_c(3,2), t_c(3,3) 2d_Circle x_ball+r_ball, y_ball+r_ball, r_ball 2d_pen_color t_c(4,1), t_c(4,2), t_c(4,3) 2d_fill_color t_c(4,1)+lumiere, t_c(4,2)+lumiere, t_c(4,3)+lumiere 2d_Circle x_ball+r_ball-3, y_ball+r_ball-3, r_ball-6 End_sub
Sub recommence() vies = 3 : score = 0 : Efface_raquette() Efface_balle() : Init_niveau() timer_on 4 End_sub
Sub Deplace_balle() If x_ball> l-4*marge_cote-2*r_ball then x_ball = l-4*marge_cote-2*r_ball : c = 2 : retrace() If x_ball < 2* marge_cote Then x_ball = 2 * marge_cote : c = 1 : retrace() If y_ball < (marge_haut + r_ball) Then y_ball = marge_haut + r_ball : r = 2 : retrace() If c < 2 Then x_ball = x_ball + 5 : Else: x_ball = x_ball - 5 If r < 2 Then y_ball = y_ball - 5 : Else: y_ball = y_ball + 5 End_sub
boucle_principale: if variable("temp") = 0 then dim temp timer_off 4 Efface_balle() Deplace_balle() ' Teste si collision avec une brique if (r= 1 and y_ball <= (2*marge_haut + hauteur_b + (hauteur_b + 15) * Nb_lignes)) i = int((x_ball - 2*marge_cote) / (largeur_b + 5))+1 temp = int ((y_ball - 2*marge_haut - hauteur_b) / (hauteur_b +15))+1 j = (temp-1)*Nb_b_ligne +i if j <= (Nb_lignes*Nb_b_ligne) and j>0 if t_br(j,1) = 1 r=2 : t_br(j,1) = 0 Efface_brique() : retrace() Nb_briques_restantes = Nb_briques_restantes - 1 : score = score + t_br(j,5) end_if end_if else if (r= 2 and (y_ball > (40 + hauteur_b)) and (y_ball < (25 + hauteur_b + (hauteur_b + 15) * Nb_lignes) )) i = int((x_ball - 30) / (largeur_b + 10)) +1 temp = int (((y_ball+2*r_ball) -25 -hauteur_b) / (hauteur_b +15)) j = (temp-1)*Nb_b_ligne +i if j <= (Nb_lignes*Nb_b_ligne) and j>0 if t_br(j,1) = 1 r=1 : t_br(j,1) = 0 Efface_brique() : retrace() Nb_briques_restantes = Nb_briques_restantes - 1 : score = score + t_br(j,5) end_if end_if end_if end_if
' Verifie si la balle touche la raquette if r=2 and y_ball > y_r - 2 * r_ball - 4 if ((x_ball > (x_r - r_ball)) and (x_ball < (x_r + largeur_r))) r = 1 score=score+1 else if r=2 and y_ball > y_r ' Balle perdue wait 100: Lance_balle() vies = vies-1 end_if retrace() end_if end_if Trace_balle() caption aff_vies%, "Vies = "+str$(vies) caption aff_score%, "Score = "+str$(score) if Nb_briques_restantes = 0 Message "Bravo, niveau suivant ..." Efface_balle() : Init_niveau() end_if if vies < 1 then goto fin free temp timer_on 4 return
clic: timer_off 4 select number_click
case 1 : ' On test si l'on a appuyé sur la flèche de gauche Efface_raquette() : ' Efface ancienne raquette x_r = x_r - (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r < 10 then x_r=10 : ' Mais on ne doit pas dépasser les bords !! Dessine_raquette() : ' Actualise l'affichage de la raquette
case 2 : ' On test si l'on a appuyé sur la flèche de droite Efface_raquette() : ' Efface ancienne raquette x_r = x_r + (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r > l - largeur_r-26 then x_r = l - largeur_r-26 : ' Mais on ne doit pas dépasser les bords !! Dessine_raquette() : ' Actualise l'affichage de la raquette
case 3 : goto fin : ' On test si l'on a appuyé sur le bouton pour Quitter end_select timer_on 4 return
fin: timer_off 4 terminate Note: Ce qui est bien sur le Smartphone c'est que l'écran ne clignote pas. Ca c'est plus confortable visuellement. Modifié avec la solution de Papydall pour le problème rencontré + ajout de la procédure retrace pour corriger le bug d'affichage de la balle / brique / raquette quand il y a chevauchement. Ca marche bien sur un PC, mais la procédure retrace consomme trop de ressources sur mon Smartphone pour la laisser active. J'ai donc mis son contenu en commentaire pour ne pas trop ralentir le jeu sur Smartphone. Mise à jour pour gérer la souris / le clavier ou les boutons + gestion des images de sprites s'il existent. Merci Ygeronimi pour l'aide sur la perte de focus, bien vu
Dernière édition par Jicehel le Mar 25 Nov 2014 - 14:37, édité 3 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 18 Nov 2014 - 11:48 | |
| J' ai testé sur mon Pc mais la raquette ne veut pas se déplacer vers la droite... ( Pour les clics, je ne me servirai pas du "else" mais seulement du if clicked(x%)=1 : instruction : end_if l' instruction serait plus claire) edit : Quand je déplace la raquette vers la droite, je ne peux plus aller à gauche et inversement arrêtes tu bien ton timer lors d' un clic ?... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Panorabrique pour Android Mar 18 Nov 2014 - 12:28 | |
| Non, tu as raison, c'est une erreur de débutant Sur mon PC ou sur mon téléphone, je ne voyais pas le problème. Même si ça devrait marcher sur le téléphone, tu as parfaitement raison et il faut l'arréter pour traiter proprement. J'ai corrigé le code dans le post précédent. Tu peux vérifier sur ton PC que ça marche. Note: Sur le PC, l'écran "clignote" c'est un problème connu de Panoramic avec les pictures, mais je n'ai pas constaté ce problème sur mon Galaxy S3 (la balle clignote un peu dû à l'effacement / réaffichage mais ça c'est normal vu la façon dont je procède) J'ai aussi mis les tests de la façon que tu disais. C'est vrai que c'est plus facile à lire et à commenter (du coup, j'ai rajouté quelques commentaires) Dis moi si ça marche bien pour toi maintenant | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 18 Nov 2014 - 12:52 | |
| J' ai toujours le problème de raquette...
Lorsque je clic sur droite ou gauche au départ, la raquette se déplace bien vers où je veux. Si j' arrête mon déplacement pour repartir dans l' autre sens, impossible la raquette reste au même endroit.
( je teste sur W7, il y a peut être une différence avec Android ) | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Panorabrique pour Android Mar 18 Nov 2014 - 13:47 | |
| OK, je n'arrive pas à reproduire ton problème sur mon PC ou sur Android. Pour moi, ça fonctionne bien. Si quelqu'un fait le test, merci de me dire si ça marche ou non pour lui. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Panorabrique pour Android Mar 18 Nov 2014 - 16:56 | |
| Salut tout le monde @Jicehel J’ai testé ton code. Je rencontre aussi l’erreur signalée par Ygeronimi (Coucou Ygeronimi !) - Ygeronimi a écrit:
- J' ai toujours le problème de raquette...
Lorsque je clic sur droite ou gauche au départ, la raquette se déplace bien vers où je veux. Si j' arrête mon déplacement pour repartir dans l' autre sens, impossible la raquette reste au même endroit. Ma solution à ce type d’erreur : J’ai recodé le sous-programme clic : comme ceci - Code:
-
rem ============================================================================ ' Sous-programme modifié par Papydall clic: timer_off 4 select number_click ' On test si l'on a appuyé sur la flèche de gauche case 1 Efface_raquette() : ' Efface ancienne raquette x_r = x_r - (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r < 10 then x_r=10 : ' Mais on ne doit pas dépasser les bords !! Dessine_raquette() : ' Actualise l'affichage de la raquette
' On test si l'on a appuyé sur la flèche de droite case 2 Efface_raquette() : ' Efface ancienne raquette x_r = x_r + (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r > l - largeur_r-26 then x_r = l - largeur_r-26 : ' Mais on ne doit pas dépasser les bords !! Dessine_raquette() : ' Actualise l'affichage de la raquette ' On test si l'on a appuyé sur le bouton pour Quitter case 3 : goto fin end_select
timer_on 4 return rem ============================================================================
Maintenant ça marche comme il devrait l’être !! C’est à vous de tester à nouveau (il n’y a pas de verbe retester !!!) | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 18 Nov 2014 - 17:23 | |
| Bravo Papydall !!! Tu as résolu le problème !
J' ai supprimé le timer_off 4 dans le label fin. Puisque le timer est inactivé au clic, il devenait inutile.
Voilà jicehel, plus qu' à affiner l' effacement des briques et faire attention à ce que le cadre ne le soit pas sur un retour de la bille comme il me l' est arrivé. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Panorabrique pour Android Mar 18 Nov 2014 - 17:39 | |
| Si déboguer est synonyme d’enlever les erreurs d’un programme, programmer ne pourrait être que l’art d’en créer ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Panorabrique pour Android Mar 18 Nov 2014 - 18:01 | |
| J'ai mis à jour pour la gestion de la raquette avec la correction de Papydall. Après pour l'amélioration du casse-brique, ça devient un autre sujet. Pour moi, ce jeu de test en restera là. Ce que je voulez tester et tester, les instructions fonctionnent. Le test avec la procédure 'retrace' sur le PC et sur Android font apparaitre qu'il faut être prudent par rapport au performances entre les tests sur les différentes machines. Si quelqu'un veut continuer d'améliorer le source (en oubliant pas qu'il est prévu pour tourner sur un Smartphone) ou en refaire une version PC, les sources sont là. Servez-vous | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Panorabrique pour Android Lun 24 Nov 2014 - 15:33 | |
| J'avais quelques minutes suite à une coupure réseau sur un site, du coup je mets ici la version PC du Panorabrique (gestion des sprites qui évite le clignotement de la version Android sur PC ou les effacement de briques / décors / raquette. C'est améliorable, mais c'est le principe que j'utiliserais actuellement pour faire un jeu à sprites sur PC avec Panoramic. Il y a 2 images qui peuvent être générées en retirant le commentaire devant creer_decor(). Je n'ai pas mis de test d'existence pour les créer, mais c'est facilement implémentable. Je mets surtout ce listing pour ne pas que les personnes qui ont vu le programme prévu pour Androïd utilisent cette méthode pour leurs jeux... - Code:
-
' Panorabric prévue pour PC (Resolution de l'écran 600 x 380) ' La résolution c'est par ce que je suis parti de la version Android de mon S3...
label clic,fin, boucle_principale, t1, t2
' Déclarations dim i, j, i2, j2, ecran%, aff_vies%, aff_score%, zdj%, image% dim h,l : h=600: l=380 dim x_r , y_r, hauteur_r, largeur_r : ' Variables de la raquette dim hauteur_b, largeur_b : hauteur_b = 8 : largeur_b=21 : ' constantes des briques dim xb, yb, Nb_lignes, Nb_briques_restantes : ' variables pour la gestion des briques Nb_lignes = 6 dim x_ball,y_ball, r_ball, n_ball : r_ball = 10 : ' variables de la balle dim c : ' donne la direction de la balle horizontalement ' c=1 => la balle va vers la gauche ' c=2 => elle va à droite dim r : ' donne la direction de la balle verticalement ' r=1 => la balle monte ' r=2 => la balle descend dim vies, score : vies = 3 : score = 0 dim nom_couleur$, Nb_couleur% : Nb_couleur% = 18 : ' Tableau des couleurs dim t_c(Nb_couleur%,3) dim ombre, lumiere : ombre=30 : lumiere = 16 dim marge_cote, marge_haut, hauteur_menu : marge_cote = 8 : marge_haut = 30 :hauteur_menu = 100 dim Nb_b_ligne : Nb_b_ligne = int((l - 3*marge_cote)/(largeur_b+5)) dim t_br(Nb_lignes*Nb_b_ligne,5) dim ctrl_mouse : ctrl_mouse = 0 : ' ctrl_mouse = 0 => clavier / boutons ; ctrl_mouse = 1 => souris ' ' ****************************** COMMANDES CLAVIER ************************** dim esc,cesc : cesc=27 : ' * TOUCHE "ESC" ==> MET FIN AU PROGRAMME:.... 27 * dim tfg,ctfg : ctfg=37 : ' * FLÈCHE GAUCHE ==> DEPLACER À GAUCHE:...... 37 * dim tfd,ctfd : ctfd=39 : ' * FLÈCHE DROITE ==> DEPLACER À DROITE:...... 39 * ' ***************************************************************************
' Initialisation de la fenêtre height 0, h: width 0,l : caption 0, "PANORABRIC Android - V1.0" border_small 0 : i = h - hauteur_menu + 20
if ctrl_mouse = 0 button 1 : hide 1 : ' Creation du bouton gauche top 1, i : left 1,10 : caption 1,"<" : on_click 1,clic button 2 : hide 2 : ' Creation du bouton droite top 2, i : left 2,50+width(1) : caption 2,">" : on_click 2,clic button 3 : hide 3 : ' Creation du bouton quitter top 3, i : left 3,l-width(3)-28 : caption 3,"Quitter" : on_click 3,clic ' On détecte le changement d'état des touches end_if
timer 4 : hauteur_r = 10 : largeur_r=60 : y_r = h-120-hauteur_r
' Données à charger dans le tableau des couleurs data "0 - Noir", 0, 0, 0, "1 - Blanc", 255,255,255 data "2 - couleur de fond - kaki foncé", 155,155, 55 data "3 - Kaki", 180,180,80, "4 - gris foncé", 80, 80, 80 data "5 - bleu" ,80, 80,215, "6 - rouge", 215, 80, 80 data "7 - vert", 80,215, 80, "8 - gris", 155,133,155 data "9 - vert clair", 100,215,100, "10 - violet", 215, 80,215 data "11 - kaki clair", 215,215, 80, "12 - bleu cyan", 80,215,215 data "13 - bleu moyen", 100,100,215, "14 - vert moyen",55,215,133 data "15 - violet",133, 55,215, "16 - marron clair",215,133, 55 data "17 - bleu nuit", 55, 55,133
' Chargement du tableau des couleurs for i = 1 to Nb_couleur% : read nom_couleur$ for j = 1 to 3 : read c : t_c(i,j)=c : next j next i
' On retire la taille du menu à h pour créer nos objets h= h - hauteur_menu
' Dessin de l'aire de jeu dans une image cachée qui sert aussi à créer les sprites ecran% = 5 : picture ecran% : hide ecran%
' Créer l'objet scene2d qui sera notre zone de jeu zdj% = 6 : scene2d zdj% top zdj%,0: left zdj%,1 height zdj%, h: width zdj%,l-2*marge_cote
' On creer notre image de transfert image% = 7 : image image%
' Activer cette ligne pour creer une image de fond basique si besoin (Creer_fond) ' Cette image est modifiable à volonté selon vos goût. ' Je vous en ai fourni une faite rapidement, a vous de faire mieux si vous voulez ' Creer_fond()
file_load zdj%,"fond.bmp"
x_r = 0.5 * (l - largeur_r - 2*marge_cote) : Dessine_raquette() Creer_brique() Trace_balle()
caption 0, " Panorabric version PC - Vies restantes: " + str$(vies) + " Score = "+str$(score)
Init_niveau()
' timer pour deplacements timer_interval 4,30 : on_timer 4,boucle_principale on_close 0,fin : ' Si on ferme, on ferme par la procédure de sortie
' Tout est prêt, on affiche les boutons et on attend le démarrage de la boucle if ctrl_mouse = 0 show 1: show 2: show 3 end_if on_key_down 0,t1 : on_key_up 0,t2 end
Sub Dessine_raquette() 2d_target_is ecran% color ecran%,0,0,0 : sprite 1 : sprite_hide 1 if file_exists("raquette.bmp") = 0 ' On trace la forme de la raquette 2d_pen_width 2 : 2d_pen_color t_c(5,1), t_c(5,2), t_c(5,3) : 2d_fill_color t_c(6,1), t_c(6,2), t_c(6,3) 2d_rectangle 4,4,largeur_r-3,hauteur_r-3 ' On ajoute la partie claire 2d_pen_color t_c(5,1)+lumiere, t_c(5,2)+lumiere, t_c(5,3)+lumiere 2d_poly_from 2,-2 : 2d_poly_to 2,2 : 2d_poly_to largeur_r-2,2 ' On ajoute les ombres 2d_pen_color t_c(5,1)-ombre, t_c(5,2)-ombre, t_c(5,3)-ombre 2d_poly_to largeur_r-2,hauteur_r-2 : 2D_poly_to 2,hauteur_r-2: 2d_pen_width 1 ' file_save ecran%,"raquette.bmp" else file_load ecran%,"raquette.bmp" end_if 2d_image_copy image%,0,0, largeur_r,hauteur_r sprite_image_load 1,image% End_sub
Sub init_niveau() Dessine_briques() x_r = 0.5 * (l - largeur_r - 2*marge_cote) sprite_position 1,x_r,y_r : sprite_show 1 Dessine_briques() Lance_balle() End_sub
Sub Creer_fond() 2d_target_is ecran% : top ecran%,0: left ecran%,0 height ecran%, h: width ecran%,l - 2*marge_cote ' Créait un fond noir si besoin color ecran%,0,0,0 if file_exists("fond_noir.jpg") = 0 then file_save ecran%,"fond_noir.jpg" ' Trace le contour if file_exists("fond.bmp")=0 2d_pen_color t_c(3,1), t_c(3,2), t_c(3,3) : 2d_fill_color t_c(3,1), t_c(3,2), t_c(3,3) 2d_rectangle 0,h,marge_cote,0 : 2d_rectangle marge_cote,0,l-2*marge_cote,20 2d_rectangle l-3*marge_cote,h,l-2*marge_cote,0 2d_image_copy image%,0,0,l-2*marge_cote,h file_save ecran%,"fond.bmp" end_if End_sub
Sub Creer_brique() dim k: k=0 ' Trace le contour 2d_target_is ecran% top ecran%,0: left ecran%,0 : color ecran%,0,0,0 height ecran%, hauteur_b : width ecran%,largeur_b for i= 1 to Nb_lignes for j = 1 to Nb_b_ligne k=k+1 t_br(k,2) = t_c(5+i,1): t_br(k,3) = t_c(5+i,2): t_br(k,4) = t_c(5+i,3) 2d_pen_color t_br(k,2), t_br(k,3), t_br(k,4) 2d_pen_width 3 2d_pen_color t_br(k,2), t_br(k,3), t_br(k,4) : 2d_fill_color t_br(k,2), t_br(k,3), t_br(k,4) 2d_rectangle 2,2,largeur_b-2, hauteur_b-2 2d_pen_color t_br(k,2)+lumiere, t_br(k,3)+lumiere, t_br(k,4)+lumiere 2d_poly_from 0, hauteur_b : 2d_poly_to 0,0 : 2d_poly_to largeur_b, 0 2d_pen_color t_br(k,2)-ombre, t_br(k,3)-ombre, t_br(k,4)-ombre 2d_poly_to largeur_b, hauteur_b : 2d_poly_to 0, hauteur_b 2d_pen_width 1 2d_image_copy image%,0,0,largeur_b,hauteur_b sprite 10+k : sprite_image_load 10+k,image% : sprite_hide 10 + k next j next i free k End_sub
Sub Dessine_briques() dim k: k=0 : Nb_briques_restantes = 0 for i= 1 to Nb_lignes yb = 2*marge_haut + (hauteur_b + 15) * i For j = 1 to Nb_b_ligne xb = 2*marge_cote + (largeur_b + 5) * (j-1) k=k+1 : t_br(k,1) = 1 : t_br(k,5) = 100 Nb_briques_restantes = Nb_briques_restantes + 1 sprite_position 10+k, xb, yb : sprite_show 10+k next j next i free k End_sub
Sub Lance_balle() y_ball = y_r - 2*r_ball : x_ball = int(rnd(l-60)) + 2*marge_cote : r=1 sprite_show 2 End_sub
Sub Trace_balle() 2d_target_is ecran% top ecran%,0: left ecran%,0 : height ecran%, 2*r_ball width ecran%,2*r_ball : color ecran%, 0,0,0 if file_exists("balle.bmp")=0 2d_pen_color t_c(3,1) - ombre, t_c(3,2) - ombre, t_c(3,3) - ombre 2d_fill_color t_c(3,1), t_c(3,2), t_c(3,3) : 2d_circle r_ball, r_ball, r_ball 2d_fill_color t_c(4,1)+lumiere, t_c(4,2)+lumiere, t_c(4,3)+lumiere 2d_pen_color t_c(4,1), t_c(4,2), t_c(4,3) : 2d_circle r_ball-3, r_ball-3, r_ball-6 file_save ecran%,"balle.bmp" else file_load ecran%,"balle.bmp" end_if 2d_image_copy image%,0,0,2*r_ball,2*r_ball sprite 2 : sprite_image_load 2,image% : sprite_hide 2 End_sub
Sub recommence() vies = 3 : score = 0 : sprite_hide 1 sprite_hide 2 : Init_niveau() timer_on 4 End_sub
Sub Deplace_balle() If x_ball> l-4*marge_cote-2*r_ball then x_ball = l-4*marge_cote-2*r_ball : c = 2 If x_ball < 2* marge_cote Then x_ball = 2 * marge_cote : c = 1 If y_ball < (marge_haut + r_ball) Then y_ball = marge_haut + r_ball : r = 2 If c < 2 Then x_ball = x_ball + 5 : Else: x_ball = x_ball - 5 If r < 2 Then y_ball = y_ball - 5 : Else: y_ball = y_ball + 5 End_sub
boucle_principale: if variable("temp") = 0 then dim temp timer_off 4 Deplace_balle() : sprite_position 2,x_ball,y_ball ' Teste si collision avec une brique if (r= 1 and y_ball <= (2*marge_haut + hauteur_b + (hauteur_b + 15) * Nb_lignes)) i = int((x_ball - 2*marge_cote) / (largeur_b + 5))+1 temp = int ((y_ball - 2*marge_haut - hauteur_b) / (hauteur_b +15))+1 j = (temp-1)*Nb_b_ligne +i if j <= (Nb_lignes*Nb_b_ligne) and j>0 if t_br(j,1) = 1 r=2 : t_br(j,1) = 0 sprite_hide j+10 : Nb_briques_restantes = Nb_briques_restantes - 1 : score = score + t_br(j,5) end_if end_if else if (r= 2 and (y_ball > (2*marge_haut + hauteur_b)) and (y_ball < (2*marge_haut + hauteur_b + (hauteur_b + 15) * Nb_lignes) )) i = int((x_ball - 2*marge_cote) / (largeur_b + 5)) +1 temp = int (((y_ball+2*r_ball) -2*marge_haut -hauteur_b) / (hauteur_b +15)) j = (temp-1)*Nb_b_ligne +i if j <= (Nb_lignes*Nb_b_ligne) and j>0 if t_br(j,1) = 1 r=1 : t_br(j,1) = 0 sprite_hide j+10 : Nb_briques_restantes = Nb_briques_restantes - 1 : score = score + t_br(j,5) end_if end_if end_if end_if
if ctrl_mouse = 1 x_r = mouse_x_position(zdj%) if x_r < 10 then x_r=10 : ' Mais on ne doit pas dépasser les bords !! if x_r > l - largeur_r-26 then x_r = l - largeur_r-26 : ' Mais on ne doit pas dépasser les bords !! sprite_x_position 1,x_r else if tfg=1 x_r = x_r - (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r < 10 then x_r=10 : ' Mais on ne doit pas dépasser les bords !! end_if if tfd=1 x_r = x_r + (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r > l - largeur_r-26 then x_r = l - largeur_r-26 : ' Mais on ne doit pas dépasser les bords !! end_if sprite_x_position 1,x_r end_if
' Verifie si la balle touche la raquette if r=2 and y_ball > y_r - 2 * r_ball - 4 if ((x_ball > (x_r - r_ball)) and (x_ball < (x_r + largeur_r))) r = 1 score=score+1 else if r=2 and y_ball > y_r ' Balle perdue wait 400: Lance_balle() vies = vies-1 end_if end_if end_if caption 0, " Panorabric version PC - Vies restantes = " + str$(vies) + " - Score = "+str$(score) if Nb_briques_restantes = 0 message "Bravo, niveau suivant ..." hide 2 : Init_niveau() end_if
if vies < 1 then goto fin free temp timer_on 4 return
clic: timer_off 4 select number_click case 1 : ' On test si l'on a appuyé sur la flèche de gauche x_r = x_r - (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r < 10 then x_r=10 : ' Mais on ne doit pas dépasser les bords !! case 2 : ' On test si l'on a appuyé sur la flèche de droite x_r = x_r + (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r > l - largeur_r-26 then x_r = l - largeur_r-26 : ' Mais on ne doit pas dépasser les bords !! case 3 : goto fin : ' On test si l'on a appuyé sur le bouton pour Quitter end_select sprite_x_position 1,x_r set_focus 0 timer_on 4 return
' ****** Procédures événementielles de gestion du clavier
t1: if key_down_code=cesc then goto fin if key_down_code=ctfg then tfg=1 if key_down_code=ctfd then tfd=1 return
t2: if key_down_code=ctfg then tfg=0 if key_down_code=ctfd then tfd=0 return
fin: timer_off_all : ' Je sais que l'on va faire un terminate, mais arréter les timers évite les messages d'erreur caption 0, " Panorabric version PC - Vies restantes = " + str$(vies) + " - Score = "+str$(score) wait 2000: sprite_hide_all caption 0, " Panorabric version PC - Partie terminée - Score = "+str$(score) file_load zdj%,"fond_noir.jpg" : wait 3000 terminate
Bon le réseau est revenu depuis 10 mn , je retourne bosser ....
Dernière édition par Jicehel le Mer 26 Nov 2014 - 1:29, édité 2 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 24 Nov 2014 - 17:36 | |
| Chouette !!! un jeu de plus... J' ai juste rétréci les boutons et je les ai rapproché l' un de l' autre. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Panorabrique pour Android Lun 24 Nov 2014 - 18:16 | |
| Pas de problème Ygeronimi. Le jeu est largement améliorable (fond d'écran, couleurs, affichage des scores, contrôle par la souris, le clavier ou les boutons, gestion des scores, gestion des niveaux (forme des dessins de briques, vitesse de la balle), gestion des meilleurs scores, etc ...) Là dans cette version, je voulais juste montrer que sur PC, on ne gérait pas le jeu de la même façon que dans le test sur Android et que le résultat était plus adapté. (Après, ce sera sans doute possible aussi sous Android dans pas longtemps, mais c'est une autre histroire) Si j'ai un peu de temps, je verrais pour avancer un peu sur la version pc à l'occasion (pas sur la gestion des niveaux qui demande un peu de temps et d'imagination pour les dessins, mais sur les couleurs qui sont un peu pourries là. Pour la balle et la raquette, je génère dans le programme, mais je ferais aussi un truc directement dans le menu pour générer les graphiques ou en utiliser des tous prêt pour le fond, la raquette et la balle pour que ce soit plus joli. Pareil pour les vies et le score. Mais surtout la gestion des touches du clavier et de la souris dans les options car ça change complétement la façon de jouer et ça demande juste quelques lignes de code ..
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Panorabrique pour Android Mar 25 Nov 2014 - 11:58 | |
| J'ai un problème technique. Quelqu'un a-t-il une solution ? Problème: Dans le programme si dessous, la gestion à la souris fonctionne si l'on mets ctrl_mouse à 1 Pour le clavier / bouton, j'ai un problème: la gestion au clavier fonctionne. La gestion avec les boutons fonctionne. Quand on utilise le clavier, si on clique sur un bouton, ça marche, mais le contraire n'est pas vrai. Si on clic sur un bouton, on ne peut plus utiliser le clavier et je ne comprends pas pourquoi. Si quelqu'un comprend pourquoi, je prends et je prends aussi si il a une solution technique. Vous trouverez dans le spoiler si dessous le code incréminé: - Code:
- Code:
-
' Panorabric la version Android de test (limitée à 20 objets) ' Prevu pour PC ' Resolution de l'écran 600 x 380 ' La résolution c'est par ce que je suis parti de la version Android de mon S3...
label clic,fin, boucle_principale, t1, t2
' Déclarations dim i, j, i2, j2, ecran%, aff_vies%, aff_score%, zdj%, image% dim h,l : h=600: l=380 dim x_r , y_r, hauteur_r, largeur_r : ' Variables de la raquette dim hauteur_b, largeur_b : hauteur_b = 8 : largeur_b=21 : ' constantes des briques dim xb, yb, Nb_lignes, Nb_briques_restantes : ' variables pour la gestion des briques Nb_lignes = 6 dim x_ball,y_ball, r_ball, c, r, n_ball : r_ball = 10 : ' variables de la balle dim vies, score : vies = 3 : score = 0 dim nom_couleur$, Nb_couleur% : Nb_couleur% = 18 : ' Tableau des couleurs dim t_c(Nb_couleur%,3) dim ombre, lumiere : ombre=30 : lumiere = 16 dim marge_cote, marge_haut, hauteur_menu : marge_cote = 8 : marge_haut = 30 :hauteur_menu = 100 dim Nb_b_ligne : Nb_b_ligne = int((l - 3*marge_cote)/(largeur_b+5)) dim t_br(Nb_lignes*Nb_b_ligne,5) dim ctrl_mouse : ctrl_mouse = 0 : ' ctrl_mouse = 0 => clavier / boutons ; ctrl_mouse = 1 => souris ' ' ****************************** COMMANDES CLAVIER ************************** dim esc,cesc : cesc=27 : ' * TOUCHE "ESC" ==> MET FIN AU PROGRAMME:.... 27 * dim tfg,ctfg : ctfg=37 : ' * FLÈCHE GAUCHE ==> DEPLACER À GAUCHE:...... 37 * dim tfd,ctfd : ctfd=39 : ' * FLÈCHE DROITE ==> DEPLACER À DROITE:...... 39 * ' ***************************************************************************
' Initialisation de la fenêtre height 0, h: width 0,l : caption 0, "PANORABRIC Android - V1.0" border_small 0 : i = h - hauteur_menu + 20
if ctrl_mouse = 0 button 1 : hide 1 : ' Creation du bouton gauche top 1, i : left 1,10 : caption 1,"<" : on_click 1,clic button 2 : hide 2 : ' Creation du bouton droite top 2, i : left 2,50+width(1) : caption 2,">" : on_click 2,clic button 3 : hide 3 : ' Creation du bouton quitter top 3, i : left 3,l-width(3)-28 : caption 3,"Quitter" : on_click 3,clic ' On détecte le changement d'état des touches end_if
timer 4 : hauteur_r = 10 : largeur_r=60 : y_r = h-120-hauteur_r
' Données à charger dans le tableau des couleurs data "0 - Noir", 0, 0, 0, "1 - Blanc", 255,255,255 data "2 - couleur de fond - kaki foncé", 155,155, 55 data "3 - Kaki", 180,180,80, "4 - gris foncé", 80, 80, 80 data "5 - bleu" ,80, 80,215, "6 - rouge", 215, 80, 80 data "7 - vert", 80,215, 80, "8 - gris", 155,133,155 data "9 - vert clair", 100,215,100, "10 - violet", 215, 80,215 data "11 - kaki clair", 215,215, 80, "12 - bleu cyan", 80,215,215 data "13 - bleu moyen", 100,100,215, "14 - vert moyen",55,215,133 data "15 - violet",133, 55,215, "16 - marron clair",215,133, 55 data "17 - bleu nuit", 55, 55,133
' Chargement du tableau des couleurs for i = 1 to Nb_couleur% : read nom_couleur$ for j = 1 to 3 : read c : t_c(i,j)=c : next j next i
' On retire la taille du menu à h pour créer nos objets h= h - hauteur_menu
' Dessin de l'aire de jeu dans une image cachée qui sert aussi à créer les sprites ecran% = 5 : picture ecran% : hide ecran%
' Créer l'objet scene2d qui sera notre zone de jeu zdj% = 6 : scene2d zdj% top zdj%,0: left zdj%,1 height zdj%, h: width zdj%,l-2*marge_cote
' On creer notre image de transfert image% = 7 : image image%
' Activer cette ligne pour creer une image de fond basique si besoin (Creer_fond) ' Cette image est modifiable à volonté selon vos goût. ' Je vous en ai fourni une faite rapidement, a vous de faire mieux si vous voulez ' ' Creer_fond()
file_load zdj%,"fond.bmp"
x_r = 0.5 * (l - largeur_r - 2*marge_cote) : Dessine_raquette() Creer_brique() Trace_balle()
caption 0, " Panorabric version PC - Vies restantes: " + str$(vies) + " Score = "+str$(score)
Init_niveau()
' timer pour deplacements timer_interval 4,30 : on_timer 4,boucle_principale on_close 0,fin : ' Si on ferme, on ferme par la procédure de sortie
' Tout est prêt, on affiche les boutons et on attend le démarrage de la boucle if ctrl_mouse = 0 then show 1: show 2: show 3 on_key_down 0,t1 : on_key_up 0,t2 end
Sub Dessine_raquette() 2d_target_is ecran% color ecran%,255,255,255 : sprite 1 : sprite_hide 1 ' On trace la forme de la raquette 2d_pen_width 2 : 2d_pen_color t_c(5,1), t_c(5,2), t_c(5,3) : 2d_fill_color t_c(6,1), t_c(6,2), t_c(6,3) 2d_rectangle 4,4,largeur_r-3,hauteur_r-3 ' On ajoute la partie claire 2d_pen_color t_c(5,1)+lumiere, t_c(5,2)+lumiere, t_c(5,3)+lumiere 2d_poly_from 2,-2 : 2d_poly_to 2,2 : 2d_poly_to largeur_r-2,2 ' On ajoute les ombres 2d_pen_color t_c(5,1)-ombre, t_c(5,2)-ombre, t_c(5,3)-ombre 2d_poly_to largeur_r-2,hauteur_r-2 : 2D_poly_to 2,hauteur_r-2: 2d_pen_width 1 2d_image_copy image%,0,0, largeur_r,hauteur_r sprite_image_load 1,image% End_sub
Sub init_niveau() Dessine_briques() x_r = 0.5 * (l - largeur_r - 2*marge_cote) sprite_position 1,x_r,y_r : sprite_show 1 Dessine_briques() Lance_balle() End_sub
Sub Creer_fond() 2d_target_is ecran% top ecran%,0: left ecran%,0 height ecran%, h: width ecran%,l - 2*marge_cote ' Créait un fond noir color ecran%,0,0,0 file_save ecran%,"fond_noir.jpg" ' Trace le contour 2d_pen_color t_c(3,1), t_c(3,2), t_c(3,3) : 2d_fill_color t_c(3,1), t_c(3,2), t_c(3,3) 2d_rectangle 0,h,marge_cote,0 : 2d_rectangle marge_cote,0,l-2*marge_cote,20 2d_rectangle l-3*marge_cote,h,l-2*marge_cote,0 2d_image_copy image%,0,0,l-2*marge_cote,h file_save ecran%,"fond.bmp" End_sub
Sub Creer_brique() dim k: k=0 ' Trace le contour 2d_target_is ecran% top ecran%,0: left ecran%,0 height ecran%, hauteur_b : width ecran%,largeur_b for i= 1 to Nb_lignes for j = 1 to Nb_b_ligne k=k+1 t_br(k,2) = t_c(5+i,1): t_br(k,3) = t_c(5+i,2): t_br(k,4) = t_c(5+i,3) 2d_pen_color t_br(k,2), t_br(k,3), t_br(k,4) 2d_pen_width 3 2d_pen_color t_br(k,2), t_br(k,3), t_br(k,4) : 2d_fill_color t_br(k,2), t_br(k,3), t_br(k,4) 2d_rectangle 2,2,largeur_b-2, hauteur_b-2 2d_pen_color t_br(k,2)+lumiere, t_br(k,3)+lumiere, t_br(k,4)+lumiere 2d_poly_from 0, hauteur_b : 2d_poly_to 0,0 : 2d_poly_to largeur_b, 0 2d_pen_color t_br(k,2)-ombre, t_br(k,3)-ombre, t_br(k,4)-ombre 2d_poly_to largeur_b, hauteur_b : 2d_poly_to 0, hauteur_b 2d_pen_width 1 2d_image_copy image%,0,0,largeur_b,hauteur_b sprite 10+k : sprite_image_load 10+k,image% : sprite_hide 10 + k next j next i free k End_sub
Sub Dessine_briques() dim k: k=0 : Nb_briques_restantes = 0 for i= 1 to Nb_lignes yb = 2*marge_haut + (hauteur_b + 15) * i For j = 1 to Nb_b_ligne xb = 2*marge_cote + (largeur_b + 5) * (j-1) k=k+1 : t_br(k,1) = 1 : t_br(k,5) = 100 Nb_briques_restantes = Nb_briques_restantes + 1 sprite_position 10+k, xb, yb : sprite_show 10+k next j next i free k End_sub
Sub Lance_balle() y_ball = y_r - 2*r_ball : x_ball = int(rnd(l-60)) + 2*marge_cote : r=1 sprite_show 2 End_sub
Sub Trace_balle() 2d_target_is ecran% top ecran%,0: left ecran%,0 height ecran%, 2*r_ball : width ecran%,2*r_ball color ecran%, 255,255,255 2d_pen_color t_c(3,1) - ombre, t_c(3,2) - ombre, t_c(3,3) - ombre 2d_fill_color t_c(3,1), t_c(3,2), t_c(3,3) : 2d_circle r_ball, r_ball, r_ball 2d_fill_color t_c(4,1)+lumiere, t_c(4,2)+lumiere, t_c(4,3)+lumiere 2d_pen_color t_c(4,1), t_c(4,2), t_c(4,3) : 2d_circle r_ball-3, r_ball-3, r_ball-6 2d_image_copy image%,0,0,2*r_ball,2*r_ball sprite 2 : sprite_image_load 2,image% : sprite_hide 2 End_sub
Sub recommence() vies = 3 : score = 0 : sprite_hide 1 hide 2 : Init_niveau() timer_on 4 End_sub
Sub Deplace_balle() If x_ball> l-4*marge_cote-2*r_ball then x_ball = l-4*marge_cote-2*r_ball : c = 2 If x_ball < 2* marge_cote Then x_ball = 2 * marge_cote : c = 1 If y_ball < (marge_haut + r_ball) Then y_ball = marge_haut + r_ball : r = 2 If c < 2 Then x_ball = x_ball + 5 : Else: x_ball = x_ball - 5 If r < 2 Then y_ball = y_ball - 5 : Else: y_ball = y_ball + 5 End_sub
boucle_principale: if variable("temp") = 0 then dim temp timer_off 4 Deplace_balle() : sprite_position 2,x_ball,y_ball ' Teste si collision avec une brique if (r= 1 and y_ball <= (2*marge_haut + hauteur_b + (hauteur_b + 15) * Nb_lignes)) i = int((x_ball - 2*marge_cote) / (largeur_b + 5))+1 temp = int ((y_ball - 2*marge_haut - hauteur_b) / (hauteur_b +15))+1 j = (temp-1)*Nb_b_ligne +i if j <= (Nb_lignes*Nb_b_ligne) and j>0 if t_br(j,1) = 1 r=2 : t_br(j,1) = 0 sprite_hide j+10 : Nb_briques_restantes = Nb_briques_restantes - 1 : score = score + t_br(j,5) end_if end_if else if (r= 2 and (y_ball > (40 + hauteur_b)) and (y_ball < (25 + hauteur_b + (hauteur_b + 15) * Nb_lignes) )) i = int((x_ball - 30) / (largeur_b + 10)) +1 temp = int (((y_ball+2*r_ball) -25 -hauteur_b) / (hauteur_b +15)) j = (temp-1)*Nb_b_ligne +i if j <= (Nb_lignes*Nb_b_ligne) and j>0 if t_br(j,1) = 1 r=1 : t_br(j,1) = 0 sprite_hide j+10 : Nb_briques_restantes = Nb_briques_restantes - 1 : score = score + t_br(j,5) end_if end_if end_if end_if if ctrl_mouse = 1 x_r = mouse_x_position(zdj%) if x_r < 10 then x_r=10 : ' Mais on ne doit pas dépasser les bords !! if x_r > l - largeur_r-26 then x_r = l - largeur_r-26 : ' Mais on ne doit pas dépasser les bords !! sprite_x_position 1,x_r else if tfg=1 x_r = x_r - (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r < 10 then x_r=10 : ' Mais on ne doit pas dépasser les bords !! end_if if tfd=1 x_r = x_r + (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r > l - largeur_r-26 then x_r = l - largeur_r-26 : ' Mais on ne doit pas dépasser les bords !! end_if sprite_x_position 1,x_r end_if
' Verifie si la balle touche la raquette if r=2 and y_ball > y_r - 2 * r_ball - 4 if ((x_ball > (x_r - r_ball)) and (x_ball < (x_r + largeur_r))) r = 1 score=score+1 else if r=2 and y_ball > y_r ' Balle perdue wait 400: Lance_balle() vies = vies-1 end_if end_if end_if caption 0, " Panorabric version PC - Vies restantes = " + str$(vies) + " - Score = "+str$(score) if Nb_briques_restantes = 0 message "Bravo, niveau suivant ..." hide 2 : Init_niveau() end_if
if vies < 1 then goto fin free temp timer_on 4 return
clic: timer_off 4 select number_click case 1 : ' On test si l'on a appuyé sur la flèche de gauche x_r = x_r - (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r < 10 then x_r=10 : ' Mais on ne doit pas dépasser les bords !! case 2 : ' On test si l'on a appuyé sur la flèche de droite x_r = x_r + (largeur_r / 2) : ' Mise à jour de la position de la raquette suite à l'appuie sur la flèche if x_r > l - largeur_r-26 then x_r = l - largeur_r-26 : ' Mais on ne doit pas dépasser les bords !! case 3 : goto fin : ' On test si l'on a appuyé sur le bouton pour Quitter end_select sprite_x_position 1,x_r timer_on 4 return
' ****** Procédures événementielles de gestion du clavier
t1: if key_down_code=cesc then goto fin if key_down_code=ctfg then tfg=1 if key_down_code=ctfd then tfd=1 return
t2: if key_down_code=ctfg then tfg=0 if key_down_code=ctfd then tfd=0 return
fin: timer_off_all : ' Je sais que l'on va faire un terminate, mais arréter les timers évite les messages d'erreur caption 0, " Panorabric version PC - Vies restantes = " + str$(vies) + " - Score = "+str$(score) wait 2000: sprite_hide_all caption 0, " Panorabric version PC - Partie terminée - Score = "+str$(score) file_load zdj%,"fond_noir.jpg" : wait 3000 terminate
Merci par avance. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 25 Nov 2014 - 14:10 | |
| 2 remarques qui je l' espère te seront utiles.
1 / tu n' arrêtes pas ton timer le temps du traîtement. 2 / tu fais ton on_key_down et on_key_up sur le form 0 mais est ce bien lui qui a le focus ?... ( vu que tu as un objet en mouvement qui lui dépend du scene_2d... ) | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Panorabrique pour Android Mar 25 Nov 2014 - 14:36 | |
| Merci Ygeronimi. Tu as mis le doigt dessus, trop fort. En cliquant sur le bouton, on perd le focus. J'ai donc juste rajouté un set_focus 0 en fin de procédure clic. Ce problème est résolu Je mets à jour le source dans le listing qui n'est pas en spoiler du coup (celui du Lun 24 Nov 2014 - 15:33) Prochaine étape, corriger le test de collisions des briques car en modifiant, j'ai laissé le programme a moitié modifié. Je revois ça pour que ce soit plus clair et corrigé, par ce que là, la détection c'est n'importe quoi dans cette version (mais pas pour longtemps ) | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 26 Nov 2014 - 12:36 | |
| Est ce normal que le déplacement par les touches du clavier soit si violent ?... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Panorabrique pour Android Mer 26 Nov 2014 - 14:46 | |
| Oui, c'est normal car les valeurs de déplacements sont assez arbitraire. Il y a plusieurs moyen de régler ça : ajuster la valeur ou empécher le réappui sur une touche avant un certain temps en bloquant la prise en compte pendant n boucles principales. J'allais modifier le source plus haut mais c'est vrai que du coup je commence un peu un hors sujet par rapport au titre. Du coup je vais poster le source dans un autre sujet pour la version PC.
| |
| | | Contenu sponsorisé
| Sujet: Re: Panorabrique pour Android | |
| |
| | | | Panorabrique pour Android | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |