Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PONG IRC


Information sur la source

Catégorie :AddOns Classé sous : pong, jeu, mirc Niveau : Débutant Date de création : 28/08/2004 Date de mise à jour : 29/08/2004 14:11:13 Vu : 2 351

Note :
7,5 / 10 - par 2 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Voila, suite a l idee de kerrigan de coder un demineur en mirc script, voila pong a la sauce irc ! Bon ce n est pas un code sans bug loin de la mais ca devrait ravir quelque nostalgique ;)

ps: /pg pour lancer le jeu ou passer par le menu channel
ps2: ca se joue a la souris =)
 

Source

  • ; alias de gros flemmard ! :D ;
  • alias h { hadd p $1- }
  • alias ht { return $hget(p,$1-) }
  • alias pg {
  • if ($hget(p)) hfree p
  • hmake p 15
  • h b 200 300
  • h b.d 0
  • h c 200
  • h s 0
  • h cs 0
  • h dx 0
  • h dy 2
  • h a +
  • h fps 100
  • h b.t
  • if (!%ai) .set %ai 1
  • window -dpf @p 0 0 410 610
  • drawrect -fn @p 1 1 0 0 410 610
  • dp
  • }
  • alias dp {
  • ; pour les fps ;
  • var %begincode = $ticks
  • ; var contenant la valeur de $mouse.x au debut de la boucle pour calculer ;
  • ; la vitesse de la balle suivant la difference %old_mouse.x et $mouse.x ;
  • ; on fait de meme pour l ordi mais suivant son abscisse ;
  • var %old_mouse.x = $mouse.x,%old_comp.x = $gettok($hget(p,c),1,32)
  • ; controle de la souris ;
  • if ( $mouse.y < 500 ) %y = 500
  • elseif ( $mouse.y > 610 ) %y = 610
  • elseif ( $mouse.y = $null ) %y = 500
  • else %y = $mouse.y
  • if ( $mouse.x = $null ) %x = 100
  • else %x = $calc($mouse.x - 25)
  • ; variable contenant les coords des "joueurs" et de la "balle" (x,y,h,l) ;
  • var %bx = $gettok($ht(b),1,32),%by = $gettok($ht(b),2,32),%l = $calc(%x + 50),%h = $calc(%y +10)
  • var %cx = $ht(c),%cy = 20,%cl = $calc(%cx + 50),%ch = $calc(%cy + 10)
  • if ( %x < 1 ) %x = 1
  • if ( %x > 410 ) %x = 410
  • ; le "terrain" ;
  • drawdot -n @p 1 26 $ht(b)
  • drawrect -fn @p 1 1 0 0 410 40
  • drawrect -fn @p 1 1 0 500 410 120
  • drawline -n @p 9 1 5 300 405 300
  • drawrect -n @p 9 1 5 5 400 600
  • ; la "balle" ;
  • drawdot -n @p 0 7 $ht(b)
  • ; les "joueurs" ;
  • drawrect -n @p 3 1 %x %y 50 10
  • drawrect -n @p 3 1 $ht(c) 20 50 10
  • drawtext -n @p 4 arial 14 10 286 $ht(cs)
  • drawtext -n @p 12 arial 14 10 300 $ht(s)
  • drawpic @p
  • ; ici on fait deplacer l ordi suivant les coord de la balle et les rebords du "terrain" ;
  • if ( %ai != 10 ) {
  • if ( $ht(c) < 1 ) h c 1
  • elseif ( $ht(c) > 360) h c 360
  • if ( $ht(c) < $calc(%bx - (%ai * 5)) ) h c $calc($ht(c) + %ai + $rand(1,%ai))
  • if ( $ht(c) > $calc(%bx - (%ai * 5)) ) h c $calc($ht(c) - %ai - $rand(1,%ai))
  • }
  • else h c $calc(%bx -25)
  • ; si on touche la balle on calcule sa future trajectoire ;
  • if ( $onpoly(4,4,%x,%y,%l,%y,%x,%h,%l,%h,%bx,%by,$calc(%bx +4),%by,%bx,$calc(%by +4),$calc(%bx +4),$calc(%by +4)) ) {
  • ; trajectoire en fonction de la difference balle.x - souris.x ;
  • var %x0 = $int($calc( (%bx - $mouse.x) /5) )
  • ; vitesse de la balle ;
  • var %y0 = $calc( $abs( %old_mouse.x - $mouse.x ) / 22.5 )
  • if ( %y0 <= 2 ) %y0 = 2
  • h dy %y0
  • h dx %x0
  • ; on change le sens de la balle ( 1 = monte , 0 = descend )
  • h b.d 1
  • }
  • ; si c l ordi on calcule sa trajectoire ;
  • elseif ( $onpoly(4,4,%cx,%cy,%cl,%cy,%cx,%ch,%cl,%ch,%bx,%by,$calc(%bx +4),%by,%bx,$calc(%by +4),$calc(%bx +4),$calc(%by +4)) ) {
  • ; trajectoire ;
  • var %x0 = $int($calc( (%bx - %cx) /5) )
  • ; vitesse de la balle ;
  • var %y0 = $calc( $abs( %old_comp.x - %cx ) / (50 - %ai) )
  • if ( %y0 <= 2 ) %y0 = 2
  • h dy %y0
  • h dx %x0
  • h b.d 0
  • }
  • ; si la balle touche un rebord on inverse %x0 ;
  • if ( %bx > 400 ) $iif($hget(p,dx) < 0,h a +,h a -)
  • elseif ( %bx < 4 ) $iif($hget(p,dx) < 0,h a -,h a +)
  • ; si elle descend ben elle descend :p si elle monte... elle monte ;
  • if ( !$hget(p,b.d) ) h b $calc(%bx $ht(a) $ht(dx)) $calc(%by + $ht(dy) + $ht(b.t))
  • elseif ( $hget(p,b.d) ) h b $calc(%bx $ht(a) $ht(dx)) $calc(%by - $ht(dy) + $ht(b.t))
  • ; si la balle sort de l ecran alors on marque un point et on reset la balle ;
  • if ( %by > 610 ) {
  • r
  • drawrect -fn @p 1 1 9 286 $width($ht(cs),arial,15) 30
  • hinc p cs
  • h b.d 1
  • }
  • elseif ( %by < 1 ) {
  • r
  • drawrect -fn @p 1 1 9 286 $width($ht(s),arial,15) 30
  • hinc p s
  • h b.d 0
  • }
  • .timerp -ho 1 $calc( ( 1000 / $ht(fps) ) - ($ticks - %begincode) ) dp
  • }
  • alias r {
  • h c 200
  • h dy 2
  • h b 200 300
  • h dx 0
  • }
  • menu status,channel {
  • -
  • Pong:
  • .Jouer:/pg
  • .Config:
  • ..facile:/set %ai 1
  • ..moyen:/set %ai 2
  • ..difficile:/set %ai 3
  • ..tres difficile:/set %ai 5
  • ..Dieu:/set %ai 10
  • }
  • on 1:close:@p: {
  • .timerp off
  • hfree p
  • }
