Dominos

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Dominos

Message par Droopy »

Voila un début de dominos

Code : Tout sélectionner

;/ Pointeur + Cache pointeur pour précision / Lacher interdit sur autre dominos

InitSprite()
InitKeyboard()
InitMouse()

#AffichageGrille=#False
#LargeurDomino=33
#Largeur=1024
#Hauteur=768
#Pas=#LargeurDomino+1

OpenWindow(0,0,0,#Largeur,#Hauteur, "Dominos...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,#Largeur,#Hauteur,0,0,0)

Enumeration 255
  #CachePointeur
  #Pointeur
  #ZoneJeu
EndEnumeration

;{/ Création du Pointeur
CreateSprite(#Pointeur,1,1)
;}

;{/ Création du Cache Pointeur
CreateSprite(#CachePointeur, 20, 20)
StartDrawing(SpriteOutput(#CachePointeur))
Box(0,0,20,20,0)
LineXY(0,0,0,10,RGB(255,255,255))
LineXY(0,0,10,0,RGB(255,255,255))
LineXY(0,10,10,0,RGB(255,255,255))
FillArea(1,1,RGB(255,255,255),RGB(255,255,255))
LineXY(0,0,15,15,RGB(255,0,0))
FillArea(0,0,0,RGB(255,0,0))
StopDrawing()
;}

;{/ Création de la zone de jeu
CreateSprite(#ZoneJeu, 28*#Pas,18*#Pas)
StartDrawing(SpriteOutput(#ZoneJeu))
Box(0,0,SpriteWidth(#ZoneJeu),SpriteHeight(#ZoneJeu),0)
Box(4,4,SpriteWidth(#ZoneJeu)-8,SpriteHeight(#ZoneJeu)-8,43008)

StopDrawing()
;}

Structure Domino
  id.l
  x.l
  y.l
  Oldx.l
  Oldy.l
EndStructure

Global NewList Domino.Domino()

Procedure CreationDomino(id,x,y,g,d)
  AddElement(Domino())
  Domino()\id=id
  Domino()\x=x
  Domino()\y=y
  CreateSprite(id,#LargeurDomino,#LargeurDomino*2+1)
  StartDrawing(SpriteOutput(id))
  
  Box(0,0,#LargeurDomino,#LargeurDomino*2+1,RGB(255,255,255)) ;/ Carré blanc
  
  ;/ Tour du Domino
  LineXY(0,0,#LargeurDomino*2,0,1)
  LineXY(0,#LargeurDomino*2,#LargeurDomino*2,#LargeurDomino*2,1)
  LineXY(0,#LargeurDomino+1,#LargeurDomino*2,#LargeurDomino+1,1)
  LineXY(0,0,0,#LargeurDomino*2,1)
  LineXY(#LargeurDomino-1,0,#LargeurDomino-1,#LargeurDomino*2,1)
  
  ;/ Bords invisibles
  Plot(0,0,0)
  Plot(0,#LargeurDomino*2,0)
  Plot(#LargeurDomino-1,0,0)
  Plot(#LargeurDomino-1,#LargeurDomino*2,0)
  
  radius.f=#LargeurDomino/12
  L.f=#LargeurDomino/4
  
  Select g
    Case 0
    Case 1
      Circle(#LargeurDomino/2,#LargeurDomino/2,radius,1)
    Case 2
      Circle(L*3,L,radius,1)
      Circle(L,L*3,radius,1)
    Case 3
      Circle(L*3,L,radius,1)
      Circle(L,L*3,radius,1)
      Circle(#LargeurDomino/2,#LargeurDomino/2,radius,1)
    Case 4
      Circle(L,L,radius,1)
      Circle(L*3,L,radius,1)
      Circle(L,L*3,radius,1)
      Circle(L*3,L*3,radius,1)
    Case 5
      Circle(L,L,radius,1)
      Circle(L*3,L,radius,1)
      Circle(L,L*3,radius,1)
      Circle(L*3,L*3,radius,1)
      Circle(#LargeurDomino/2,#LargeurDomino/2,radius,1)
    Case 6
      Circle(L,L,radius,1)
      Circle(L*3,L,radius,1)
      Circle(L,L*3,radius,1)
      Circle(L*3,L*3,radius,1)
      Circle(L,L*2,radius,1)
      Circle(L*3,L*2,radius,1)
  EndSelect
  
  Select d
    Case 0
    Case 1
      Circle(#LargeurDomino/2,#LargeurDomino+ #LargeurDomino/2,radius,1)
    Case 2
      Circle(L*3,#LargeurDomino+ L,radius,1)
      Circle(L,#LargeurDomino+ L*3,radius,1)
    Case 3
      Circle(L*3,#LargeurDomino+ L,radius,1)
      Circle(L,#LargeurDomino+ L*3,radius,1)
      Circle(#LargeurDomino/2,#LargeurDomino+ #LargeurDomino/2,radius,1)
    Case 4
      Circle(L,#LargeurDomino+ L,radius,1)
      Circle(L*3,#LargeurDomino+ L,radius,1)
      Circle(L,#LargeurDomino+ L*3,radius,1)
      Circle(L*3,#LargeurDomino+ L*3,radius,1)
    Case 5
      Circle(L,#LargeurDomino+ L,radius,1)
      Circle(L*3,#LargeurDomino+ L,radius,1)
      Circle(L,#LargeurDomino+ L*3,radius,1)
      Circle(L*3,#LargeurDomino+ L*3,radius,1)
      Circle(#LargeurDomino/2,#LargeurDomino+ #LargeurDomino/2,radius,1)
    Case 6
      Circle(L,#LargeurDomino+ L,radius,1)
      Circle(L*3,#LargeurDomino+ L,radius,1)
      Circle(L,#LargeurDomino+ L*3,radius,1)
      Circle(L*3,#LargeurDomino+ L*3,radius,1)
      Circle(L,#LargeurDomino+ L*2,radius,1)
      Circle(L*3,#LargeurDomino+ L*2,radius,1)
  EndSelect
  
  
  StopDrawing()
  
  
  
EndProcedure

For h= 0 To 6
  For b=h To 6
    CreationDomino(id,#Pas*id+#Pas,(Int(#Hauteur/#Pas)*#Pas)-#Pas*2,h,b)
    id+1
  Next
Next

MouseLocate(#Largeur/2,#Hauteur/2)
DominoDeplace=-1

Repeat
  Repeat
    ExamineKeyboard()
    Event = WindowEvent()
    If Event=#PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
      End 
    EndIf
  Until Event = 0
  
  FlipBuffers() 
  ClearScreen(32768)
  
  ;/ Dessine la zone de Jeu
  DisplaySprite(#ZoneJeu,#Pas,#Pas)
  
  ;/ Dessin de la grille
  If #AffichageGrille
    StartDrawing(ScreenOutput())
    For n=0 To #Hauteur Step #Pas
      LineXY(0,n,#Largeur,n)
    Next
    For n=0 To #Largeur Step #Pas
      LineXY(n,0,n,#Hauteur)
    Next
    StopDrawing()
  EndIf
  
  ;/ Détermine les coordonnés de la souris
  ExamineMouse()
  x=MouseX()
  y=MouseY()
  
  ;/ Clic & Collision
  If MouseButton(#PB_MouseButton_Left)
    If DominoDeplace=-1
      ;/ détecte quel domino a été cliqué ( début déplacement )
      ForEach Domino()
        If SpriteCollision(#Pointeur,x,y,Domino()\id,Domino()\x,Domino()\y)
          DominoDeplace=ListIndex(Domino())
          ;/ détermine l'offset
          offsetX=x-Domino()\x
          offsetY=y-Domino()\y
          ;/ mémorise où était placé le domino
          Domino()\Oldx=Domino()\x
          Domino()\Oldy=Domino()\y
          Break
        EndIf
      Next
    Else
      ;/ On déplace le domino où est la souris ( pour affichage quand domino cliqué )
      SelectElement(Domino(),DominoDeplace)
      Domino()\x=x-offsetX
      Domino()\y=y-offsetY
      ;/ Rotation Clic droit en plus
      If MouseButton(#PB_MouseButton_Right)
        beep_(700,15)
      EndIf
    EndIf
  Else
    
    If DominoDeplace<>-1
      ;- Domino laché
      ;/ Calage sur la grille ( gestion plus à gauche / plus à droite )
      SelectElement(Domino(),DominoDeplace)
      tx.f=Domino()\x/#Pas
      If tx-Int(tx)>0.6
        Domino()\x=Domino()\x/#Pas*#Pas+#Pas
      Else
        Domino()\x/#Pas*#Pas
      EndIf
      
      ty.f=Domino()\y/#Pas
      If ty-Int(ty)>0.6
        Domino()\y=Domino()\y/#Pas*#Pas+#Pas
      Else
        Domino()\y/#Pas*#Pas
      EndIf
      
      ;- Détecte si collision avec un autre domino ( sinon le repositione à son origine )
      SelectElement(Domino(),DominoDeplace)
      tid=Domino()\id
      tx=Domino()\x
      ty=Domino()\y
      toldx=Domino()\Oldx
      toldy=Domino()\Oldy
      
      For n=0 To CountList(Domino())-1
        If n<>DominoDeplace
          SelectElement(Domino(),n)
          If SpriteCollision(Domino()\id,Domino()\x,Domino()\y,tid,tx,ty)
            Debug n
            Debug DominoDeplace
            beep_(300,100)
            SelectElement(Domino(),DominoDeplace)
            Domino()\x=Domino()\Oldx
            Domino()\y=Domino()\Oldy
            Break
            
          EndIf
          
        EndIf
      Next
      
    EndIf
    
    DominoDeplace=-1
    
  EndIf
  
  
  ;/ Affichage
  ForEach Domino()
    DisplayTransparentSprite(Domino()\id,Domino()\x,Domino()\y)
  Next
  
  DisplayTransparentSprite(#Pointeur,x,y)
  DisplayTransparentSprite(#CachePointeur,x,y)
  
  Delay(1)
ForEver
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Beau début Droopy

Si tu veux de l'aide n'hésite pas !
Denis

Bonne Jounée à tous
Répondre