📄 chuangti.java~589~
字号:
for(i = 0;i<4;i++)
{
yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
}
break;
case 2:
//XX green;
m_nPieceValue=18;
/****
X X
X X
****/
m_prePiece[0]=new Kuai(middle,top-2,2);
m_prePiece[1]=new Kuai(middle-1,top-1,2);
m_prePiece[2]=new Kuai(middle,top-1,2);
m_prePiece[3]=new Kuai(middle+1,top-2,2);
for(i = 0;i<4;i++)
{
yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
}
break;
case 3:
//XX blue;
m_nPieceValue=18;
/****
X
X X X
*****/
m_prePiece[0]=new Kuai(middle,top-1,4);
m_prePiece[1]=new Kuai(middle+1,top-1,4);
m_prePiece[2]=new Kuai(middle-1,top-1,4);
m_prePiece[3]=new Kuai(middle-1,top-2,4);
for(i = 0;i<4;i++)
{
yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
}
break;
case 4:
//XX light blue;
m_nPieceValue=10;
/***
X X
X X
*/
m_prePiece[0]=new Kuai(middle,top-2,7);
m_prePiece[1]=new Kuai(middle+1,top-1,7);
m_prePiece[2]=new Kuai(middle,top-1,7);
m_prePiece[3]=new Kuai(middle-1,top-2,7);
for(i = 0;i<4;i++)
{
yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
}
break;
case 5:
//XXX purle;
m_nPieceValue=12;
/****
X X
X X
*/
m_prePiece[0]=new Kuai(middle-1,top-1,3);
m_prePiece[1]=new Kuai(middle,top-1,3);
m_prePiece[2]=new Kuai(middle-1,top-2,3);
m_prePiece[3]=new Kuai(middle,top-2,3);
for(i = 0;i<4;i++)
{
yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
}
break;
case 6:
//XXX yellow;
m_nPieceValue=12;
/********
X
X X X
*/
m_prePiece[0]=new Kuai(middle,top-1,6);
m_prePiece[1]=new Kuai(middle-1,top-1,6);
m_prePiece[2]=new Kuai(middle+1,top-1,6);
m_prePiece[3]=new Kuai(middle,top-2,6);
for(i = 0;i<4;i++)
{
yulan.SetIcon(m_prePiece[i].m_nColumn-3,m_prePiece[i].m_nRow-18,tukuai[m_prePiece[i].m_ntupian]);
}
break;
}
}
private void transferPreToCur()//将预览的方块转变成正在动的方块
{
for(int j = 0;j<4;j++)
{
if(mine[m_prePiece[j].m_nColumn][m_prePiece[j].m_nRow] !=0 )//判断是否还能玩
IsGameInPlay = false;
for(int i=0;i<4;i++)
{
//用类定义的变量如同int 定义的可这样赋值
m_curPiece[i]=m_prePiece[i];
}
for(int i=0;i<4;i++)
{
mine[m_curPiece[j].m_nColumn][m_curPiece[j].m_nRow] = m_curPiece[j].m_ntupian;
Mine.SetIcon(m_curPiece[j].m_nColumn,m_curPiece[j].m_nRow,tukuai[ m_curPiece[j].m_ntupian ]);
//将预览区的方块赋给游戏区域.
}
}
}
/**********************************************************************/
private synchronized boolean moveCurPiece(int nDx,int nDy,boolean bRotate)//判断方块是否变形
{
Kuai newpos[] = new Kuai[4];
int dx , dy;
for (int i = 0; i < 4; i++)
{
if (bRotate)
{
dx = m_curPiece[i].m_nColumn - m_curPiece[0].m_nColumn;
dy = m_curPiece[i].m_nRow - m_curPiece[0].m_nRow;
newpos[i] = new Kuai(m_curPiece[0].m_nColumn - dy,
m_curPiece[0].m_nRow + dx,
m_curPiece[i].m_ntupian);
//顺时针转动
}
else
{
newpos[i] = new Kuai(m_curPiece[i].m_nColumn + nDx,
m_curPiece[i].m_nRow + nDy,
m_curPiece[i].m_ntupian);
}
}
if (moveSquares(m_curPiece, newpos) == false)//如果新的方块和游戏区域的方块不相同
return false;
for(int i = 0; i < 4; i++)
{
m_curPiece[i] = newpos[i];
}
for(int i = 0; i < 4; i++)
{
Mine.SetIcon(m_curPiece[i].m_nColumn,m_curPiece[i].m_nRow,tukuai[m_curPiece[i].m_ntupian]);
}
return true;
}
/**
************************************************* 移动方块,如果不能移动,则返回假
*/
boolean moveSquares(Kuai from[],Kuai to[])
{ //判断是否能移动
outerlable:
for (int i=0;i<to.length;i++)
{
if (to[i].InBounds()==false) return false ;
//如果不在可玩区域,则返回假
if(mine[to[i].m_nColumn][to[i].m_nRow]!=0)
{
for (int j=0;j<from.length;j++)
if (to[i].IsEqual(from[j]))
continue outerlable;
return false;
}
}
//移动
for(int i=0;i<from.length;i++)
{
if(from[i].InBounds())
mine[from[i].m_nColumn][from[i].m_nRow]=0;
Mine.SetIcon(from[i].m_nColumn,from[i].m_nRow,tukuai[0]);
}
for(int i=0;i<to.length;i++)
mine[to[i].m_nColumn][to[i].m_nRow]=to[i].m_ntupian;
return true;
}
/**********************************************************************/
private void removelines()//消行函数。
{
outerlabel:
for(int j=0;j<Mine.Row;j++)
{
for (int i=0;i<Mine.Comln;i++)
if (mine[i][j]==0)
continue outerlabel;
for (int k=j;k<Mine.Row-1;k++)
for (int i=0;i<Mine.Comln;i++)
{ mine[i][k]=mine[i][k+1];
Mine.SetIcon(i,k,tukuai[mine[i][k+1]]);
}
j-=1;
Score+=50;
try{
String cx="../";
url=new URL("file:///E:mc/TowerDie.wav");
audioClip=java.applet.Applet.newAudioClip(url);
audioClip.play();
}
catch(Exception error)
{error.printStackTrace();}
}//音乐的加入.从try开始
}//****************************************************************消行
public synchronized void addRandomLine()//添加随即行
{
int butong;
int nRandom[]=new int[Mine.Comln];//20个整形的数组
for(int i=0;i<Mine.Comln;i++)
{
nRandom[i] = (int) (7 * Math.random());
}
butong = (int)(7 * Math.random());
nRandom[butong] = 0;
for(int nRow=Mine.Row;nRow>0;nRow--)
for(int nCol=0; nCol<Mine.Comln; nCol++)
{
mine[nCol][nRow]=mine[nCol][nRow-1];
}
for(int i=0;i<Mine.Comln;i++)
{
mine[i][0] = nRandom[i];
}
for(int nRow=Mine.Row-1;nRow>=0;nRow--)
for(int nCol=0; nCol<Mine.Comln; nCol++)
{
Mine.SetIcon(nCol,nRow,tukuai[mine[nCol][nRow]]);
}
for(int i = 0 ; i<4;i++)
{
m_curPiece[i].m_nRow++;
mine[m_curPiece[i].m_nColumn][m_curPiece[i].m_nRow]=m_curPiece[i].m_ntupian;
Mine.SetIcon( m_curPiece[i].m_nColumn, m_curPiece[i].m_nRow, tukuai[m_curPiece[i].m_ntupian]);
}
}
/************************************************************加行*/
public void SetSpeed(int speed)
{
this.thespeed = speed;
}
public int GetSpeed()
{
return this.thespeed;
}
/***************************************************停止*/
public synchronized void stop()//线层处理
{
if(theThread!=null)//如果线层不为空
theThread.stop();
theThread=null;
}
/****************************************************暂停*/
public synchronized void pause()//游戏暂停
{
if(theThread!=null)//如果线层不为空
{
try
{
theThread.suspend();//线层暂停
Paused=true;//暂停为真
}
catch(Exception e){e.printStackTrace();}
}
}
//***********************************************************启动线程
public synchronized void start()
{
if(theThread!=null)
{
Paused=false;//暂停为假
theThread.resume();//继续执行线层以前执行的线层
return;
}
for(int j = 0; j<Mine.Row;j++)
for(int i = 0 ;i<Mine.Comln;i++ )
{
mine[i][j]=0;
Mine.SetIcon(i,j,tukuai[0]);
}
theThread = new Thread(this);
IsNeedNewPiece = true;
IsGameInPlay=true;
Mine.requestFocus();//将焦点设置回到游戏区域
theThread.start();
}
/******************************************run*/
public void run()//游戏的主要函数
{
int sudu;
int l = 0;
while (IsGameInPlay) {
try {
sudu = this.thespeed;
Thread.sleep(DelayMap[sudu]);
}
catch (InterruptedException e) {
e.printStackTrace();
}
if (IsNeedNewPiece) {
if(m_nPieceValue>0)//就是有方块产生,因为每一个方块都带有自身的分数。
{
Score += m_nPieceValue;}
removelines();//消行函数
newPrePiece();//产生新方块函数.
transferPreToCur();//将预览的方块转变成正在动的方块
IsNeedNewPiece = false;//产生新方块为假.
}
else {
IsNeedNewPiece = !moveCurPiece(0, -1, false);//方块的自动下落.
}
sendStatus();//若是连机把玩家游戏区域的信息发送给对手
l+=1;
if(l%30==0)addRandomLine();
jTextArea1.setText("分数:"+Score);
}
theThread = null;
Frm bang = new Frm(this.Score);
bang.show();
}//***************************
private void sendStatus()
{//若是连机把玩家游戏区域的信息发送给对手
if(m_nNetStatus==NOCONNECT)return;
String str="mine:";
for(int nCol=0;nCol<10;nCol++)
for(int nRow=0;nRow<20;nRow++)
{
str+=mine[nCol][nRow]+"|";
}
sendStr(str);
}//连机时候使用
public void sendStr(String str)//把自己的游戏区域的消息发送出去.
{
switch(m_nNetStatus)
{
case SERVER:
if(m_server!=null)
m_server.writeStr( str + "\n");
break;
case CLIENT:
if(m_client!=null)
m_client.writeStr( str + "\n");
break;
}
}
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
void jButton1_actionPerformed(ActionEvent e) {//开始按钮
if (this.m_nNetStatus == this.CLIENT) {//如果这个窗体是客户机就没有权利使用开始命令
JOptionPane.showConfirmDialog(this,"客户机不能使用这个命令","提示!",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);
}
else
{ sendStr("start");
this.start();Score=0;}
}
void jButton2_actionPerformed(ActionEvent e) {//退出按钮
System.exit(0);
}
public boolean Mine_keyPressed(KeyEvent e) {
int Key;
Key = e.getKeyCode();
if(!IsGameInPlay)return true;
if(Paused)return true;
if( moveCurPiece(0,-1,false)==false)
jTextArea1.setText("完拉!!!!");
if(Key == KeyEvent.VK_RIGHT)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -