java俄罗斯方块详解

【Java】俄罗斯方块小游戏(附源码)_500行可运行小游戏代码-优快云博客icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/weixin_48701521/article/details/121709104本文是对上面文章代码的解释。

一:一些包和类

package 俄罗斯方块;//定义了一个名为俄罗斯方块的包。包是用来组织类和接口的一种机制,通常为了避免类名冲突和方便管理代码

import java.awt.*;//导入Java AWT(Abstract Window Toolkit)库中的所有类。AWT是Java用于创建图形用户界面的工具包。*指所有
import java.awt.event.*;//这些类用于处理事件(例如鼠标点击、键盘输入等)
import javax.swing.*; //Swing用于创建图形用户界面的更现代化的工具包,相对于AWT提供了更丰富的组件和更强的功能。
import java.applet.*;//Applet是用于创建嵌入在网页中的小型应用程序的类,不过在现代Java应用中已经很少使用
import java.lang.String.*;//导入java.lang.String类中的所有嵌套类,java.lang.String:用于处理字符串的类
import java.lang.*;//包含了Java语言的核心类(例如基本类型的包装类、基本的数学函数、系统相关的实用工具类等
import java.io.*;//这些类用于处理输入和输出操作,例如文件读写、数据流操作等

public class Block extends JPanel implements ActionListener,KeyListener//应该是继承JPanel
{
//定义了一个名为 Block 的类,该类继承自 JPanel 并实现了 ActionListener 和 KeyListener 接口。
  • Block 类继承自 JPanel,意味着它是一个可以作为 Swing 容器使用的组件。
  • Block 类实现了 ActionListenerKeyListener 接口,意味着它将实现这些接口定义的方法,用于处理操作和键盘事件。

	static Button but[] = new Button[6];
	static Button noStop = new Button("取 消 暂 停");//定义了一个静态的Button对象,命名为noStop,按钮上的标签为“取消暂停”。这是一个用来创建图形用户界面按钮的组件,当用户点击这个按钮时,程序可以取消当前的暂停状态。
	static Label scoreLab = new Label("分数:");//定静Label对象,名scoreLab,标签的文本内容为“分数:”。用于在图形用户界面上显示文本的组件,这里用于显示分数的标签说明。
	static Label infoLab = new Label("提示:");//同scoreLab,显示提示信息的标签说明。
	static Label speedLab = new Label("级数:");//显示游戏级别(速度)的标签说明。
	static Label scoreTex = new Label("0");//显示当前分数的组件,初始分数为0
	static Label infoTex = new Label(" ");//提示信息内容的组件,初始内容为空
	static Label speedTex = new Label("1");//显示当前游戏级别(速度)的组件,初始级别为1。
	