; alias de gros flemmard ! :D ;
alias h { hadd p $1- }
alias ht { return $hget(p,$1-) }
alias pg {
  if ($hget(p)) hfree p
  hmake p 15
  h b 200 300
  h b.d 0
  h c 200 
  h s 0
  h cs 0
  h dx 0
  h dy 2
  h a +
  h fps 100
  h b.t
  if (!%ai) .set %ai 1
  window -dpf @p 0 0 410 610
  drawrect -fn @p 1 1 0 0 410 610
  dp
}

alias dp {
  ; pour les fps ;
  var %begincode = $ticks
  ; var contenant la valeur de $mouse.x au debut de la boucle pour calculer ;
  ; la vitesse de la balle suivant la difference %old_mouse.x et $mouse.x ;
  ; on fait de meme pour l ordi mais suivant son abscisse ;
  var %old_mouse.x = $mouse.x,%old_comp.x = $gettok($hget(p,c),1,32) 
  ; controle de la souris ;
  if ( $mouse.y < 500 ) %y = 500 
  elseif ( $mouse.y > 610 ) %y = 610
  elseif ( $mouse.y = $null ) %y = 500
  else %y = $mouse.y
  if ( $mouse.x = $null ) %x = 100
  else %x = $calc($mouse.x - 25)

  ; variable contenant les coords des "joueurs" et de la "balle" (x,y,h,l) ;
  var %bx = $gettok($ht(b),1,32),%by = $gettok($ht(b),2,32),%l = $calc(%x + 50),%h = $calc(%y +10)
  var %cx = $ht(c),%cy = 20,%cl = $calc(%cx + 50),%ch = $calc(%cy + 10)  

  if ( %x < 1 ) %x = 1
  if ( %x > 410 ) %x = 410 
  ; le "terrain" ;
  drawdot -n @p 1 26 $ht(b)
  drawrect -fn @p 1 1 0 0 410 40
  drawrect -fn @p 1 1 0 500 410 120
  drawline -n @p 9 1 5 300 405 300
  drawrect -n @p 9 1 5 5 400 600
  ; la "balle" ;
  drawdot -n @p 0 7 $ht(b)
  ; les "joueurs" ;
  drawrect -n @p 3 1 %x %y 50 10
  drawrect -n @p 3 1 $ht(c) 20 50 10
  drawtext -n @p 4  arial 14 10 286 $ht(cs) 
  drawtext -n @p 12 arial 14 10 300 $ht(s)
  drawpic @p

  ; ici on fait deplacer l ordi suivant les coord de la balle et les rebords du "terrain" ;
  if ( %ai != 10 ) {
    if ( $ht(c) < 1 ) h c 1
    elseif ( $ht(c) > 360) h c 360
    if ( $ht(c) < $calc(%bx - (%ai * 5)) ) h c $calc($ht(c) + %ai + $rand(1,%ai))   
    if ( $ht(c) > $calc(%bx - (%ai * 5)) ) h c $calc($ht(c) - %ai - $rand(1,%ai)) 
  }
  else h c $calc(%bx -25)


  ; si on touche la balle on calcule sa future trajectoire ;
  if ( $onpoly(4,4,%x,%y,%l,%y,%x,%h,%l,%h,%bx,%by,$calc(%bx +4),%by,%bx,$calc(%by +4),$calc(%bx +4),$calc(%by +4))  ) {
    ; trajectoire en fonction de la difference balle.x - souris.x ;    
    var %x0 = $int($calc( (%bx - $mouse.x) /5) )
    ; vitesse de la balle ;
    var %y0 = $calc( $abs( %old_mouse.x - $mouse.x ) / 22.5 ) 
    if ( %y0 <= 2 ) %y0 = 2 
    h dy %y0    
    h dx %x0    
    ; on change le sens de la balle ( 1 = monte , 0 = descend )
    h b.d 1
  }
  ; si c l ordi on calcule sa trajectoire ;
  elseif ( $onpoly(4,4,%cx,%cy,%cl,%cy,%cx,%ch,%cl,%ch,%bx,%by,$calc(%bx +4),%by,%bx,$calc(%by +4),$calc(%bx +4),$calc(%by +4))  ) {

    ; trajectoire ;    
    var %x0 = $int($calc( (%bx - %cx) /5) )
    ; vitesse de la balle ;
    var %y0 = $calc( $abs( %old_comp.x - %cx ) / (50 - %ai) )
    if ( %y0 <= 2 ) %y0 = 2 
    h dy %y0  
    h dx %x0   
    h b.d 0
  }

  ; si la balle touche un rebord on inverse %x0 ;
  if ( %bx > 400 ) $iif($hget(p,dx) < 0,h a +,h a -) 
  elseif ( %bx < 4 ) $iif($hget(p,dx) < 0,h a -,h a +)

  ; si elle descend ben elle descend :p si elle monte... elle monte ;
  if ( !$hget(p,b.d) ) h b $calc(%bx $ht(a) $ht(dx)) $calc(%by + $ht(dy) + $ht(b.t))
  elseif ( $hget(p,b.d) ) h b $calc(%bx $ht(a) $ht(dx)) $calc(%by - $ht(dy) + $ht(b.t))

  ; si la balle sort de l ecran alors on marque un point et on reset la balle ;
  if ( %by > 610 ) {
    r
    drawrect -fn @p 1 1 9 286 $width($ht(cs),arial,15) 30
    hinc p cs
    h b.d 1
  }
  elseif ( %by < 1 ) {
    r
    drawrect -fn @p 1 1 9 286 $width($ht(s),arial,15) 30 
    hinc p s
    h b.d 0 
  }

  .timerp -ho 1 $calc( ( 1000 / $ht(fps) ) - ($ticks - %begincode) ) dp
}

alias r { 
  h c 200
  h dy 2
  h b 200 300
  h dx 0
}

menu status,channel {
  -
  Pong:
  .Jouer:/pg
  .Config:
  ..facile:/set %ai 1
  ..moyen:/set %ai 2
  ..difficile:/set %ai 3
  ..tres difficile:/set %ai 5
  ..Dieu:/set %ai 10
}

on 1:close:@p: {
  .timerp off
  hfree p
}


Conclusion

Rien de bien compliqué , tout est commenté ou presque , ca devrait aidé ceux qui débute. Si vous avez des corrections/remarques/critiques/bug n' hésitez pas ! Un mode multi sera dispo prochainement.
 

Historique

28 août 2004 15:25:42 :
-Corrections de divers bugs explicités dans les commentaires -Controle des fps -Modifications du systeme de tracage -Correction de l' ia (plus difficle a battre) -Correction du score.
28 août 2004 18:48:28 :
-Correction de ma faute de frappe =) -Petit changement de gameplay -Choix de difficultes -Affichage correct des scores
28 août 2004 19:06:27 :
Correction de la "souris fantome" le fameux * /drawrect invalid parameters
29 août 2004 14:11:14 :
Rajout de l event on close pour liberer la memoire et stoper le timer.

Commentaires et avis

signaler à un administrateur
Commentaire de Seregon le 28/08/2004 02:49:24

Tu fais de l'anil de ce genre sans utiliser les fps
www.picwin.tk rubrique tutorial tu comprendras de koi je veux parler

signaler à un administrateur
Commentaire de Huitre le 28/08/2004 03:35:44

Oui je l ai lu mais je ne l ai pas appliqué (:
Demain j updaterais.

signaler à un administrateur
Commentaire de ReMi34 le 28/08/2004 09:40:26

Oula, si si y'a qqes bugs :

- On devrait pas pouvoir aller dans le camp adverse
- Le rectangle adverse, quand tu tires fort, il te la renvoie trés lentement

Enfin plein de ptits trucs comme ça, à toi de les corriger :)
Sinon, j'aime bien le début.

signaler à un administrateur
Commentaire de SornDrixer le 28/08/2004 10:39:43 administrateur CS

Ha on dirait que Parkinson a disparu chez l'adversaire :P

Quelques remarques :
- au bout d'un certains temps de jeu, j'ai reçu ce message d'erreur :
* /drawrect: insufficient parameters (line 37, test.mrc)
- pense à autoriser uniquement un déplacement horizontal de notre bar
- le menu popup, je le préfère dans le status que dans le channel, je ne suis pas toujours connecté lorsque je teste un addon.

signaler à un administrateur
Commentaire de Huitre le 28/08/2004 14:24:25

-Je vais donc mettre une valeur minimale pour la vitesse de la balle
-Pour le camp adverse , c pour pallier a la lenteur de la balle ca evite d attendre 3 plombes ;) mais comme je vais le resoudre, je vais restreindre l acces.
-* /drawrect: insufficient parameters (line 37, test.mrc) ca se produit quand la window n' est plus active donc elle n a pu les coord $mouse
-Je n avais pas  vu que je n avais pas incrementer le score de l adversaire =)
-Donc je resouds tout ca et j update .

signaler à un administrateur
Commentaire de ReMi34 le 28/08/2004 16:03:34

Problème à la ligne 35 :
elseif(
:)

signaler à un administrateur
Commentaire de ReMi34 le 28/08/2004 16:05:51

D'autres problèmes :

- * /%: not connected to server (line 35, script24.ini)

- Pour relancer la balle, c'est la souris qui le fait, pas le rectangle, enfin j'espère que tu comprendras.

signaler à un administrateur
Commentaire de ReMi34 le 28/08/2004 16:09:20

Mince,
Toujours le problème :
* /drawrect: insufficient parameters (line 47, script24.ini)

Pour les points, ça réécrit par dessus, donc pas trés visible.

Voilà je crois que c'est tout, c'est déjà pas mal :p

signaler à un administrateur
Commentaire de Huitre le 28/08/2004 19:14:18

Abracadabra,cadabri, voila les 3 bugs de corrigés !

signaler à un administrateur
Commentaire de ReMi34 le 29/08/2004 09:44:25

Bien bien, ça s'améliore !

Encore un bug que j'viens de trouver :

Lorsque tu fermes la fenêtre pendant que t'es en train de jouer, ça donne ça :
* /drawdot: invalid window (line 45, script27.ini)

Voilà, tu vas nous corriger tout ça :)

signaler à un administrateur
Commentaire de Huitre le 29/08/2004 13:57:31

Oui c' est tout a fait normal, je n ai pas mis de evenements on close puisque le timer n' est répété qu' une fois.

:)

signaler à un administrateur
Commentaire de ReMi34 le 29/08/2004 14:33:16

Ça commence à avoir de la gueule !

Prochaine étape : Multijoueur :p

signaler à un administrateur
Commentaire de Psykokiller le 30/08/2004 05:16:44

Tu as eu la une bonne idée :)
Ca fait du bien un peu de nostalgie et d'originalité :)

Bon pour les bugs/suggestions :

