-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGame.cs
More file actions
77 lines (61 loc) · 2.1 KB
/
Game.cs
File metadata and controls
77 lines (61 loc) · 2.1 KB
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
using System;
using System.Text;
namespace GameOf2048
{
public enum GameState { PLAY, WIN, GAMEOVER }
public enum Moves { UP = 0, DOWN, LEFT, RIGHT }
class Game
{
private int[][] Board;
private int Score;
private IGameRenderer renderer;
private GameState State;
private Engine engine;
private IPlayer player;
public Game(IGameRenderer renderer, IPlayer player)
{
this.renderer = renderer;
this.player = player;
this.engine = new Engine();
}
public void InitGame()
{
State = GameState.PLAY;
Board = new int[4][];
Board[0] = new int[] { 0, 0, 0, 0 };
Board[1] = new int[] { 0, 0, 0, 0 };
Board[2] = new int[] { 0, 0, 0, 0 };
Board[3] = new int[] { 0, 0, 0, 0 };
Score = 0;
// The board starts with two numbers.
engine.SpawnNumber(Board);
engine.SpawnNumber(Board);
}
public void Start()
{
InitGame();
while (State == GameState.PLAY)
{
renderer.DrawBoard(Board, Score);
var move = player.MakeMove(Board);
// If the returned value equals -1, the move was invalid.
var mergedValue = engine.ExecuteMove(move, Board);
if (mergedValue >= 0) {
// spawn a new number in case of a valid move
engine.SpawnNumber(Board);
Score += mergedValue;
} else if (engine.NoMovesPossible(Board)) {
State = GameState.GAMEOVER;
}
}
}
static void Main(string[] args)
{
IGameRenderer renderer = new ConsoleRenderer();
// IPlayer player = new ConsolePlayer();
IPlayer ai = new AiPlayer();
Game game = new Game(renderer, ai);
game.Start();
}
}
}