-
Notifications
You must be signed in to change notification settings - Fork 0
/
BoardView.cs
88 lines (73 loc) · 3.03 KB
/
BoardView.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Slick
{
class BoardView : DrawableGameComponent
{
SpriteBatch spriteBatch;
Texture2D texture;
SpriteFont font;
Color landColor = Color.Brown;
Color waterColor = Color.LightBlue;
int tileWidth;
int tileHeight;
readonly Rectangle ScreenRectangle;
Board board;
public BoardView(Game game, Board board, SpriteBatch spriteBatch, int screenWidth, int screenHeight)
:base(game)
{
this.board = board;
this.spriteBatch = spriteBatch;
tileWidth = screenWidth / board.Width;
tileHeight = screenHeight / board.Height;
ScreenRectangle = new Rectangle(0, 0, screenWidth, screenHeight);
}
public override void Initialize()
{
texture = Game.Content.Load<Texture2D>("Board");
font = Game.Content.Load<SpriteFont>("BoardFont");
base.Initialize();
}
public override void Draw(GameTime gameTime)
{
for (int y = 0; y < board.Height; y++)
{
for (int x = 0; x < board.Width; x++)
{
var cell = board.Cells[x,y];
var rect = CalculateWindowRectangle(x, y);
var color = cell.IsWater ? waterColor : landColor;
spriteBatch.Draw(texture, rect, null, color, 0, Vector2.Zero, SpriteEffects.None, 0.5f);
if (cell.Owner != null) {
rect = CalculatePlayerWindowRectangle(x, y);
spriteBatch.Draw(texture, rect, null, cell.Owner.Color, 0, Vector2.Zero, SpriteEffects.None, 0.55f);
}
var depthIndicator = cell.DrilledDepth.ToString();
color = cell.StruckOil ? Color.Black : Color.Gray;
var pos = new Vector2(rect.X, rect.Y);
if (!board.IsOwner(x, y, null))
spriteBatch.DrawString(font, depthIndicator, pos + new Vector2(20, 20), color, 0, Vector2.Zero, 1.0f, SpriteEffects.None, 0.25f);
if(board.IsOwner(x, y, null))
spriteBatch.DrawString(font, "$" + board.PurchaseCost(x, y).ToString(), pos + new Vector2(20, 20), Color.Black, 0, Vector2.Zero, 1.0f, SpriteEffects.None, 0.25f);
}
}
base.Draw(gameTime);
}
Rectangle CalculateWindowRectangle(int x, int y)
{
var rect = new Rectangle(x * tileWidth, y * tileHeight, tileWidth, tileHeight);
if (board.Cells[x, y].Owner != null)
{
rect.Inflate(-10, -10);
}
return rect;
}
Rectangle CalculatePlayerWindowRectangle(int x, int y)
{
return new Rectangle(x * tileWidth, y * tileHeight, tileWidth, tileHeight);
}
}
}