A le jeux du morpion

Contenu du snippet

C'est le célèbre et inconditionnel jeux de morpion. En drawpics. vous devez y jouer avec un adverssaire ayant lui aussi le script ( rendes vous sur #morpion irc.jeux.fr ). Le script en lui même ne sert à rien c juste pour s'amuser un peu et s'entrainer sur les drawpics et un tit protocol entre deux clients ( j'ai trouver la faille moi ( que j'ai la flemme de régler )).

Enfin pour trouver un partenaire /server -m irc.jeux.fr -j #morpion ( pour ceux qu'on du mal )

Source / Exemple :


;%Morp.G désigne les cases tu tableau lit de haut à gauche en bas à droit
;dedans le 4 représente rien, le 0 l'adversaire et le 1 sois même
;donc %Morp.G = 4 4 4 1 1 1 4 4 4
;revient à la 2 ème ligne de croix ( si croix c sois même ) 

;%Morp.G contient ce qu'il y a dans chaque case
;%Morp.J : $true si c à son tour de jouer sinon $false
;%Morp.Me : si on est dans %Morp.G représenté par 0 ou 1
;%Morp.C : Pour savoir si on à commencer premièrs ou deuxième 
;%Morp.add : le nick de l'adverssaire
;%Morp.R : contient $true si l'autre veux recommencer

alias Morpion.init {
  ;Désinne le cadrillage 

  if (!$window(@Morp))  window -apCB @Morp 
  else drawrect -f @Morp 15 15 1 1 1000 1000
  drawfill @Morp 15 15 1 1

  drawrect @Morp 1 2 20 20 100 100
  drawrect @Morp 1 2 20 20 200 200
  drawrect @Morp 1 2 20 20 300 300

  drawrect @Morp 1 2 320 320 -100 -100
  drawrect @Morp 1 2 320 320 -200 -200
  drawrect @Morp 1 2 320 320 -300 -300

  ;affiche le score
  if (!%Morp.S) set %Morp.S 0
  if (%Morp.S > 0) {
    drawtext @Morp 1 Arial 15 340 20 $me : %Morp.S
    drawtext @Morp 1 Arial 15 340 40 %Morp.Add : - $+ %Morp.S
  }
  else {
    drawtext @Morp 1 Arial 15 340 20 $me : %Morp.S
    drawtext @Morp 1 Arial 15 340 40 %Morp.Add : $abs(%Morp.S)

  }

  set %Morp.G 4 4 4 4 4 4 4 4 4
}

Alias Morpion.add {
  ;Rajoute $2 ( X ou O ) à la case corepsondante ( numéroté de 1 à 9 )

  if ($1 == 1) drawtext @Morp 1 Arial 100 35 15 $2
  elseif ($1 == 2) drawtext @Morp 1 Arial 100 135 15 $2
  elseif ($1 == 3) drawtext @Morp 1 Arial 100 235 15 $2 

  elseif ($1 == 4) drawtext @Morp 1 Arial 100 35 115 $2
  elseif ($1 == 5) drawtext @Morp 1 Arial 100 135 115 $2
  elseif ($1 == 6) drawtext @Morp 1 Arial 100 235 115 $2

  elseif ($1 == 7) drawtext @Morp 1 Arial 100 35 215 $2
  elseif ($1 == 8) drawtext @Morp 1 Arial 100 135 215 $2
  elseif ($1 == 9) drawtext @Morp 1 Arial 100 235 215 $2

}

;Ceci fait $1 + $2 + $3 des case corespondante cf le début 
alias Morpion.calc return $calc($gettok(%Morp.G,$1,32) + $gettok(%Morp.G,$2,32) + $gettok(%Morp.G,$3,32))

alias Morpion.win {
  ;Quand la partie est fini
  set %morp.J $false
  if (%Morp.Me == $1) { drawtext @Morp 1 Arial 15 340 60 tu as gagné | inc %Morp.S }
  elseif ($1 == 2) drawtext @Morp 1 Arial 15 340 60 Match null 
  else { drawtext @Morp 1 Arial 15 340 60 tu as perdu | dec %Morp.S }

  ;Pour recommencer
  if ($?!="voulez vous recommencez ?") {
    if (%Morp.R) Morpion.New.Party
    else {
      set %Morp.R $true
      .notice %Morp.Add Morp.new.Party.OK
      ;On envoit à la personne qu'on est ok     
    }
  } 
  else .notice %Morp.add Morp.New.Party.Non
  ;Sinon on dit que non on veux pas
}

Alias Morpion.New.Party {
  ;Initanalise une nouvelle partie

  if (%Morp.C) set %Morp.C $false
  else set %Morp.C $true
  set %Morp.J %Morp.C
  Morpion.init
}
alias Morpion.look {
  ;ceci vas regarder si on a perdu ou gagné
  if ($Morpion.calc(1,2,3) == 0) Morpion.win 1 2 3
  elseif ($Morpion.calc(1,2,3) == 3) Morpion.Win 1 1 2 3
  elseif ($Morpion.calc(4,5,6) == 0) Morpion.Win 0 4 5 6
  elseif ($Morpion.calc(4,5,6) == 3) Morpion.Win 1 4 5 6
  elseif ($Morpion.calc(7,8,9) == 0) Morpion.Win 0 4 8 9
  elseif ($Morpion.calc(7,8,9) == 3) Morpion.Win 1 7 8 9

  elseif ($Morpion.calc(1,4,7) == 0) Morpion.Win 0 1 4 7
  elseif ($Morpion.calc(1,4,7) == 3) Morpion.Win 1 1 4 7
  elseif ($Morpion.calc(2,5,8) == 0) Morpion.Win 0 2 5 8
  elseif ($Morpion.calc(2,5,8) == 3) Morpion.Win 1 2 5 8
  elseif ($Morpion.calc(3,6,9) == 0) Morpion.Win 0 3 6 9
  elseif ($Morpion.calc(3,6,9) == 3) Morpion.Win 1 3 6 9

  elseif ($Morpion.calc(1,5,9) == 0) Morpion.Win 0 1 5 9
  elseif ($Morpion.calc(1,5,9) == 3) Morpion.Win 1 1 5 9
  elseif ($Morpion.calc(3,5,7) == 0) Morpion.Win 0 3 5 7
  elseif ($Morpion.calc(3,5,7) == 3) Morpion.Win 1 3 5 7
  elseif (4 !isin %Morp.g) Morpion.win 2
}

menu @Morp {
  dclick:{
    ;Quand on double clicque sur une case on met le n° de la case dans une var
    if ($inrect($mouse.x,$mouse.y,20,20,100,100)) var %Morp.temp 1
    elseif ($inrect($mouse.x,$mouse.y,120,20,100,100)) var %Morp.temp 2
    elseif ($inrect($mouse.x,$mouse.y,220,20,100,100)) var %Morp.temp 3

    elseif ($inrect($mouse.x,$mouse.y,20,120,100,100)) var %Morp.temp 4
    elseif ($inrect($mouse.x,$mouse.y,120,120,100,100)) var %Morp.temp 5
    elseif ($inrect($mouse.x,$mouse.y,220,120,100,100)) var %Morp.temp 6

    elseif ($inrect($mouse.x,$mouse.y,20,220,100,100)) var %Morp.temp 7
    elseif ($inrect($mouse.x,$mouse.y,120,220,100,100)) var %Morp.temp 8
    elseif ($inrect($mouse.x,$mouse.y,220,220,100,100)) var %Morp.temp 9
    if (($gettok(%Morp.G,%Morp.temp,32) == 4) && (%Morp.J) ) {  
      ;On l'ajoute %Morp.G  
      set %Morp.G $puttok(%Morp.G,%Morp.me,%Morp.temp,32)
      ;On la désinne    
      Morpion.add %Morp.temp X
      .notice %Morp.Add Morp.New %Morp.G %Morp.temp 
      ;On regarde si qqn à gagné    
      Morpion.look 
      set %Morp.J $false
    }
  }
}

;Quand on reçoit ou à cliquer l'autre
on ^1:notice:Morp.New ? *:?:{
  if ($nick == %Morp.Add) {
    ;Donc là par exemple : 
    ;$1- = Morp.New 1 0 0 4 1 1 0 0 0 5
    ;Avec 5 qui représente la case qui a changé 
    ;On remaplce dans son %Morp.G la case change
    set %Morp.g $puttok(%Morp.G,$iif(%Morp.me == 0,1,0),$11,32)

    ;Si on a pas le même %Morp.G que l'adverssaire alors une erreur 
    if (%Morp.g != $2-10) {
      .Notice %Morp.add Morp.Error
      drawtext @Morp 1 Arial 15 340 80 Une erreur est intervenu on recommence la parti
      .timer 1 0.1 Morpion.win 2
    } 

    ;Si tout vas bien on affiche, on regarde si qqn à gagner puis on dit que c à soit de jouer
    else {
      Morpion.add $11 O
      .timer 1 0 Morpion.look
      set %Morp.J $true
    } 
    haltdef
  }
}

;Quand qqn vous demande si il veux jouer avec vous ( il veux pas de $?! dans remote )
alias Morp.New.Play { 
  if ($window(@morp)) .notice $1 Je suis en train de jouer 

  elseif ($?!="Voulez vous jouer avec $1 ?") { 
    .notice $1 Morp.Play.OK
    set %Morp.me 1 
    set %Morp.J $false
    set %Morp.C $false
    set %Morp.add $1 
    Morpion.init 
  }
  elseif ($?!="Voulez vous ignoré $1 ?") { ignore -nu1200 $address($1,2) | .notice $1 tu es ignoré }
  else .notice $1 Je ne veux pas jouer avec toi
}

;Quand qqn nous dit qu'il est ok pour une partie. Si on est déjà ok on inianalise sinon on lui dit
on ^1:Notice:Morp.new.Party.OK:?:{
  if ($nick == %Morp.Add) {
    if (%Morp.R) .timer 1 1 Morpion.New.Party
    else {
      set %Morp.R $true
      .notice %Morp.Add Morp.new.Party.OK
    }
  }
  halt
}

;Quand ya une error on le dit à l'autre pour que tous recommence en même temps
on ^1:Morp.Error:?:{
  if ($nick == %Morp.Add) {
    drawtext @Morp 1 Arial 15 340 80 Une erreur est intervenu on recommence la parti
    Morpion.win 2
    halt
  }
}

;Si l'autre est pas ok pour un new party
on ^1:notice:Morp.New.Party.Non:?:{
  if ($nick == %Morp.add) drawtext @Morp 1 Arial 15 340 100 votre adversaire veux arrêter la partie
  halt
}

;Si qqn demande un jeux
on ^1:Notice:Morp.Play:?:{ .timer 1 1 Morp.New.Play $nick | halt }

;On reçoit cela quand on a proposer une partie et que la personne est ok
on ^1:Notice:Morp.Play.ok:?:{  
  if ($nick == %Morp.Nadd) {
    set %Morp.me 0
    set %Morp.J $true
    set %Morp.C $true
    set %Morp.add $nick
    unset %Morp.Nadd
    morpion.init
    halt
  }
}

;Le menu
menu Nicklist {
  Proposer un morpion:set %Morp.Nadd $1 | .notice $1 Morp.Play
}

;Quand on ferme la fenetre on vire toutes les var
on 1:close:@Morp:unset %Morp.*

Conclusion :


J'éssairais de mettre à jours le jeux si vous me le demandez

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.