我的介绍:
我写了个棋子类Chessman,一个棋盘类chessboard,这个棋盘上可以放81个棋子.我的疑问:
如果我想显示3个棋子,是每个棋子都new一个不同Chessman对象?(ChessmanA,ChessmanB,ChessmanC)
还是new一个Chessman对象,这个对象产生三个棋子? 将来我还得对某一个棋子做别的操作,比如销毁(吃).
我的思考:
如果是每个棋子作为一个独立的Chessman类的实例,这样通过不同的"对象名."就可以做别的操作了,但81个棋子,就是81个对象,在对象声明的时候岂不是:private Chessman ChessmanAA;
private Chessman ChessmanAB;
private Chessman ChessmanAC;
......这看着也太难看点了吧?
如果是作为Chessman类型的二维数组,每个元素都是Chessman类的一个实例(一个棋子)
数组声明的时候得 private Chessman [,]ArrChessman
数组元素还得声明 private Chessman ArrChessman[0,0]private Chessman [,] ArrChessman;public void Fun()
{
Chessman [,] ArrChessman = new Chessman[9,9];
for(int i = 0; i<9; i++)
{
for(int j = 0; j<9; j++)
{
ArrChessman[i,j] = new Chessman()
//初始化Chessman类的实例
//为了能在别的地方使用ArrChessman[i,j],还得在Fun()外边声明每个实例
//private Chessman ArrChessman[0,0] 这样?
//private Chessman ArrChessman[0,1] 这样?这行吗这个?
//private Chessman ArrChessman[... , ...]
}
}
}
我写了个棋子类Chessman,一个棋盘类chessboard,这个棋盘上可以放81个棋子.我的疑问:
如果我想显示3个棋子,是每个棋子都new一个不同Chessman对象?(ChessmanA,ChessmanB,ChessmanC)
还是new一个Chessman对象,这个对象产生三个棋子? 将来我还得对某一个棋子做别的操作,比如销毁(吃).
我的思考:
如果是每个棋子作为一个独立的Chessman类的实例,这样通过不同的"对象名."就可以做别的操作了,但81个棋子,就是81个对象,在对象声明的时候岂不是:private Chessman ChessmanAA;
private Chessman ChessmanAB;
private Chessman ChessmanAC;
......这看着也太难看点了吧?
如果是作为Chessman类型的二维数组,每个元素都是Chessman类的一个实例(一个棋子)
数组声明的时候得 private Chessman [,]ArrChessman
数组元素还得声明 private Chessman ArrChessman[0,0]private Chessman [,] ArrChessman;public void Fun()
{
Chessman [,] ArrChessman = new Chessman[9,9];
for(int i = 0; i<9; i++)
{
for(int j = 0; j<9; j++)
{
ArrChessman[i,j] = new Chessman()
//初始化Chessman类的实例
//为了能在别的地方使用ArrChessman[i,j],还得在Fun()外边声明每个实例
//private Chessman ArrChessman[0,0] 这样?
//private Chessman ArrChessman[0,1] 这样?这行吗这个?
//private Chessman ArrChessman[... , ...]
}
}
}
{
private Chessman [,] ArrChessman;public Board()
{
ArrChessman = new Chessman[9,9];
}public void AddChessAt(int x,int y)
{
if (ArrChessman[x,y] == null)
{
Chessman c= new Chessman();
//....做些初始化
ArrChessman[x,y] = c;
//...重画该位置
}
}
public void KillChessAt(int x,int y)
{
if (ArrChessman[x,y] != null)
{
Chessman c= ArrChessman[x,y];
//....处理这个棋子,譬如放到俘虏群里
ArrChessman[x,y] = null;
//...重画该位置
}
}public void MoveChess(int fromx, int fromy, int tox, int toy)
{
if (ArrChessman[fromx,fromy] != null && ArrChessman[tox,toy] == null)
{
Chessman c= ArrChessman[fromx,fromy];
ArrChessman[fromx,fromy] = null;
//....处理这个棋子,譬如放到俘虏群里
ArrChessman[tox,toy] = c;
//...重画该位置
}
}
吃子时就设成null,再重绘。