⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 game.java

📁 Java 开发的俄罗斯方块游戏
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.Timer;

public class Game extends Frame{
	private Choice speedControl;//游戏速度选择控件
	private DrawTable drawTable;//控制游戏桌显示
	private DrawNextShape drawNextShape;//显示下一个游戏块
	private  int delayTime;//块下落的时间间隔,也就是游戏速度
	private final int speedTime = 800;//
	private Button startButton ;//开始按钮
	private boolean isKeyEnable = false;//标识键盘输入是否可用
	private Shape firstShape = randomShape();//产生第一个游戏块
	private Shape nextShape = randomShape();//产生下第二个游戏块
	private Timer timer;//计时器,让游戏块自动下落
	private int score = 0;//分数
	private Label scoreLabel;//显示分数的标签
	private Label speedControlLabel;//提示速度选择的标签
	private Label nextShapeLabel;//提示下一个游戏块的标签
	private Label myInformation;//显示游戏制作者信息
	private Label noticeLabel;//提示标签
	private Label noticContentLabel;//提示内容1
	private Label noticContentLabel2;//提示内容2
	
	//对游戏进行初始化
	public void inint(){
		
		this.setTitle("俄罗斯方块");
		this.setLayout(null);
		this.setLocation(300, 200);
		this.setSize(500,500);
		this.setBackground(new Color(500555));
		this.addWindowListener(new WinClose());
		
		startButton = new Button("开始");
		startButton.setBounds(370, 400, 90, 30);
		startButton.setBackground(new Color(5555555));
		startButton.setFont(new Font("1",1,16));
		startButton.addActionListener(new StartButtonListener());
		startButton.setEnabled(true);
		startButton.addKeyListener(new MyKeyListener());
		this.add(startButton);

		
		scoreLabel = new Label("分数: "+score);
		scoreLabel.setBounds(370, 125, 90, 30);
		scoreLabel.setFont(new Font("1",1,16));
		scoreLabel.setBackground(new Color(55550255));
		this.add(scoreLabel);
		
		drawTable = new DrawTable();
		drawTable.setLocation(40, 50);
		drawTable.addKeyListener(new MyKeyListener());
		this.add(drawTable);
		
		drawNextShape = new DrawNextShape();
		drawNextShape.setLocation(370, 200);
		drawNextShape.addKeyListener(new MyKeyListener());
		this.add(drawNextShape);
		
		speedControlLabel = new Label("请选择速度:");
		speedControlLabel.setFont(new Font("1",1,16));
		speedControlLabel.setBounds(370, 60, 100, 20);
		this.add(speedControlLabel);
		
		nextShapeLabel = new Label("下一个块:");
		nextShapeLabel.setFont(new Font("1",1,16));
		nextShapeLabel.setBounds(370, 170, 100, 20);
		this.add(nextShapeLabel);
		
		
		
		noticeLabel = new Label("提示:");
		noticeLabel.setFont(new Font("1",1,16));
		noticeLabel.setBounds(370, 325, 100, 20);
		this.add(noticeLabel);
		
		noticContentLabel2 = new Label("请用方向键");
		noticContentLabel2.setFont(new Font("1",1,16));
		noticContentLabel2.setBounds(370, 345, 100, 20);
		this.add(noticContentLabel2);
		
		noticContentLabel = new Label("等待开始...");
		noticContentLabel.setFont(new Font("1",1,16));
		noticContentLabel.setBounds(370, 375, 100, 20);
		this.add(noticContentLabel);
		
		myInformation = new Label("版权所有:丁小伟 QQ:284983884 邮箱:dingxw92@yahoo.com.cn");
		myInformation.setFont(new Font("1",1,16));
		myInformation.setBounds(5, 460, 490, 30);
		this.add(myInformation);
		
		speedControl = new Choice();
		speedControl.setBounds(370,90,90,30);
		speedControl.setBackground(new Color(500500));
		speedControl.setFont(new Font(" ",1,16));
		speedControl.add("1");
		speedControl.add("2");
		speedControl.add("3");
		speedControl.add("4");
		speedControl.add("5");
		speedControl.add("6");
		speedControl.add("7");
		speedControl.add("8");	
		speedControl.addItemListener(new SpeedControlListener());
		speedControl.setEnabled(true);
		this.add(speedControl);
		
		delayTime = speedTime;
		timer = new Timer(delayTime,new TimeListener());
		
		this.addKeyListener(new MyKeyListener());
		
		firstShape.begin();
		nextShape.beforeBegin();
	}
	
	//产生随机游戏块
	private  Shape randomShape(){
		Random randomNumCreater =new Random();
		int randomNum = randomNumCreater.nextInt(7); 
		Shape  shape = null;
		switch(randomNum){
				case 0:shape = new Shape0();break;
				case 1:shape = new Shape1();break;
				case 2:shape = new Shape2();break;
				case 3:shape = new Shape3();break;
				case 4:shape = new Shape4();break;
				case 5:shape = new Shape5();break;
				case 6:shape = new Shape6();break;
				case 7:shape = new Shape7();break;
				default:break;
		}
		return shape; 
	}
	
	
	//游戏结束的一些处理
	public void gameOver(){
		isKeyEnable = false;
		timer.stop();
		drawTable.setEnabled(false);
		speedControl.setEnabled(true);
		noticContentLabel.setText("游戏结束");
		startButton.setLabel("我还要玩");
	}
	
