//public override void changeView(TetrisModel model) 多型覆蓋 public override void changeView(TetrisModel model) { m_Graphics.Graphics.Clear(Color.SkyBlue); drawBackGround(); mymodel = model; bool[,] board = model.getBoard(); TetrisBlock current_block = model.getBlock(); if (current_block.getBlockShape() != TetrisBlock.Blocks.No_shape) { for (int i = 0; i < 22; i++) { for (int j = 0; j < 10; j++) { if (board[i, j]) { drawBlock(board_Pen, board_brush, i, j); } } } for (int i = 0; i < 4; i++) { drawBlock(current_Pen, current_brush, current_block.get_CurrentX() + current_block.get_X(i), current_block.get_CurrentY() + current_block.get_Y(i)); } m_Graphics.Render(); //m_Graphics.Dispose(); scoreBox.Text = model.getScore().ToString(); } if (mymodel.GameOver()) { Gameover gameover_form = new Gameover(); gameover_form.Show(this); } }
public override void changeView(TetrisModel model) //public void changeView(TetrisModel model) { if (!model.GameOver()) { m_Graphics.Graphics.Clear(Color.WhiteSmoke); drawBackGround(); bool[,] board = model.getBoard(); TetrisBlock current_block = model.getBlock(); //draw bottom blocks for (int i = 0; i < (int)constant.BOARD_HEIGHT; i++) { for (int j = 0; j < (int)constant.BOARD_WIDTH; j++) { if (board[i, j]) { drawBlock(blackPen, i, j); } } } int shape = (int)current_block.getBlockShape(); //draw predict blocks //find distance from falling block to exist blocks SolidBrush blockBrush = chooseBrushColor(shape); int fallingHeight = -1; bool findHeight = false; while (!findHeight) { fallingHeight++; for (int i = 0; i < 4; i++) { if (current_block.get_CurrentX() + current_block.get_X(i) + fallingHeight < (int)constant.BOARD_HEIGHT) { if (board[current_block.get_CurrentX() + current_block.get_X(i) + fallingHeight, current_block.get_CurrentY() + current_block.get_Y(i)]) { findHeight = true; if (fallingHeight != 0) { fallingHeight--; } break; } } else { findHeight = true; if (fallingHeight != 0) { fallingHeight--; } break; } } } //draw for (int i = 0; i < 4; i++) { drawPredictBlock(blockBrush, current_block.get_CurrentX() + current_block.get_X(i) + fallingHeight, current_block.get_CurrentY() + current_block.get_Y(i)); } //draw falling blocks Pen blockPen = choosePenColor(shape); for (int i = 0; i < 4; i++) { drawBlock(blockPen, current_block.get_CurrentX() + current_block.get_X(i), current_block.get_CurrentY() + current_block.get_Y(i)); } m_Graphics.Render(); //m_Graphics.Dispose(); Score.Text = model.getScore().ToString(); } else { GameOver(); } }