用JAVA写的俄罗斯方块,刚学,参考了CSDN里的代码,写的很乱。一共2类。N键开始,P暂停,R重新开始,空格变形。7个方块随机。一次消除4行可以打开提示功能,简化版。
类1
package maozifangkuai;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GamePanel extends JPanel {
private static final long serialVersionUID = 1L;
Block block = null;// 方块
Block nextblock = null;// 下一个方块
GameThread gamethread = new GameThread();// 线程实例化
ArrayList<int[][]> datas = new ArrayList<>();// 7方块样式
ArrayList<Block> blocks = new ArrayList<>();// 7个图案存4个块的集合
ArrayList<Block> nextblocks = new ArrayList<>();// 下一个图案存4个块的集合
ArrayList<Integer> clearblocks = new ArrayList<>();// 待消除块的行号集合
static JFrame frame = null;// 主Frame
static int width = 600;// 窗体宽度
static int height = 900;// 方块活动高度
int blockwidth = 30;// 格子宽度
int tempno = width / 2 / blockwidth;
int row = width / blockwidth;// 列
int col = height / blockwidth;// 行
static int frameheight = height + 40;// 窗体高度
int score = 0;// 分数
int fourscore = 0;// 分数
int modelcount = 0;// 方块计数
int modeltype = 0;// 方块样式
int gamespeed = 400;// 游戏速度
int hitcount = 0;
boolean doublehit = false;
boolean leftflag = true;// 左移布尔
boolean rightflag = true;// 右移布尔
boolean downflag = true;// 下落布尔
boolean gameflag = false;// 游戏布尔
boolean hit = false;// 碰撞布尔
boolean canrotate = false;// 旋转布尔
Block[][] blockStack = new Block[row][col];// 存储落地的方块
public static void main(String[] args) {
frame = new JFrame();
frame.setTitle("N=Start,P=Pause,R=Restart");// 设置标题
frame.setSize(width + 17, frameheight);// 设定尺寸
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 点击关闭按钮是关闭程序
frame.setResizable(false); // 不允许修改界面大小
frame.getContentPane().setBackground(new Color(0, 100, 0, 255));// 背景色
GamePanel gamepanel = new GamePanel();// GamePanel实例化
frame.add(gamepanel);// GamePanel加入容器
frame.setVisible(true);// 可视
}
public GamePanel() {
this.setOpaque(false);// 设置透明
this.setBounds(0, 0, width, frameheight);// 设置位置,大小
datainit();// 方块样式初始化
createKeyListener();// 监听
nextblock = new Block(0, 0, this);
init();// 方块初始化
gamethread.start();// 线程开始
}
// 方块有7个形状可以随机
void datainit() {
int[][] data1 = { { -1, 0 }, { 0, 0 }, { 1, 0 }, { 1, 1 } };
datas.add(data1);
int[][] data2 = { { -1, 0 }, { 0, 0 }, { 1,