📄 mamakgame.java
字号:
diffY=tmpDiffY;
inUse=tmpInUse;
}
public void drawGrid(Graphics g)
{
if(inUse==1)
{
g.setColor(Color.black);
g.fillRect(XYPosition.x+diffX,XYPosition.y+diffY,iWidth-2*diffX,iHeight-2*diffY);
}
}
public void drawDiamonds(Graphics g)
{
g.setColor(Color.red);
g.fillRect(XYPosition.x+diffX,XYPosition.y+diffY,iWidth-2*diffX,iHeight-2*diffY);
}
public int getInUse()
{
return inUse;
}
public void setInUse(int tmpMode)
{
inUse=tmpMode;
}
private int iHeight;
private int iWidth;
private Point XYPosition;
private int diffX;
private int diffY;
private int inUse;
}
class board
{
public board(int tmpX,int tmpY,int tmpHeightGrid,int tmpWidthGrid,int tmpHeight,int tmpWidth,int tmpBufferHeightGrid,int tmpBufferHeight)
{
origin=new Point(tmpX,tmpY+tmpHeight);
iHeightGrid=tmpHeightGrid;
iWidthGrid=tmpWidthGrid;
iHeight=tmpHeight;
iWidth=tmpWidth;
iBufferHeightGrid=tmpBufferHeightGrid;
iBufferHeight=tmpBufferHeight;
aryGrids=new grid[iHeightGrid+iBufferHeightGrid][iWidthGrid];
calGridToPosition();
objDiamonds=new diamonds(iHeightGrid,iWidthGrid/2-1);
objSystemStatus=new systemStatus(10,10+300+20);
}
public void restart()
{
for(int i=0;i<iHeightGrid+iBufferHeightGrid;i++)
for(int j=0;j<iWidthGrid;j++)
aryGrids[i][j].setInUse(0);
}
public int gameOverChk()
{
int rtnGameOver=0;
for(int i=0;i<iWidthGrid;i++)
if(aryGrids[iHeightGrid][i].getInUse()==1)
{
rtnGameOver=1;
break;
}
return rtnGameOver;
}
public int conflictChk()
{
int isConflict=0;
int[][] rtnRowColNos;
rtnRowColNos=objDiamonds.diamondsPosition();
for(int i=0;i<rtnRowColNos.length;i++)
if(((rtnRowColNos[i][0]!=-1)&&(rtnRowColNos[i][1]!=-1))&&aryGrids[rtnRowColNos[i][0]][rtnRowColNos[i][1]].getInUse()==1)
{
isConflict=1;
break;
}
return isConflict;
}
public void adjust()
{
int[] rtnReferPoint;
int tmpWidthGrid;
tmpWidthGrid=objDiamonds.getWidthGrid();
rtnReferPoint=objDiamonds.getReferPoint();
if((rtnReferPoint[1]+tmpWidthGrid)>iWidthGrid)
objDiamonds.setReferPoint(rtnReferPoint[0],iWidthGrid-tmpWidthGrid);
}
public int removeRows()
{
int[] rtnRowNos;
int[] fullRowNos;
int fullCount=0;
rtnRowNos=objDiamonds.getRowNos();
fullRowNos=new int[rtnRowNos.length];
for(int i=0;i<fullRowNos.length;i++)
fullRowNos[i]=0;
for(int i=0;i<rtnRowNos.length;i++)
{
int rowNo;
int isFull;
rowNo=rtnRowNos[i];
isFull=1;
for(int j=0;j<iWidthGrid;j++)
{
if(aryGrids[rowNo][j].getInUse()==0)
{
isFull=0;
break;
}
}
if(isFull==1)
{
fullRowNos[fullCount]=rowNo;
fullCount++;
}
}
for(int i=0;i<fullCount;i++)
{
int rowNo;
rowNo=fullRowNos[i];
for(int j=rowNo;j<iHeightGrid;j++)
{
for(int k=0;k<iWidthGrid;k++)
{
int tmpMode;
tmpMode=aryGrids[j+1][k].getInUse();
aryGrids[j][k].setInUse(tmpMode);
}
}
}
return fullCount;
}
public void calGridToPosition()
{
for(int i=0;i<(iHeightGrid+iBufferHeightGrid);i++)
{
for(int j=0;j<iWidthGrid;j++)
{
aryGrids[i][j]=new grid((iHeight+iBufferHeight)/(iHeightGrid+iBufferHeightGrid),iWidth/iWidthGrid,origin.x+j*(iWidth/iWidthGrid),origin.y-i*((iHeight+iBufferHeight)/(iHeightGrid+iBufferHeightGrid)),2,2,0);
}
}
}
public void drawGrids(Graphics g)
{
for(int i=0;i<iHeightGrid;i++)
for(int j=0;j<iWidthGrid ;j++)
aryGrids[i][j].drawGrid(g);
int[][] rtnRowColNos;
rtnRowColNos=objDiamonds.diamondsPosition();
for(int i=0;i<rtnRowColNos.length;i++)
if((rtnRowColNos[i][0]!=-1)&&(rtnRowColNos[i][1]!=-1))
if(rtnRowColNos[i][0]<iHeightGrid)
aryGrids[rtnRowColNos[i][0]][rtnRowColNos[i][1]].drawDiamonds(g);
}
public void drawGridFrame(Graphics g)
{
g.setColor(Color.lightGray);
for(int i=1;i<iWidthGrid;i++)
{
g.drawLine(origin.x+i*(iWidth/iWidthGrid),origin.y,origin.x+i*(iWidth/iWidthGrid),origin.y-(iHeight));
}
for(int i=1;i<iHeightGrid;i++)
{
g.drawLine(origin.x,origin.y-i*((iHeight+iBufferHeight)/(iHeightGrid+iBufferHeightGrid)),origin.x+iWidth,origin.y-i*((iHeight+iBufferHeight)/(iHeightGrid+iBufferHeightGrid)));
}
g.setColor(Color.black);
g.drawRect(origin.x,origin.y-iHeight,iWidth,iHeight);
}
public int getHeightGrid()
{
return iHeightGrid;
}
public int getWidthGrid()
{
return iWidthGrid;
}
public int getBufferHeightGrid()
{
return iBufferHeightGrid;
}
public int getAryGrids(int i,int j)
{
return aryGrids[i][j].getInUse();
}
public void setAryGrids(int i,int j,int tmpMode)
{
aryGrids[i][j].setInUse(tmpMode);
}
private Point origin;
private int iHeightGrid;
private int iWidthGrid;
private int iHeight;
private int iWidth;
private int iBufferHeightGrid;
private int iBufferHeight;
private grid[][] aryGrids;
public diamonds objDiamonds;
public systemStatus objSystemStatus;
}
class eluosiPanel extends JPanel implements KeyListener,ActionListener
{
public eluosiPanel()
{
b=new board(10,10,20,10,300,150,10,150);
objPreview=new preview(10+150+10,10,5,5,50,50);
objPreDiamonds=new diamonds(0,0);
addKeyListener(this);
objScore=new score(10+150+10,10+50+20);
objCopyright=new copyright(10+150+10,10+50+20+15+20+50);
t = new Timer(delay,this);
}
public boolean isFocusTraversable()
{
return(true);
}
public void keyPressed(KeyEvent evt)
{
int keyCode=evt.getKeyCode();
int[] rtnRowColNo;
rtnRowColNo=b.objDiamonds.getReferPoint();
if(keyCode==KeyEvent.VK_LEFT)
{
if(b.objSystemStatus.getSystemStatus()!=0&&b.objSystemStatus.getSystemStatus()!=2&&b.objSystemStatus.getSystemStatus()!=3)
{
if(rtnRowColNo[1]-1>=0)
{
t.stop();
int isTouch=0;
int[][] aryLeftTouchGrids;
aryLeftTouchGrids=b.objDiamonds.leftTouchGrids();
for(int i=0;i<aryLeftTouchGrids.length;i++)
{
if(b.getAryGrids(aryLeftTouchGrids[i][0],aryLeftTouchGrids[i][1]-1)==1)
{
isTouch=1;
break;
}
}
if(isTouch==0)
b.objDiamonds.setReferPoint(rtnRowColNo[0],rtnRowColNo[1]-1);
t.start();
}
}
}
else
if(keyCode==KeyEvent.VK_RIGHT)
{
if(b.objSystemStatus.getSystemStatus()!=0&&b.objSystemStatus.getSystemStatus()!=2&&b.objSystemStatus.getSystemStatus()!=3)
{
if(rtnRowColNo[1]+1<(b.getWidthGrid()-(b.objDiamonds.getWidthGrid()-1)))
{
t.stop();
int isTouch=0;
int[][] aryRightTouchGrids;
aryRightTouchGrids=b.objDiamonds.rightTouchGrids();
for(int i=0;i<aryRightTouchGrids.length;i++)
{
if(b.getAryGrids(aryRightTouchGrids[i][0],aryRightTouchGrids[i][1]+1)==1)
{
isTouch=1;
break;
}
}
if(isTouch==0)
b.objDiamonds.setReferPoint(rtnRowColNo[0],rtnRowColNo[1]+1);
t.start();
}
}
}
else
if(keyCode==KeyEvent.VK_DOWN)
{
if(b.objSystemStatus.getSystemStatus()!=0&&b.objSystemStatus.getSystemStatus()!=2&&b.objSystemStatus.getSystemStatus()!=3)
{
if(rtnRowColNo[0]-1<0)
{
int[][] rtnPosition;
rtnPosition=b.objDiamonds.diamondsPosition();
for(int i=0;i<rtnPosition.length;i++)
if((rtnPosition[i][0]!=-1)&&(rtnPosition[i][1]!=-1))
b.setAryGrids(rtnPosition[i][0],rtnPosition[i][1],1);
int tmpLineNum;
tmpLineNum=b.removeRows();
objScore.addScore(tmpLineNum);
if(b.gameOverChk()==1)
{
t.stop();
b.objSystemStatus.setSystemStatus(3);
}
else
{
b.objDiamonds.setSortNo(objPreDiamonds.getSortNo());
b.objDiamonds.setStatusNo(objPreDiamonds.getStatusNo());
b.objDiamonds.setAryDiamonds();
objPreDiamonds.createNew();
b.objDiamonds.setReferPoint(b.getHeightGrid(),b.getWidthGrid()/2-1);
}
}
else
{
int isTouch=0;
int[][] aryDownTouchGrids;
aryDownTouchGrids=b.objDiamonds.downTouchGrids();
for(int i=0;i<aryDownTouchGrids.length;i++)
{
if(b.getAryGrids(aryDownTouchGrids[i][0]-1,aryDownTouchGrids[i][1])==1)
{
isTouch=1;
break;
}
}
if(isTouch==1)
{
int[][] rtnPosition;
rtnPosition=b.objDiamonds.diamondsPosition();
for(int i=0;i<rtnPosition.length;i++)
if((rtnPosition[i][0]!=-1)&&(rtnPosition[i][1]!=-1))
b.setAryGrids(rtnPosition[i][0],rtnPosition[i][1],1);
int tmpLineNum;
tmpLineNum=b.removeRows();
objScore.addScore(tmpLineNum);
if(b.gameOverChk()==1)
{
t.stop();
System.out.println("GAME OVER!!");
b.objSystemStatus.setSystemStatus(3);
}
else
{
b.objDiamonds.setSortNo(objPreDiamonds.getSortNo());
b.objDiamonds.setStatusNo(objPreDiamonds.getStatusNo());
b.objDiamonds.setAryDiamonds();
objPreDiamonds.createNew();
b.objDiamonds.setReferPoint(b.getHeightGrid(),b.getWidthGrid()/2-1);
}
}
else
{
b.objDiamonds.setReferPoint(rtnRowColNo[0]-1,rtnRowColNo[1]);
}
}
}
}
else
if(keyCode==KeyEvent.VK_SPACE)
{
if(b.objSystemStatus.getSystemStatus()!=0&&b.objSystemStatus.getSystemStatus()!=2&&b.objSystemStatus.getSystemStatus()!=3)
{
t.stop();
b.objDiamonds.circumrotate();
b.adjust();
if(b.conflictChk()==1)
b.objDiamonds.unCircumrotate();
t.start();
}
}
else
if(keyCode==KeyEvent.VK_S)
{
if(b.objSystemStatus.getSystemStatus()==0)
{
t.start();
b.objSystemStatus.setSystemStatus(1);
}
else
if(b.objSystemStatus.getSystemStatus()==1||b.objSystemStatus.getSystemStatus()==2||b.objSystemStatus.getSystemStatus()==3)
{
t.stop();
b.restart();
objScore.restart();
b.objDiamonds.restart();
b.objSystemStatus.setSystemStatus(1);
t.start();
}
}
else
if(keyCode==KeyEvent.VK_D)
{
if(b.objSystemStatus.getSystemStatus()!=0&&b.objSystemStatus.getSystemStatus()!=3)
{
if(b.objSystemStatus.getSystemStatus()==1)
{
t.stop();
b.objSystemStatus.setSystemStatus(2);
}
else
if(b.objSystemStatus.getSystemStatus()==2)
{
t.start();
b.objSystemStatus.setSystemStatus(1);
}
}
}
repaint();
}
public void keyReleased(KeyEvent evt)
{}
public void keyTyped(KeyEvent evt)
{}
public void actionPerformed(ActionEvent evt)
{
int[] rtnRowColNo;
rtnRowColNo=b.objDiamonds.getReferPoint();
if(rtnRowColNo[0]-1<0)
{
int[][] rtnPosition;
rtnPosition=b.objDiamonds.diamondsPosition();
for(int i=0;i<rtnPosition.length;i++)
if((rtnPosition[i][0]!=-1)&&(rtnPosition[i][1]!=-1))
b.setAryGrids(rtnPosition[i][0],rtnPosition[i][1],1);
int tmpLineNum;
tmpLineNum=b.removeRows();
objScore.addScore(tmpLineNum);
if(b.gameOverChk()==1)
System.out.println("GAME OVER!!");
if(b.gameOverChk()==1)
{
t.stop();
b.objSystemStatus.setSystemStatus(3);
}
else
{
b.objDiamonds.setSortNo(objPreDiamonds.getSortNo());
b.objDiamonds.setStatusNo(objPreDiamonds.getStatusNo());
b.objDiamonds.setAryDiamonds();
objPreDiamonds.createNew();
b.objDiamonds.setReferPoint(b.getHeightGrid(),b.getWidthGrid()/2-1);
}
}
else
{
int isTouch=0;
int[][] aryDownTouchGrids;
aryDownTouchGrids=b.objDiamonds.downTouchGrids();
for(int i=0;i<aryDownTouchGrids.length;i++)
{
if(b.getAryGrids(aryDownTouchGrids[i][0]-1,aryDownTouchGrids[i][1])==1)
{
isTouch=1;
break;
}
}
if(isTouch==1)
{
int[][] rtnPosition;
rtnPosition=b.objDiamonds.diamondsPosition();
for(int i=0;i<rtnPosition.length;i++)
if((rtnPosition[i][0]!=-1)&&(rtnPosition[i][1]!=-1))
b.setAryGrids(rtnPosition[i][0],rtnPosition[i][1],1);
int tmpLineNum;
tmpLineNum=b.removeRows();
objScore.addScore(tmpLineNum);
if(b.gameOverChk()==1)
System.out.println("GAME OVER!!");
if(b.gameOverChk()==1)
{
t.stop();
System.out.println("GAME OVER!!");
b.objSystemStatus.setSystemStatus(3);
}
else
{
b.objDiamonds.setSortNo(objPreDiamonds.getSortNo());
b.objDiamonds.setStatusNo(objPreDiamonds.getStatusNo());
b.objDiamonds.setAryDiamonds();
objPreDiamonds.createNew();
b.objDiamonds.setReferPoint(b.getHeightGrid(),b.getWidthGrid()/2-1);
}
}
else
{
b.objDiamonds.setReferPoint(rtnRowColNo[0]-1,rtnRowColNo[1]);
}
}
repaint();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
b.drawGridFrame(g);
b.drawGrids(g);
objPreview.drawGridFrame(g);
objPreview.drawGrids(g,objPreDiamonds.diamondsPosition());
objScore.drawScore(g);
objCopyright.drawCopyright(g);
b.objSystemStatus.drawSystemStatus(g);
}
private Timer t;
private int delay=200;
private board b;
private diamonds objPreDiamonds;
private preview objPreview;
private score objScore;
private copyright objCopyright;
}
class Mamak extends JFrame
{
public Mamak()
{
setTitle("Mamak俄罗斯方块");
setSize(240,400);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
Container contentPane=getContentPane();
contentPane.add(new eluosiPanel());
}
}
public class MamakGame
{
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}
catch(Exception e){}
JFrame MT=new Mamak();
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
MT.setSize(300,400);
MT.setLocation((d.width - MT.getSize().width) / 2, (d.height - MT.getSize().height) / 2-20);
MT.setVisible(true);
MT.show();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -