老师提供的代码:
import java.awt.*;
import java.awt.event.*;
/**
- Sample application of Rassia game *
- @author Zhefan Jin
-
@version 1.00 07/05/28
*/
class GamePanel extends Frame {/**
-
The attributes of class GamePanel
*/
int cellSize =20;
int hCellCount =30;
int vCellCount =40;
int sideSpace =20, bottomSpace=20, upSpace=60;Dimension dimFrame, dimGame;
Point GameAreaZero;BlockB activeBlock;
//End of attributesprivate Point Convert2DC(Point p){
Point pReturn =new Point();
pReturn.x =p.x +sideSpace;
pReturn.y =dimFrame.height -bottomSpace -p.y;return pReturn;
}
/**
-
The constructor.
*/
public GamePanel() {dimFrame =new Dimension();
dimGame =new Dimension();
GameAreaZero =new Point();dimFrame.height = upSpace +bottomSpace +vCellCount*cellSize;
dimFrame.width = sideSpace*2 + hCellCount*cellSize;
GameAreaZero.x = sideSpace;
GameAreaZero.y = dimFrame.height -bottomSpace;
dimGame.height = vCellCount*cellSize;
dimGame.width = hCellCount*cellSize;activeBlock =new BlockB();
System.out.println(dimFrame.toString());
System.out.println(GameAreaZero.toString());setResizable(false);
MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu();
MenuItem menuFileExit = new MenuItem();
MenuItem menuFileStart = new MenuItem();menuFile.setLabel("File");
menuFileExit.setLabel("Exit");
menuFileStart.setLabel("Start");// Add action listener.for the menu button
menuFileExit.addActionListener
(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
GamePanel.this.windowClosed(); //syntex?
}
}
);
menuFileStart.addActionListener
(
new ActionListener() {
public
老师的要求:
-
图 1
2. 具体如下:
a) 已提供的代码是Russia.java,这个文件是正确的,不要对它作任何修改。
b) 要求你生成一个新文件BlockB.java,在其中实现类BlockB。Russia.java中使用了BlockB类,如果你的编写都正确,Russia就能正常执行。
c) BlockB.java和Russia.java需放在同一个目录下。按照要求实现BlockB类后,编译这两个文件,然后运行Russia,正确情况下将出现图1效果。
3. BlockB类的要求:
a) BlockB类的数据(变量)成员是:
i. Point类的对象origin, p0, p1, p2, p3。Point类在java类库的位置是java.awt.Point。(我们在上学期的实验07中使用了Point类。实验07的题目和答案在发下来的资料中供参考。)
ii. int类型数据成员gesture,其取值范围0-3,表示4种姿态,具体说明见后。
b) BlockB类的方法(函数)成员如下:
i. BlockB()
构造函数。其中对Point类数据成员进行创建(new),并对其它成员变量赋合适的初值。
ii. void setGesture(int g)
设置姿态,包含两个动作:1)用参数g对数据成员gesture进行赋值。2)根据新的姿态,调整p0, p1, p2, p3在Block局部坐标系里的坐标值,坐标说明见后。
iii. void moveTo(int x, int y)
把数据成员origin(原点)移动到窗口坐标系(x,y)位置。
iv. Point getP0()
直接返回p0。
v. Point getP1()
直接返回p1。
vi. Point getP2()
直接返回p2。
vii. Point getP3()
直接返回p3。
4. 关于点的位置、姿态等的说明:
a) 坐标系的说明
i. 俄罗斯方块游戏中的活动块称为一个Block(块)。游戏使用两种坐标系:Block局部坐标系和游戏窗口坐标系。
ii. Block局部的坐标系定义了组成Block的4个小方块p0, p1, p2, p3之间的位置关系,如下图:
如上图中4个点的坐标可以是:p0(0,0), p1(0,1), p2(0,2), p3(-1,0)。
iii. 一个Block在窗口中的位置由点origin确定,origin是Block坐标系的原点在窗口坐标系中的位置,如下图origin位置是(10, 10):
b) 姿态(gesture)的说明。一个Block可以有4种姿态,分别用0、1、2、3来表示,每种姿态下点p0、p1、p2、p3的位置是不同的。