如何在整个会话中观察游戏统计数据?

时间:2018-03-30 18:17:55

标签: javascript angular typescript

我正在Angular中创建Tic Tac Toe,我想在会话中跟踪游戏中的统计数据,即在创建新的棋盘对象时不会重置的统计数据。

我有一个TicTacToeComponent创建了一个新的棋盘,而且TicTacToeBoard对象具有游戏的所有字段和逻辑。用户可以使用绑定到newGame()中的TicTacToeComponent的按钮创建新电路板,或者当您加载页面时创建新电路板。显然,跟踪板对象中的统计数据是没有意义的。我在想一个创建每个游戏的会话对象是最好的,但是我不知道如何能够将这些数据注入到TicTacToeComponent模板中...如何跟踪整个用户的统计数据可能会创建多个游戏的会话?这是某种可观察的模式吗?我该如何实现呢?

app
 |--tic-tac-toe
 |        |--tic-tac-toe.component.* (imports and instantiates board)
 |
 |--app.component.* (routes to welcome screen and t-t-t.component
 |
 |--tic-tac-toe-board.ts (board class, probably should be moved)

解决这个问题也可能让我即使在路由到另一个页面时也可以保持游戏。

Source code

2 个答案:

答案 0 :(得分:1)

你可以拥有一个Private Sub CommandButton1_Click() Dim rng As Range, r As Range, v As Variant Dim i As Long, n As Long Dim iRowOffset As Long, temp As Long Dim iColOffset As Long Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Transfer") Set rng = getRng(Me.RefEdit1.Value) ' << use helper function getRng If Not rng Is Nothing Then ' a) count (non) contiguous areas obtained via Ctrl-key in RefEdit (e.g. "D13:D15,A1:B2") n = rng.Areas.Count ' b) calculate necessary row/col offset to start copies at A1 in target sheet iRowOffset = rng.Areas(1).Row - 1 iColOffset = rng.Areas(1).Column - 1 For i = 1 To n temp = rng.Areas(i).Row - 1 If temp < iRowOffset And temp > 0 Then iRowOffset = temp temp = rng.Areas(i).Column - 1 If temp < iColOffset And temp > 0 Then iColOffset = temp Next i ' c) write values back For i = 1 To n With rng.Areas(i).Parent.Name ' sheet v = rng.Areas(i) ' write values to variant 1-based 2-dim array ws.Range(rng.Areas(i).Address).Offset(-iRowOffset, -iColOffset) = v End With Next i Else ' after manual input of not existing ranges RefEdit1.Value = "": Beep RefEdit1.SetFocus End If End Sub 组件,每当游戏结束时,你会从Stats发送一个包含相关信息的事件(即玩家X赢得的游戏)并将其存储在TicTacToeComponent组件的属性。

这将允许您跟踪不同的游戏,但显然如果刷新页面,所有信息都将丢失。如果您想要更复杂的解决方案,则需要在服务器端实现它。

答案 1 :(得分:0)

由于您可能不想使用数据库,因此可以使用组件在localstorage中创建变量localStorage.setItem('gamesWon', gamesWon++);

然后,您可以在应用中的任意位置创建一个可观察的或只是一个getter来获取localStorage.getItem('gamesWon);

的数据

到目前为止,我还没有找到一种在没有某种数据库或使用本地存储的情况下在存储器中充分存储不可构造对象的好方法。按照这个帖子看看其他人是否找到了一个好的解决方案。