java学习日志~1 俄罗斯方块

知道这里大神多,本人不编程10余年了,手生的很,盼大神多给提意见啊微笑

前段时间心血来潮,突然想学java,看书月余,准备写个程序练练手,正犹豫写什么呢,看到老婆在玩俄罗斯方块,就它吧。

1、创建1个方块类JuXing{

private Point psite;  //方块的左下角坐标
 private Color c;   //颜色
 private int width;   //宽度
 private int height;   //高度

}

包括一个画自己的方法

public void drawSef(Graphics g){}//画方块

复写equals、hashcode、tostring方法

因为概念还都不是很清楚,这里先照本宣科。

2、由于俄罗斯方块含有若干小方块,这里再创建1个NJuXing的类,顾名思义,包括N个小JuXing。

一个图形类的实例就是1个由方块组成的整体,例如L、T、|以及反方向的

class NJuXing{      //图形类,是方块类的集合
 private Point psite;   //旋转时基准点坐标,此点不动
 private static int width=20; //方块的宽度
 private static int height=20; //方块的高度
 private int selshape;   //用来确定当前图形的形状
 Set<JuXing> ls;     //当前图形包含所有方块的坐标
 private Color c;    //当前图形的颜色

}

包括一个画自己的方法

public void drawSef(Graphics g){ }//画一个图形

这个图形要移动,所以包括一个判断能否移动的方法,这里移动包括上下左右,由方向键控制,最后把向上移动给注释就OK了

public boolean canMove(){}

由空格键控制图形的旋转

public void turnSel(){}

然后就是四个方向的移动了

moveUp(){}、moveDown(){}、moveLeft(){}、moveRight(){}

还有图形的闪烁,比如说刚出来,或者到了底部,马上就不能移动的时候

flash(){}//最后这项任务没实现,思路还不清晰

3、基础工作做完了,就需要画图了,画图就需要画板

class Palette extends JPanel{
 private static int row=26;            //行数
 private static int col=15;            //列数
 private static int width=20;
 private static int height=20;
 private static Point zerop=new Point(10,540);       //左下角方块坐标
 private NJuXing njx;             //当前移动的图形
 private Set<JuXing> lsbottom;           //所有不可移动方块的坐标
 private static Point gop=new Point(zerop.x+(col/2+1)*20,zerop.y-row*20);//所有图形的出发位置
 private NJuXing nextnjx;            //下一个图形
 private Point nextp=new Point(400,100);         //下一个图形的坐标
 private static long score=0;           //分值
 private int level=1;             //级别
 private Timer timedown;             //下降速度
 private boolean timeflag=false;  //实现暂停

}

这里需要一个产生图形实例的方法,

newNJuXing(){}

还需要实现键盘监听,4个方向键控制移动方向,空格实现旋转,ESC实现暂停,功能不多

用时间timer来控制图形的自动下坠,所有下坠到底部的图形加入到lsbottom中

还有一个重要功能没有实现:清除已放满小方块的行并计分,这里设计了两个方法

fullRow(){}和clearRow()

运行了一下,没图,还需要复写paintComponent(){},在这里画lsbottom,当前图形njx,下一个图形nextjx,级别level,成绩score

4、画布类

class Canvas extends JFrame { 
 private static int width=500;
 private static int height=600;
 private Palette ipal;}

只需要把画板加进来就好了

运行,基本功能都实现了。

总结:Set集合的内容改变值后不能自动排序,这点记忆深刻,因为这个问题困扰了1天,既然不能自动排序,也就没必要用Set集合了,不过后来也没再修改。

下一节介绍:推箱子


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值