	//当游戏块不能下落时,调用此方法处理
	public void afterDownFalse(){
		addScore(firstShape.addPoint());
		scoreLabel.setText("分数: "+score);
		firstShape = nextShape;
		nextShape = randomShape();
		nextShape.beforeBegin();
		if(isKeyEnable == true){
			isKeyEnable = false;
			if(firstShape.begin() == false){
				gameOver();
			}
			else
				isKeyEnable = true;
		}
		else{
			if(firstShape.begin() == false)
				gameOver();
		}
	}
	
	public void addScore(int rows){
		if(rows!=0){
			switch(delayTime*1000/speedTime){
			case 1000 : score = (rows*2-1)*10 + score;break;
			case  875 : score = (rows*2-1)*20 + score;break;
			case  750 : score = (rows*2-1)*30 + score;break;
			case  625 : score = (rows*2-1)*40 + score;break;
			case  500 : score = (rows*2-1)*50 + score;break;
			case  375 : score = (rows*2-1)*60 + score;break;
			case  250 : score = (rows*2-1)*70 + score;break;
			case  125 : score = (rows*2-1)*80 + score;break;
			default : break;
			}
		}
	}
	
	//游戏重新开始时进行的一些处理
	public void gameRestart() {
		timer.stop();
		Table.init();
		firstShape = randomShape();
		nextShape = randomShape();
		drawNextShape.repaint();
		nextShape.beforeBegin();
		firstShape.begin();
		drawTable.repaint();
		isKeyEnable = true;	
		score = 0;
		scoreLabel.setText("分数: "+new Integer(score).toString());
		timer.start();
	}
	
	//时间监听器
	public class TimeListener implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			boolean b = firstShape.down();
			if(b == false)
				afterDownFalse();
			drawTable.repaint();
			drawNextShape.repaint();
		}	
	}
	
	//开始按钮监听器
	public class StartButtonListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			if(startButton.getLabel().equals("开始")){
				noticContentLabel.setText("游戏进行中...");
				startButton.setLabel("暂停");
				timer.start();
				isKeyEnable = true;
				speedControl.setEnabled(false);
			}
			else if(startButton.getLabel().equals("暂停")){
				noticContentLabel.setText("游戏暂停...");
				startButton.setLabel("继续");
				timer.stop();
				isKeyEnable = false;
				speedControl.setEnabled(false);
			}
			else if(startButton.getLabel().equals("继续")){
				noticContentLabel.setText("游戏进行中...");
				startButton.setLabel("暂停");
				timer.start();
				isKeyEnable = true;
				speedControl.setEnabled(false);
			}
			else if(startButton.getLabel().equals("我还要玩")){
				noticContentLabel.setText("游戏进行中...");
				startButton.setLabel("暂停");
				speedControl.setEnabled(false);
				gameRestart();
			}
			
		}
		
	}
	
	//键盘监听器 ,利用isKeyEnable标识是否响应键盘事件
	public class MyKeyListener implements KeyListener{

		public void keyPressed(KeyEvent e) {
			if(isKeyEnable){
				switch( e.getKeyCode()){
				case KeyEvent.VK_UP: firstShape.change();break;
				case KeyEvent.VK_DOWN:
					{
						if(firstShape.down() == false)
							afterDownFalse();
					};break;
				case KeyEvent.VK_LEFT: firstShape.left();break;
				case KeyEvent.VK_RIGHT: firstShape.right();break;			
				}
				drawTable.repaint();
				drawNextShape.repaint();
			}
		}
		public void keyReleased(KeyEvent e) {}
		public void keyTyped(KeyEvent e) {}
	}

	//速度选择监听器
	public class SpeedControlListener implements ItemListener{

		public void itemStateChanged(ItemEvent e) {
			if(e.getItem().equals("1")){
				delayTime = speedTime;
				timer.setDelay(delayTime);
			}
			else if(e.getItem().equals("2")){
				delayTime = speedTime*7/8;
				timer.setDelay(delayTime);
			}
			else if(e.getItem().equals("3")){
				delayTime = speedTime*6/8;
				timer.setDelay(delayTime);
			}
			else if(e.getItem().equals("4")){
				delayTime = speedTime*5/8;
				timer.setDelay(delayTime);
			}
			else if(e.getItem().equals("5")){
				delayTime = speedTime*4/8;
				timer.setDelay(delayTime);
			}
			else if(e.getItem().equals("6")){
				delayTime = speedTime*3/8;
				timer.setDelay(delayTime);
			}
			else if(e.getItem().equals("7")){
				delayTime = speedTime*2/8;
				timer.setDelay(delayTime);
			}
			else if(e.getItem().equals("8")){
				delayTime = speedTime*1/8;
				timer.setDelay(delayTime);
			}
		}		
	}
	
	//关闭主窗口
	public class WinClose extends WindowAdapter{
		public void windowClosing(WindowEvent e){
			System.exit(0);
		}
	}

	//主函数
	public static void main(String args[]){
		Game g = new Game();
		g.inint();
		g.setVisible(true);//这句必须要,要不看不见游戏桌!
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -