java大神现场求救
将rar文件解包,有如下内容:a) Russia.javab) 目标:按照要求完成部分程序,实现俄罗斯方块游戏的一个局部,效果如下: 图13. 关于游戏的一些说明:a) 坐标系的说明 i. 俄罗斯方块游戏中的活动块称为一个Block(块)。游戏使用两种坐标系:Block局部坐标系和游戏窗口坐标系。ii. Block局部的坐标系定义了组成Block的4个小方块p0, p1, p2, p3之间的位置关系,如下图: 如上图中4个点的坐标可以是:p0(0,0), p1(1,0), p2(0,1), p3(-1,0)。
iii. 一个Block在窗口中的位置由点origin确定,origin是Block坐标系的原点在窗口坐标系中的位置,如下图: b) 姿态(gesture)的说明。一个Block可以有4种姿态,分别用0、1、2、3来表示,每种姿态下点p0、p1、p2、p3的位置是不同的。
4. 相关的java文件和编译执行顺序:a) 已提供了Russia.java,这个文件可以通过编译。不要修改此文件。b) 要求生成一个新的BlockA.java文件,在其中实现类BlockA。Russia.java中使用了BlockA。c) BlockA.java和Russia.java需放在同一个目录下。按照要求实现BlockA类,编译通过。运行Russia.java,正确情况下将出现图1效果。d) 俄罗斯方块程序有多种块(Block),比如长条和田字形。你可自行选择一种作为BlockA。只要p0,p1,p2,p3位置正确,都可以运行。5. BlockA类的说明:a) 数据成员如下:
i. Point类的对象origin, p0, p1, p2, p3。Point类在java类库的位置是java.awt.Point。
ii. int类型数据成员gesture,取值范围0-3,表示4种姿态。b) BlockA类的方法成员如下: i. BlockA()构造函数。对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。
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;
BlockA activeBlock;
//End of attributes
private 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 BlockA();
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 void actionPerformed(ActionEvent e) {
System.out.println("Game Start");
}
}
);
menuFile.add(menuFileStart);
menuFile.add(menuFileExit);
menuBar.add(menuFile);
setTitle("Rassia");
setMenuBar(menuBar);
setSize(dimFrame);
// Add window listener.
this.addWindowListener
(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
GamePanel.this.windowClosed();
}
}
);
}
/**
* Shutdown procedure when run as an application.
*/
protected void windowClosed() {
// TODO: Check if it is safe to close the application
// Exit application.
System.exit(0);
}
/**
* draw a cell at line i and column j with bottom-left being origin
*/
private void drawCell(int i, int j, Graphics g){
Point p =new Point();
p = Convert2DC(new Point((i-1)*cellSize, j*cellSize));
g.drawRect(p.x, p.y, cellSize, cellSize);
}
/**
* draw a cell at line i and column j with bottom-left being origin
*/
private void drawBlock(BlockA b, Graphics g){
Point p;
p =b.getP0();
drawCell(b.origin.x +p.x, b.origin.y+p.y, g);
p =b.getP1();
drawCell(b.origin.x +p.x, b.origin.y+p.y, g);
p =b.getP2();
drawCell(b.origin.x +p.x, b.origin.y+p.y, g);
p =b.getP3();
drawCell(b.origin.x +p.x, b.origin.y+p.y, g);
}
/**
* paint the panel
*/
public void paint(Graphics g)
{
g.clearRect(0,0, this.getWidth(), this.getHeight());
//draw out bound of game area
Point p= Convert2DC(new Point (0,dimGame.height));
g.drawRect(p.x, p.y, dimGame.width, dimGame.height);
//just test things
drawCell(1,1,g);
// drawCell(hCellCount,vCellCount,g);
//draw the blocks
activeBlock.moveTo(10,15);
activeBlock.setGesture(0);
drawBlock(activeBlock, g);
activeBlock.moveTo(10,25);
activeBlock.setGesture(1);
drawBlock(activeBlock, g);
activeBlock.moveTo(25,15);
activeBlock.setGesture(2);
drawBlock(activeBlock, g);
activeBlock.moveTo(25,25);
activeBlock.setGesture(3);
drawBlock(activeBlock, g);
}
}
/**
* AWT Sample application
*
* @author
* @version 1.00 07/05/28
*/
public class Rassia {
public static void main(String[] args) {
// Create application frame.
GamePanel panel = new GamePanel();
// Show frame
panel.setVisible(true);
}
}
Java
补充:Java , Java相关