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

📄 eluosi.java

📁 一个用Java实现的俄罗斯方块applet游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.applet.AudioClip;

public class Eluosi extends java.applet.Applet
{
        //创建一个游戏桌
        private GameTable gTable;
        
        //以下依次为窗体背景方格、第一种方格、第二种方格……第八种方格
        private Image myImagebeijing,myImageone,myImagetwo,myImagethree,
        myImagefour,myImagefive,myImagesix,myImageseven,myImageeight;
        
        private Image image;//每次画方格的具体颜色图片
        
        //创建背景音乐,如果想换掉背景音乐,把名为0.mid的音乐拷到sound中即可
	private AudioClip myAudio1,myAudio2;
	private JButton btStart,btRestart,btMusic;//两个按钮,Start,Restart
	private int nTime=1000;
	private int nWhich;//用于标志哪种要下落的方块,依次数字对应1……8种
	private boolean canMove=false;	//标志是否响应键盘,默认不响应
        private boolean shutMusic=true;//标志是否关闭背景音乐,默认为关闭
	private Root root;//要落下的方块的父类
	private int tempnWhich;//标志下一个要下落的方块,即提前显示下落块
	private Timer timer;//记时器,用于控制下落时间间隔
	private long nScore=0;//每消一行加100分,用来记录总分数
	private JComboBox speedcombobox;//选择速度的控件
	private Label scorelabel;//显示成绩
	private StartListener startlistener;//开始按钮事件监听器

        //JComboBox的选项单
	private String[] choices={"1","2","3","4","5","6","7","8","9"};

	public void init()//初始化各个变量
	{	
            setBackground(new Color(204,255,255));//设置窗体背景色
            btStart=new JButton("开始");//创建Start按钮
            btRestart=new JButton("重来");
            btMusic=new JButton("Close");

            btStart.setToolTipText("游戏开始!");//提示为Start a game.
            btRestart.setToolTipText("重新开始游戏。");
            btMusic.setToolTipText("关闭背景音乐。");

            setLayout(null);//不用布局管理器,以便自己定义位置
		
            btStart.setBounds(30,317,80,20);//定位按钮
            btRestart.setBounds(30,344,80,20);
            btMusic.setBounds(30, 371,80,20);
                
            add(btStart);//添加按钮
            add(btRestart);
            add(btMusic);

            startlistener=new StartListener();//为两个按钮添加监听器
            btStart.addActionListener(startlistener);
            btRestart.addActionListener(new RestartListener());
            btRestart.setEnabled(false);//初始重开始按钮,禁用
            btMusic.addActionListener(startlistener);		

            myImagebeijing=getImage(getCodeBase(),"image/beijing.jpg");
            myImageone=getImage(getCodeBase(),"image/one.jpg");
            myImagetwo=getImage(getCodeBase(),"image/two.jpg");
            myImagethree=getImage(getCodeBase(),"image/three.jpg");
            myImagefour=getImage(getCodeBase(),"image/four.jpg");
            myImagefive=getImage(getCodeBase(),"image/five.jpg");
            myImagesix=getImage(getCodeBase(),"image/six.jpg");
            myImageseven=getImage(getCodeBase(),"image/seven.jpg");
            myImageeight=getImage(getCodeBase(),"image/eight.jpg");
            myAudio1=getAudioClip(getCodeBase(),"sound/0.mid");
            myAudio2=getAudioClip(getCodeBase(),"sound/1.wav");

            speedcombobox=new JComboBox(choices);//初始速度控件
            speedcombobox.addItemListener(new SpeedListener());
            speedcombobox.setEditable(false);
            speedcombobox.setBounds(30,290,80,20);
            add(speedcombobox);

            scorelabel=new Label("0");//初始成绩控件
            scorelabel.setBounds(30,70,80,20);
            add(scorelabel);

            gTable.x=15;//创建一个15*20的游戏桌,0代表无方块,非0代表有方块
            gTable.y=20;
            gTable.myTable=new int[gTable.x][gTable.y];
            for(int i=0;i<gTable.x;i++)//初始化使之各个方格为0
		for(int j=0;j<gTable.y;j++)
                    gTable.myTable[i][j]=0;
                    //产生随机方块
                    nWhich=(((int)Math.round(Math.random()*65535))%8)+1;
                    switch(nWhich)//初始化产生的方块
                    {
			case 1:root=new One();break;
			case 2:root=new Two();break;
			case 3:root=new Three();break;
			case 4:root=new Four();break;
			case 5:root=new Five();break;
			case 6:root=new Six();break;
			case 7:root=new Seven();break;
			case 8:root=new Eight();break;
			default:break;
                    }
                    root.begin();//占据桌子,详见root类
                    //产生下一个提前显示的方块
                    tempnWhich=(((int)Math.round(Math.random()*65535))%8)+1;
                    nWhich=tempnWhich;
		
                    timer=new Timer(nTime,new MyRun());//创建记时器,调用MyRun

                    addKeyListener(new KeyAdapter()//主窗口添加键盘监听器--匿名类
                        {
                            public void keyPressed(KeyEvent e)
				{	
                                    if(canMove)//如果满足记时器开始
                                        judgement(e);//响应输入
				}
			});
                        
                        btStart.addKeyListener(new KeyAdapter()
                                {
                                    public void keyPressed(KeyEvent e)
                                        {
                                            if(canMove)
                                                    judgement(e);
                                        }
                                });
					
                        btMusic.addKeyListener(new KeyAdapter()
                            {
                                public void keyPressed(KeyEvent e)
                                    {
                                        if(canMove)
                                                judgement(e);
                                    }
                        });
					
					
		btRestart.addKeyListener(new KeyAdapter()
                    {
                            public void keyPressed(KeyEvent e)
                            {
                                    if(canMove)
                                            judgement(e);
                            }
                    });
	}

