예제 #1
0
void Board::RemoveFullLines()
{
     int numFullLines = 0;

     for (int i = BoardHeight - 1; i >= 0; --i) {
         bool lineIsFull = true;

         for (int j = 0; j < BoardWidth; ++j) {
             if (ShapeAt(j, i) == NoShape) {
                 lineIsFull = false;
                 break;
             }
         }

         if (lineIsFull) {
             ++numFullLines;
             for (int k = i; k < BoardHeight - 1; ++k) {
                 for (int j = 0; j < BoardWidth; ++j)
                     ShapeAt(j, k) = ShapeAt(j, k + 1);
             }
         }
     }

     if (numFullLines > 0) {
         numLinesRemoved += numFullLines;
         wxString str;
	 str.Printf(wxT("%d"), numLinesRemoved);
         m_stsbar->SetStatusText(str);

         isFallingFinished = true;
         curPiece.SetShape(NoShape);
         Refresh();
     }
 }
예제 #2
0
파일: Clinetboard.cpp 프로젝트: bulue/----
void CLogicBoad::RemoveFullLines()
{
    int numFullLines = 0;

    for (int i = BoardHeight - 1; i >= 0; --i) {
        bool lineIsFull = true;

        for (int j = 0; j < BoardWidth; ++j) {
            if (ShapeAt(j, i) == NoShape) {
                lineIsFull = false;
                break;
            }
        }

        if (lineIsFull) {
            ++numFullLines;
            for (int k = i; k < BoardHeight - 1; ++k) {
                for (int j = 0; j < BoardWidth; ++j)
                    ShapeAt(j, k) = ShapeAt(j, k + 1);
            }
        }
    }

    if (numFullLines > 0) {
        numLinesRemoved += numFullLines;

        isFallingFinished = true;
        curPiece.SetShape(NoShape);
        Refresh();
    }
}
예제 #3
0
파일: Svrboard.cpp 프로젝트: bulue/----
void CLogicBoad::RemoveFullLines()
{
	int numFullLines = 0;

	for (int i = BoardHeight - 1; i >= 0; --i) {
		bool lineIsFull = true;

		for (int j = 0; j < BoardWidth; ++j) {
			if (ShapeAt(j, i) == NoShape) {
				lineIsFull = false;
				break;
			}
		}

		if (lineIsFull) {
			++numFullLines;
			for (int k = i; k < BoardHeight - 1; ++k) {
				for (int j = 0; j < BoardWidth; ++j)
					ShapeAt(j, k) = ShapeAt(j, k + 1);
			}
		}
	}

	if (numFullLines > 0) {
		numLinesRemoved += numFullLines;
		stTetrisDrawText cmd;
		if (m_user && m_user->m_GameRoom) {
			CGameRoom* pRoom = m_user->m_GameRoom;
			for (int i =0 ;i  < 2; ++i) {
				CPlayer* pUser = pRoom->m_vPlayer[i];
				if (pUser) {
					if (pUser != m_user) {
						cmd.isMe = false;
						sprintf(cmd.szDrawText,"%s的得分:%d",m_user->szAccount,numLinesRemoved);
					}else {
						cmd.isMe = true;
						sprintf(cmd.szDrawText,"您的得分:%d",numLinesRemoved);
					}
					pUser->SendToMe((stBaseCmd*)&cmd,sizeof(cmd));
				}
			}
		}

		isFallingFinished = true;
		curPiece.SetShape(NoShape);
		Refresh();
	}
}
예제 #4
0
void Board::OnPaint(wxPaintEvent& event)
{
    wxPaintDC dc(this);

    wxSize size = GetClientSize();
    int boardTop = size.GetHeight() - BoardHeight * SquareHeight();


    for (int i = 0; i < BoardHeight; ++i) {
        for (int j = 0; j < BoardWidth; ++j) {
            Tetrominoes shape = ShapeAt(j, BoardHeight - i - 1);
            if (shape != NoShape)
                DrawSquare(dc, 0 + j * SquareWidth(),
                           boardTop + i * SquareHeight(), shape);
        }
    }

    if (curPiece.GetShape() != NoShape) {
        for (int i = 0; i < 4; ++i) {
            int x = curX + curPiece.x(i);
            int y = curY - curPiece.y(i);
            DrawSquare(dc, 0 + x * SquareWidth(),
                       boardTop + (BoardHeight - y - 1) * SquareHeight(),
                       curPiece.GetShape());
        }
    }
}
예제 #5
0
파일: Svrboard.cpp 프로젝트: bulue/----
void CLogicBoad::PieceDropped()
{
	for (int i = 0; i < 4; ++i) {
		int x = curX + curPiece.x(i);
		int y = curY - curPiece.y(i);
		ShapeAt(x, y) = curPiece.GetShape();
	}

	RemoveFullLines();

	if (!isFallingFinished)
		NewPiece();
}
예제 #6
0
파일: Svrboard.cpp 프로젝트: bulue/----
bool CLogicBoad::TryMove( const Shape& newPiece, int newX, int newY )
{
	for (int i = 0; i < 4; ++i) {
		int x = newX + newPiece.x(i);
		int y = newY - newPiece.y(i);
		if (x < 0 || x >= BoardWidth || y < 0 || y >= BoardHeight)
			return false;
		if (ShapeAt(x, y) != NoShape)
			return false;
	}

	curPiece = newPiece;
	curX = newX;
	curY = newY;
	Refresh();
	return true;
}