3D棋子
- 设置颜色
- 图形储存
- 数据结构:数组
- Code
设置颜色
- 设置的颜色r g b值不得超过255
- 0-255从小到大排序颜色是有深色到亮色
图形储存
- 图形:圆、矩形、直线等
- 储存图形(共同点):两个点的坐标
- 属性:
- 坐标点
- 名字
- 颜色
- 方法:
- 绘制图形(Graphics)
数据结构:数组
- 储存多个数据的集合结构
- 数组标识:[ ]
- 声明方式:数据类型[ ]数组名
- 定义赋值:
- 数组名=new 数据类型[长度(所能存储的元素个数)]
- 例如:
- int i表示能储存一个int类型的数字
int[]i=new int[100]
- 储存的同时需要保存起来并且能够被找到
//规范储存的位置 下标
int count=0;
count++;
Chess[]chess=new Chess[100]
//创建图形对象
Chess chess=new Chess();
chess.name="白棋";
chess.x=x;
chess.y=y;
chess.Size=Size;
chess1[count]=chess
Code
- 重新创建一个类Chessshape,绘制3D棋子的方法封装起来,写下其属性
String name;
int x,int y,int Size;
- 设置一个绘制3D棋子的方法,设置循环,if如果name等于“黑棋”画笔对象调用设置新的颜色,由于颜色不能超过255且最外面是深黑色,最中间是亮色
- 画笔对象调用覆盖圆的方法,x:x+i/2,y:y+i/2,为该圆的坐标点,使该圆的图形坐标不那么长,width:Size-i,height:Size-i为该圆的宽高范围,使该圆范围的最高点为该圆的中心位置且聚集为一点
- 白棋的绘制方法也是如此,3D的白棋该从灰色到白色,在x+i/2的基础上还需要减去一个圆的半径,当点击鼠标时画出来的圆,是从圆心画出来的。
public void drawshape(Graphics g){
for(int i=0;i<Size;i++){
if(name.equals("黑棋")){
g.setColor(new Color(3*i,3*i,3*i));
}else {
g.setColor(new Color(200+i,200+i,200+i));
}
g.fillOval(x+i/2-Size/2,y+i/2-Size/2,Size-i,Size-i);
}
}
}
- 在监听器中写数组的属性,规范存储的位置下标
Chessshape[] shapeArr;
int count=0;
- 在按下这个方法中,判断取余等于1时,创建Chessshape的对象,Chessshape对象调用属性赋值
- 数组对象长度为下标等于Chessshape对象,下标递增,白棋也是如此,将其保存。
public void mousePressed(MouseEvent e) {
int x=e.getX();
int y=e.getY();
if(count%2 ==1){
Chessshape shape=new Chessshape();
shape.name="黑棋";
shape.Size=Size;
shape.x=x;
shape.y=y;
shapeArr[count]=shape;
count++;
shape.drawshape(graphics);
}else{
Chessshape shape=new Chessshape();
shape.name="白棋";
shape.Size=Size;
shape.x=x;
shape.y=y;
shapeArr[count]=shape;
count++;
shape.drawshape(graphics);
}
}
- 在主类ChessUI中给属性赋值,监听器对象调用数组对象等于数组
public class ChessUI extends JFrame {
int x=100,y=100,Size=50,L=10,R=10;
Chessshape[] shapeArr=new Chessshape[100];
public void showUI(){
chessLisenter.shapeArr=shapeArr;
}
- 在paint方法中,在for循环申明封装方法的类的对象等于数组的长度,判定为非空置时,封装方法的类的对象调用绘制3D棋子的方法
public void paint(Graphics g) {
super.paint(g);
System.out.println("shapeArr = "+shapeArr.length);
for(int i=0;i<shapeArr.length;i++){
Chessshape chessshape=shapeArr[i];
if(chessshape!=null){
chessshape.drawshape(g);
}
System.out.println("画笔");
}
- 可以把绘制棋盘的方法写在paint方法中,则每一个刷新都会重新出现
for(int i=0;i<11;i++){
g.setColor(Color.BLACK);
g.drawLine(x,y+i*Size,x+L*Size,y+i*Size);
g.drawLine(x+i*Size,y+R*Size,x+i*Size,y);
}
}