	static JFrame jf = new JFrame();//定义并初始化 JFrame 对象 jf,用作游戏的主窗口
	static MyTimer timer; //声明一个静态的 MyTimer 对象 timer,用于游戏的计时。
	static ImageIcon icon=new ImageIcon("resource/Block.jpg");//初始化,加载位于 "resource/Block.jpg" 的图像,
	static JMenuBar mb = new JMenuBar();//静态的 JMenuBar 对象 mb,这是一个菜单栏。
	static JMenu menu0 = new JMenu("游  戏 ");//初始化,菜单的标题为“游戏”。
	static JMenu menu1 = new JMenu("帮  助 ");//菜单的标题为“帮助”
	static JMenuItem mi0 = new JMenuItem("新 游 戏");//同上
	static JMenuItem mi1 = new JMenuItem("退  出");//同上
	static JMenuItem mi1_0 = new JMenuItem("关  于");//同上
   static JDialog dlg_1;//JDialog 对象 dlg_1,可能用于弹出对话框。
	static JTextArea dlg_1_text = new JTextArea();//表示游戏的状态。0 表示未开始,1 表示开始,2 表示暂停。
	static int startSign = 0;//游戏开始标志 0 未开始 1 开始 2 暂停
	static String butLab[] = {"start game","restart","decrease level","increase level","pause","exit"};
	static int game_body[][] = new int[19][10];//初始化二维数组 game_body,用于表示游戏的主要区域。
	static int game_sign_x[] = new int[4];//用于记录4个方格的水平位置
	static int game_sign_y[] = new int[4];//用于记录4个方格的垂直位置
	static boolean downSign = false;//是否落下
	static int blockNumber = 1;//砖块的编号
	static int gameScore = 0;//游戏分数
	static int speedMark = 1;//游戏速度等级
	
	

public static void main(String args[]) 
	{
		Block myBlock = new Block();//是游戏的主要组件,负责绘制和管理游戏逻辑。
		mb.add(menu0);
		mb.add(menu1);//将两个菜单 menu0(“游戏”)和 menu1(“帮助”)添加到菜单栏 mb
		menu0.add(mi0);
		menu0.add(mi1);//菜单项 mi0(“新游戏”)和 mi1(“退出”)添加到 menu0(“游戏”)菜单中。
		menu1.add(mi1_0);//将菜单项 mi1_0(“关于”)添加到 menu1(“帮助”)菜单中。

	    jf.setJMenuBar(mb);	//将菜单栏 mb 设置为主窗口 jf 的菜单栏。
	    
	    myBlock.init();//初始化 Block 对象,设置游戏的初始状态
	    jf.add(myBlock);//将 myBlock 添加到主窗口 jf 中,使其成为窗口的一个组件。
	    jf.setSize(565,501);//设置主窗口 jf 的大小,宽,高
		jf.setResizable(false);//禁止用户调整主窗口 jf 的大小
		jf.setTitle("俄罗斯方块");//设置主窗口 jf 的标题
		jf.setIconImage(icon.getImage());//设置主窗口 jf 的图标为加载的 icon 图像。


		jf.setLocation(200,100);//设置主窗口 jf 的初始位置,显示在屏幕上坐标 (200, 100) 
		jf.show();//这个方法已经过时,用jf.setVisible(true)!!!!!!!!!!!!!!!!!
		timer = new MyTimer(myBlock); //启动线程,创建一个 MyTimer 类的实例 timer,传递 myBlock 作为参数,假设 MyTimer 是一个用于控制游戏时间和逻辑的线程。
       timer.setDaemon(true);//timer 线程设置为守护线程,这意味着当所有非守护线程结束时,程序将自动退出。

java

       timer.start();//启动 timer 线程
       timer.suspend();//挂起 timer 线程的执行。请注意,suspend 方法是过时的且不安全的,在现代Java应用中应使用其他方式来控制线程的执行(例如,使用 wait 和 notify 方法)
	}

public void init()//公共方法 init,用于初始化界面组件和布局
	{
  
  

setLayout(null);//布局管理器设置为 null,表示使用绝对布局,即手动设置每个组件的位置和大小。
   	
for(int i = 0;i < 6;i++)//使用一个循环初始化 6 个按钮
   	{
   		but[i] = new Button(butLab[i]);//创建一个按钮,标签为 butLab 数组中的第 i 个元素。
   		add(but[i]);//将按钮添加到当前容器中
   		but[i].addActionListener(this);//为按钮添加一个动作事件监听器。
   		but[i].addKeyListener(this);//添加键盘事件监听器
   		but[i].setBounds(360,(240 + 30 * i),160,25);//设置按钮的位置和大小
   	}
       
       add(scoreLab);//将标签和文本框组件添加到当前容器中。
       add(scoreTex);

       add(speedLab);
       add(speedTex);

       add(infoLab);
       add(infoTex);

       add(scoreLab);//重复添加了!!!!!!!!!!!
       scoreLab.setBounds(320,15,30,20);//scoreLab 的位置和大小。
       scoreTex.setBounds(360,15,160,20);//scoreTex 的位置和大小。
       scoreTex.setBackground(Color.white);//设置 scoreTex 的背景颜色为白色。
		
       speedLab.setBounds(320,45,30,20);//同上
       speedTex.setBounds(360,45,160,20);
       speedTex.setBackground(Color.white);
		
       infoLab.setBounds(320,75,30,20);//同上
       infoTex.setBounds(360,75,160,20);
       infoTex.setBackground(Color.white);
		
		but[1].setEnabled(false);//禁用 but 数组中的第 1 和第 4 个按钮。
		but[4].setEnabled(false);
		
		noStop.setBounds(360,360,160,25);
		noStop.addActionListener(this);//为 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值