俄罗斯方块练习要点总结

 

1.自定义类作为Key时需要重写hashCode和equals

自定义类:

 

 

但用来作为key时:private Map<BiCoordinate, PixelType> map;却出现错误,无法正确索引。

 

 

如果需要自己编写一个类作为HashMap中的Key,需要重写函数:hashCode和equals

 

原来你的类是继承Object的.使用Object的hashCode生成的散列码.它默认是使用对象的地址计算散列码的.因此.两次new的MyKey的散列码是不一样的.用String对象作为HashMap的Key,则不会出现这种情况,这是因为String类重载了hashCode函数。

重写equals函数是因为当比较两个类时,如果这个类中没有equals函数,则到它的上一级去找,而如果自定义类继承自Object类,则调用Object类的equals,结果是按照这两个对象的地址比较的,自然是不会相等的。

改写如下:

 

 

这里的17有人说是任意质数,37可能是哈希系数,暂未确定,稍后有时间再细研究

 

2.定义类比较策略 - Comparable 接口

使用Set保存BiCoordinate对象。当依次绘制出来时,发现对象顺序不正确,如下图

【image】

可用继承Comparable接口的方法解决。

 

public interface Comparable<T> {
    public int compareTo(T o);
}
int compareTo(Object o): 比较当前实例对象与对象 o ,如果位于对象 o 之前,返回负值,如果两个对象在排序中位置相同,则返回 0 ,如果位于对象 o 后面,则返回正值。
这里方块的排序顺序为[0,0]<[1,0][0,1]<[2,0][1,1][0,2]<……,因此原理可编辑如下:

 

3.动画时间线效果 - Timer

这里有人建议使用线程的sleep,此方法以后再研究。由于练习难度不高,目前使用的是Timer。

timer.schedule(

    task,  //TimerTask

    delay,//延迟启动时间

    cycle  //重复周期

    );

简单使用实例:

 

 

4.Thread.sleep()

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值