internal void Update(GameState state, bool currentLeftMouseButtonState, TetraVex tetraVexInstance) { int baseX = this.gridSize * TetraVex.TileSize; int baseY = TetraVex.TileSize + this.gridSize * TetraVex.TileSize; int hoverButton = -1; if (state.MouseY >= baseY && state.MouseY < baseY + ButtonSize && state.MouseX >= baseX && state.MouseX < baseX + 4 * ButtonSize) { hoverButton = (state.MouseX - baseX) / ButtonSize; } if (!state.LeftMouseButtonDown && currentLeftMouseButtonState) { this.selectedButton = hoverButton >= 0 ? hoverButton : -1; this.selectedButtonDown = true; } else if (state.LeftMouseButtonDown && currentLeftMouseButtonState) { this.selectedButtonDown = hoverButton == this.selectedButton; } else if (state.LeftMouseButtonDown && !currentLeftMouseButtonState) { if (hoverButton == this.selectedButton && this.selectedButton >= 0) { tetraVexInstance.SetSize(3 + this.selectedButton); } this.selectedButton = -1; this.selectedButtonDown = false; } }
public static void RunGame() { using (TetraVex game = new TetraVex()) { game.Run(); } }
internal void Draw(GameState gameState, TetraVex tetraVexInstance) { for (int row = 0; row < this.gridSize; row++) { for (int column = 0; column < this.gridSize; column++) { int index = column + row * this.gridSize; Tile leftTile = this.leftGrid[index]; Tile rightTile = this.rightGrid[index]; int offsetX = 0, offsetY = 0; if (tetraVexInstance.State.DiscoMode) { offsetX = tetraVexInstance.Random.Next(10) - 5; offsetY = tetraVexInstance.Random.Next(10) - 5; } gameState.SpriteBatch.Draw(slotTexture, new Rectangle(TetraVex.BorderSize + column * TetraVex.TileSize + offsetX, TetraVex.BorderSize + row * TetraVex.TileSize + offsetY, TetraVex.TileSize, TetraVex.TileSize), Color.White); gameState.SpriteBatch.Draw(slotTexture, new Rectangle(TetraVex.BorderSize + TetraVex.TileSize + (this.gridSize + column) * TetraVex.TileSize + offsetX, TetraVex.BorderSize + row * TetraVex.TileSize + offsetY, TetraVex.TileSize, TetraVex.TileSize), Color.White); if (leftTile != null) { leftTile.Draw(gameState.SpriteBatch, TetraVex.BorderSize + column * TetraVex.TileSize, TetraVex.BorderSize + row * TetraVex.TileSize, leftTile == gameState.HoverTile && !gameState.Locked, tetraVexInstance); } if (rightTile != null) { rightTile.Draw(gameState.SpriteBatch, TetraVex.BorderSize + TetraVex.TileSize + (this.gridSize + column) * TetraVex.TileSize, TetraVex.BorderSize + row * TetraVex.TileSize, rightTile == gameState.HoverTile && !gameState.Locked, tetraVexInstance); } } } int offsetX2 = 0, offsetY2 = 0; if (tetraVexInstance.State.DiscoMode) { offsetX2 = tetraVexInstance.Random.Next(10) - 5; offsetY2 = tetraVexInstance.Random.Next(10) - 5; } if (gameState.DropBoard >= 0) { gameState.SpriteBatch.Draw(dropTexture, new Rectangle(TetraVex.BorderSize + gameState.DropColumn * TetraVex.TileSize + gameState.DropBoard * (this.gridSize + 1) * TetraVex.TileSize + offsetX2, TetraVex.BorderSize + gameState.DropRow * TetraVex.TileSize + offsetY2, TetraVex.TileSize, TetraVex.TileSize), Color.White); } if (gameState.FloatingTile != null) { gameState.FloatingTile.Draw(gameState.SpriteBatch, gameState.FloatingTileX, gameState.FloatingTileY, true, tetraVexInstance); } }
internal void Draw(GameState state, TetraVex tetraVexInstance) { int baseX = this.gridSize * TetraVex.TileSize; int baseY = TetraVex.TileSize + this.gridSize * TetraVex.TileSize; int offsetX = 0, offsetY = 0; if (tetraVexInstance.State.DiscoMode) { offsetX = tetraVexInstance.Random.Next(10) - 5; offsetY = tetraVexInstance.Random.Next(10) - 5; } state.SpriteBatch.Draw(squareButtonBase, new Rectangle(baseX + offsetX, baseY + offsetY, ButtonSize, ButtonSize), Color.White); if (tetraVexInstance.State.DiscoMode) { offsetX = tetraVexInstance.Random.Next(10) - 5; offsetY = tetraVexInstance.Random.Next(10) - 5; } state.SpriteBatch.Draw(squareButtonBase, new Rectangle(baseX + ButtonSize + offsetX, baseY + offsetY, ButtonSize, ButtonSize), Color.White); if (tetraVexInstance.State.DiscoMode) { offsetX = tetraVexInstance.Random.Next(10) - 5; offsetY = tetraVexInstance.Random.Next(10) - 5; } state.SpriteBatch.Draw(squareButtonBase, new Rectangle(baseX + 2 * ButtonSize + offsetX, baseY + offsetY, ButtonSize, ButtonSize), Color.White); if (tetraVexInstance.State.DiscoMode) { offsetX = tetraVexInstance.Random.Next(10) - 5; offsetY = tetraVexInstance.Random.Next(10) - 5; } state.SpriteBatch.Draw(squareButtonBase, new Rectangle(baseX + 3 * ButtonSize + offsetX, baseY + offsetY, ButtonSize, ButtonSize), Color.White); if (tetraVexInstance.State.DiscoMode) { offsetX = tetraVexInstance.Random.Next(10) - 5; offsetY = tetraVexInstance.Random.Next(10) - 5; } if (this.selectedButtonDown && this.selectedButton >= 0) { state.SpriteBatch.Draw(squareButtonDown, new Rectangle(baseX + this.selectedButton * ButtonSize + offsetX, baseY + offsetY, ButtonSize, ButtonSize), Color.White); } }
internal void Draw(SpriteBatch spriteBatch, int x, int y, bool hoverEffect, TetraVex tetraVexInstance) { int offsetX = 0, offsetY = 0; if (tetraVexInstance.State.DiscoMode) { offsetX = tetraVexInstance.Random.Next(10) - 5; offsetY = tetraVexInstance.Random.Next(10) - 5; } spriteBatch.Draw(backgroundTexture, new Rectangle(x + offsetX, y + offsetY, TetraVex.TileSize, TetraVex.TileSize), Color.White); spriteBatch.Draw(topTexture, new Rectangle(x + offsetX, y + offsetY, TetraVex.TileSize, TetraVex.TileSize), colors[this.TopValue]); spriteBatch.Draw(leftTexture, new Rectangle(x + offsetX, y + offsetY, TetraVex.TileSize, TetraVex.TileSize), colors[this.LeftValue]); spriteBatch.Draw(bottomTexture, new Rectangle(x + offsetX, y + offsetY, TetraVex.TileSize, TetraVex.TileSize), colors[this.BottomValue]); spriteBatch.Draw(rightTexture, new Rectangle(x + offsetX, y + offsetY, TetraVex.TileSize, TetraVex.TileSize), colors[this.RightValue]); if (hoverEffect) { spriteBatch.Draw(hoverTexture, new Rectangle(x + offsetX, y + offsetY, TetraVex.TileSize, TetraVex.TileSize), Color.White); } }