Les opérateurs logiques ca peut servir!
Publié : sam. 04/févr./2017 13:51
Je sais que pour beaucoup d'entre vous les opérateurs logiques sont inutiles et pourtant. Pour le fun je développe actuellement un petit jeux d'échec en Pb.
Je traite l'échiquier sous forme de matrice carrée (8,8) (si vous préfère avec un tableau de 8 lignes et 8 colonnes ).
Reste le problème de mémorisé dans chaque case de la matrice le type de pion ainsi que sa couleur.
Voila entre autre à quoi peuvent servir les opérateurs logiques
Voila une exemple avec une partie (adapté pour l'exemple) de mon code.
Nb: Ne voulant pas vous imposé le chargement d'images les pions ne sont pas représentés visuellement mais seulement en mémoire
Utilisation: déplacez la souri à l'emplacement d'un pion, si vous avez déjà joué au échecs cela ne devrait pas posé de problème
Je traite l'échiquier sous forme de matrice carrée (8,8) (si vous préfère avec un tableau de 8 lignes et 8 colonnes ).
Reste le problème de mémorisé dans chaque case de la matrice le type de pion ainsi que sa couleur.
Voila entre autre à quoi peuvent servir les opérateurs logiques
Voila une exemple avec une partie (adapté pour l'exemple) de mon code.
Nb: Ne voulant pas vous imposé le chargement d'images les pions ne sont pas représentés visuellement mais seulement en mémoire
Utilisation: déplacez la souri à l'emplacement d'un pion, si vous avez déjà joué au échecs cela ne devrait pas posé de problème
Code : Tout sélectionner
Global Dim ChessBoard.l(8,8)
EnableExplicit
#CaseSize=64
#Rook=$00000001
#Knight=$00000002
#Bishop=$00000004
#King=$00000008
#Queen=$00000010
#Pawn=$00000020
#WhiteC=$01000000
#BlackC=$10000000
Enumeration
#MainForm
#Canvas
EndEnumeration
Declare OpenForm()
Declare DrawChessBoard()
Declare ManageStartChessPawn()
Declare Exit()
Declare ManageCanvas()
Declare WhoIsThere(Line,Column)
Procedure OpenForm()
Protected W=(8 * #CaseSize),H=(8 * #CaseSize)
OpenWindow(#MainForm,0,0,W,H,"Pb chess board",$CB0001)
CanvasGadget(#Canvas,0,0,W,H,#PB_Canvas_Key)
BindGadgetEvent(#Canvas,@ManageCanvas())
BindEvent(#PB_Event_CloseWindow,@Exit(),0)
AddKeyboardShortcut(0,#PB_Shortcut_Escape,0)
BindEvent(#PB_Event_Menu,@Exit(),0,0)
ManageStartChessPawn()
DrawChessBoard()
EndProcedure
Procedure DrawChessBoard()
Protected Dim Color(2),nColor=1,i,j,X,Y
Color(0)=$B5E4FF
Color(1)=$13458B
StartDrawing(CanvasOutput(#Canvas))
DrawingMode(#PB_2DDrawing_Default)
For i=0 To 7
X=0
nColor+1
If nColor>1
nColor=0
EndIf
For j=0 To 7
Box(X,Y,#CaseSize,#CaseSize,Color(nColor))
nColor+1
If nColor>1
nColor=0
EndIf
X+#CaseSize
Next
Y+#CaseSize
Next
StopDrawing()
EndProcedure
Procedure ManageStartChessPawn()
Protected i
; Black chess pawns
ChessBoard(0,0)=#BlackC|#Rook
ChessBoard(0,1)=#BlackC|#Knight
ChessBoard(0,2)=#BlackC|#Bishop
ChessBoard(0,3)=#BlackC|#Queen
ChessBoard(0,4)=#BlackC|#King
ChessBoard(0,5)=#BlackC|#Bishop
ChessBoard(0,6)=#BlackC|#Knight
ChessBoard(0,7)=#BlackC|#Rook
For i=0 To 7
ChessBoard(1,i)=#BlackC|#Pawn
Next
; white chess pawns
ChessBoard(7,0)=#WhiteC|#Rook
ChessBoard(7,1)=#WhiteC|#Knight
ChessBoard(7,2)=#WhiteC|#Bishop
ChessBoard(7,3)=#WhiteC|#Queen
ChessBoard(7,4)=#WhiteC|#King
ChessBoard(7,5)=#WhiteC|#Bishop
ChessBoard(7,6)=#WhiteC|#Knight
ChessBoard(7,7)=#WhiteC|#Rook
For i=0 To 7
ChessBoard(6,i)=#WhiteC|#Pawn
Next
EndProcedure
Procedure Exit()
CloseWindow(#MainForm)
End
EndProcedure
Procedure ManageCanvas()
Protected MousePosX,MousePosY,CurrentLine.w,CurrentColumn.w
MousePosY=GetGadgetAttribute(#Canvas,#PB_Canvas_MouseY)
MousePosX=GetGadgetAttribute(#Canvas,#PB_Canvas_MouseX)
CurrentLine=MousePosY/#CaseSize
CurrentColumn=MousePosX/#CaseSize
Select EventType()
Case #PB_EventType_MouseMove
WhoIsThere(CurrentLine,CurrentColumn)
EndSelect
EndProcedure
Procedure WhoIsThere(Line,Column)
Protected CurrentPiece,Message.s="Je suis "
If ChessBoard(Line,Column)>0
CurrentPiece=ChessBoard(Line,Column)&$00FFFFFF ; Extract the piece value only
Select CurrentPiece
Case #Pawn
Message+"un Pion"
Case #Rook
Message+"une Tour"
Case #King
Message+"le Roi"
Case #Queen
Message+"la Reine"
Case #Knight
Message+"un cavalier"
Case #Bishop
Message+"un Fou"
EndSelect
If ChessBoard(Line,Column)&#WhiteC
Message+" blanc"
Else
Message+" noir"
EndIf
Debug Message
EndIf
EndProcedure
OpenForm()
Repeat:WaitWindowEvent():ForEver