📄 tetrics.java~3~
字号:
mvalue+=nextPiece.m_prePiece[i].m_nPieceValue;
}
m_bGameInPlay=moveSquares(old,m_curPiece);//若方块可移动则游戏可进行
if(!m_bGameInPlay && m_tFrame.m_nNetStatus!=Frame1.NOCONNECT)m_tFrame.sendStr("GameOver:"+sScore.m_nTheScore);
else if(!m_bGameInPlay && m_tFrame!=null)m_tFrame.ScoreReport(m_tFrame.jLabel8.getText(),sScore.m_nTheScore);
}
//去掉可以消去的行
private void removelines()
{
outerlabel://标识
for(int j=0;j<m_nRows;j++)//判断游戏区内方块状态
{
for(int i=0;i<m_nCols;i++)//判断列
if(oGameArea.m_nField[i][j]==0)
continue outerlabel;//返回标识并继续
//消行
for(int k=j;k<m_nRows-1;k++)
for(int i=0;i<m_nCols;i++)
oGameArea.m_nField[i][k] = oGameArea.m_nField[i][k + 1]; //将游戏第k+1行状态赋给第k行
sScore.m_nTheScore +=mvalue; //分数增加
m_nOldScore += mvalue; //累加分数增加
j-=1;//下移一行
m_sound.remov_voice();
}
}
//键盘响应
public boolean keyDown(Event evt,int nKey)
{//判断游戏是否在游戏区及游戏是否暂停
if(!m_bGameInPlay)return true;
if(m_bPaused)return true;
//按键响应
switch(nKey){
case 'p'://暂停键
case KeyEvent.VK_P:
this.pause();
m_repaint();
break;
case 'q'://游戏结束
case KeyEvent.VK_Q:
this.stop();
m_repaint();
break;
case 'z'://技能
case KeyEvent.VK_Z:
m_tFrame.sendStr("addRandomLine");
m_repaint();
break;
case 'x'://技能
case KeyEvent.VK_X:
m_tFrame.sendStr("addRandomBox");
m_repaint();
break;
case 'c'://技能
case KeyEvent.VK_C:
m_tFrame.sendStr("addRandomLine");
m_tFrame.sendStr("addRandomBox");
m_repaint();
break;
case 'a':
case Event.LEFT ://‘a ’键或左键
moveCurPiece(-1,0,false);//方块左移1单位
nextPiece.m_bNeedNewPiece=false;//不需生成新方块
m_repaint();
break;//跳出本次操作
case 'd':
case Event.RIGHT://‘d’键或右键
moveCurPiece(1,0,false);//方块右移1单位
nextPiece.m_bNeedNewPiece=false;
m_repaint();
break;//跳出本次操作
case 'w':
case Event.UP://‘w’键或上键
moveCurPiece(0,0,true);//方块不动
m_repaint();
m_sound.remot_voice();
break;//跳出本次操作
case 's':
case Event.DOWN://‘s’键或下键
while(moveCurPiece(0,-1,false));//方块持续下移
m_repaint();
m_sound.down_voice();
break;//跳出本次操作
}
return true;
}
//结束游戏
public synchronized void stop()
{ b=-1;//游戏结束状态
if(m_theThread!=null)
m_theThread.stop();//线程停止
/* try{
for(int i=0;i<m_nCols;i++){//绘制游戏结实画面
for (int j = 0; j < m_nRows; j++) {
if (i == 1) {
if (j >= 2 && j <= 4) {
oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
oGameArea.m_nOldField[i][j] = 0; //当前游戏区无方块
}
else {
oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
oGameArea.m_nOldField[i][j] = -1; //当前游戏区全部为方块
}
}
else if (i == 2) {
if (j == 3) {
oGameArea.m_nField[i][j] = 2; //当前游戏区有方块
oGameArea.m_nOldField[i][j] = 0; //当前游戏区无方块
}
else {
oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
}
}
else if (i == 3) {
if ( (j >= 2 && j <= 4) || j == 8 || j == 11 || j == 14 || j == 17) {
oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
oGameArea.m_nOldField[i][j] = 0; //当前游戏区无方块
}
else {
oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
}
}
else if (i == 4) {
if (j == 9 || j == 10 || j == 15 || j == 16) {
oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
oGameArea.m_nOldField[i][j] = 0; //当前游戏区无方块
}
else {
oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
}
}
else if (i == 5) {
if (j == 9 || j == 10 || j == 15 || j == 16) {
oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
oGameArea.m_nOldField[i][j] = 0; //上一页游戏区无方块
}
else {
oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
}
}
else if (i == 6) {
if ( (j == 2 || j == 4) || j == 8 || j == 11 || j == 14 || j == 17) {
oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
oGameArea.m_nOldField[i][j] = 0; //上一页游戏区无方块
}
else {
oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
}
}
else if (i == 7) {
if (j >= 2 && j <= 4) {
oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
oGameArea.m_nOldField[i][j] = 0; //上一页游戏区无方块
}
else {
oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
}
}
else if (i == 8) {
if (j == 4) {
oGameArea.m_nField[i][j] = 2; //当前游戏区全部为方块
oGameArea.m_nOldField[i][j] = 0; //上一页游戏区无方块
}
else {
oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
}
}
else {
oGameArea.m_nField[i][j] = 0; //当前游戏区无方块
oGameArea.m_nOldField[i][j] = -1; //上一页游戏区全部为方块
}
m_repaint();
}
}
}
catch(ArrayIndexOutOfBoundsException a){}*/
m_theThread=null;//清空线程
}
//暂停游戏
public synchronized void pause()
{ b=1;//游戏暂停状态
if(m_theThread!=null)
{
try
{
m_theThread.suspend();//暂停线程
m_bPaused=true;//m_bPaused赋真值
}
catch(Exception e){e.printStackTrace();}
}
}
//设置游戏难度
public void setPlayLevel(int nLevel)
{
sScore.m_nPlayLevel=nLevel;//将传来的参数设为难度
System.out.println("m_nPlayLevel="+sScore.m_nPlayLevel);//在cmd窗口中输出"m_nPlayLevel=难度"
if(m_tFrame.m_nNetStatus!=Frame1.NOCONNECT)
m_tFrame.sendStr("Level:"+nLevel);
// m_tFrame.sendStr("Talk:"+"你的对手将难度设置为:"+nLevel);
// m_repaint();
}
//得到游戏难度
public int getPlayLevel()
{
return sScore.m_nPlayLevel;//返回游戏难度值
}
//添加随机行
public synchronized void addRandomLine()
{
int nRandom[]=new int[m_nCols];//定义整形数组,存放随机生成的方块
//布尔变量表示是否有方块
boolean bAllZero=true;
boolean bNoZero=true;
//循环判断本行方块状态
for(int i=0;i<m_nCols;i++)
{
nRandom[i]=(int)(7*Math.random());//随机生成一个数组存放新生成方块
if(nRandom[i]!=0)bAllZero=false;//若本行内有无快则bAllZero为假
else bNoZero=false;//若本行内都为方块则bNoZero为假
}
if(bAllZero)
{//如无方块
nRandom[(int)(m_nCols*Math.random())]=(int)(Math.random()*6+1);//在此行内随机选择一列,将其变为方块
}
else if(bNoZero)
{//如都为方块
nRandom[(int)(m_nCols*Math.random())]=0;//在此行内随机选择一列,将其变为无方块
}
//绘制随机产生的方块
for(int nCol=0;nCol<m_nCols;nCol++)
for(int nRow=m_nRows+3;nRow>0;nRow--)//
{
oGameArea.m_nField[nCol][nRow]=oGameArea.m_nField[nCol][nRow-1];//将原游戏区底0-22行游戏画面赋给新游戏画面的第1-23行
}
for(int nCol=0;nCol<m_nCols;nCol++)oGameArea. m_nField[nCol][0]=nRandom[nCol];//将随机产生的方块加入游戏区第0行
for(int i=0;i<4;i++)
{
m_curPiece[i].m_nRow++;//游戏区内正在下落方块上移1行
}
}
//添加随机方块
public synchronized void addRandomBox(){
//随机产生1到5个方块
int r = (int) (5 * Math.random()+1);
int nRandom[]= new int[r]; //定义整形数组,存放随机生成的方块
//随机选择一组行和列
int m_cols[]=new int[r];
int m_rows[]=new int[r];
for(int i=0;i<r;i++){
nRandom[i]=(int) (6 * Math.random()+1);
m_cols[i]=(int) (10 * Math.random());
m_rows[i]=(int) (14 * Math.random());
}
//将随机产生的方块赋给游戏区域
for(int k=0;k<r;k++){
oGameArea.m_nField[m_cols[k]][m_rows[k]]=nRandom[k];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -