📄 eluosi.java
字号:
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 + -