PureBasic

Forums PureBasic
Nous sommes le Dim 08/Déc/2019 5:55

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 11 messages ] 
Auteur Message
 Sujet du message: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Mer 30/Aoû/2017 15:14 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
Un peut de temps à tuer... Quoi de mieux que de sortir PB pour faire n'importe quoi avec !
(Bon... pour les IA j'ai eu la flemme donc Inky, Pinky et Clyde sont exactement les mêmes)
Code:
EnableExplicit
If CreateFile(0,"Map")
  WriteStringN(0,"28")
  WriteStringN(0,"29")
  WriteStringN(0,"1111111111111111111111111111")
  WriteStringN(0,"1333333333333113333333333331")
  WriteStringN(0,"1311113111113113111113111131")
  WriteStringN(0,"1511113111113113111113111151")
  WriteStringN(0,"1311113111113113111113111131")
  WriteStringN(0,"1333333333333333333333333331")
  WriteStringN(0,"1311113113111111113113111131")
  WriteStringN(0,"1311113113111111113113111131")
  WriteStringN(0,"1333333113333113333113333331")
  WriteStringN(0,"1111113111112112111113111111")
  WriteStringN(0,"2222213111112112111113122222")
  WriteStringN(0,"2222213112222222222113122222")
  WriteStringN(0,"1111113112111221112113111111")
  WriteStringN(0,"2222223222122222212223222222")
  WriteStringN(0,"1111113112111111112113111111")
  WriteStringN(0,"2222213112222222222113122222")
  WriteStringN(0,"2222213112111111112113122222")
  WriteStringN(0,"1111113112111111112113111111")
  WriteStringN(0,"1333333333333113333333333331")
  WriteStringN(0,"1311113111113113111113111131")
  WriteStringN(0,"1311113111113113111113111131")
  WriteStringN(0,"1533113333333433333333113351")
  WriteStringN(0,"1113113113111111113113113111")
  WriteStringN(0,"1113113113111111113113113111")
  WriteStringN(0,"1333333113333113333113333331")
  WriteStringN(0,"1311111111113113111111111131")
  WriteStringN(0,"1311111111113113111111111131")
  WriteStringN(0,"1333333333333333333333333331")
  WriteStringN(0,"1111111111111111111111111111")
  WriteStringN(0,"14")
  WriteStringN(0,"12")
  WriteStringN(0,"12")
  WriteStringN(0,"14")
  WriteStringN(0,"14")
  WriteStringN(0,"14")
  WriteStringN(0,"16")
  WriteString(0,"14")
  CloseFile(0)
Else
  End
EndIf
#Wall = 1
#Empty = 2
#Blob = 3
#Player = 4
#PacGum = 5
#GameWait = 1
#GamePlay = 2
#GameDeath = 3
#GameWin = 4
Structure fantome
  x.a
  y.a
  xold.a
  yold.a
  Startx.a
  Starty.a
  lastdir.a
  timer.l
  nextdirection.i
  state.a
EndStructure
Declare draw()
Declare LoadMap(file$)
Declare Events()
Declare Death()
Declare CheckCrossRoad(*ghost)
Declare CanGo(Direction,*ghost)
Declare Win()
Global Dim world(1,1), Dim worldcopy(1,1)
Global score,x,y,startx,starty,LastDir,Dir,timer,Blinky.fantome,Pinky.fantome,Inky.fantome,Clyde.fantome, game = #GameWait,width,heigh, blobs, totalblobs, Pacgum, GumTime
LoadMap("Map")
OpenConsole("MacMan !!!!")
EnableGraphicalConsole(1)
draw()
timer = ElapsedMilliseconds()
Repeat
  Inkey()
  Select  RawKey()
    Case 0
      Delay(10)
    Case 37 ; gauche
      Dir = 1
    Case 38 ; haut
      Dir = 2
    Case 39 ; droite
      Dir = 3
    Case 40 ; bas
      Dir = 4
  EndSelect
  Select game
    Case #GameWait
      If Dir : game = #GamePlay : EndIf
    Case #GamePlay
      Events()
    Case #GameDeath
      Death()
    Case #GameWin
      Win()
  EndSelect
ForEver
Procedure draw()
  Protected loopX,loopY
  ConsoleColor(7,0)
  Print("SCORE : "+Str(score))
  For loopX = 0 To width
    For loopY = 0 To heigh
      ConsoleLocate(loopX,loopY+4)
      Select world(loopX,loopY)
        Case #Blob
          ConsoleColor(7,0)
          Print(".")
        Case #Wall
          ConsoleColor(1,0)
          Print("O")
        Case #Player
          ConsoleColor(14,0)
          Print("C")
        Case #PacGum
          ConsoleColor(7,0)
          Print("o")
      EndSelect
    Next loopY
  Next loopX
  ConsoleLocate(Blinky\x,Blinky\y+4) : ConsoleColor(4,0) : Print("M")
  ConsoleLocate(Pinky\x,Pinky\y+4) : ConsoleColor(5,0) : Print("M")
  ConsoleLocate(Inky\x,Inky\y+4) : ConsoleColor(9,0) : Print("M")
  ConsoleLocate(Clyde\x,Clyde\y+4) : ConsoleColor(6,0) : Print("M")
EndProcedure
Procedure LoadMap(file$)
  Protected loopX, loopY
  blobs = 0
  ReadFile(0,file$)
  width = Val(ReadString(0))
  heigh = Val(ReadString(0))
  Dim world(width,heigh)  : Dim worldcopy(width,heigh)
  For loopY = 1 To heigh
    For loopX = 1 To width
      world(loopX,loopY) = Val(ReadString(0,#PB_Ascii,1))
      If world(loopX,loopY) = #Blob : blobs + 1 : EndIf
      If world(loopX,loopY) = #Player : x = loopX : y = loopY : EndIf
    Next loopX
    ReadString(0)
  Next loopY
  startx = x : starty = y
  totalblobs = blobs
  CopyArray(world(),worldcopy())
  Blinky\Startx = Val(ReadString(0)) : Blinky\Starty = Val(ReadString(0)) : Blinky\x = Blinky\Startx : Blinky\y = Blinky\Starty : Blinky\xold = Blinky\x : Blinky\yold = Blinky\y
  Pinky\Startx = Val(ReadString(0)) : Pinky\Starty = Val(ReadString(0)) : Pinky\x = Pinky\Startx : Pinky\y = Pinky\Starty : Pinky\xold = Pinky\x : Pinky\yold = Pinky\y
  Inky\Startx = Val(ReadString(0)) : Inky\Starty = Val(ReadString(0)) : Inky\x = Inky\Startx : Inky\y = Inky\Starty : Inky\xold = Inky\x : Inky\yold = Inky\y
  Clyde\Startx = Val(ReadString(0)) : Clyde\Starty = Val(ReadString(0)) : Clyde\x = Clyde\Startx : Clyde\y = Clyde\Starty : Clyde\xold = Clyde\x : Clyde\yold = Clyde\y
  CloseFile(0)
  DeleteFile(file$)
EndProcedure
Procedure Death()
  ClearConsole()
  CopyArray(worldcopy(),world())
  x = startx : y = starty : blobs = totalblobs
  Blinky\x = Blinky\Startx : Blinky\y = Blinky\Starty : Blinky\xold = Blinky\x : Blinky\yold = Blinky\y
  Pinky\x = Pinky\Startx : Pinky\y = Pinky\Starty : Pinky\xold = Pinky\x : Pinky\yold = Pinky\y
  Inky\x = Inky\Startx : Inky\y = Inky\Starty : Inky\xold = Inky\x : Inky\yold = Inky\y
  Clyde\x = Clyde\Startx : Clyde\y = Clyde\Starty : Clyde\xold = Clyde\x : Clyde\yold = Clyde\y
  draw()
  Blinky\state = 0 : Pinky\state = 0 : Inky\state = 0 : Clyde\state = 0
  Blinky\lastdir = 0 : Pinky\lastdir = 0 : Inky\lastdir = 0 : Clyde\lastdir = 0
  LastDir = 0
  Dir = 0
  score = 0
  game = #GameWait
EndProcedure
Procedure Win()
  ConsoleLocate(12,20)
  ConsoleColor(12,0)
  Print("YOU WIN")
  Delay(2000)
  ClearConsole()
  CopyArray(worldcopy(),world())
  x = startx : y = starty : blobs = totalblobs
  Blinky\x = Blinky\Startx : Blinky\y = Blinky\Starty : Blinky\xold = Blinky\x : Blinky\yold = Blinky\y
  Pinky\x = Pinky\Startx : Pinky\y = Pinky\Starty : Pinky\xold = Pinky\x : Pinky\yold = Pinky\y
  Inky\x = Inky\Startx : Inky\y = Inky\Starty : Inky\xold = Inky\x : Inky\yold = Inky\y
  Clyde\x = Clyde\Startx : Clyde\y = Clyde\Starty : Clyde\xold = Clyde\x : Clyde\yold = Clyde\y
  Blinky\state = 0 : Pinky\state = 0 : Inky\state = 0 : Clyde\state = 0
  Blinky\lastdir = 0 : Pinky\lastdir = 0 : Inky\lastdir = 0 : Clyde\lastdir = 0
  Pacgum = 0
  GumTime = 0
  draw()
  LastDir = 0
  Dir = 0
  game = #GameWait
EndProcedure
Procedure Events()
  Static GumCol
  Protected result, time = ElapsedMilliseconds(), DispBlinky, DispPinky, DispInky, DispClyde
  If time - timer >= 100 ; Controle du joueur
    Select Dir
      Case 1
        If Not world(x-1,y) = #Wall : LastDir = 1 : EndIf
      Case 2
        If Not world(x,y-1) = #Wall : LastDir = 2 : EndIf
      Case 3
        If x < width
          If Not world(x+1,y) = #Wall : LastDir = 3 : EndIf
        EndIf
      Case 4
        If y < heigh
          If Not world(x,y+1) = #Wall : LastDir = 4 : EndIf
        EndIf
    EndSelect
    Select LastDir ;{ Déplacement
      Case 1 ;gauche
        If x-1 =0 : ConsoleLocate(x,y+4) : Print(" ") : x = width+1 : EndIf
        If Not world(x-1,y) = #Wall
          If world(x-1,y) = #Blob : score + 10 : blobs - 1 : world(x-1,y) = #Empty : EndIf
          If world(x-1,y) = #PacGum : GumCol = 0 : GumTime = ElapsedMilliseconds() : Pacgum = ElapsedMilliseconds() : If Not Blinky\state = 3 : Blinky\timer = 0 : Blinky\lastdir = 0 : Blinky\state = 2 : EndIf : Pinky\timer = 0 : If Not Pinky\state = 3 : Pinky\lastdir = 0 :  Pinky\state = 2 : EndIf : If Not Inky\state = 3 : Inky\timer = 0 : Inky\lastdir = 0 :  Inky\state = 2 : EndIf : If Not Clyde\state = 3 : Clyde\timer = 0 : Clyde\lastdir = 0 :   Clyde\state = 2 : EndIf : world(x-1,y) = #Empty : EndIf
          ConsoleLocate(x,y+4)
          Print(" ")
          x-1
          ConsoleLocate(x,y+4)
          ConsoleColor(14,0)
          Print("C")
        EndIf
      Case 2 ;haut
        If y-1 =0 : ConsoleLocate(x,y+4) : Print(" ") : y = heigh : EndIf
        If Not world(x,y-1) = #Wall
          If world(x,y-1) = #Blob : score + 10 : blobs - 1 : world(x,y-1) = #Empty : EndIf
          If world(x,y-1) = #PacGum : GumCol = 0 : GumTime = ElapsedMilliseconds() : Pacgum = ElapsedMilliseconds() : If Not Blinky\state = 3 : Blinky\timer = 0 : Blinky\lastdir = 0 : Blinky\state = 2 : EndIf : Pinky\timer = 0 : If Not Pinky\state = 3 : Pinky\lastdir = 0 :  Pinky\state = 2 : EndIf : If Not Inky\state = 3 : Inky\timer = 0 : Inky\lastdir = 0 :  Inky\state = 2 : EndIf : If Not Clyde\state = 3 : Clyde\timer = 0 : Clyde\lastdir = 0 :   Clyde\state = 2 : EndIf : world(x,y-1) = #Empty : EndIf
          ConsoleLocate(x,y+4)
          Print(" ")
          y-1
          ConsoleLocate(x,y+4)
          ConsoleColor(14,0)
          Print("C")
        EndIf
      Case 3 ;droite
        If x = width : ConsoleLocate(x,y+4) : Print(" ") : x = 0 : EndIf
        If Not world(x+1,y) = #Wall
          If world(x+1,y) = #Blob : score + 10 : blobs - 1 : world(x+1,y) = #Empty : EndIf
          If world(x+1,y) = #PacGum : GumCol = 0 : GumTime = ElapsedMilliseconds() : Pacgum = ElapsedMilliseconds() : If Not Blinky\state = 3 : Blinky\timer = 0 : Blinky\lastdir = 0 : Blinky\state = 2 : EndIf : Pinky\timer = 0 : If Not Pinky\state = 3 : Pinky\lastdir = 0 :  Pinky\state = 2 : EndIf : If Not Inky\state = 3 : Inky\timer = 0 : Inky\lastdir = 0 :  Inky\state = 2 : EndIf : If Not Clyde\state = 3 : Clyde\timer = 0 : Clyde\lastdir = 0 :   Clyde\state = 2 : EndIf : world(x+1,y) = #Empty : EndIf
          ConsoleLocate(x,y+4)
          Print(" ")
          x+1
          ConsoleLocate(x,y+4)
          ConsoleColor(14,0)
          Print("C")
        EndIf
      Case 4 ;bas
        If y = heigh : ConsoleLocate(x,y+4) : Print(" ") : y = 2 : EndIf
        If Not world(x,y+1) = #Wall
          If world(x,y+1) = #Blob : score + 10 : blobs - 1 : world(x,y+1) = #Empty : EndIf
          If world(x,y+1) = #PacGum : GumCol = 0 : GumTime = ElapsedMilliseconds() : Pacgum = ElapsedMilliseconds() : If Not Blinky\state = 3 : Blinky\timer = 0 : Blinky\lastdir = 0 : Blinky\state = 2 : EndIf : Pinky\timer = 0 : If Not Pinky\state = 3 : Pinky\lastdir = 0 :  Pinky\state = 2 : EndIf : If Not Inky\state = 3 : Inky\timer = 0 : Inky\lastdir = 0 :  Inky\state = 2 : EndIf : If Not Clyde\state = 3 : Clyde\timer = 0 : Clyde\lastdir = 0 :   Clyde\state = 2 : EndIf : world(x,y+1) = #Empty : EndIf
          ConsoleLocate(x,y+4)
          Print(" ")
          y+1
          ConsoleLocate(x,y+4)
          ConsoleColor(14,0)
          Print("C")
        EndIf ;}
    EndSelect
    timer = ElapsedMilliseconds()
    ConsoleLocate(0,0)
    ConsoleColor(7,0)
    Print("SCORE : "+Str(score))
    If blobs = 0
      game = #GameWin
    EndIf
  EndIf
 
  If LastDir
    ;{ AI Blinky "Suit Mac-Man comme son ombre"
    If Blinky\state < 2 And time - Blinky\timer => 130
      DispBlinky = 1
      If Abs(Blinky\x - x) < 7 Or Abs(Blinky\y - y) < 7: Blinky\state = 1 : Else : Blinky\state = 0 : EndIf
      Blinky\xold = Blinky\x : Blinky\yold = Blinky\y
      If CheckCrossRoad(@Blinky)
        Blinky\nextdirection = 0
        If Blinky\state = 0 ; Patrouille
          If Blinky\x < width/2
            If CanGo(3,@Blinky)
              Blinky\x +1 : Blinky\lastdir = 3 : Blinky\nextdirection = 1
            EndIf
          EndIf
          If Blinky\nextdirection = 0 And Blinky\y < heigh/2
            If CanGo(4,@Blinky)
              Blinky\y +1 : Blinky\lastdir = 4 : Blinky\nextdirection = 1
            EndIf
          EndIf
          If Blinky\nextdirection = 0
            result = 0
            If CanGo(1,@Blinky) : result + 1 : EndIf
            If CanGo(2,@Blinky) : result + 1 : EndIf
            If CanGo(3,@Blinky) : result + 1 : EndIf
            If CanGo(4,@Blinky) : result + 1 : EndIf
            If result
              Repeat
                result = Random(4,1)
                If CanGo(result,@Blinky)
                  Blinky\lastdir = result
                  Break
                EndIf
              ForEver
              If Blinky\lastdir = 1 : Blinky\x - 1
              ElseIf Blinky\lastdir = 2 : Blinky\y - 1
              ElseIf Blinky\lastdir = 3 : Blinky\x + 1
              ElseIf Blinky\lastdir = 4 : Blinky\y + 1 : EndIf
            Else
              Blinky\lastdir = 0
            EndIf
          EndIf
        ElseIf Blinky\state = 1 ;En chasse
          If Blinky\x < x
            If CanGo(3,@Blinky)
              Blinky\x + 1 : Blinky\nextdirection = 1 : Blinky\lastdir = 3
            EndIf
          ElseIf Blinky\x > x
            If CanGo(1,@Blinky)
              Blinky\x - 1 : Blinky\nextdirection = 1 : Blinky\lastdir = 1
            EndIf
          EndIf
          If Blinky\nextdirection = 0
            If Blinky\y < y
              If CanGo(4,@Blinky)
                Blinky\y+1 : Blinky\nextdirection = 1 : Blinky\lastdir = 4
              EndIf
            ElseIf Blinky\y > y
              If CanGo(2,@Blinky)
                Blinky\y-1 : Blinky\nextdirection = 1 : Blinky\lastdir = 2
              EndIf
            EndIf
          EndIf
          If Blinky\nextdirection = 0
            Repeat
              result = Random(4,1)
              If CanGo(result,@Blinky)
                Blinky\lastdir = result
                Break
              EndIf
            ForEver
            If Blinky\lastdir = 1 : Blinky\x - 1
            ElseIf Blinky\lastdir = 2 : Blinky\y - 1
            ElseIf Blinky\lastdir = 3 : Blinky\x + 1
            ElseIf Blinky\lastdir = 4 : Blinky\y + 1 : EndIf
          EndIf
        EndIf
      Else ;{ Continue sa route
        Select Blinky\lastdir
          Case 1
            If CanGo(1,@Blinky)
              Blinky\x - 1
            Else
              Blinky\lastdir=0
            EndIf
          Case 2
            If CanGo(2,@Blinky)
              Blinky\y -1
            Else
              Blinky\lastdir = 0
            EndIf
          Case 3
            If CanGo(3,@Blinky)
              Blinky\x +1
            Else
              Blinky\lastdir = 0
            EndIf
          Case 4
            If CanGo(4,@Blinky)
              Blinky\y +1
            Else
              Blinky\lastdir = 0
            EndIf
        EndSelect ;}
      EndIf
      Blinky\timer = time
    ElseIf  Blinky\state = 2
      If ElapsedMilliseconds() - Blinky\timer >= 150
        DispBlinky = 1
        Blinky\xold = Blinky\x : Blinky\yold = Blinky\y
        If CheckCrossRoad(@Blinky)
          Blinky\nextdirection = 0
          If Blinky\x > x
            If CanGo(3,@Blinky)
              Blinky\x + 1 : Blinky\nextdirection = 1 : Blinky\lastdir = 3
            EndIf
          Else
            If CanGo(1,@Blinky)
              Blinky\x - 1 : Blinky\nextdirection = 1 : Blinky\lastdir = 1
            EndIf
          EndIf
          If Blinky\nextdirection = 0
            If Blinky\y > y
              If CanGo(4,@Blinky)
                Blinky\y + 1 : Blinky\nextdirection = 1 : Blinky\lastdir = 4
              EndIf
            Else
              If CanGo(2,@Blinky)
                Blinky\y - 1 : Blinky\nextdirection = 1 : Blinky\lastdir = 2
              EndIf
            EndIf
          EndIf
          If Blinky\nextdirection = 0
            Repeat
              result = Random(4,1)
              If CanGo(result,@Blinky)
                Blinky\lastdir = result
                Break
              EndIf
            ForEver
            If Blinky\lastdir = 1 : Blinky\x - 1
            ElseIf Blinky\lastdir = 2 : Blinky\y - 1
            ElseIf Blinky\lastdir = 3 : Blinky\x + 1
            ElseIf Blinky\lastdir = 4 : Blinky\y + 1 : EndIf
          EndIf
        Else ;{ Continue sa route
          Select Blinky\lastdir
            Case 1
              If CanGo(1,@Blinky)
                Blinky\x - 1
              Else
                Blinky\lastdir=0
              EndIf
            Case 2
              If CanGo(2,@Blinky)
                Blinky\y -1
              Else
                Blinky\lastdir = 0
              EndIf
            Case 3
              If CanGo(3,@Blinky)
                Blinky\x +1
              Else
                Blinky\lastdir = 0
              EndIf
            Case 4
              If CanGo(4,@Blinky)
                Blinky\y +1
              Else
                Blinky\lastdir = 0
              EndIf
          EndSelect ;}
        EndIf
        Blinky\timer = ElapsedMilliseconds()
      EndIf
    Else
      If ElapsedMilliseconds() - Blinky\timer >= 2000
        Blinky\x = Blinky\Startx : Blinky\y = Blinky\Starty : Blinky\xold = Blinky\Startx : Blinky\yold = Blinky\Starty
        Blinky\state = 0 : Blinky\timer = 0
      EndIf
    EndIf ;}
    ;{ AI Pinky "Vise l'endroit où va se trouver Mac-Man"
    If Pinky\state < 2 And time - Pinky\timer >= 130
      DispPinky = 1
      Pinky\xold = Pinky\x : Pinky\yold = Pinky\y
      If CheckCrossRoad(@Pinky)
        Repeat
          result = Random(4,1)
          If CanGo(result,@Pinky)
            Pinky\lastdir = result
            Break
          EndIf
        ForEver
        If Pinky\lastdir = 1 : Pinky\x - 1
        ElseIf Pinky\lastdir = 2 : Pinky\y - 1
        ElseIf Pinky\lastdir = 3 : Pinky\x + 1
        ElseIf Pinky\lastdir = 4 : Pinky\y + 1 : EndIf
      Else ;{ Continue sa route
        Select Pinky\lastdir
          Case 1
            If CanGo(1,@Pinky)
              Pinky\x - 1
            Else
              Pinky\lastdir=0
            EndIf
          Case 2
            If CanGo(2,@Pinky)
              Pinky\y -1
            Else
              Pinky\lastdir = 0
            EndIf
          Case 3
            If CanGo(3,@Pinky)
              Pinky\x +1
            Else
              Pinky\lastdir = 0
            EndIf
          Case 4
            If CanGo(4,@Pinky)
              Pinky\y +1
            Else
              Pinky\lastdir = 0
            EndIf
        EndSelect ;}
      EndIf
      Pinky\timer = time
    ElseIf  Pinky\state = 2
      If ElapsedMilliseconds() - Pinky\timer >= 150
        DispPinky = 1
        Pinky\xold = Pinky\x : Pinky\yold = Pinky\y
        If CheckCrossRoad(@Pinky)
          Pinky\nextdirection = 0
          If Pinky\x > x
            If CanGo(3,@Pinky)
              Pinky\x + 1 : Pinky\nextdirection = 1 : Pinky\lastdir = 3
            EndIf
          Else
            If CanGo(1,@Pinky)
              Pinky\x - 1 : Pinky\nextdirection = 1 : Pinky\lastdir = 1
            EndIf
          EndIf
          If Pinky\nextdirection = 0
            If Pinky\y > y
              If CanGo(4,@Pinky)
                Pinky\y + 1 : Pinky\nextdirection = 1 : Pinky\lastdir = 4
              EndIf
            Else
              If CanGo(2,@Pinky)
                Pinky\y - 1 : Pinky\nextdirection = 1 : Pinky\lastdir = 2
              EndIf
            EndIf
          EndIf
          If Pinky\nextdirection = 0
            Repeat
              result = Random(4,1)
              If CanGo(result,@Pinky)
                Pinky\lastdir = result
                Break
              EndIf
            ForEver
            If Pinky\lastdir = 1 : Pinky\x - 1
            ElseIf Pinky\lastdir = 2 : Pinky\y - 1
            ElseIf Pinky\lastdir = 3 : Pinky\x + 1
            ElseIf Pinky\lastdir = 4 : Pinky\y + 1 : EndIf
          EndIf
        Else ;{ Continue sa route
          Select Pinky\lastdir
            Case 1
              If CanGo(1,@Pinky)
                Pinky\x - 1
              Else
                Pinky\lastdir=0
              EndIf
            Case 2
              If CanGo(2,@Pinky)
                Pinky\y -1
              Else
                Pinky\lastdir = 0
              EndIf
            Case 3
              If CanGo(3,@Pinky)
                Pinky\x +1
              Else
                Pinky\lastdir = 0
              EndIf
            Case 4
              If CanGo(4,@Pinky)
                Pinky\y +1
              Else
                Pinky\lastdir = 0
              EndIf
          EndSelect ;}
        EndIf
        Pinky\timer = ElapsedMilliseconds()
      EndIf
    Else
      If ElapsedMilliseconds() - Pinky\timer >= 2000
        Pinky\x = Pinky\Startx : Pinky\y = Pinky\Starty : Pinky\xold = Pinky\Startx : Pinky\yold = Pinky\Starty
        Pinky\state = 0 : Pinky\timer = 0
      EndIf
    EndIf;}
    ;{ AI Inky "De temps en temps, il part dans la direction opposée à Mac-Man"
    If Inky\state < 2 And time - Inky\timer >= 130
      DispInky = 1
      Inky\xold = Inky\x : Inky\yold = Inky\y
      If CheckCrossRoad(@Inky)
        Repeat
          result = Random(4,1)
          If CanGo(result,@Inky)
            Inky\lastdir = result
            Break
          EndIf
        ForEver
        If Inky\lastdir = 1 : Inky\x - 1
        ElseIf Inky\lastdir = 2 : Inky\y - 1
        ElseIf Inky\lastdir = 3 : Inky\x + 1
        ElseIf Inky\lastdir = 4 : Inky\y + 1 : EndIf
      Else ;{ Continue sa route
        Select Inky\lastdir
          Case 1
            If CanGo(1,@Inky)
              Inky\x - 1
            Else
              Inky\lastdir=0
            EndIf
          Case 2
            If CanGo(2,@Inky)
              Inky\y -1
            Else
              Inky\lastdir = 0
            EndIf
          Case 3
            If CanGo(3,@Inky)
              Inky\x +1
            Else
              Inky\lastdir = 0
            EndIf
          Case 4
            If CanGo(4,@Inky)
              Inky\y +1
            Else
              Inky\lastdir = 0
            EndIf
        EndSelect ;}
      EndIf
      Inky\timer = time
    ElseIf Inky\state = 2
      If ElapsedMilliseconds() - Inky\timer >= 150
        DispInky = 1
        Inky\xold = Inky\x : Inky\yold = Inky\y
        If CheckCrossRoad(@Inky)
          Inky\nextdirection = 0
          If Inky\x > x
            If CanGo(3,@Inky)
              Inky\x + 1 : Inky\nextdirection = 1 : Inky\lastdir = 3
            EndIf
          Else
            If CanGo(1,@Inky)
              Inky\x - 1 : Inky\nextdirection = 1 : Inky\lastdir = 1
            EndIf
          EndIf
          If Inky\nextdirection = 0
            If Inky\y > y
              If CanGo(4,@Inky)
                Inky\y + 1 : Inky\nextdirection = 1 : Inky\lastdir = 4
              EndIf
            Else
              If CanGo(2,@Inky)
                Inky\y - 1 : Inky\nextdirection = 1 : Inky\lastdir = 2
              EndIf
            EndIf
          EndIf
          If Inky\nextdirection = 0
            Repeat
              result = Random(4,1)
              If CanGo(result,@Inky)
                Inky\lastdir = result
                Break
              EndIf
            ForEver
            If Inky\lastdir = 1 : Inky\x - 1
            ElseIf Inky\lastdir = 2 : Inky\y - 1
            ElseIf Inky\lastdir = 3 : Inky\x + 1
            ElseIf Inky\lastdir = 4 : Inky\y + 1 : EndIf
          EndIf
        Else ;{ Continue sa route
          Select Inky\lastdir
            Case 1
              If CanGo(1,@Inky)
                Inky\x - 1
              Else
                Inky\lastdir=0
              EndIf
            Case 2
              If CanGo(2,@Inky)
                Inky\y -1
              Else
                Inky\lastdir = 0
              EndIf
            Case 3
              If CanGo(3,@Inky)
                Inky\x +1
              Else
                Inky\lastdir = 0
              EndIf
            Case 4
              If CanGo(4,@Inky)
                Inky\y +1
              Else
                Inky\lastdir = 0
              EndIf
          EndSelect ;}
        EndIf
        Inky\timer = ElapsedMilliseconds()
      EndIf
    Else
      If ElapsedMilliseconds() - Inky\timer >= 2000
        Inky\x = Inky\Startx : Inky\y = Inky\Starty : Inky\xold = Inky\Startx : Inky\yold = Inky\Starty
        Inky\state = 0 : Inky\timer = 0
      EndIf
    EndIf;}
    ;{ AI Clyde "De temps en temps, il choisit une direction au hasard"
    If Clyde\state < 2 And time - Clyde\timer >= 130
      DispClyde = 1
      Clyde\xold = Clyde\x : Clyde\yold = Clyde\y
      If CheckCrossRoad(@Clyde)
        Repeat
          result = Random(4,1)
          If CanGo(result,@Clyde)
            Clyde\lastdir = result
            Break
          EndIf
        ForEver
        If Clyde\lastdir = 1 : Clyde\x - 1
        ElseIf Clyde\lastdir = 2 : Clyde\y - 1
        ElseIf Clyde\lastdir = 3 : Clyde\x + 1
        ElseIf Clyde\lastdir = 4 : Clyde\y + 1 : EndIf
      Else ;{ Continue sa route
        Select Clyde\lastdir
          Case 1
            If CanGo(1,@Clyde)
              Clyde\x - 1
            Else
              Clyde\lastdir=0
            EndIf
          Case 2
            If CanGo(2,@Clyde)
              Clyde\y -1
            Else
              Clyde\lastdir = 0
            EndIf
          Case 3
            If CanGo(3,@Clyde)
              Clyde\x +1
            Else
              Clyde\lastdir = 0
            EndIf
          Case 4
            If CanGo(4,@Clyde)
              Clyde\y +1
            Else
              Clyde\lastdir = 0
            EndIf
        EndSelect ;}
      EndIf
      Clyde\timer = time
    ElseIf  Clyde\state = 2
      If ElapsedMilliseconds() - Clyde\timer >= 150
        DispClyde = 1
        Clyde\xold = Clyde\x : Clyde\yold = Clyde\y
        If CheckCrossRoad(@Clyde)
          Clyde\nextdirection = 0
          If Clyde\x > x
            If CanGo(3,@Clyde)
              Clyde\x + 1 : Clyde\nextdirection = 1 : Clyde\lastdir = 3
            EndIf
          Else
            If CanGo(1,@Clyde)
              Clyde\x - 1 : Clyde\nextdirection = 1 : Clyde\lastdir = 1
            EndIf
          EndIf
          If Clyde\nextdirection = 0
            If Clyde\y > y
              If CanGo(4,@Clyde)
                Clyde\y + 1 : Clyde\nextdirection = 1 : Clyde\lastdir = 4
              EndIf
            Else
              If CanGo(2,@Clyde)
                Clyde\y - 1 : Clyde\nextdirection = 1 : Clyde\lastdir = 2
              EndIf
            EndIf
          EndIf
          If Clyde\nextdirection = 0
            Repeat
              result = Random(4,1)
              If CanGo(result,@Clyde)
                Clyde\lastdir = result
                Break
              EndIf
            ForEver
            If Clyde\lastdir = 1 : Clyde\x - 1
            ElseIf Clyde\lastdir = 2 : Clyde\y - 1
            ElseIf Clyde\lastdir = 3 : Clyde\x + 1
            ElseIf Clyde\lastdir = 4 : Clyde\y + 1 : EndIf
          EndIf
        Else ;{ Continue sa route
          Select Clyde\lastdir
            Case 1
              If CanGo(1,@Clyde)
                Clyde\x - 1
              Else
                Clyde\lastdir=0
              EndIf
            Case 2
              If CanGo(2,@Clyde)
                Clyde\y -1
              Else
                Clyde\lastdir = 0
              EndIf
            Case 3
              If CanGo(3,@Clyde)
                Clyde\x +1
              Else
                Clyde\lastdir = 0
              EndIf
            Case 4
              If CanGo(4,@Clyde)
                Clyde\y +1
              Else
                Clyde\lastdir = 0
              EndIf
          EndSelect ;}
        EndIf
        Clyde\timer = ElapsedMilliseconds()
      EndIf
    Else
      If ElapsedMilliseconds() - Clyde\timer >= 2000
        Clyde\x = Clyde\Startx : Clyde\y = Clyde\Starty : Clyde\xold = Clyde\Startx : Clyde\yold = Clyde\Starty
        Clyde\state = 0 : Clyde\timer = 0
      EndIf
    EndIf;}
  EndIf

  ;{ Affichage des fantomes
  If DispBlinky
    If world(Blinky\xold,Blinky\yold) = #Blob
      ConsoleLocate(Blinky\xold,Blinky\yold+4) : ConsoleColor(7,0) : Print(".")
    ElseIf world(Blinky\xold,Blinky\yold) = #PacGum
      ConsoleLocate(Blinky\xold,Blinky\yold+4) : ConsoleColor(7,0) : Print("o")
    Else
      ConsoleLocate(Blinky\xold,Blinky\yold+4) : Print(" ")
    EndIf
    ConsoleLocate(Blinky\x,Blinky\y+4)
    If Pacgum And Blinky\state = 2
      If GumCol = 0 Or GumCol = 2
        ConsoleColor(3,0)
      Else
        ConsoleColor(15,0)
      EndIf
    Else
      ConsoleColor(4,0)
    EndIf
    Print("M")
  EndIf
  If DispPinky
    If world(Pinky\xold,Pinky\yold) = #Blob
      ConsoleLocate(Pinky\xold,Pinky\yold+4) : ConsoleColor(7,0) : Print(".")
    ElseIf world(Pinky\xold,Pinky\yold) = #PacGum
      ConsoleLocate(Pinky\xold,Pinky\yold+4) : ConsoleColor(7,0) : Print("o")
    Else
      ConsoleLocate(Pinky\xold,Pinky\yold+4) : Print(" ")
    EndIf
    ConsoleLocate(Pinky\x,Pinky\y+4)
    If Pacgum And Pinky\state = 2
      If GumCol = 0 Or GumCol = 2
        ConsoleColor(3,0)
      Else
        ConsoleColor(15,0)
      EndIf
    Else
      ConsoleColor(5,0)
    EndIf
    Print("M")
  EndIf
  If DispInky
    If world(Inky\xold,Inky\yold) = #Blob
      ConsoleLocate(Inky\xold,Inky\yold+4) : ConsoleColor(7,0) : Print(".")
    ElseIf world(Inky\xold,Inky\yold) = #PacGum
      ConsoleLocate(Inky\xold,Inky\yold+4) : ConsoleColor(7,0) : Print("o")
    Else
      ConsoleLocate(Inky\xold,inky\yold+4) : Print(" ")
    EndIf
    ConsoleLocate(Inky\x,Inky\y+4)
    If Pacgum And Inky\state = 2
      If GumCol = 0 Or GumCol = 2
        ConsoleColor(3,0)
      Else
        ConsoleColor(15,0)
      EndIf
    Else
      ConsoleColor(9,0)
    EndIf
    Print("M")
  EndIf
  If DispClyde
    If world(Clyde\xold,Clyde\yold) = #Blob
      ConsoleLocate(Clyde\xold,Clyde\yold+4) : ConsoleColor(7,0) : Print(".")
    ElseIf world(Clyde\xold,Clyde\yold) = #PacGum
      ConsoleLocate(Clyde\xold,Clyde\yold+4) : ConsoleColor(7,0) : Print("o")
    Else
      ConsoleLocate(Clyde\xold,Clyde\yold+4) : Print(" ")
    EndIf
    ConsoleLocate(Clyde\x,Clyde\y+4)
    If Pacgum And Clyde\state = 2
      If GumCol = 0 Or GumCol = 2
        ConsoleColor(3,0)
      Else
        ConsoleColor(15,0)
      EndIf
    Else
      ConsoleColor(6,0)
    EndIf
    Print("M")
  EndIf ;}
  If Blinky\x = x And Blinky\y = y : If Blinky\state < 2 : game = #GameDeath : Else : Blinky\state = 3 : Blinky\timer = ElapsedMilliseconds() : score + 250 : EndIf : EndIf
  If Pinky\x = x And Pinky\y = y : If Pinky\state < 2 : game = #GameDeath : Else : Pinky\state = 3 : Pinky\timer = ElapsedMilliseconds() : score + 250 : EndIf : EndIf
  If Inky\x = x And Inky\y = y : If Inky\state < 2 : game = #GameDeath : Else : Inky\state = 3 : Inky\timer = ElapsedMilliseconds() : score + 250 : EndIf : EndIf
  If Clyde\x = x And Clyde\y = y : If Clyde\state < 2 : game = #GameDeath : Else : Clyde\state = 3 : Clyde\timer = ElapsedMilliseconds() : score + 250 : EndIf : EndIf
  If Pacgum
    If ElapsedMilliseconds() - GumTime >= 5000
      GumCol = 1
      GumTime = ElapsedMilliseconds()
    EndIf
    If GumCol And ElapsedMilliseconds() - GumTime >= 200
      If GumCol = 1 : GumCol = 2 : Else : GumCol = 1 : EndIf
      GumTime = ElapsedMilliseconds()
    EndIf
    If ElapsedMilliseconds() - Pacgum >= 8000
      Blinky\timer = 0 : Blinky\lastdir = 0 : If Not Blinky\state = 3 : Blinky\state = 0 : EndIf : Pinky\timer = 0 : Pinky\lastdir = 0 : If Not Pinky\state = 3 : Pinky\state = 0 : EndIf : Inky\timer = 0 : Inky\lastdir = 0 : If Not Inky\state = 3 : Inky\state = 0 : EndIf : Clyde\timer = 0 : Clyde\lastdir = 0 : If Not Clyde\state = 3 : Clyde\state = 0 : EndIf
      Pacgum = 0
    EndIf
  EndIf
EndProcedure
Procedure CheckCrossRoad(*ghost.fantome)
  If (*ghost\x = width Or 0) Or (*ghost\y = heigh Or 0)
    ProcedureReturn #False
  EndIf
  Select *ghost\lastdir
    Case 1,3
      If Not world(*ghost\x,*ghost\y+1) = #Wall Or Not world(*ghost\x,*ghost\y-1) = #Wall
        ProcedureReturn #True
      EndIf
    Case 2,4
      If Not world(*ghost\x+1,*ghost\y) = #Wall Or Not world(*ghost\x-1,*ghost\y) = #Wall
        ProcedureReturn #True
      EndIf
    Default
      ProcedureReturn #True
  EndSelect
  ProcedureReturn #False
EndProcedure
Procedure CanGo(direction,*ghost.fantome)
  Select direction
    Case 1
      If *ghost\x = 1 : ProcedureReturn #False : EndIf
      If Not world(*ghost\x-1,*ghost\y) = #Wall And Not *ghost\lastdir = 3
        ProcedureReturn #True
      EndIf
    Case 2
      If *ghost\y = 1 : ProcedureReturn #False : EndIf
      If Not world(*ghost\x,*ghost\y-1) = #Wall And Not *ghost\lastdir = 4
        ProcedureReturn #True
      EndIf
    Case 3
      If *ghost\x = width-1 : ProcedureReturn #False : EndIf
      If Not world(*ghost\x+1,*ghost\y) = #Wall And Not *ghost\lastdir = 1
        ProcedureReturn #True
      EndIf
    Case 4
      If *ghost\x = heigh-1 : ProcedureReturn #False : EndIf
      If Not world(*ghost\x,*ghost\y+1) = #Wall And Not *ghost\lastdir = 2
        ProcedureReturn #True
      EndIf
  EndSelect
  ProcedureReturn #False
EndProcedure


Dernière édition par boby le Jeu 31/Aoû/2017 11:02, édité 5 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Mer 30/Aoû/2017 16:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 4225
Localisation: Arras, France
"Indice de tableau hors limite"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Mer 30/Aoû/2017 16:51 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
Edit : j'ai mis la map dans le code, je n'ai pas de sortie de tableau chez moi :-/


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Mer 30/Aoû/2017 17:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4067
Pas d'erreur aussi ici :idea:

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Mer 30/Aoû/2017 18:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2801
Localisation: Klyntar
Excellent, merci.






@++

_________________
Windows 10 x64, PureBasic 5.71 Beta 1 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Mer 30/Aoû/2017 19:25 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 14/Oct/2004 19:48
Messages: 1121
On ne peut pas manger des superpacgums pour bouffer les fantômes ?
Sinon très bien, mais un peu rapide pour moi... :mrgreen:

_________________
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 5.45LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Mer 30/Aoû/2017 19:45 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6860
Localisation: IDF (Yvelines)
Merci et je confirme que c'est beaucoup trop rapide.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Jeu 31/Aoû/2017 10:42 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
Fig a écrit:
On ne peut pas manger des superpacgums pour bouffer les fantômes ?


Edit : MAJ du code, fantomes ralentis + Superpacgums.

Les AI étant la même pour pinky inky et clyde (se déplacer au pif) c'est un poil facile maintenant.

Oups, petites réctif de dernière seconde, il y avais un petit bug avec les pacgum.


Dernière édition par boby le Jeu 31/Aoû/2017 10:56, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Jeu 31/Aoû/2017 10:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 4225
Localisation: Arras, France
Super, ça fonctionne maintenant, et très bien :) Bravo !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Jeu 31/Aoû/2017 14:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6659
Localisation: Isere
Je n'ose m'imaginer comment il était rapide avant 8O ...parce que là...dire qu'il est lent serait un peu exagéré :lol:
Vraiment cool !!!! en plus il pourrait entrer dans une montre :D
J’espère qu'il te reste encore plein de temps à tuer
Merci du partage 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Mac Man !!!!! (mais pas le proxénète)
MessagePosté: Ven 01/Sep/2017 1:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8785
Très sympa ^^

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 11 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye