q****x 发帖数: 7404 | 1 class Piece {
int color;
int position;
};
class King: public Piece {};
class Queen: public Piece {};
...
class Board {};
class Game {
vector _pieces;
Board _board;
};
一点继承和多态,还能加点啥? | v*****k 发帖数: 7798 | 2 你总得加走法和判断吃子/将军/胜负啊?如果是比赛还要加计时系统。如果是练习可以
加悔棋/复盘系统.... | n*******w 发帖数: 687 | 3 一些简单user cases都不算容易通过。
比如
把棋从(x y) 移到 (x' y')
快速判断某个位置是不是已经有棋子了
移动id为1的棋子
。。。。。。
每种棋子是什么类型最好弄成enum类型。
【在 q****x 的大作中提到】 : class Piece { : int color; : int position; : }; : class King: public Piece {}; : class Queen: public Piece {}; : ... : class Board {}; : class Game { : vector _pieces;
| q****x 发帖数: 7404 | 4 是可以加很多代码。但哪些能体现"OOD"?
【在 n*******w 的大作中提到】 : 一些简单user cases都不算容易通过。 : 比如 : 把棋从(x y) 移到 (x' y') : 快速判断某个位置是不是已经有棋子了 : 移动id为1的棋子 : 。。。。。。 : 每种棋子是什么类型最好弄成enum类型。
| S*******0 发帖数: 198 | 5 public abstract class Piece {
private String pieceColor;
public Piece() {
}
public String getPieceColor() {
return pieceColor;
}
// boolean isOppositeColor()
abstract public String getName();
abstract public boolean isRoadOk(Board board, String from, String to);
}
King, Queen, Bishop, Knight, Rook, Pawn 都继承一下Piece
public class Board {
private Square[][] squares = new Square[8][8];
public Board() {
//set the 32 pieces
}
public Square[][] getSquares() {
return squares;
}
public Square getSquare(String squareName) {
}
// rook, queen
public Square[] getSquaresHorizontal(String squareName1, String
squareName2) {
}
// rook, queen, pawn
public Square[] getSquaresVertical(String squareName1, String
squareName2) {
}
// bishop, queen
public Square[] getSquaresDiagonal(String squareName1, String
squareName2) {
}
public boolean isKnightMove(String squareName1, String squareName2) {
}
public String[] knightMoves(char letter, int number) {
}
public boolean isNextSqare(String squareName1, String squareName2) {
}
}
public class Square {
private Piece piece;
private String name; // A1, C2,...
public Square(String name) {
this.name = name;
}
public void setPiece(Piece piece) {
this.piece = piece;
}
public Piece getPiece() {
return piece;
}
public String getName() {
return name;
}
public boolean isEmpty() {
if (this.getPiece() == null)
return true;
else
return false;
}
public String toString() {
return getName();
}
}
在就是玩家了,弄一个基类,再把human 和AI继承一下 | n*******w 发帖数: 687 | 6 一般interviewer会使用一些user cases来判断ood设计是不是work。
sewind这个就好很多。不是加代码的问题。
把position信息放到board里边,board是个二维数组。
每个格子可以放棋子。这样跟下棋直接对应起来了。
棋子弄个abstract类也行吧。
再跑一下那几个user cases就很容易通过了。
【在 S*******0 的大作中提到】 : public abstract class Piece { : private String pieceColor; : public Piece() { : } : public String getPieceColor() { : return pieceColor; : } : // boolean isOppositeColor() : abstract public String getName(); : abstract public boolean isRoadOk(Board board, String from, String to);
| q****x 发帖数: 7404 | 7 什么user case?
【在 n*******w 的大作中提到】 : 一般interviewer会使用一些user cases来判断ood设计是不是work。 : sewind这个就好很多。不是加代码的问题。 : 把position信息放到board里边,board是个二维数组。 : 每个格子可以放棋子。这样跟下棋直接对应起来了。 : 棋子弄个abstract类也行吧。 : 再跑一下那几个user cases就很容易通过了。
|
|