欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

 Java俄罗斯方块01-03

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;
		}
	}

}

相关标签: Java项目