	public void start()
	{
		myAudio1.loop();//循环播放背景音乐
	}

	public void stop()
	{
		myAudio1.stop();//停止播放
	}	

	public void paint(Graphics g)
	{       
            g.setColor(new Color(102,204,255));//画背景框架,两个大长方形
            for(int i=0;i<10;i++)
                    g.drawRect(10+i,10+i,515-2*i,400-2*i);
            g.setColor(new Color(102,102,153));
            for(int i=0;i<5;i++)
                    g.drawRect(127+i,40+i,267-2*i,352-2*i);
            for(int i=0;i<gTable.x;i++)//根据桌子上的标记决定是否画方块
                    for(int j=0;j<gTable.y;j++)
                    {
                        if(gTable.myTable[i][j]!=0)//有,画方块
                                {   //调用具体的方格
                                    if(gTable.myTable[i][j]==1){
                                        image=myImageone;
                                    }
                                    else if(gTable.myTable[i][j]==2){
                                        image=myImagetwo;
                                    }
                                    else if(gTable.myTable[i][j]==3){
                                        image=myImagethree;
                                    }
                                    else if(gTable.myTable[i][j]==4){
                                        image=myImagefour;
                                    }
                                    else if(gTable.myTable[i][j]==5){
                                        image=myImagefive;
                                    }
                                    else if(gTable.myTable[i][j]==6){
                                        image=myImagesix;
                                    }
                                    else if(gTable.myTable[i][j]==7){
                                        image=myImageseven;
                                    } 
                                    else if(gTable.myTable[i][j]==8){
                                        image=myImageeight;
                                    } 
                                    else{}
                        g.drawImage(image,132+i*(15+2)+2,45+j*(15+2)+2,this);
                                }
                        else if(gTable.myTable[i][j]==0)//无,画背景方块
                                {
                g.drawImage(myImagebeijing,132+i*(15+2)+2,45+j*(15+2)+2,this);
                                }
                    }	
            btStart.repaint();//以下众行为画背景控件和字符串
            btRestart.repaint();
            btMusic.repaint();
            speedcombobox.repaint();
            scorelabel.setText(Long.toString(nScore));//更新成绩
            scorelabel.setBackground(new Color(204,255,255));
            scorelabel.repaint();
            g.setColor(new Color(233,44,152));                
            g.drawString("速度(1...9)",31,280);
            g.drawString("分数:",30,60);
            g.drawString("下一个:",30,120);
            g.drawString("游戏使用说明:", 410, 55);
            g.setColor(new Color(153,0,204));//设置字体颜色
            g.drawString("通过控制键盘上、", 410, 85);
            g.drawString("下、左、右四个键", 410, 105);
            g.drawString("来移动图中的俄罗", 410, 125);
            g.drawString("斯方块,每消除一", 410, 145);
            g.drawString("行可加100分。", 410, 165);
            g.setColor(new Color(204,0,255));//设置字体颜色
            g.drawString("您还可以在左边通", 410, 195);
            g.drawString("过设置俄罗斯方块", 410, 215);
            g.drawString("的下降速度,来使", 410, 235);
            g.drawString("游戏更Happy  ^_^", 410, 255);
            g.setColor(new Color(233,44,152)); //设置字体颜色
            g.drawString("按“开始”,游戏", 410, 285);
            g.drawString("开始,再按一次游", 410, 305);
            g.drawString("戏将暂停,按“重", 410, 325);
            g.drawString("来”键游戏将重新", 410, 345);
            g.drawString("开始。", 410, 365);
            g.setColor(new Color(51,0,102)); //设置字体颜色
            g.drawString("--计算机系黄浦江--", 409, 387);
            nextTo(g);//画下一个提前显示的方块
	}

	public void update(Graphics g)
	{
            paint(g);
	}

	public void nextTo(Graphics g)//画下一个提前显示的方块
	{	
            for(int i=0;i<3;i++)//3*4,先全部用背景色方块覆盖
                for(int j=0;j<4;j++)
                    g.drawImage(myImagebeijing,45+i*(15+2),140+j*(15+2),this);
            switch(tempnWhich)//根据标志决定画哪个方块,以及哪种颜色
            {	
                case 1:g.drawImage(myImageone,62,140,this);
                       g.drawImage(myImageone,62,157,this);
                       g.drawImage(myImageone,62,174,this);
                       g.drawImage(myImageone,62,191,this);
                       break;
                case 2:g.drawImage(myImagetwo,45,157,this);
                       g.drawImage(myImagetwo,45,174,this);
                       g.drawImage(myImagetwo,62,157,this);
                       g.drawImage(myImagetwo,62,174,this);
                       break;
                case 3:g.drawImage(myImagethree,45,157,this);
                       g.drawImage(myImagethree,45,174,this);
                       g.drawImage(myImagethree,62,140,this);

⌨️ 快捷键说明

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