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

📄 game.java

📁 J2SE版的俄罗斯方块。SWING界面.有分数记录功能
💻 JAVA
字号:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

/*
*J2SE俄罗斯方块1.0
*作者:hangtao
*http://hangtao.5d6d.com
*最后修改时间2008/8/5
*
*/

@SuppressWarnings("serial")
class DrawGround extends JPanel
{

	private BackGround BG;
	public DrawGround(BackGround BG)
	{
	this.BG=BG;	
	}
		
	public void paint(Graphics g)
	{
		//setVisible(false);
		Image[] bg= new Image[6];
		bg[5]=Toolkit.getDefaultToolkit().getImage("block.png");
		bg[4]=Toolkit.getDefaultToolkit().getImage("blank.png");
		bg[3]=Toolkit.getDefaultToolkit().getImage("block.png");
		bg[2]=Toolkit.getDefaultToolkit().getImage("wall.png");
		for(int ly=0;ly<=630;ly=ly+30)
		{
			for(int lx=0;lx<=330;lx=lx+30)
			{
            g.drawImage(bg[BG.ground[ly/30+4][lx/30]], lx, ly, this);
			}
		}
		//setVisible(true);
	
	}

}
@SuppressWarnings("serial")
class ShowNextBoxPane extends JPanel
{
	private Box box;
    public ShowNextBoxPane(Box B)
    {
    	this.box=B;
    }
	public void paint(Graphics g)
	{
		//setVisible(false);
		Image[] img=new Image[2];
		img[0]=Toolkit.getDefaultToolkit().getImage("blank.png");
		img[1]=Toolkit.getDefaultToolkit().getImage("block.png");
		g.drawString("Next:", 0, 0);
        for(int ly=0;ly<=90;ly=ly+30)
        {
        	for(int lx=0;lx<=90;lx=lx+30)
        	{
        		g.drawImage(img[box.box[box.nextType][box.nextStat][ly/30][lx/30]],lx+30,ly+30,this);
        	
        	}

        }
       // setVisible(true);

    }
}
@SuppressWarnings("serial")
class ShowScore extends Canvas
{
	private Box box;
	private int rec;
	private String name;
	public ShowScore(Box box,String name,int rec)
	{
		this.box=box;
		this.name=name;
		this.rec=rec;
		
	}
	public void paint(Graphics g)
	{
		//setVisible(false);
		g.drawLine(0, 0, 200, 0);
		g.setFont(new Font("宋体",Font.BOLD,30));
		g.drawString("目前得分", 30, 30);
		g.setColor(Color.blue);
		g.drawString(""+box.score, 40, 70);
		g.setColor(Color.black);
		g.drawString("最高纪录",30,100);
		g.setColor(Color.red);
		g.drawString(""+rec, 40, 140);
		g.setColor(Color.black);
		g.drawString("记录保持者", 30, 170);
		g.setColor(Color.blue);
		g.drawString(name, 40, 210);
		//setVisible(true);
	}
	
}