*Si tu places le coin dla barre sous la balle au départ tu marques a tous les coup et donc le score monte facilement a 1000000 - 0 :p il faudrait donc ralentir la vitesse car kan on la prend sur le coin la balle va plus vite ke kan on la prend au centre et l'adversaire est pas assez rapide :p

*C'est dmg que la barre n'ai pas qu'un seul scroling horizontal et qu'elle sorte de l'ecran en bas et a droite. Dmg aussi kelle dépasse la limite a gauche :) Je sais que c'est du détail mais une fois réglé ca améliore l'aspect :)

signaler à un administrateur
Commentaire de ReMi34 le 30/08/2004 09:29:02

J'ai aussi d'autres suggestions :

- Pourquoi ne pas faire un système de vie avec des images Game Over et tout ?

- Un système de record ?

signaler à un administrateur
Commentaire de Huitre le 30/08/2004 15:12:54

Concernant les bugs/suggestions :

-Change la difficulté en dieu et tente la technique du coin, on verra si tu gagnes :D, a partir de difficile, marquer un point est un véritable challenge ;)

-Pour la barre tu es tres pointilleu ;) je reglerai ca mais pas d update avant le mode multi. Seul un scrolling horizontal sera autorisé (c déja corrigé, ca limite d autant plus les donnes a envoyer au socket ;)

En reponse a remi34:

-Euh , tu ve pas que je transforme pong en space invaders quand meme :D

-Un petit dialog avec des stats par niveau de difficultes sera peut etre envisagé, je verrais :)

ps : J ai besoin de beta testeurs, contactez moi par msn Joffrey_@hotmail.com

signaler à un administrateur
Commentaire de Panther007 le 31/08/2004 14:55:44

Euh je trouve pas sa mal ;) mais y a des bug... la balle passe souvent a travers de mon rectangle mdr , et quand on envoit la balle sur le coté du jeu elle est plu la , pouffff disparu :s et elle réapparait dans le milieu du jeu...

signaler à un administrateur
Commentaire de Huitre le 31/08/2004 18:35:29

oO ?
il ne se passe ca que chez toi, utilise tu un mirc "vierge" ou un script dl je ne sais ou ?
Cela doit peut etre provenir du fait que certains addons/scripts/remote utilise les memes variables que mon addon.
Je vais mettre un zip avec un *.mrc pour faciliter l install.

signaler à un administrateur
Commentaire de Ziploc le 06/09/2004 17:02:40

Pas mal :) 8/10

signaler à un administrateur
Commentaire de HySteriK le 10/04/2005 23:38:18

uép jolie source encore une foi
decidement c'est ma journée ^^

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Ping Timeout Pong, petit jeu [ par Mattis ] Voil&#224;, je cherche &#224; faire un script pr un petit jeu que nous avons sur notre chan. Lorsque que quelqu'un sort en (ping timeout) c'est au pl mirc.exe trojan ? [ par HySteriK ] Hello, voila j'explique mon &#233;norme soucis je n'arrive plus &#224; me connecter sous irc j'ai scanner mon pc avec a&#178; Free et il me dit que m besoins d'aide [ par cocoloan ] <TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 UNSELECTAB Question de log ! [ par mikrobe ] Bonjour &#224; tous !Voil&#224; ma question: Pr&#233;sentement,&nbsp;mes logs sont enregistr&#233;s dans le dossier mirc/logs et son class&#233;s par Script Mirc pour afficher les lecteur Reseau [ par wally314 ] Et ben voila tout est dans le titre.Pour le moment j'ai trouver pour afficher le disque dur local et meme le lecteur CD mais pas moyen pour les lecteu recuperer variables email et anick [ par lebaronrouge ] Hello J'aimerais r&#233;cuperer dans une variable genre %email et %anick les parametres entr&#233;s dans mirc aux lignes email adresse et alternat resizer mIRC [ par Panthouffle ] Est-ce possible de reziser mIRC avec une commande&nbsp; et sans dll ? jeu uno [ par daemonx ] salutje cherche un bot du jeu uno, si quelqu'un peut sait ou je peu le trouv&#233; je le remercie jamais assez.merci Definir un browser par défaut [ par BiGOuF ] Tout d'abord,mes meilleurs voeux pour cette nouvelle année J'aurai une question assez simple j'imagine. Comment definir dans mirc-même le browser qu' Citations bot mirc [ par dams89 ] Salut !! a tous Bon voila je sui toujours entrain d 'ameliorer mon bot et la je voudrai le faire cit&#233; quelque dicton ou proverbe (comme un pub qu


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,577 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.