MORE CHANGES. Pieces can be moved now.
This commit is contained in:
parent
b3a7418c5f
commit
f5f89a070d
@ -29,15 +29,10 @@ class ChessBloc extends Bloc<ChessEvent, ChessBoardState> {
|
|||||||
) {
|
) {
|
||||||
Map<ChessCoordinate, ChessPiece> newPosition = {};
|
Map<ChessCoordinate, ChessPiece> newPosition = {};
|
||||||
|
|
||||||
newPosition[ChessCoordinate(5, 5)] =
|
newPosition[event.endSquare] = state.position[event.startSquare]!;
|
||||||
ChessPiece(ChessPieceName.blackBishop, ChessColor.black);
|
|
||||||
|
|
||||||
ChessPiece? piece =
|
|
||||||
state.position[ChessCoordinate.copyFrom(event.startSquare)];
|
|
||||||
|
|
||||||
newPosition[event.endSquare] = piece!;
|
|
||||||
newPosition[event.startSquare] = const ChessPiece.none();
|
newPosition[event.startSquare] = const ChessPiece.none();
|
||||||
|
|
||||||
|
print('emitting new state with position $newPosition');
|
||||||
emit(ChessBoardState(
|
emit(ChessBoardState(
|
||||||
state.flipped,
|
state.flipped,
|
||||||
ChessColor.black,
|
ChessColor.black,
|
||||||
@ -90,6 +85,10 @@ class ChessBoardState {
|
|||||||
for (int col = 1; col <= 8; col++) {
|
for (int col = 1; col <= 8; col++) {
|
||||||
position[ChessCoordinate(row, col)] =
|
position[ChessCoordinate(row, col)] =
|
||||||
ChessPiece(ChessPieceName.none, ChessColor.white);
|
ChessPiece(ChessPieceName.none, ChessColor.white);
|
||||||
|
if (col == 1 && row == 4) {
|
||||||
|
position[ChessCoordinate(col, row)] =
|
||||||
|
ChessPiece(ChessPieceName.blackKing, ChessColor.black);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,9 +16,12 @@ class ChessBoard extends StatelessWidget {
|
|||||||
var column = (i % 8) + 1;
|
var column = (i % 8) + 1;
|
||||||
var row = (i ~/ 8) + 1;
|
var row = (i ~/ 8) + 1;
|
||||||
|
|
||||||
|
final piece = bState.position[ChessCoordinate(column, row)];
|
||||||
|
|
||||||
squares.add(
|
squares.add(
|
||||||
ChessSquare(
|
ChessSquare(
|
||||||
coordinate: ChessCoordinate(column, row),
|
coordinate: ChessCoordinate(column, row),
|
||||||
|
containedPiece: piece,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -28,18 +31,11 @@ class ChessBoard extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
_placePieces();
|
|
||||||
|
|
||||||
return Column(
|
return Column(
|
||||||
children: _buildBoard(bState.flipped),
|
children: _buildBoard(bState.flipped),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _placePieces() {
|
|
||||||
squares[0].containedPiece =
|
|
||||||
ChessPiece(ChessPieceName.blackBishop, ChessColor.black);
|
|
||||||
}
|
|
||||||
|
|
||||||
Row _buildChessRow(int rowNo, bool flipped) {
|
Row _buildChessRow(int rowNo, bool flipped) {
|
||||||
if (!flipped) {
|
if (!flipped) {
|
||||||
return Row(
|
return Row(
|
||||||
|
@ -57,10 +57,15 @@ class ChessSquare extends StatelessWidget {
|
|||||||
},
|
},
|
||||||
onAccept: (move) {
|
onAccept: (move) {
|
||||||
move.endSquare = coordinate;
|
move.endSquare = coordinate;
|
||||||
ChessBloc().add(PieceMoved(
|
|
||||||
startSquare: move.startSquare,
|
if (move.endSquare != move.startSquare) {
|
||||||
endSquare: move.endSquare,
|
ChessBloc().add(
|
||||||
));
|
PieceMoved(
|
||||||
|
startSquare: move.startSquare,
|
||||||
|
endSquare: move.endSquare,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:quiver/core.dart';
|
||||||
|
|
||||||
enum ChessPieceName {
|
enum ChessPieceName {
|
||||||
none,
|
none,
|
||||||
@ -32,7 +33,7 @@ Map<ChessPieceName, String> chessPiecesAssets = {
|
|||||||
ChessPieceName.blackRook: 'assets/pieces/black/rook.svg',
|
ChessPieceName.blackRook: 'assets/pieces/black/rook.svg',
|
||||||
ChessPieceName.blackQueen: 'assets/pieces/black/queen.svg',
|
ChessPieceName.blackQueen: 'assets/pieces/black/queen.svg',
|
||||||
ChessPieceName.blackKing: 'assets/pieces/black/king.svg',
|
ChessPieceName.blackKing: 'assets/pieces/black/king.svg',
|
||||||
ChessPieceName.none: '',
|
ChessPieceName.none: 'assets/empty.svg',
|
||||||
};
|
};
|
||||||
|
|
||||||
class ChessCoordinate {
|
class ChessCoordinate {
|
||||||
@ -40,6 +41,7 @@ class ChessCoordinate {
|
|||||||
late int row;
|
late int row;
|
||||||
|
|
||||||
ChessCoordinate(this.column, this.row);
|
ChessCoordinate(this.column, this.row);
|
||||||
|
|
||||||
ChessCoordinate.copyFrom(ChessCoordinate original)
|
ChessCoordinate.copyFrom(ChessCoordinate original)
|
||||||
: column = original.column,
|
: column = original.column,
|
||||||
row = original.row;
|
row = original.row;
|
||||||
@ -57,6 +59,18 @@ class ChessCoordinate {
|
|||||||
colInt = col.codeUnitAt(0) - 96;
|
colInt = col.codeUnitAt(0) - 96;
|
||||||
return colInt;
|
return colInt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
operator ==(other) {
|
||||||
|
return other is ChessCoordinate &&
|
||||||
|
other.column == column &&
|
||||||
|
other.row == row;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode {
|
||||||
|
return hash2(column, row);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ChessPiece extends StatelessWidget {
|
class ChessPiece extends StatelessWidget {
|
||||||
|
@ -187,6 +187,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.4"
|
version: "6.0.4"
|
||||||
|
quiver:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: quiver
|
||||||
|
sha256: "93982981971e812c94d4a6fa3a57b89f9ec12b38b6380cd3c1370c3b01e4580e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.0"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -37,6 +37,7 @@ dependencies:
|
|||||||
# Use with the CupertinoIcons class for iOS style icons.
|
# Use with the CupertinoIcons class for iOS style icons.
|
||||||
cupertino_icons: ^1.0.2
|
cupertino_icons: ^1.0.2
|
||||||
flutter_bloc: ^8.1.1
|
flutter_bloc: ^8.1.1
|
||||||
|
quiver: ^3.1.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
Loading…
Reference in New Issue
Block a user