新手向!超详细!Java俄罗斯方块程序面向对象编程全记录

零、写在开始之前

新人,Java学习中,文章中遗漏错误之处,欢迎斧正
个人博客,完全原创
转载请注明出处。
项目全代码地址:GitHub
百度云盘
提取码: fnbi

一、从面向对象的开始,将对象抽象成类

面对一个程序or实际项目,个人会选择从程序的表面入手,从入目可及的实例对象出发,一步步抽象成类。
对于如何使用面向对象的思想去分析一个项目时,我的理解是:

首先去找出对象间的共性,以此来设计出最基本的类。然后找出对象间的差异性,来设计不同的接口或子类来实现这些差异性 <

以俄罗斯方块程序而言,根据所有的实际对象按照他们共有属性和方法的不同分类所得的结果,我可以把该程序运行过程中的可见的对象可以分为以下三种类型的类型

叠块类:各种形态的方块组合对象
信息类:面板上可见且变动的信息对象

对于其中的信息类对象和背景图片类对象,因为我们只需要对它们进行展示和赋值,而不需要对它们进行更多的方法操作,赋予它们更多的属性,因此为了程序更加简单,我们不需要为它们创建新的类。之后我们会聊到如何使用swing.JFrame来绘制图片和提示信息。
对于叠块类对象的分析我们可以得出它们共有的属性和方法,并聚合而成一个叠块类(Tetromino)大致如下

所有的叠块类对象都是由4个相同大小的小格子组成的
所有的叠块类对象都有同样的左移、右移和下落方法

所有的叠块类对象都可以进行旋转且暂时假设所有对象遵从相同的旋转法则(事实确实如此)
由第一条共性中可以提炼出一个不是基本类型也不是任何java自带类的对象:格子(Cell),为此我们需要设计一个格子类(Cell),它的属性和方法大致包括:
1.用于定位的row, col值
2.展示的颜色/图像
3.下落,左右移动的最小单元
知道所有的叠块类对象的共性,但我们也不能因此而忽视它们最直观的差异所有的叠块类对象一共拥有七类不同的形状和颜色,相同形状的叠块类对象的格子颜色都相同,所以我们根据差异性创建七个类
综合以上,我们所需要的基本类和她们所属的属性和方法分别为

Cell类
属性名 类型 修饰词
row int Privaet
col int Private
image BufferImage Private
方法名 返回类型 传参 修饰词
moveDown void - Private
moveLeft void - Private
moveRight void - Private

####Tetromino类

属性名 类型 修饰词
cells Cell[] Private
方法名 返回类型 传参 修饰词
moveDown void - Public
moveLeft void - Public
moveRight void - Public
spin void - Public

而对于七种叠块类的子类而言,它们类中没有特有的属性,只需利用每一个类的构造方法实现它们的特征即可。以O类为例,我们创建O类的对象时,我们只需把cells中4个格子对象进行排列就能满足实现特有形状,而在创建每一个cells中的Cell对象时传入的bufferedImage对象则可以实现不同颜色(图像)。

二、类的实现

当经过第一步的使用面向对象将所有对象抽象成类后,我们需要将设计好的类使用代码实现。具体的实现代码如下

Cell类

Cell类的构造器
Cell类的一般方法

Tetromino类

Tetromino类的方法

  • 72
    点赞
  • 270
    收藏
    觉得还不错? 一键收藏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值