public class Game
  {
	
	    JFrame jf=new JFrame();
	    JFrame jf2=new JFrame();
	    Box b=new Box();
	    JPanel KeyPane=new JPanel();
	    JPanel infPane=new JPanel();
	    JPanel BackPane=new JPanel();
	    JMenuBar bar=new JMenuBar();
		JMenu jm1=new JMenu("游戏");
		JMenu jm2=new JMenu("帮助");
		JMenuItem ji1=new JMenuItem("开始/暂停");
		JMenuItem ji2=new JMenuItem("重新开始");
		JMenuItem ji3=new JMenuItem("退出游戏");
		JMenuItem ji4=new JMenuItem("关于游戏");
		ShowNextBoxPane ShowNext=new ShowNextBoxPane(b);
		
		BackGround BG=new BackGround();
		DrawGround DG=new DrawGround(BG);
		Action action=new Action(b,BG);
		DataIO IO=new DataIO(BG,b);
		JButton right=new JButton("right");
		JButton left=new JButton("left");
		JButton down=new JButton("down");
		JButton up=new JButton("up");
		JButton space= new JButton("space");
		String name;
		int rec;
		File file;
		static Game game=new Game();
		
		
	
	public static void main(String agrs[])
	{
		    
			game.start();
	}
	public  void start()
	{
		
///
		file=new File("rec.dat");
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			RandomAccessFile raf=new RandomAccessFile(file,"rw");
			raf.seek(0);
			name=raf.readUTF();
			rec=raf.readInt();
			raf.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		ShowScore showscore =new ShowScore(b,name,rec);
		
		bar.add(jm1);
		bar.add(jm2);
		jm1.add(ji1);
		jm1.add(ji2);
		jm1.add(ji3);
		jm2.add(ji4);
		ji1.addActionListener(new MenuListener(b,game));
		ji2.addActionListener(new MenuListener(b,game));
		ji3.addActionListener(new MenuListener(b,game));
		ji4.addActionListener(new MenuListener(b,game));
		
		
///			
		BackPane.setLayout(new GridLayout(1,2));
		
		infPane.setLayout(new GridLayout(2,1));
		infPane.add(ShowNext);
		infPane.add(showscore);
		
		///
		right.setSize(0, 0);
		right.registerKeyboardAction(new KeyRight(b,action,DG),KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
		left.setSize(0, 0);
		left.registerKeyboardAction(new KeyLeft(b,action,DG),KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
		down.setSize(0, 0);
		down.registerKeyboardAction(new KeyDown(b,action,DG),KeyStroke.getKeyStroke(KeyEvent.VK_DOWN,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
		up.setSize(0, 0);
		up.registerKeyboardAction(new KeyUP(b,action,DG),KeyStroke.getKeyStroke(KeyEvent.VK_UP,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
		space.setSize(0, 0);
		space.registerKeyboardAction(new KeySpace(b,action,DG),KeyStroke.getKeyStroke(KeyEvent.VK_Z,0),JComponent.WHEN_IN_FOCUSED_WINDOW);
		///
		
		jf.setSize(750,750);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.add(right,BorderLayout.SOUTH);
		jf.add(left,BorderLayout.SOUTH);
		jf.add(down,BorderLayout.SOUTH);
		jf.add(up,BorderLayout.SOUTH);
		jf.add(space,BorderLayout.SOUTH);
		jf.add(KeyPane,BorderLayout.SOUTH);
		jf.add(bar,BorderLayout.NORTH);
		
		BackPane.add(DG);
		
		BackPane.add(infPane);
		infPane.setLocation(30, 0);
		jf.add(BackPane);
		jf.setLocation(60,0);
		jf.setResizable(false);
		jf.setVisible(true);
		
		for(;;)
	       {
			   
			   if(b.score<1000)
			   b.delay=1000-(b.score/100)*100;
	    	   action.newbox();
	    	   ShowNext.repaint();
	    	   showscore.repaint();
	    	   
			for(;;)
	        {
	        	while (b.cmd==0)
	        	{
	        		//空循环用于暂停
	        	}
				if(action.down())
	        	{ 
	        		DG.repaint();
	        		action.delay(b.delay);
	        	}
	        	else 
	        		
	        		{
	        		
	        		IO.WriteBoxToGround();
	        		action.clear();
	        		DG.repaint();
	        		if(b.y<=1)game.gameover();
	        		break;
	        		}
	        }
	        

	      /*
			for(int y=3;y<26;y++)
	       {
	       	for(int x=0;x<12;x++)
	       	{
	       		System.out.printf("%d", BG.ground[y][x]);
	       	}
	       	System.out.println();
	       }
	       */
	       
	       
			//System.out.println(b.score);
	    }
		
	}
	
	
	public  void restart()
	{

        BackGround bg2=new BackGround();
		
		BG.ground=bg2.ground;
		b.score=0;
		b.x=5;
		b.y=0;
		
	}
	public void gameover()
	{
		int rcd=rec;
		if(b.score>rcd)
		{
			name=JOptionPane.showInputDialog("恭喜你打破了记录,请输入您的大名:")+"\n";
			rec=b.score;
		file=new File("rec.dat");
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			RandomAccessFile raf=new RandomAccessFile(file,"rw");
			raf.seek(0);
			raf.writeUTF(name);
			raf.writeInt(rec);
			raf.close();
			game.restart();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		}
		else
		{
			JOptionPane.showMessageDialog(null,"很遗憾,请继续努力吧!","游戏结束",JOptionPane.INFORMATION_MESSAGE);
			b.cmd=0;
			game.restart();
		}
		
	}
	public void about()
	{
		String message=String.format("%s\n%s\n%s\n%s","J2SE俄罗斯方块1.0,游戏版权归俄罗斯方块发明人","俄国人Alexey Pajitnov和Vadim Gerassimov所有!","程序代码归hangtao所有!","欢迎访问:http://hangtao.5d6d.com");
		JOptionPane.showMessageDialog(null, message, "关于游戏 Tonysoft",JOptionPane.INFORMATION_MESSAGE);
	}
	
}

	
	



⌨️ 快捷键说明

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