俄罗斯方块历程
版本1.0:效果图
步骤: 1@ 首先建造主框架图Frame(注意控制面板的的大小)
(记住添加setDefaultCloseOperation( EXIT_ON_CLOSE ) ;防止占用内存)
2@ 建造面板JPanel(注意在set;ayout 方法时采用流式布局管理
new FlowLayout( FlowLayout.RIGHT ))来存放按钮 *******重要
3@ 以此存放好好“分数”、“速度”、版本信息、横线等
4@ 增加监听,写一个私有监听内部类GameListener 实现(implements)接口
ActionListerner、KeyLisetener
(注意要在面板中增加按键监听“addKeyListener( new GasmeListener)”;)
5@ 重点::::::按钮得到监听后一定记住还回焦点!!!!requestFocus(true);
实例:if(e.getSource() == beginGame) {
if(e.getActionCommand() == "开始") {
beginGame.setText("重置");
requestFocus(true);
// 焦点
System.out.println("0");
start = true;
if( !isNewAct() ) {
6@、对于图画的移动,一定会有一个移动的方法(move)此次移动的代码为:
(注意:每移动一次就要重画一次@!!!!!!!)
public void move(int x,int y) {
if(minYes(x,y)){
for(int i = 0;i < gAct.length;i++){
System.out.println("0");
gAct[i].setX(gAct[i].getX()+x);
gAct[i].setY(gAct[i].getY()+y);
/*gAct[i].x += x;
gAct[i].y += y;*/
}
}
repaint();
// 注意要重画,否则无法显示下一次
}
7@、定义GameAct类!!!!以判定图片方块位置
8@ 设计时可以把方框设成10x18的方框,来设计图块位置
9@ 图块范围选定为旋转算法:
public boolean minYes(int x,int y) {
for(int i = 0;i < gAct.length;i++) {
if(!maxYes(gAct[i].getX()+x,gAct[i].getY()+y)) {
return false;
}
}
return true;
}
public boolean maxYes(int x,int y) {
if(x < 0 || x > 9 || y < 0 || y > 17) {
return false;
}
return true;
}
版本2.0
向上的旋转算法
public void keyUp() {
GameAct[] tempUp = new
GameAct[4];
// 临时
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
位置
for(int i = 0;i < tempUp.length;i++) {
// 记录原来的值,以便进行实时改变
tempUp[i] = new GameAct();
tempUp[i].setX(gAct[i].getX());
tempUp[i].setY(gAct[i].getY());
}
Int cx = ( tempUp[0].getX()+tempUp[1].getX()+tempUp[2].getX()+tempUp[3].getX() )/4;
int cy = ( tempUp[0].getY()+tempUp[1].getY()+tempUp[2].getY()+tempUp[3].getY() )/4;
for(int i = 0;i < tempUp.length;i++) {
tempUp[i].setX(cx+cy-gAct[i].getY());
tempUp[i].setY(cy-cx+gAct[i].getX());
}
for(int i = 0;i < tempUp.length;i++) {
if(!maxYes(tempUp[i].getX(),tempUp[i].getY())) {
return ;
}
}
for(int i = 0;i < tempUp.length;i++) {
gAct[i].setX(tempUp[i].getX());
gAct[i].setY(tempUp[i].getY());
}
repaint(); // 每次改变了值后就得重画
}
生成下个方块
记录好下个随机数!!!
将随机数定义为成员变量而非局部变量,同时在可以newAct()== true时产生下个随机数(一个是监听一个是向下方向)然后用一个临时数组(
GameAct[] gActTemp = new GameAct[4];)记录好下各个的位置及下个的newAct();