Java俄罗斯方块01-03
程序员文章站
2022-03-25 14:09:23
...
之前用java web写过俄罗斯方块游戏,但由于实习想做Java,把项目经历转成了Java,找了视频一边看一边做,看完一部分整理成博客以便后续复习思考。视频链接
这部分画出了游戏窗口,将TetrisClient类继承了Frame类,以下有几个需要注意的点:
a. 这里的修正值定义了游戏区域到窗口边缘的距离;
b. 这里添加窗口关闭方法的时候使用了匿名类:
面试题:匿名类的作用---匿名类相当于在定义类的同时再新建这个类的实例。匿名类可以在需要的地方使用接口, 可以在使用的同时实现, 这样不但节省了空间, 还可以使代码更加明了。这里对于addWindowListener中windowClosing进行重写,右击addWindowListener,在出现的菜单中,选择Source-Override/Implement Methods。
c. 这里的刷新类用线程实现:sleep(n),n越大,则下落越慢;
d. 这里控制方块停止运动的条件: y + SIZE >= TetrisClient.CORRECT_Y + TetrisClient.GAME_HEIGHTH
TetrisClient类:
import java.awt.*;
import java.awt.event.*;
public class TetrisClient extends Frame{
//声明变量,窗口出现的位置
int x = 300;
int y = 100;
//游戏窗体宽高
public static final int WIDTH = 400;
public static final int HEIGHT = 480;
//修正值
public static final int CORRECT_X = 110;
public static final int CORRECT_Y = 50;
//游戏区域大小
public static final int GAME_WIDTH = 200;
public static final int GAME_HEIGHTH = 400;
//实例化一个Unit对象
Unit u = new Unit(CORRECT_X + 100, CORRECT_Y + 80);
public void lancher() {
//出现位置
this.setLocation(x,y);
//大小
this.setSize(WIDTH, HEIGHT);
//设置标题
this.setTitle("Tetris Game");
//不可调节大小
this.setResizable(false);
//布局属性
this.setLayout(null);
//设置游戏背景颜色
this.setBackground(new Color(245, 212, 226));
//添加窗口关闭事件
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
//启动一个刷新线程
new Thread(new paintThread()).start();
//可见性
this.setVisible(true);
}
@Override
public void paint(Graphics g) {
Color c = g.getColor();
g.drawRect(CORRECT_X, CORRECT_Y, GAME_WIDTH, GAME_HEIGHTH);
g.setColor(c);
//画出Unit对象U
u.draw(g);
u.changeStatus();
if(!u.stopped) {
u.drop();
}
}
public static void main(String[] args) {
new TetrisClient().lancher();
}
//刷新类(内部类)-线程
public class paintThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
repaint();
//刷新间隔
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.getStackTrace();
}
}
}
}
}
Unit类:
import java.awt.Color;
import java.awt.Graphics;
public class Unit {
//出现的位置
int x,y;
//大小
public static final int SIZE = 20;
//下落步长
public static final int SPEED = 20;
//停止状态
public boolean stopped = false;
//构造函数
public Unit(int x,int y) {
this.x = x;
this.y = y;
}
//画出自己的方法
public void draw(Graphics g) {
Color c = g.getColor();
g.setColor(Color.BLUE);
g.drawRect(x, y, SIZE, SIZE);
}
public void drop() {
y += SPEED;
}
//检测当前状态
public void changeStatus() {
if(y + SIZE >= TetrisClient.CORRECT_Y + TetrisClient.GAME_HEIGHTH) {
stopped = true;
}
}
}
上一篇: 邻接矩阵