用JAVA写的俄罗斯方块

这篇博客介绍了作者使用JAVA初学编程时实现的俄罗斯方块游戏,包括N键开始、P键暂停、R键重新开始、空格键变形等功能。游戏中有7种随机方块,一次性消除4行可以解锁提示功能。代码分为两个类进行实现。
摘要由CSDN通过智能技术生成

用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,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值