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

📄 eluosi.java

📁 一个用Java实现的俄罗斯方块applet游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                       g.drawImage(myImagethree,62,157,this);
                       break;
                case 4:g.drawImage(myImagefour,45,140,this);
                       g.drawImage(myImagefour,45,157,this);
                       g.drawImage(myImagefour,62,157,this);
                       g.drawImage(myImagefour,62,174,this);
                       break;
                case 5:g.drawImage(myImagefive,45,140,this);
                       g.drawImage(myImagefive,45,157,this);
                       g.drawImage(myImagefive,45,174,this);
                       g.drawImage(myImagefive,62,140,this);
                       break;
                case 6:g.drawImage(myImagesix,45,140,this);
                       g.drawImage(myImagesix,62,140,this);
                       g.drawImage(myImagesix,62,157,this);
                       g.drawImage(myImagesix,62,174,this);
                       break;
                case 7:g.drawImage(myImageseven,62,157,this);
                       g.drawImage(myImageseven,62,174,this);
                       g.drawImage(myImageseven,45,174,this);
                       g.drawImage(myImageseven,79,174,this);
                       break;
                case 8:g.drawImage(myImageeight,62,157,this);
                       break;
                default:break;
            }
	}

	public void judgement(KeyEvent e)//判断输入的是哪个键,并做出响应
	{
            switch(e.getKeyCode())
            {   //如果是向下键,就一下到底,并产生一个新的方块
                case KeyEvent.VK_DOWN:
                        root.downTo();
                        lineOver();//消去添满的一行,并加100分
                        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;
                        }
                    tempnWhich=(((int)Math.round(Math.random()*12345))%8)+1;
                        nWhich=tempnWhich;
                        if(!root.begin())//如果新的方块产生失败,则游戏结束
                        {	
                                repaint();
                                gameover();
                        }
                        else	
                        {
                                repaint();
                        }
                        break;
                case KeyEvent.VK_LEFT:root.left();repaint();break;
                case KeyEvent.VK_RIGHT:root.right();repaint();break;
                case KeyEvent.VK_UP:root.change();repaint();break;
                default:break;
            }
        }

	public void lineOver()//消去添满的一行,并加100分
	{
            boolean isCan;//标志是否可以消一行
            boolean isContinue=true;//标志是否还有待消的行
            int k=gTable.y-1;//用数组表示时gTable的y
            while(isContinue)
            {
                isCan=true;
                while(isCan)
                {
                    for(int i=0;i<gTable.x;i++)
                    {
                        if(gTable.myTable[i][k]==0)
                            isCan=false;
                    }
                    if(isCan)//满足条件,开始消行
                    {
                        for(int i=0;i<gTable.x;i++)
                                gTable.myTable[i][k]=0;
                                myAudio2.play();//添加消行声音
                        for(int j=k-1;j>=0;j--)
                            for(int i=0;i<gTable.x;i++)
                                {   //上面的方格往下挪
                                    if(gTable.myTable[i][j]!=0)
                                    {
                                    gTable.myTable[i][j+1]=gTable.myTable[i][j];
                                    gTable.myTable[i][j]=0;
                                     }
                                }
                        repaint();
                        nScore+=100;//成绩再加100
                        }
                }
                k--;
                if(k<1)
                    isContinue=false;
            }
	}

	public void gameover()//游戏结束
	{
            timer.stop();
            JOptionPane anOptionPane=new JOptionPane();//弹出对话框
            anOptionPane.showMessageDialog(this,"The game is over!Try " +
            "again!","计算机0105班 No.11 黄浦江",JOptionPane.WARNING_MESSAGE);
            over();//处理各个变量,以便重新开始
	}

	public void over()//游戏结束后,处理各个变量,以便重新开始
	{
            timer.stop();
            for(int i=0;i<gTable.x;i++)//重新给游戏桌置0标志
                for(int j=0;j<gTable.y;j++)
                {
                    gTable.myTable[i][j]=0;
                }
            repaint();
            nScore=0;
            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;
            }
            tempnWhich=(((int)Math.round(Math.random()*65535))%8)+1;
            nWhich=tempnWhich;
            root.begin();
            repaint();
            btStart.setLabel("开始");
            btStart.setToolTipText("游戏开始!");
            btStart.setEnabled(true);
            speedcombobox.setEnabled(true);
            btRestart.setEnabled(false);
            btStart.setLabel("开始");
            startlistener.setisRun(true);
            canMove=false;
	}
	
	
	
	public class MyRun implements ActionListener//记时器调用的监听器
	{
            public void actionPerformed(ActionEvent e)
            {
                if(!root.down())//将方块下落一格,如果不能再下降了调用下面语句
                {
                    lineOver();//消行
                    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;
                    }
                    tempnWhich=(((int)Math.round(Math.random()*12345))%8)+1;
                    nWhich=tempnWhich;
                    if(!root.begin())//如果失败,游戏结束
                    {	
                        repaint();
                        gameover();
                    }
                    else	
                        repaint();
            }
            else
            {
                    repaint();
            }
        }
    }

	public class StartListener implements ActionListener//开始按钮监听器
	{
            private boolean isRun=true;//标志是开始还是暂停,一钮两用

            public void setisRun(boolean run)
            {
                    isRun=run;
            }	

            public void actionPerformed(ActionEvent e)
            {
                    if(e.getSource()==btStart)
                    {
                    speedcombobox.setEnabled(false);
                    btRestart.setEnabled(true);
                    if(isRun)//是开始
                    {
                            btStart.setLabel("暂停");
                            btStart.setToolTipText("游戏暂停!");
                            timer.start();
                            isRun=!isRun;
                            canMove=true;//可以响应键盘
                    }
                    else//是暂停
                    {
                            btStart.setLabel("开始");
                            btStart.setToolTipText("游戏开始!");
                            timer.stop();
                            isRun=!isRun;
                            canMove=false;//不可以响应键盘
                    }
            }
	else if(e.getSource()==btMusic)
	{
            btMusic.setEnabled(true);
            if(shutMusic)
            {								
                stop();
                btMusic.setLabel("Open");
                btMusic.setToolTipText("打开背景音乐。");
                shutMusic=!shutMusic;
            }
            else
            {//是关闭音乐
                start();
                btMusic.setLabel("Close");
                btMusic.setToolTipText("关闭背景音乐。");
                shutMusic=!shutMusic;                  
            }			
        }
	else{}
    }
}
        //重新开始按钮监听器
	public class RestartListener implements ActionListener
	{
            public void actionPerformed(ActionEvent e)
            {
                over();//重新初始化各个变量
            }
	}

	public class SpeedListener implements ItemListener//速度控件监听器
	{
            public  void itemStateChanged(ItemEvent e)
            {
                nTime=1000-(new Integer(speedcombobox.getSelectedItem().
                toString()).intValue())*110;
                //根据选择的nTime间隔重新设置记时器,以变换速度
                timer=new Timer(nTime,new MyRun());
            }
	}
}

⌨️ 快捷键说明

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