Java 五子棋(二)绘制3D棋子并保存

设置颜色

  • 设置的颜色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);
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值