File indexing completed on 2024-05-12 04:04:14
0001 /* 0002 This file is part of Knights, a chess board for KDE SC 4. 0003 SPDX-FileCopyrightText: 2009-2010 Miha Čančula <miha.cancula@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0006 */ 0007 0008 #ifndef KNIGHTS_PIECE_H 0009 #define KNIGHTS_PIECE_H 0010 0011 #include "pos.h" 0012 #include "item.h" 0013 0014 namespace Knights { 0015 enum PieceType { 0016 NoType = 0, 0017 King, 0018 Queen, 0019 Bishop, 0020 Knight, 0021 Rook, 0022 Pawn, 0023 PieceTypeCount 0024 }; 0025 enum Color { 0026 NoColor = 0x00, 0027 White = 0x01, 0028 Black = 0x02 0029 }; 0030 0031 Q_DECLARE_FLAGS(Colors, Color) 0032 Q_DECLARE_OPERATORS_FOR_FLAGS(Colors) 0033 Color oppositeColor ( Color color ); 0034 QString colorName ( Color color ); 0035 QString pieceTypeName ( PieceType type ); 0036 0037 class Piece : public Item { 0038 Q_OBJECT 0039 public: 0040 Piece ( KGameGraphicsViewRenderer* renderer, PieceType type, Color color, QGraphicsScene* scene, Pos boardPos, QGraphicsItem* parent = nullptr ); 0041 ~Piece() override; 0042 0043 PieceType pieceType(); 0044 void setPieceType ( PieceType type ); 0045 Color color(); 0046 0047 static QString spriteKey ( PieceType type, Color color ); 0048 static PieceType typeFromChar ( QChar typeChar ); 0049 static QChar charFromType ( PieceType t ); 0050 0051 private: 0052 Color m_color; 0053 PieceType m_type; 0054 void updateSpriteKey(); 0055 }; 0056 0057 typedef QMap<Pos, Piece*> Grid; 0058 typedef QPair<Color, PieceType> PieceData; 0059 typedef QMap<Pos, PieceData> PieceDataMap; 0060 } 0061 0062 Q_DECLARE_METATYPE ( Knights::Color ) 0063 Q_DECLARE_METATYPE ( Knights::Colors ) 0064 Q_DECLARE_METATYPE ( Knights::PieceType ) 0065 Q_DECLARE_METATYPE ( Knights::PieceData ) 0066 Q_DECLARE_METATYPE ( Knights::PieceDataMap ) 0067 0068 #endif // KNIGHTS_PIECE_H