Commit 1a5f54795341f61e1ab96a4a6fe377f6c73a5b0d
1 parent
653a4067
Exists in
master
implement operant and metacontingency schedules
Showing
9 changed files
with
808 additions
and
277 deletions
Show diff stats
form_matrixgame.lfm
1 | object FormMatrixGame: TFormMatrixGame | 1 | object FormMatrixGame: TFormMatrixGame |
2 | - Left = -621 | 2 | + Left = 0 |
3 | Height = 565 | 3 | Height = 565 |
4 | Top = 124 | 4 | Top = 124 |
5 | - Width = 1393 | ||
6 | - HorzScrollBar.Page = 1393 | 5 | + Width = 1278 |
6 | + HorzScrollBar.Page = 1278 | ||
7 | VertScrollBar.Page = 542 | 7 | VertScrollBar.Page = 542 |
8 | AutoScroll = True | 8 | AutoScroll = True |
9 | Caption = 'FormMatrixGame' | 9 | Caption = 'FormMatrixGame' |
10 | ClientHeight = 555 | 10 | ClientHeight = 555 |
11 | - ClientWidth = 1393 | 11 | + ClientWidth = 1278 |
12 | Font.Name = 'Monospace' | 12 | Font.Name = 'Monospace' |
13 | OnActivate = FormActivate | 13 | OnActivate = FormActivate |
14 | LCLVersion = '1.6.2.0' | 14 | LCLVersion = '1.6.2.0' |
@@ -457,6 +457,7 @@ object FormMatrixGame: TFormMatrixGame | @@ -457,6 +457,7 @@ object FormMatrixGame: TFormMatrixGame | ||
457 | 07544269746D617000000000 | 457 | 07544269746D617000000000 |
458 | } | 458 | } |
459 | Text = 'Text' | 459 | Text = 'Text' |
460 | + Title = 'Caption' | ||
460 | Visible = False | 461 | Visible = False |
461 | OnClose = PopupNotifierClose | 462 | OnClose = PopupNotifierClose |
462 | left = 112 | 463 | left = 112 |
form_matrixgame.pas
@@ -220,7 +220,6 @@ end; | @@ -220,7 +220,6 @@ end; | ||
220 | procedure TFormMatrixGame.TimerTimer(Sender: TObject); | 220 | procedure TFormMatrixGame.TimerTimer(Sender: TObject); |
221 | begin | 221 | begin |
222 | PopupNotifier.Visible:=False; | 222 | PopupNotifier.Visible:=False; |
223 | - Timer.Enabled := False; | ||
224 | end; | 223 | end; |
225 | 224 | ||
226 | procedure TFormMatrixGame.SetGameActor(AValue: TGameActor); | 225 | procedure TFormMatrixGame.SetGameActor(AValue: TGameActor); |
@@ -281,7 +280,7 @@ end; | @@ -281,7 +280,7 @@ end; | ||
281 | procedure TFormMatrixGame.PopupNotifierClose(Sender: TObject; | 280 | procedure TFormMatrixGame.PopupNotifierClose(Sender: TObject; |
282 | var CloseAction: TCloseAction); | 281 | var CloseAction: TCloseAction); |
283 | begin | 282 | begin |
284 | - // do nothing for now | 283 | + Timer.Enabled := False; |
285 | end; | 284 | end; |
286 | 285 | ||
287 | procedure TFormMatrixGame.StringGridMatrixClick(Sender: TObject); | 286 | procedure TFormMatrixGame.StringGridMatrixClick(Sender: TObject); |
@@ -309,7 +308,7 @@ end; | @@ -309,7 +308,7 @@ end; | ||
309 | 308 | ||
310 | procedure TFormMatrixGame.btnConfirmRowClick(Sender: TObject); | 309 | procedure TFormMatrixGame.btnConfirmRowClick(Sender: TObject); |
311 | begin | 310 | begin |
312 | - FGameControl.SendMessage(K_CHOICE); | 311 | + FGameControl.SendRequest(K_CHOICE); |
313 | end; | 312 | end; |
314 | 313 | ||
315 | procedure TFormMatrixGame.Button3Click(Sender: TObject); | 314 | procedure TFormMatrixGame.Button3Click(Sender: TObject); |
units/game_actors.pas
@@ -5,7 +5,7 @@ unit game_actors; | @@ -5,7 +5,7 @@ unit game_actors; | ||
5 | interface | 5 | interface |
6 | 6 | ||
7 | uses | 7 | uses |
8 | - Classes, SysUtils, PopupNotifier | 8 | + Classes, SysUtils, Forms,PopupNotifier |
9 | , game_actors_point | 9 | , game_actors_point |
10 | ; | 10 | ; |
11 | type | 11 | type |
@@ -19,7 +19,7 @@ type | @@ -19,7 +19,7 @@ type | ||
19 | TGameRow = (grNone, | 19 | TGameRow = (grNone, |
20 | grOne,grTwo,grThree,grFour,grFive,grSix,grSeven,grEight,grNine,grTen, // 10 rows | 20 | grOne,grTwo,grThree,grFour,grFive,grSix,grSeven,grEight,grNine,grTen, // 10 rows |
21 | grEven,grOdd, | 21 | grEven,grOdd, |
22 | - grDiff,grAll,grNot,grSome); //meta only | 22 | + grDiff,grEqual,grAll,grNot,grSome); //meta only |
23 | 23 | ||
24 | TGameRows = set of TGameRow; | 24 | TGameRows = set of TGameRow; |
25 | 25 | ||
@@ -30,10 +30,10 @@ type | @@ -30,10 +30,10 @@ type | ||
30 | TGameColors = set of TGameColor; | 30 | TGameColors = set of TGameColor; |
31 | 31 | ||
32 | TGameEndCondition = (gecInterlockingPorcentage,gecAbsoluteCycles,gecWhichComeFirst); | 32 | TGameEndCondition = (gecInterlockingPorcentage,gecAbsoluteCycles,gecWhichComeFirst); |
33 | - TGameOperator = (goNONE, goAND, goOR); | 33 | + //TGameOperator = (goNONE, goAND, goOR); |
34 | TGameStyle = (gtNone, gtRowsOnly, gtColorsOnly, gtRowsAndColors, gtRowsOrColors); | 34 | TGameStyle = (gtNone, gtRowsOnly, gtColorsOnly, gtRowsAndColors, gtRowsOrColors); |
35 | 35 | ||
36 | - TGameConsequenceStyle = (gscNone, gscMessage, gscBroadcastMessage, gscPoints, gscVariablePoints); | 36 | + TGameConsequenceStyle = (gscNone, gscMessage, gscBroadcastMessage, gscPoints, gscVariablePoints, gscA, gscB,gscG); |
37 | TConsequenceStyle = set of TGameConsequenceStyle; | 37 | TConsequenceStyle = set of TGameConsequenceStyle; |
38 | 38 | ||
39 | TGamePromptStyle = (gsYes, gsNo, gsAll, gsMetacontingency, gsContingency, gsBasA, gsRevertPoints); | 39 | TGamePromptStyle = (gsYes, gsNo, gsAll, gsMetacontingency, gsContingency, gsBasA, gsRevertPoints); |
@@ -43,6 +43,29 @@ type | @@ -43,6 +43,29 @@ type | ||
43 | 43 | ||
44 | type | 44 | type |
45 | 45 | ||
46 | + TPLayerPoints = record | ||
47 | + A, B : integer | ||
48 | + end; | ||
49 | + | ||
50 | + TPlayerChoice = record | ||
51 | + Row : TGameRow; | ||
52 | + Color : TGameColor; | ||
53 | + end; | ||
54 | + | ||
55 | + TPlayer = record | ||
56 | + ID, | ||
57 | + Nicname, | ||
58 | + Login, | ||
59 | + Password : UTF8string; | ||
60 | + Status : TGamePlayerStatus; | ||
61 | + Data : TStringList; | ||
62 | + Choice : TPlayerChoice; | ||
63 | + Points : TPLayerPoints; | ||
64 | + Turn : ShortInt; | ||
65 | + end; | ||
66 | + | ||
67 | + TPlayers = array of TPlayer; | ||
68 | + | ||
46 | { TCriteria } | 69 | { TCriteria } |
47 | 70 | ||
48 | TCriteria = record | 71 | TCriteria = record |
@@ -54,28 +77,49 @@ type | @@ -54,28 +77,49 @@ type | ||
54 | { TConsequence } | 77 | { TConsequence } |
55 | 78 | ||
56 | TConsequence = class(TComponent) | 79 | TConsequence = class(TComponent) |
80 | + private | ||
81 | + FAppendicePlural: UTF8String; | ||
82 | + FAppendiceSingular: UTF8String; | ||
83 | + FNicname: UTF8String; | ||
84 | + protected | ||
85 | + FStyle : TConsequenceStyle; | ||
86 | + FP : TGamePoint; | ||
87 | + FMessage : TPopupNotifier; | ||
88 | + procedure StopTimer(Sender:TObject;var ACloseAction:TCloseAction); | ||
89 | + procedure TimerTimer(Sender:TOBject);virtual; | ||
57 | public | 90 | public |
58 | - Style : TConsequenceStyle; | ||
59 | - Message : TPopupNotifier; | ||
60 | - Points : record | ||
61 | - A, B, G : TGamePoint; | ||
62 | - end; | ||
63 | - procedure Present; virtual; | 91 | + constructor Create(AOwner:TComponent; AP:TGamePoint; AStyle:TConsequenceStyle; AAppendiceSingular,AAppendicePlural:UTF8String);overload; |
92 | + constructor Create(AOwner:TComponent; AP:integer; AStyle: TConsequenceStyle; AMessage:array of UTF8string);overload; | ||
93 | + constructor Create(AOwner:TComponent; AConsequenceString: UTF8String);overload; | ||
94 | + destructor Destroy;override; | ||
95 | + function AsString: utf8string; | ||
96 | + procedure Present(Sender:TObject;ForGroup:Boolean);virtual; | ||
97 | + property PlayerNicname : UTF8String read FNicname write FNicname; | ||
98 | + property AppendiceSingular : UTF8String read FAppendiceSingular; | ||
99 | + property AppendicePlural : UTF8String read FAppendicePlural; | ||
64 | end; | 100 | end; |
65 | 101 | ||
66 | { TContingency } | 102 | { TContingency } |
67 | 103 | ||
68 | TContingency = class(TComponent) | 104 | TContingency = class(TComponent) |
69 | private | 105 | private |
70 | - FFired: Boolean; | 106 | + FFired, |
107 | + FMeta : Boolean; //True: Consequence occurs OnEndTurn, False: Consequence occurs OnEndCycle | ||
108 | + FConsequence : TConsequence; | ||
109 | + FCriteria : TCriteria; | ||
71 | FOnCriteria: TNotifyEvent; | 110 | FOnCriteria: TNotifyEvent; |
111 | + function RowMod(R:TGameRow):TGameRow; | ||
72 | procedure CriteriaEvent; | 112 | procedure CriteriaEvent; |
73 | public | 113 | public |
74 | - Meta : Boolean; //True: Consequence occurs OnEndTurn, False: Consequence occurs OnEndCycle | ||
75 | - Consequence : TConsequence; | ||
76 | - Criteria : TCriteria; | 114 | + constructor Create(AOwner:TComponent;AConsequence:TConsequence;ACriteria:TCriteria;IsMeta:Boolean);overload; |
115 | + function CriteriaString : UTF8String; | ||
116 | + function ResponseMeetsCriteriaI(R : TGameRow; C : TGameColor):Boolean; // Does response meets operant criteria? | ||
117 | + function ResponseMeetsCriteriaG(Players : TPlayers):Boolean; | ||
77 | property OnCriteria : TNotifyEvent read FOnCriteria write FOncriteria; | 118 | property OnCriteria : TNotifyEvent read FOnCriteria write FOncriteria; |
78 | property Fired : Boolean read FFired; | 119 | property Fired : Boolean read FFired; |
120 | + property Consequence : TConsequence read FConsequence; | ||
121 | + property Criteria : TCriteria read FCriteria; | ||
122 | + property Meta : Boolean read FMeta; | ||
79 | end; | 123 | end; |
80 | 124 | ||
81 | { TContingencies } | 125 | { TContingencies } |
@@ -85,11 +129,14 @@ type | @@ -85,11 +129,14 @@ type | ||
85 | { TPrompt } | 129 | { TPrompt } |
86 | 130 | ||
87 | TPrompt = class(TConsequence) | 131 | TPrompt = class(TConsequence) |
132 | + private | ||
133 | + FPromptTargets : TContingencies; // need to test this | ||
88 | public | 134 | public |
89 | PromptStyle : TPromptStyle; | 135 | PromptStyle : TPromptStyle; |
90 | - PromptTargets : ^TContingencies; | ||
91 | PromptMessage : string; | 136 | PromptMessage : string; |
92 | - procedure Present; override; | 137 | + public |
138 | + procedure Present(Sender:TObject;ForGroup:Boolean);override; | ||
139 | + property APromptTargets: TContingencies read FPromptTargets; | ||
93 | end; | 140 | end; |
94 | 141 | ||
95 | TEndConditionCriterium = record | 142 | TEndConditionCriterium = record |
@@ -127,45 +174,211 @@ type | @@ -127,45 +174,211 @@ type | ||
127 | EndCriterium : TEndConditionCriterium; // to change from one condition to another | 174 | EndCriterium : TEndConditionCriterium; // to change from one condition to another |
128 | end; | 175 | end; |
129 | 176 | ||
130 | - TPLayerPoints = record | ||
131 | - A, B : integer | 177 | +implementation |
178 | + | ||
179 | +uses ButtonPanel,Controls,ExtCtrls,strutils, string_methods, | ||
180 | + form_matrixgame{,StdCtrls}; | ||
181 | + | ||
182 | +{ TContingency } | ||
183 | + | ||
184 | +function TContingency.RowMod(R: TGameRow): TGameRow; | ||
185 | +var | ||
186 | + LEvenSet : TGameRows; | ||
187 | + LOddSet : TGameRows; | ||
188 | +begin | ||
189 | + Result := grNone; | ||
190 | + LEvenSet := [grTwo, grFour, grSix, grEight, grTen]; | ||
191 | + LOddSet := [grOne, grThree, grFive, grSeven, grNine]; | ||
192 | + if R in LEvenSet then | ||
193 | + Result := grEven; | ||
194 | + | ||
195 | + if R in LOddSet then | ||
196 | + Result := grOdd; | ||
197 | +end; | ||
198 | + | ||
199 | +procedure TContingency.CriteriaEvent; | ||
200 | +begin | ||
201 | + // FConsequence.Present(FMeta); | ||
202 | + // do admin internals | ||
203 | +end; | ||
204 | + | ||
205 | +constructor TContingency.Create(AOwner:TComponent;AConsequence:TConsequence;ACriteria:TCriteria;IsMeta:Boolean); | ||
206 | +begin | ||
207 | + inherited Create(AOwner); | ||
208 | + FConsequence := AConsequence; | ||
209 | + FCriteria := ACriteria; | ||
210 | + FMeta := IsMeta; | ||
211 | + FFired := False; | ||
212 | +end; | ||
213 | + | ||
214 | +function TContingency.CriteriaString: UTF8String; | ||
215 | +var R : TGameRow; | ||
216 | + C : TGameColor; | ||
217 | +begin | ||
218 | + Result := ''; | ||
219 | + for R in FCriteria.Rows do | ||
220 | + Result += GetRowString(R) + ','; | ||
221 | + Result += '|'; | ||
222 | + | ||
223 | + case FCriteria.Style of | ||
224 | + gtNone : Result += 'INDIFERENTE'; | ||
225 | + gtRowsAndColors : Result += 'E'; | ||
226 | + gtRowsOrColors : Result += 'OU'; | ||
227 | + gtRowsOnly: Result += 'LINHAS'; | ||
228 | + gtColorsOnly:Result += 'CORES'; | ||
132 | end; | 229 | end; |
230 | + Result += ','; | ||
231 | + Result += '|'; | ||
133 | 232 | ||
134 | - TPlayerChoice = record | ||
135 | - Row : TGameRow; | ||
136 | - Color : TGameColor; | 233 | + for C in FCriteria.Colors do |
234 | + Result += GetColorString(C) + ','; | ||
235 | + | ||
236 | + Result += '|'; | ||
237 | +end; | ||
238 | + | ||
239 | +function TContingency.ResponseMeetsCriteriaI(R : TGameRow; C : TGameColor): Boolean; | ||
240 | +var | ||
241 | + LMod : TGameRow; | ||
242 | + LRow, LColor:Boolean; | ||
243 | +begin | ||
244 | + Result := False; | ||
245 | + | ||
246 | + LMod := RowMod(R); | ||
247 | + LColor := C in Criteria.Colors; | ||
248 | + LRow := (R in Criteria.Rows) or (LMod in Criteria.Rows); | ||
249 | + | ||
250 | + case Criteria.Style of | ||
251 | + gtNone: Exit; | ||
252 | + gtColorsOnly: Result := LColor; | ||
253 | + gtRowsOnly: Result := LRow; | ||
254 | + gtRowsAndColors: Result := LColor and LRow; | ||
255 | + gtRowsOrColors: Result := LRow or LColor; | ||
137 | end; | 256 | end; |
257 | + if Result then | ||
258 | + if Assigned(FOnCriteria) then FOnCriteria(Self); | ||
259 | +end; | ||
138 | 260 | ||
139 | - PPlayer = ^TPlayer; | 261 | +function TContingency.ResponseMeetsCriteriaG(Players: TPlayers): Boolean; |
262 | +var i : integer; | ||
263 | + Cs : array of TGameColor; | ||
264 | + Rs : array of TGameRow; | ||
265 | + //C : TGameColor; | ||
266 | + R : TGameRow; | ||
267 | + Len : Byte; | ||
268 | + | ||
269 | + function AllColorsEqual:Boolean; | ||
270 | + var i : integer; | ||
271 | + begin | ||
272 | + Result := True; | ||
273 | + for i := 0 to Len-2 do | ||
274 | + if Cs[i] <> Cs[i+1] then | ||
275 | + begin | ||
276 | + Result := False; | ||
277 | + Break; | ||
278 | + end; | ||
279 | + end; | ||
140 | 280 | ||
141 | - TPlayer = record | ||
142 | - ID, | ||
143 | - Nicname, | ||
144 | - Login, | ||
145 | - Password : UTF8string; | ||
146 | - Status : TGamePlayerStatus; | ||
147 | - Data : TStringList; | ||
148 | - Choice : record | ||
149 | - Current, Last : TPlayerChoice; | 281 | + function AllColorsDiff:Boolean; |
282 | + var i : integer; | ||
283 | + begin | ||
284 | + Result := True; | ||
285 | + for i := 0 to Len-2 do | ||
286 | + if Cs[i] = Cs[i+1] then | ||
287 | + begin | ||
288 | + Result := False; | ||
289 | + Break; | ||
290 | + end; | ||
150 | end; | 291 | end; |
151 | - Points : TPLayerPoints; | ||
152 | - Turn : ShortInt; | ||
153 | - end; | ||
154 | 292 | ||
155 | -implementation | 293 | + function AllRowsOdd: Boolean; |
294 | + begin | ||
295 | + for R in Rs do | ||
296 | + if RowMod(R) = grEven then | ||
297 | + begin | ||
298 | + Result := False; | ||
299 | + Exit; | ||
300 | + end; | ||
301 | + end; | ||
156 | 302 | ||
157 | -uses Forms,ButtonPanel,Controls,StdCtrls,ExtCtrls; | 303 | + function AllRowsEven: Boolean; |
304 | + begin | ||
305 | + for R in Rs do | ||
306 | + if RowMod(R) = grOdd then | ||
307 | + begin | ||
308 | + Result := False; | ||
309 | + Exit; | ||
310 | + end; | ||
311 | + end; | ||
158 | 312 | ||
159 | -{ TContingency } | 313 | +begin // grDiff,grEqual,grAll |
314 | + Result := False; | ||
315 | + Len := Length(Players); | ||
316 | + SetLength(Cs,Len); | ||
317 | + SetLength(Rs,Len); | ||
160 | 318 | ||
161 | -procedure TContingency.CriteriaEvent; | ||
162 | -begin | 319 | + for i :=0 to Length(Players)-1 do |
320 | + Cs[i] := Players[i].Choice.Color; | ||
321 | + | ||
322 | + for i :=0 to Length(Players)-1 do | ||
323 | + Rs[i] := Players[i].Choice.Row; | ||
324 | + | ||
325 | + case Criteria.Style of | ||
326 | + gtNone: Exit; | ||
327 | + gtColorsOnly: | ||
328 | + begin | ||
329 | + if gcDiff in Criteria.Colors then | ||
330 | + Result := AllColorsDiff; | ||
331 | + | ||
332 | + if gcEqual in Criteria.Colors then | ||
333 | + Result := AllColorsEqual; | ||
334 | + end; | ||
335 | + | ||
336 | + gtRowsOnly: | ||
337 | + begin | ||
338 | + if grOdd in Criteria.Rows then | ||
339 | + Result := AllRowsOdd; | ||
340 | + | ||
341 | + if grEven in Criteria.Rows then | ||
342 | + Result := AllRowsEven; | ||
343 | + end; | ||
163 | 344 | ||
345 | + gtRowsAndColors: | ||
346 | + begin | ||
347 | + if (gcDiff in Criteria.Colors) and (grOdd in Criteria.Rows) then | ||
348 | + Result := AllColorsDiff and AllRowsOdd; | ||
349 | + | ||
350 | + if (gcDiff in Criteria.Colors) and (grEven in Criteria.Rows) then | ||
351 | + Result := AllColorsDiff and AllRowsEven; | ||
352 | + | ||
353 | + if (gcEqual in Criteria.Colors) and (grOdd in Criteria.Rows) then | ||
354 | + Result := AllColorsEqual and AllRowsOdd; | ||
355 | + | ||
356 | + if (gcEqual in Criteria.Colors) and (grEven in Criteria.Rows) then | ||
357 | + Result := AllColorsEqual and AllRowsEven; | ||
358 | + end; | ||
359 | + gtRowsOrColors: | ||
360 | + begin | ||
361 | + if (gcDiff in Criteria.Colors) and (grOdd in Criteria.Rows) then | ||
362 | + Result := AllColorsDiff or AllRowsOdd; | ||
363 | + | ||
364 | + if (gcDiff in Criteria.Colors) and (grEven in Criteria.Rows) then | ||
365 | + Result := AllColorsDiff or AllRowsEven; | ||
366 | + | ||
367 | + if (gcEqual in Criteria.Colors) and (grOdd in Criteria.Rows) then | ||
368 | + Result := AllColorsEqual or AllRowsOdd; | ||
369 | + | ||
370 | + if (gcEqual in Criteria.Colors) and (grEven in Criteria.Rows) then | ||
371 | + Result := AllColorsEqual or AllRowsEven; | ||
372 | + end; | ||
373 | + end; | ||
374 | + if Result then | ||
375 | + if Assigned(FOnCriteria) then FOnCriteria(Self); | ||
164 | end; | 376 | end; |
165 | 377 | ||
378 | + | ||
166 | { TPrompt } | 379 | { TPrompt } |
167 | 380 | ||
168 | -procedure TPrompt.Present; | 381 | +procedure TPrompt.Present(Sender: TObject; ForGroup: Boolean); |
169 | 382 | ||
170 | function AskQuestion: boolean; | 383 | function AskQuestion: boolean; |
171 | var | 384 | var |
@@ -202,16 +415,139 @@ procedure TPrompt.Present; | @@ -202,16 +415,139 @@ procedure TPrompt.Present; | ||
202 | end; | 415 | end; |
203 | end; | 416 | end; |
204 | begin | 417 | begin |
205 | - inherited Present; | 418 | + inherited Present(Sender, ForGroup); |
206 | //SendMessage(AskQuestion); | 419 | //SendMessage(AskQuestion); |
207 | end; | 420 | end; |
208 | 421 | ||
209 | { TConsequence } | 422 | { TConsequence } |
210 | 423 | ||
211 | -procedure TConsequence.Present; | 424 | +constructor TConsequence.Create(AOwner: TComponent; AP: TGamePoint; |
425 | + AStyle: TConsequenceStyle; AAppendiceSingular, AAppendicePlural: UTF8String); | ||
212 | begin | 426 | begin |
213 | - AbstractError; | 427 | + inherited Create(AOwner); |
428 | + FStyle:=AStyle; | ||
429 | + FNicname:=''; | ||
430 | + FAppendiceSingular:=AAppendiceSingular; | ||
431 | + FAppendicePlural:=AAppendicePlural; | ||
432 | + FP := AP; | ||
433 | + FMessage := TPopupNotifier.Create(AOwner); | ||
214 | end; | 434 | end; |
215 | 435 | ||
436 | +constructor TConsequence.Create(AOwner: TComponent; AP: integer; | ||
437 | + AStyle:TConsequenceStyle; AMessage: array of UTF8string); | ||
438 | +begin | ||
439 | + inherited Create(AOwner); | ||
440 | + FStyle:=AStyle; | ||
441 | + FNicname:=AMessage[0]; | ||
442 | + FAppendiceSingular:=AMessage[1]; | ||
443 | + FAppendicePlural:=AMessage[2]; | ||
444 | + FP := TGamePoint.Create(AOwner,AP); | ||
445 | + FMessage := TPopupNotifier.Create(AOwner); | ||
446 | +end; | ||
447 | + | ||
448 | +constructor TConsequence.Create(AOwner: TComponent; | ||
449 | + AConsequenceString: UTF8String); | ||
450 | + | ||
451 | + function GetConsequenceStyleFromString(S:UTF8String):TConsequenceStyle; | ||
452 | + var | ||
453 | + LCount, | ||
454 | + i : integer; | ||
455 | + begin | ||
456 | + Result := []; | ||
457 | + LCount := WordCount(S,[#0,',']); | ||
458 | + for i:= 1 to LCount do | ||
459 | + case ExtractDelimited(i,S,[',']) of | ||
460 | + '0':Result+=[gscNone]; | ||
461 | + 'M':Result+=[gscMessage]; | ||
462 | + 'C':Result+=[gscBroadcastMessage]; | ||
463 | + 'P':Result+=[gscPoints]; | ||
464 | + 'V':Result+=[gscVariablePoints]; | ||
465 | + 'A':Result+=[gscA]; | ||
466 | + 'B':Result+=[gscB]; | ||
467 | + end; | ||
468 | + end; | ||
469 | + | ||
470 | +begin | ||
471 | + inherited Create(AOwner); | ||
472 | + FP := TGamePoint.Create(AOwner,ExtractDelimited(1,AConsequenceString,['|'])); | ||
473 | + FStyle:=GetConsequenceStyleFromString(ExtractDelimited(2,AConsequenceString,['|'])); | ||
474 | + FNicname:=ExtractDelimited(3,AConsequenceString,['|']); | ||
475 | + FAppendiceSingular:=ExtractDelimited(4,AConsequenceString,['|']); | ||
476 | + FAppendicePlural:=ExtractDelimited(5,AConsequenceString,['|']); | ||
477 | + FMessage := TPopupNotifier.Create(AOwner); | ||
478 | +end; | ||
479 | + | ||
480 | +destructor TConsequence.Destroy; | ||
481 | +begin | ||
482 | + inherited Destroy; | ||
483 | +end; | ||
484 | + | ||
485 | +function TConsequence.AsString: utf8string; | ||
486 | + function GetConsequenceStyleString(CS:TConsequenceStyle): UTF8String; | ||
487 | + var ConsequenceStyle : TGameConsequenceStyle; | ||
488 | + begin | ||
489 | + Result := ''; | ||
490 | + for ConsequenceStyle in CS do | ||
491 | + begin | ||
492 | + case ConsequenceStyle of | ||
493 | + gscNone: Result += '0'; | ||
494 | + gscMessage:Result += 'M'; | ||
495 | + gscBroadcastMessage:Result += 'C'; | ||
496 | + gscPoints:Result += 'P'; | ||
497 | + gscVariablePoints:Result += 'V'; | ||
498 | + gscA:Result += 'A'; | ||
499 | + gscB:Result += 'B'; | ||
500 | + end; | ||
501 | + Result += ','; | ||
502 | + end; | ||
503 | + end; | ||
504 | + | ||
505 | +begin | ||
506 | + Result := IntToStr(FP.Value)+','+IntToStr(FP.Variation) + '|'; | ||
507 | + Result += GetConsequenceStyleString(FStyle)+'|'; | ||
508 | + Result += FNicname +'|'; | ||
509 | + Result += FAppendiceSingular + '|'; | ||
510 | + Result += FAppendicePlural + '|'; | ||
511 | +end; | ||
512 | + | ||
513 | + | ||
514 | +procedure TConsequence.Present(Sender: TObject; ForGroup: Boolean); | ||
515 | +var | ||
516 | + PopUpPos : TPoint; | ||
517 | +begin | ||
518 | + PopUpPos.X := FormMatrixGame.StringGridMatrix.Left+FormMatrixGame.StringGridMatrix.Width; | ||
519 | + PopUpPos.Y := FormMatrixGame.StringGridMatrix.Top; | ||
520 | + PopUpPos := FormMatrixGame.StringGridMatrix.ClientToScreen(PopUpPos); | ||
521 | + | ||
522 | + FMessage.Text := FP.PointMessage(FNicname,FAppendicePlural, FAppendiceSingular,ForGroup); | ||
523 | + FMessage.OnClose:=@StopTimer; | ||
524 | + FormMatrixGame.Timer.OnTimer := @TimerTimer; | ||
525 | + | ||
526 | + if gscA in FStyle then | ||
527 | + FormMatrixGame.LabelIndACount.Caption := IntToStr(StrToInt(FormMatrixGame.LabelIndACount.Caption) + FP.ResultAsInteger); | ||
528 | + | ||
529 | + if gscB in FStyle then | ||
530 | + FormMatrixGame.LabelIndBCount.Caption := IntToStr(StrToInt(FormMatrixGame.LabelIndBCount.Caption) + FP.ResultAsInteger); | ||
531 | + | ||
532 | + if gscG in FStyle then | ||
533 | + FormMatrixGame.LabelGroupCount.Caption:= IntToStr(StrToInt(FormMatrixGame.LabelGroupCount.Caption) + FP.ResultAsInteger); | ||
534 | + | ||
535 | + FMessage.ShowAtPos(PopUpPos.X, PopUpPos.Y); | ||
536 | + FormMatrixGame.Timer.Enabled:=True; | ||
537 | +end; | ||
538 | + | ||
539 | +procedure TConsequence.StopTimer(Sender: TObject; var ACloseAction: TCloseAction | ||
540 | + ); | ||
541 | +begin | ||
542 | + FormMatrixGame.Timer.Enabled:=False; | ||
543 | + Free; | ||
544 | +end; | ||
545 | + | ||
546 | +procedure TConsequence.TimerTimer(Sender: TOBject); | ||
547 | +begin | ||
548 | + FMessage.Visible:=False; | ||
549 | +end; | ||
550 | + | ||
551 | + | ||
216 | end. | 552 | end. |
217 | 553 |
units/game_actors_point.pas
@@ -13,16 +13,23 @@ type | @@ -13,16 +13,23 @@ type | ||
13 | 13 | ||
14 | TGamePoint = class(TComponent) | 14 | TGamePoint = class(TComponent) |
15 | private | 15 | private |
16 | + FResult: integer; | ||
16 | FValue, | 17 | FValue, |
17 | FVariation : integer; | 18 | FVariation : integer; |
19 | + function GetResult: integer; | ||
20 | + function GetResultAsString: string; | ||
18 | function GetValue: integer; | 21 | function GetValue: integer; |
19 | procedure SetValue(AValue: integer); | 22 | procedure SetValue(AValue: integer); |
20 | public | 23 | public |
21 | - //Cycles : integer; | ||
22 | - constructor Create(AValue : integer);overload; | ||
23 | - constructor Create(AValue : array of integer); overload; | 24 | + //Cycles : integer; // specify when present points regarding condition cycles |
25 | + constructor Create(AOwner:TComponent;AValue : integer);overload; | ||
26 | + constructor Create(AOwner:TComponent;AValue : array of integer); overload; | ||
27 | + constructor Create(AOwner:TComponent;AValue : utf8string); overload; | ||
28 | + function PointMessage(APrepend, AAppendicePlural, AAppendiceSingular: string; IsGroupPoint: Boolean) : string; | ||
24 | property Value : integer read GetValue write SetValue; | 29 | property Value : integer read GetValue write SetValue; |
25 | property Variation : integer read FVariation write FVariation; | 30 | property Variation : integer read FVariation write FVariation; |
31 | + property AsString : string read GetResultAsString; | ||
32 | + property ResultAsInteger : integer read GetResult; | ||
26 | end; | 33 | end; |
27 | 34 | ||
28 | //operator :=(I :integer) : TGamePoint; | 35 | //operator :=(I :integer) : TGamePoint; |
@@ -30,9 +37,11 @@ type | @@ -30,9 +37,11 @@ type | ||
30 | // | 37 | // |
31 | implementation | 38 | implementation |
32 | 39 | ||
40 | +uses strutils; | ||
33 | //operator:=(I: integer):TGamePoint; | 41 | //operator:=(I: integer):TGamePoint; |
34 | //begin | 42 | //begin |
35 | -// Result := TGamePoint.Create(I); | 43 | +// Result := ; |
44 | +// Result.Value := I; | ||
36 | //end; | 45 | //end; |
37 | // | 46 | // |
38 | //operator:=(A: array of integer): TGamePoint; | 47 | //operator:=(A: array of integer): TGamePoint; |
@@ -45,6 +54,17 @@ implementation | @@ -45,6 +54,17 @@ implementation | ||
45 | function TGamePoint.GetValue: integer; | 54 | function TGamePoint.GetValue: integer; |
46 | begin | 55 | begin |
47 | Result := FValue - FVariation + Random((2 * FVariation) + 1); | 56 | Result := FValue - FVariation + Random((2 * FVariation) + 1); |
57 | + FResult := Result; | ||
58 | +end; | ||
59 | + | ||
60 | +function TGamePoint.GetResult: integer; | ||
61 | +begin | ||
62 | + Result := FResult; | ||
63 | +end; | ||
64 | + | ||
65 | +function TGamePoint.GetResultAsString: string; | ||
66 | +begin | ||
67 | + Result := IntToStr(FResult); | ||
48 | end; | 68 | end; |
49 | 69 | ||
50 | procedure TGamePoint.SetValue(AValue: integer); | 70 | procedure TGamePoint.SetValue(AValue: integer); |
@@ -52,17 +72,88 @@ begin | @@ -52,17 +72,88 @@ begin | ||
52 | FValue := AValue; | 72 | FValue := AValue; |
53 | end; | 73 | end; |
54 | 74 | ||
55 | -constructor TGamePoint.Create(AValue: integer); | 75 | +constructor TGamePoint.Create(AOwner: TComponent; AValue: integer); |
56 | begin | 76 | begin |
77 | + inherited Create(AOwner); | ||
57 | FValue := AValue; | 78 | FValue := AValue; |
79 | + FVariation:=0; | ||
58 | end; | 80 | end; |
59 | 81 | ||
60 | -constructor TGamePoint.Create(AValue : array of integer); | 82 | +constructor TGamePoint.Create(AOwner: TComponent; AValue: array of integer); |
61 | begin | 83 | begin |
84 | + inherited Create(AOwner); | ||
62 | FValue := AValue[0]; | 85 | FValue := AValue[0]; |
63 | FVariation := AValue[1]; | 86 | FVariation := AValue[1]; |
64 | - //Cycles := AValue[2]; | ||
65 | end; | 87 | end; |
66 | 88 | ||
89 | +constructor TGamePoint.Create(AOwner: TComponent; AValue: utf8string); | ||
90 | +begin | ||
91 | + FValue := StrToInt(ExtractDelimited(1,AValue,[','])); | ||
92 | + FVariation := StrToInt(ExtractDelimited(2,AValue,[','])); | ||
93 | +end; | ||
94 | + | ||
95 | +function TGamePoint.PointMessage(APrepend, AAppendicePlural, AAppendiceSingular: string; IsGroupPoint: Boolean): string; | ||
96 | +begin | ||
97 | + Self.Value; | ||
98 | + if IsGroupPoint then | ||
99 | + begin | ||
100 | + if APrepend = '' then | ||
101 | + Result := 'Vocês' | ||
102 | + else | ||
103 | + Result := APrepend; | ||
104 | + | ||
105 | + if (AAppendiceSingular = '') or (AAppendicePlural = '') then | ||
106 | + begin | ||
107 | + case FValue of | ||
108 | + -MaxInt..-2: Result += ' produziram a perda de '+Self.AsString+ ' pontos para o grupo'; | ||
109 | + -1 : Result += ' produziram a perda de 1 ponto para o grupo'; | ||
110 | + 0 : Result += ' pontos do grupo não foram produzidos nem perdidos'; | ||
111 | + 1 : Result += 'produziram 1 ponto para o grupo'; | ||
112 | + 2..MaxInt: Result += 'produziu '+Self.AsString+' pontos para o grupo' | ||
113 | + end; | ||
114 | + end | ||
115 | + else | ||
116 | + begin | ||
117 | + case FValue of | ||
118 | + -MaxInt..-2: Result += ' produziram a perda de '+Self.AsString+ ' ' + AAppendicePlural; | ||
119 | + -1 : Result += ' produziram a perda de 1'+ ' ' + AAppendiceSingular; | ||
120 | + 0 : Result += ' não produziram ' + AAppendicePlural; | ||
121 | + 1 : Result += ' produziram 1 ponto ' + AAppendiceSingular; | ||
122 | + 2..MaxInt: Result += 'produziu '+Self.AsString+ ' ' + AAppendicePlural; | ||
123 | + end; | ||
124 | + end; | ||
125 | + end | ||
126 | + else | ||
127 | + begin | ||
128 | + if APrepend = '' then | ||
129 | + Result := 'Alguém' | ||
130 | + else | ||
131 | + Result := APrepend; | ||
132 | + | ||
133 | + if (AAppendiceSingular = '') or (AAppendicePlural = '') then | ||
134 | + begin | ||
135 | + case FValue of | ||
136 | + -MaxInt..-2: Result += ' perdeu '+Self.AsString+ ' pontos'; | ||
137 | + -1 : Result += ' perdeu 1 ponto'; | ||
138 | + 0 : Result += ' não perdeu nem ganhou pontos'; | ||
139 | + 1 : Result += ' ganhou 1 ponto'; | ||
140 | + 2..MaxInt: Result += 'ganhou '+Self.AsString+' pontos' | ||
141 | + end; | ||
142 | + end | ||
143 | + else | ||
144 | + begin | ||
145 | + case FValue of | ||
146 | + -MaxInt..-2: Result += ' perdeu '+Self.AsString+ ' ' + AAppendicePlural; | ||
147 | + -1 : Result += ' ponto 1'+ ' ' + AAppendiceSingular; | ||
148 | + 0 : Result += ' não perdeu nem ganhou ' + AAppendicePlural; | ||
149 | + 1 : Result += ' ganhou 1 ponto ' + AAppendiceSingular; | ||
150 | + 2..MaxInt: Result += 'ganhou '+Self.AsString+ ' ' + AAppendicePlural; | ||
151 | + end; | ||
152 | + end; | ||
153 | + end; | ||
154 | + Result += '.'; | ||
155 | +end; | ||
156 | + | ||
157 | + | ||
67 | end. | 158 | end. |
68 | 159 |
units/game_control.pas
@@ -86,13 +86,13 @@ const | @@ -86,13 +86,13 @@ const | ||
86 | K_QUESTION = '.Question'; | 86 | K_QUESTION = '.Question'; |
87 | // | 87 | // |
88 | K_STATUS = '.Status'; | 88 | K_STATUS = '.Status'; |
89 | - K_CYCLES = '.OnCycleStart'; | 89 | + K_CYCLES = '.OnEndCycle'; |
90 | 90 | ||
91 | //K_RESPONSE = | 91 | //K_RESPONSE = |
92 | 92 | ||
93 | implementation | 93 | implementation |
94 | 94 | ||
95 | -uses LazUTF8, form_matrixgame, form_chooseactor, game_resources, string_methods, zhelpers; | 95 | +uses LazUTF8, form_matrixgame, form_chooseactor, game_resources, strutils, string_methods, zhelpers; |
96 | 96 | ||
97 | const | 97 | const |
98 | GA_ADMIN = 'Admin'; | 98 | GA_ADMIN = 'Admin'; |
@@ -134,12 +134,18 @@ begin | @@ -134,12 +134,18 @@ begin | ||
134 | 134 | ||
135 | // inform players | 135 | // inform players |
136 | 136 | ||
137 | +{$IFDEF DEBUG} | ||
138 | + WriteLn('TGameControl.NextTurn'); | ||
139 | +{$ENDIF} | ||
137 | end; | 140 | end; |
138 | 141 | ||
139 | procedure TGameControl.NextCycle(Sender: TObject); | 142 | procedure TGameControl.NextCycle(Sender: TObject); |
140 | begin | 143 | begin |
141 | // prompt question to all players | 144 | // prompt question to all players |
142 | FormMatrixGame.LabelExpCountCycle.Caption:=IntToStr(FExperiment.Condition[FExperiment.CurrentCondition].Cycles.Count); | 145 | FormMatrixGame.LabelExpCountCycle.Caption:=IntToStr(FExperiment.Condition[FExperiment.CurrentCondition].Cycles.Count); |
146 | + {$IFDEF DEBUG} | ||
147 | + WriteLn('TGameControl.NextTurn'); | ||
148 | + {$ENDIF} | ||
143 | end; | 149 | end; |
144 | 150 | ||
145 | procedure TGameControl.NextLineage(Sender: TObject); | 151 | procedure TGameControl.NextLineage(Sender: TObject); |
@@ -235,12 +241,12 @@ begin | @@ -235,12 +241,12 @@ begin | ||
235 | Caption := P.Nicname+SysToUtf8(' (Você)' ) | 241 | Caption := P.Nicname+SysToUtf8(' (Você)' ) |
236 | else | 242 | else |
237 | Caption := P.Nicname; | 243 | Caption := P.Nicname; |
238 | - i1 := Integer(P.Choice.Last.Row); | 244 | + i1 := Integer(P.Choice.Row); |
239 | if i1 > 0 then | 245 | if i1 > 0 then |
240 | LabelLastRowCount.Caption := Format('%-*.*d', [1,2,i1]) | 246 | LabelLastRowCount.Caption := Format('%-*.*d', [1,2,i1]) |
241 | else | 247 | else |
242 | LabelLastRowCount.Caption := 'NA'; | 248 | LabelLastRowCount.Caption := 'NA'; |
243 | - PanelLastColor.Color := GetColorFromCode(P.Choice.Last.Color); | 249 | + PanelLastColor.Color := GetColorFromCode(P.Choice.Color); |
244 | Enabled := True; | 250 | Enabled := True; |
245 | Parent := FormMatrixGame.GBLastChoice; | 251 | Parent := FormMatrixGame.GBLastChoice; |
246 | end; | 252 | end; |
@@ -385,12 +391,22 @@ var | @@ -385,12 +391,22 @@ var | ||
385 | M[i] := A[i]; | 391 | M[i] := A[i]; |
386 | end; | 392 | end; |
387 | begin | 393 | begin |
388 | - SetM([ | ||
389 | - FZMQActor.ID | ||
390 | - , ' ' | ||
391 | - , ARequest | ||
392 | - ]); | 394 | + case ARequest of |
395 | + K_LOGIN :SetM([ | ||
396 | + FZMQActor.ID | ||
397 | + , ' ' | ||
398 | + , ARequest | ||
399 | + ]); | ||
400 | + | ||
401 | + K_CHOICE : SetM([ | ||
402 | + FZMQActor.ID | ||
403 | + , ' ' | ||
404 | + , ARequest | ||
405 | + , GetSelectedRowF(FormMatrixGame.StringGridMatrix) | ||
406 | + , GetSelectedColorF(FormMatrixGame.StringGridMatrix) | ||
407 | + ]); | ||
393 | 408 | ||
409 | + end; | ||
394 | case FActor of | 410 | case FActor of |
395 | gaAdmin: begin | 411 | gaAdmin: begin |
396 | //M[2] := GA_ADMIN+M[2];// for now cannot Requests | 412 | //M[2] := GA_ADMIN+M[2];// for now cannot Requests |
@@ -419,13 +435,6 @@ var | @@ -419,13 +435,6 @@ var | ||
419 | begin | 435 | begin |
420 | case AMessage of | 436 | case AMessage of |
421 | 437 | ||
422 | - K_CHOICE : SetM([ | ||
423 | - AMessage | ||
424 | - , FZMQActor.ID | ||
425 | - , GetSelectedRowF(FormMatrixGame.StringGridMatrix) | ||
426 | - , GetSelectedColorF(FormMatrixGame.StringGridMatrix) | ||
427 | - ]); | ||
428 | - | ||
429 | K_CHAT_M : begin | 438 | K_CHAT_M : begin |
430 | //if (FActor = gaAdmin) and (not FExperiment.ResearcherCanChat) then Exit; | 439 | //if (FActor = gaAdmin) and (not FExperiment.ResearcherCanChat) then Exit; |
431 | SetM([ | 440 | SetM([ |
@@ -434,7 +443,12 @@ begin | @@ -434,7 +443,12 @@ begin | ||
434 | , FormMatrixGame.ChatMemoSend.Lines.Text | 443 | , FormMatrixGame.ChatMemoSend.Lines.Text |
435 | ]); | 444 | ]); |
436 | end; | 445 | end; |
437 | - | 446 | + K_CHOICE : SetM([ |
447 | + AMessage | ||
448 | + , FZMQActor.ID | ||
449 | + , GetSelectedRowF(FormMatrixGame.StringGridMatrix) | ||
450 | + , GetSelectedColorF(FormMatrixGame.StringGridMatrix) | ||
451 | + ]); | ||
438 | end; | 452 | end; |
439 | 453 | ||
440 | case FActor of | 454 | case FActor of |
@@ -486,11 +500,11 @@ procedure TGameControl.ReceiveMessage(AMessage: TStringList); | @@ -486,11 +500,11 @@ procedure TGameControl.ReceiveMessage(AMessage: TStringList); | ||
486 | 500 | ||
487 | end; | 501 | end; |
488 | 502 | ||
489 | - procedure EnableMatrix(ATurn:integer); | 503 | + procedure SetPMatrix(ATurn:integer; AEnabled:Boolean); |
490 | begin | 504 | begin |
491 | if FExperiment.PlayerFromID[Self.ID].Turn = ATurn then | 505 | if FExperiment.PlayerFromID[Self.ID].Turn = ATurn then |
492 | begin | 506 | begin |
493 | - FormMatrixGame.StringGridMatrix.Enabled:=True; | 507 | + FormMatrixGame.StringGridMatrix.Enabled:=AEnabled; |
494 | FormMatrixGame.StringGridMatrix.Options := FormMatrixGame.StringGridMatrix.Options-[goRowSelect]; | 508 | FormMatrixGame.StringGridMatrix.Options := FormMatrixGame.StringGridMatrix.Options-[goRowSelect]; |
495 | FormMatrixGame.btnConfirmRow.Enabled:=True; | 509 | FormMatrixGame.btnConfirmRow.Enabled:=True; |
496 | FormMatrixGame.btnConfirmRow.Caption:='Confirmar'; | 510 | FormMatrixGame.btnConfirmRow.Caption:='Confirmar'; |
@@ -520,7 +534,7 @@ procedure TGameControl.ReceiveMessage(AMessage: TStringList); | @@ -520,7 +534,7 @@ procedure TGameControl.ReceiveMessage(AMessage: TStringList); | ||
520 | FormMatrixGame.btnConfirmRow.Caption:='OK'; | 534 | FormMatrixGame.btnConfirmRow.Caption:='OK'; |
521 | end | 535 | end |
522 | else | 536 | else |
523 | - EnableMatrix(P.Turn+1); | 537 | + SetPMatrix(P.Turn+1, True); |
524 | end; | 538 | end; |
525 | 539 | ||
526 | gaAdmin:begin | 540 | gaAdmin:begin |
@@ -542,7 +556,7 @@ procedure TGameControl.ReceiveMessage(AMessage: TStringList); | @@ -542,7 +556,7 @@ procedure TGameControl.ReceiveMessage(AMessage: TStringList); | ||
542 | begin | 556 | begin |
543 | PopUpPos.X := FormMatrixGame.StringGridMatrix.Left+FormMatrixGame.StringGridMatrix.Width; | 557 | PopUpPos.X := FormMatrixGame.StringGridMatrix.Left+FormMatrixGame.StringGridMatrix.Width; |
544 | PopUpPos.Y := FormMatrixGame.StringGridMatrix.Top; | 558 | PopUpPos.Y := FormMatrixGame.StringGridMatrix.Top; |
545 | - EnableMatrix(0); | 559 | + SetPMatrix(0, True); |
546 | FormMatrixGame.PopupNotifier.Text:='É sua vez! Clique sobre uma linha da matrix e confirme sua escolha.'; | 560 | FormMatrixGame.PopupNotifier.Text:='É sua vez! Clique sobre uma linha da matrix e confirme sua escolha.'; |
547 | FormMatrixGame.PopupNotifier.ShowAtPos(PopUpPos.X,PopUpPos.Y); | 561 | FormMatrixGame.PopupNotifier.ShowAtPos(PopUpPos.X,PopUpPos.Y); |
548 | end | 562 | end |
@@ -556,6 +570,31 @@ procedure TGameControl.ReceiveMessage(AMessage: TStringList); | @@ -556,6 +570,31 @@ procedure TGameControl.ReceiveMessage(AMessage: TStringList); | ||
556 | end; | 570 | end; |
557 | end; | 571 | end; |
558 | 572 | ||
573 | + procedure OnEndCycle; | ||
574 | + begin | ||
575 | + // Updata turn | ||
576 | + | ||
577 | + // | ||
578 | + case FActor of | ||
579 | + gaPlayer: | ||
580 | + begin | ||
581 | + if FExperiment.PlayerFromID[Self.ID].Turn = 0 then | ||
582 | + begin | ||
583 | + SetPMatrix(0,True); | ||
584 | + end | ||
585 | + else | ||
586 | + begin | ||
587 | + //CleanMatrix; | ||
588 | + FormMatrixGame.StringGridMatrix.Enabled:=False; | ||
589 | + FormMatrixGame.StringGridMatrix.Options := FormMatrixGame.StringGridMatrix.Options-[goRowSelect]; | ||
590 | + FormMatrixGame.btnConfirmRow.Enabled:=True; | ||
591 | + FormMatrixGame.btnConfirmRow.Caption:='Confirmar'; | ||
592 | + FormMatrixGame.btnConfirmRow.Visible := False; | ||
593 | + end; | ||
594 | + end; | ||
595 | + end; | ||
596 | + end; | ||
597 | + | ||
559 | procedure ReceiveChat; | 598 | procedure ReceiveChat; |
560 | begin | 599 | begin |
561 | FormMatrixGame.ChatMemoRecv.Lines.Append(('['+AMessage[1]+']: ')+AMessage[2]); | 600 | FormMatrixGame.ChatMemoRecv.Lines.Append(('['+AMessage[1]+']: ')+AMessage[2]); |
@@ -622,6 +661,7 @@ begin | @@ -622,6 +661,7 @@ begin | ||
622 | if MHas(K_CHOICE) then ReceiveChoice; | 661 | if MHas(K_CHOICE) then ReceiveChoice; |
623 | if MHas(K_KICK) then SayGoodBye; | 662 | if MHas(K_KICK) then SayGoodBye; |
624 | if MHas(K_START) then NotifyPlayers; | 663 | if MHas(K_START) then NotifyPlayers; |
664 | + if MHas(K_CYCLES) then OnEndCycle; | ||
625 | end; | 665 | end; |
626 | 666 | ||
627 | // Here FActor is garanted to be a TZMQAdmin | 667 | // Here FActor is garanted to be a TZMQAdmin |
@@ -662,10 +702,8 @@ procedure TGameControl.ReceiveRequest(var ARequest: TStringList); | @@ -662,10 +702,8 @@ procedure TGameControl.ReceiveRequest(var ARequest: TStringList); | ||
662 | P.Points.A:=0; | 702 | P.Points.A:=0; |
663 | P.Points.B:=0; | 703 | P.Points.B:=0; |
664 | P.Status:=gpsPlaying; | 704 | P.Status:=gpsPlaying; |
665 | - P.Choice.Current.Color:=gcNone; | ||
666 | - P.Choice.Current.Row:=grNone; | ||
667 | - P.Choice.Last.Color:=gcNone; | ||
668 | - P.Choice.Last.Row:=grNone; | 705 | + P.Choice.Color:=gcNone; |
706 | + P.Choice.Row:=grNone; | ||
669 | // turns by entrance order or by random order | 707 | // turns by entrance order or by random order |
670 | P.Turn := FExperiment.NextTurn; | 708 | P.Turn := FExperiment.NextTurn; |
671 | FExperiment.Player[i] := P; | 709 | FExperiment.Player[i] := P; |
@@ -716,11 +754,25 @@ procedure TGameControl.ReceiveRequest(var ARequest: TStringList); | @@ -716,11 +754,25 @@ procedure TGameControl.ReceiveRequest(var ARequest: TStringList); | ||
716 | end; | 754 | end; |
717 | end; | 755 | end; |
718 | 756 | ||
757 | + procedure ValidateChoice; | ||
758 | + var P : TPlayer; | ||
759 | + begin | ||
760 | + P := FExperiment.PlayerFromID[ARequest[0]]; | ||
761 | + P.Choice.Row:= GetRowFromString(ARequest[3]); // row | ||
762 | + P.Choice.Color:= GetColorFromString(ARequest[4]); // color | ||
763 | + ARequest[2] := K_CHOICE+K_ARRIVED; | ||
764 | + ARequest.Append(FExperiment.ConsequenceStringFromChoice[P]); //individual consequences | ||
765 | + FZMQActor.SendMessage([K_CHOICE,P.ID,ARequest[3],ARequest[4]]); | ||
766 | + end; | ||
767 | + | ||
719 | begin | 768 | begin |
720 | if MHas(K_LOGIN) then ReplyLoginRequest; | 769 | if MHas(K_LOGIN) then ReplyLoginRequest; |
770 | + if MHas(K_CHOICE) then ValidateChoice; | ||
721 | end; | 771 | end; |
722 | 772 | ||
723 | -// Here FActor is garanted to be a TZMQPlayer, should be used to send all wanted history for new income players | 773 | +// Here FActor is garanted to be a TZMQPlayer, reply |
774 | +// - sending private data to player player | ||
775 | +// - sending data from early history to income players | ||
724 | procedure TGameControl.ReceiveReply(AReply: TStringList); | 776 | procedure TGameControl.ReceiveReply(AReply: TStringList); |
725 | function MHas(const C : string) : Boolean; | 777 | function MHas(const C : string) : Boolean; |
726 | begin | 778 | begin |
@@ -752,11 +804,39 @@ procedure TGameControl.ReceiveReply(AReply: TStringList); | @@ -752,11 +804,39 @@ procedure TGameControl.ReceiveReply(AReply: TStringList); | ||
752 | else | 804 | else |
753 | begin | 805 | begin |
754 | {$IFDEF DEBUG} | 806 | {$IFDEF DEBUG} |
755 | - WriteLn(Self.ID +' sent but' + AReply[0] +' received. This must not occur.'); | 807 | + WriteLn(Self.ID +' sent but' + AReply[0] +' received. <<<<<<<<<<<<<<<<<<<<<<< This must not occur >>>>>>>>>>>>>>>>>>>>>>>>>>'); |
756 | {$ENDIF} | 808 | {$ENDIF} |
757 | end; | 809 | end; |
758 | end; | 810 | end; |
759 | 811 | ||
812 | + procedure ChoiceValidated; | ||
813 | + var | ||
814 | + LConsequence : TConsequence; | ||
815 | + LCount, | ||
816 | + i : integer; | ||
817 | + P : TPlayer; | ||
818 | + begin | ||
819 | + if Self.ID = AReply[0] then | ||
820 | + begin | ||
821 | + P := FExperiment.PlayerFromID[Self.ID]; | ||
822 | + LCount := WordCount(AReply[5],['+']); | ||
823 | + {$IFDEF DEBUG} | ||
824 | + WriteLn('LCount:',LCount); | ||
825 | + {$ENDIF} | ||
826 | + if LCount > 0 then | ||
827 | + for i := 1 to LCount do | ||
828 | + begin | ||
829 | + LConsequence := TConsequence.Create(FormMatrixGame,ExtractDelimited(i,AReply[5],['+'])); | ||
830 | + //LConsequence.PlayerNicname := P.Nicname; | ||
831 | + LConsequence.Present(Self, False); | ||
832 | + {$IFDEF DEBUG} | ||
833 | + WriteLn('A consequence should have shown.'); | ||
834 | + {$ENDIF} | ||
835 | + end; | ||
836 | + | ||
837 | + end; | ||
838 | + end; | ||
839 | + | ||
760 | procedure ResumePlayer; | 840 | procedure ResumePlayer; |
761 | begin | 841 | begin |
762 | 842 | ||
@@ -765,6 +845,7 @@ procedure TGameControl.ReceiveReply(AReply: TStringList); | @@ -765,6 +845,7 @@ procedure TGameControl.ReceiveReply(AReply: TStringList); | ||
765 | begin | 845 | begin |
766 | if MHas(K_RESUME+K_ARRIVED) then ResumePlayer; | 846 | if MHas(K_RESUME+K_ARRIVED) then ResumePlayer; |
767 | if MHas(K_LOGIN+K_ARRIVED) then LoginAccepted; | 847 | if MHas(K_LOGIN+K_ARRIVED) then LoginAccepted; |
848 | + if MHas(K_CHOICE+K_ARRIVED) then ChoiceValidated; | ||
768 | end; | 849 | end; |
769 | 850 | ||
770 | 851 |
units/game_experiment.pas
@@ -2,6 +2,8 @@ unit game_experiment; | @@ -2,6 +2,8 @@ unit game_experiment; | ||
2 | 2 | ||
3 | {$mode objfpc}{$H+} | 3 | {$mode objfpc}{$H+} |
4 | 4 | ||
5 | +{$DEFINE DEBUG} | ||
6 | + | ||
5 | interface | 7 | interface |
6 | 8 | ||
7 | uses | 9 | uses |
@@ -15,7 +17,6 @@ type | @@ -15,7 +17,6 @@ type | ||
15 | { TExperiment } | 17 | { TExperiment } |
16 | 18 | ||
17 | TExperimentState = (xsWaiting,xsRunning,xsPaused,xsCanceled); | 19 | TExperimentState = (xsWaiting,xsRunning,xsPaused,xsCanceled); |
18 | - TPlayers = array of TPlayer; | ||
19 | TConditions = array of TCondition; | 20 | TConditions = array of TCondition; |
20 | 21 | ||
21 | TExperiment = class(TComponent) | 22 | TExperiment = class(TComponent) |
@@ -43,6 +44,7 @@ type | @@ -43,6 +44,7 @@ type | ||
43 | FTurnsRandom : TStringList; | 44 | FTurnsRandom : TStringList; |
44 | function GetCondition(I : Integer): TCondition; | 45 | function GetCondition(I : Integer): TCondition; |
45 | function GetConditionsCount: integer; | 46 | function GetConditionsCount: integer; |
47 | + function GetContingenciesCount(C: integer): integer; | ||
46 | function GetContingency(ACondition, I : integer): TContingency; | 48 | function GetContingency(ACondition, I : integer): TContingency; |
47 | function GetNextTurn: integer; | 49 | function GetNextTurn: integer; |
48 | function GetNextTurnPlayerID: UTF8string; | 50 | function GetNextTurnPlayerID: UTF8string; |
@@ -56,6 +58,7 @@ type | @@ -56,6 +58,7 @@ type | ||
56 | function GetPlayerIsPlaying(AID : UTF8string): Boolean; | 58 | function GetPlayerIsPlaying(AID : UTF8string): Boolean; |
57 | function GetPlayersCount: integer; | 59 | function GetPlayersCount: integer; |
58 | function GetInterlockingsIn(ALastCycles : integer):integer; | 60 | function GetInterlockingsIn(ALastCycles : integer):integer; |
61 | + function GetConsequenceStringFromChoice(P:TPlayer): Utf8string; | ||
59 | procedure SetCondition(I : Integer; AValue: TCondition); | 62 | procedure SetCondition(I : Integer; AValue: TCondition); |
60 | procedure SetContingency(ACondition, I : integer; AValue: TContingency); | 63 | procedure SetContingency(ACondition, I : integer; AValue: TContingency); |
61 | procedure SetMatrixType(AValue: TGameMatrixType); | 64 | procedure SetMatrixType(AValue: TGameMatrixType); |
@@ -93,6 +96,7 @@ type | @@ -93,6 +96,7 @@ type | ||
93 | property ConditionsCount : integer read GetConditionsCount; | 96 | property ConditionsCount : integer read GetConditionsCount; |
94 | property CurrentCondition : integer read FCurrentCondition write FCurrentCondition; | 97 | property CurrentCondition : integer read FCurrentCondition write FCurrentCondition; |
95 | property Contingency[C, I : integer] : TContingency read GetContingency write SetContingency; | 98 | property Contingency[C, I : integer] : TContingency read GetContingency write SetContingency; |
99 | + property ContingenciesCount[C:integer]:integer read GetContingenciesCount; | ||
96 | property ExperimentAim : UTF8string read FExperimentAim write FExperimentAim; | 100 | property ExperimentAim : UTF8string read FExperimentAim write FExperimentAim; |
97 | property ExperimentName : UTF8string read FExperimentName write FExperimentName; | 101 | property ExperimentName : UTF8string read FExperimentName write FExperimentName; |
98 | property GenPlayersAsNeeded : Boolean read FGenPlayersAsNeeded write FGenPlayersAsNeeded; | 102 | property GenPlayersAsNeeded : Boolean read FGenPlayersAsNeeded write FGenPlayersAsNeeded; |
@@ -104,6 +108,7 @@ type | @@ -104,6 +108,7 @@ type | ||
104 | property PlayerIndexFromID[s : UTF8string]: integer read GetPlayerIndexFromID; | 108 | property PlayerIndexFromID[s : UTF8string]: integer read GetPlayerIndexFromID; |
105 | property PlayerAsString[P:TPlayer]: UTF8string read GetPlayerAsString; | 109 | property PlayerAsString[P:TPlayer]: UTF8string read GetPlayerAsString; |
106 | property PlayerFromString[s : UTF8string]: TPlayer read GetPlayerFromString; | 110 | property PlayerFromString[s : UTF8string]: TPlayer read GetPlayerFromString; |
111 | + property ConsequenceStringFromChoice[P:Tplayer]:UTF8String read GetConsequenceStringFromChoice; | ||
107 | property ShowChat : Boolean read FShowChat write FShowChat; | 112 | property ShowChat : Boolean read FShowChat write FShowChat; |
108 | property SendChatHistoryForNewPlayers : Boolean read FSendChatHistoryForNewPlayers write SetSendChatHistoryForNewPlayers; | 113 | property SendChatHistoryForNewPlayers : Boolean read FSendChatHistoryForNewPlayers write SetSendChatHistoryForNewPlayers; |
109 | property MatrixType : TGameMatrixType read FMatrixType write SetMatrixType; | 114 | property MatrixType : TGameMatrixType read FMatrixType write SetMatrixType; |
@@ -111,7 +116,6 @@ type | @@ -111,7 +116,6 @@ type | ||
111 | property NextTurn : integer read GetNextTurn; | 116 | property NextTurn : integer read GetNextTurn; |
112 | property NextCycle : integer read GetNextCycle; | 117 | property NextCycle : integer read GetNextCycle; |
113 | property NextCondition : integer read GetNextCondition; | 118 | property NextCondition : integer read GetNextCondition; |
114 | - | ||
115 | property State : TExperimentState read FState write SetState; | 119 | property State : TExperimentState read FState write SetState; |
116 | public | 120 | public |
117 | property OnEndTurn : TNotifyEvent read FOnEndTurn write SetOnEndTurn; | 121 | property OnEndTurn : TNotifyEvent read FOnEndTurn write SetOnEndTurn; |
@@ -140,6 +144,11 @@ begin | @@ -140,6 +144,11 @@ begin | ||
140 | Result := Length(FConditions); | 144 | Result := Length(FConditions); |
141 | end; | 145 | end; |
142 | 146 | ||
147 | +function TExperiment.GetContingenciesCount(C: integer): integer; | ||
148 | +begin | ||
149 | + Result := Length(FConditions[C].Contingencies); | ||
150 | +end; | ||
151 | + | ||
143 | function TExperiment.GetContingency(ACondition, I : integer): TContingency; | 152 | function TExperiment.GetContingency(ACondition, I : integer): TContingency; |
144 | begin | 153 | begin |
145 | Result := FConditions[ACondition].Contingencies[I]; | 154 | Result := FConditions[ACondition].Contingencies[I]; |
@@ -161,6 +170,9 @@ begin | @@ -161,6 +170,9 @@ begin | ||
161 | if Assigned(FOnEndCycle) then FOnEndCycle(Self); | 170 | if Assigned(FOnEndCycle) then FOnEndCycle(Self); |
162 | NextCycle; | 171 | NextCycle; |
163 | end; | 172 | end; |
173 | +{$IFDEF DEBUG} | ||
174 | + WriteLn('TExperiment.GetNextTurn:',Result); | ||
175 | +{$ENDIF} | ||
164 | end; | 176 | end; |
165 | 177 | ||
166 | function TExperiment.GetNextTurnPlayerID: UTF8string; // used during cycles | 178 | function TExperiment.GetNextTurnPlayerID: UTF8string; // used during cycles |
@@ -183,6 +195,9 @@ begin | @@ -183,6 +195,9 @@ begin | ||
183 | NextCondition; | 195 | NextCondition; |
184 | end; | 196 | end; |
185 | end; | 197 | end; |
198 | + {$IFDEF DEBUG} | ||
199 | + WriteLn('TExperiment.GetNextCycle:',Result); | ||
200 | + {$ENDIF} | ||
186 | end; | 201 | end; |
187 | 202 | ||
188 | function TExperiment.GetNextCondition: integer; | 203 | function TExperiment.GetNextCondition: integer; |
@@ -221,7 +236,9 @@ begin | @@ -221,7 +236,9 @@ begin | ||
221 | EndCondition | 236 | EndCondition |
222 | 237 | ||
223 | end; | 238 | end; |
224 | - | 239 | + {$IFDEF DEBUG} |
240 | + WriteLn('TExperiment.GetNextCondition:',Result); | ||
241 | + {$ENDIF} | ||
225 | end; | 242 | end; |
226 | 243 | ||
227 | function TExperiment.GetPlayer(I : integer): TPlayer; | 244 | function TExperiment.GetPlayer(I : integer): TPlayer; |
@@ -312,8 +329,7 @@ begin | @@ -312,8 +329,7 @@ begin | ||
312 | , P.Nicname | 329 | , P.Nicname |
313 | , GetPPointsString(P.Points) | 330 | , GetPPointsString(P.Points) |
314 | , GetStatusString(P.Status) | 331 | , GetStatusString(P.Status) |
315 | - , GetChoiceString(P.Choice.Current) | ||
316 | - , GetChoiceString(P.Choice.Last) | 332 | + , GetChoiceString(P.Choice) |
317 | , IntToStr(P.Turn) | 333 | , IntToStr(P.Turn) |
318 | ]); | 334 | ]); |
319 | for i := 0 to Length(M)-1 do | 335 | for i := 0 to Length(M)-1 do |
@@ -384,9 +400,8 @@ begin | @@ -384,9 +400,8 @@ begin | ||
384 | Result.Nicname := ExtractDelimited(2,s,['|']); | 400 | Result.Nicname := ExtractDelimited(2,s,['|']); |
385 | Result.Points := GetPPointsFromString(ExtractDelimited(3,s,['|'])); | 401 | Result.Points := GetPPointsFromString(ExtractDelimited(3,s,['|'])); |
386 | Result.Status := GetStatusFromString(ExtractDelimited(4,s,['|'])); | 402 | Result.Status := GetStatusFromString(ExtractDelimited(4,s,['|'])); |
387 | - Result.Choice.Current := GetChoiceFromString(ExtractDelimited(5,s,['|'])); | ||
388 | - Result.Choice.Last := GetChoiceFromString(ExtractDelimited(6,s,['|'])); | ||
389 | - Result.Turn:=StrToInt(ExtractDelimited(7,s,['|'])); | 403 | + Result.Choice := GetChoiceFromString(ExtractDelimited(5,s,['|'])); |
404 | + Result.Turn:=StrToInt(ExtractDelimited(6,s,['|'])); | ||
390 | end; | 405 | end; |
391 | 406 | ||
392 | function TExperiment.GetPlayerIndexFromID(AID: UTF8string): integer; | 407 | function TExperiment.GetPlayerIndexFromID(AID: UTF8string): integer; |
@@ -423,6 +438,20 @@ begin | @@ -423,6 +438,20 @@ begin | ||
423 | 438 | ||
424 | end; | 439 | end; |
425 | 440 | ||
441 | +function TExperiment.GetConsequenceStringFromChoice(P: TPlayer): Utf8string; | ||
442 | +var | ||
443 | + i : integer; | ||
444 | + c : integer; | ||
445 | +begin | ||
446 | + c := CurrentCondition; | ||
447 | + PlayerFromID[P.ID] := P; | ||
448 | + Result:= ''; | ||
449 | + for i :=0 to ContingenciesCount[c] -1 do | ||
450 | + if not Contingency[c,i].Meta then | ||
451 | + if Contingency[c,i].ResponseMeetsCriteriaI(P.Choice.Row,P.Choice.Color) then | ||
452 | + Result += Contingency[c,i].Consequence.AsString + '+'; | ||
453 | +end; | ||
454 | + | ||
426 | procedure TExperiment.SetCondition(I : Integer; AValue: TCondition); | 455 | procedure TExperiment.SetCondition(I : Integer; AValue: TCondition); |
427 | begin | 456 | begin |
428 | FConditions[I] := AValue; | 457 | FConditions[I] := AValue; |
@@ -611,9 +640,9 @@ begin | @@ -611,9 +640,9 @@ begin | ||
611 | if FFilename <> '' then | 640 | if FFilename <> '' then |
612 | SaveExperimentToFile(Self,FFilename) | 641 | SaveExperimentToFile(Self,FFilename) |
613 | else | 642 | else |
614 | - {$IFDEF DEBUG} | ||
615 | - WriteLn(WARN_CANNOT_SAVE) | ||
616 | - {$ENDIF}; | 643 | +{$IFDEF DEBUG} |
644 | + WriteLn(WARN_CANNOT_SAVE) | ||
645 | +{$ENDIF}; | ||
617 | end; | 646 | end; |
618 | 647 | ||
619 | procedure TExperiment.Clean; | 648 | procedure TExperiment.Clean; |
units/game_file_methods.pas
@@ -30,11 +30,24 @@ resourcestring | @@ -30,11 +30,24 @@ resourcestring | ||
30 | 30 | ||
31 | implementation | 31 | implementation |
32 | 32 | ||
33 | -uses LCLIntf, game_actors_point, game_resources, string_methods, regdata, zhelpers; | 33 | +uses LCLIntf, game_actors_point, game_resources, string_methods, regdata, zhelpers, strutils; |
34 | 34 | ||
35 | function LoadExperimentFromResource(var AExperiment: TExperiment): Boolean; | 35 | function LoadExperimentFromResource(var AExperiment: TExperiment): Boolean; |
36 | -var i,j : integer; | 36 | +var |
37 | C : TCondition; | 37 | C : TCondition; |
38 | + LConcequence : TConsequence; | ||
39 | + LCriteria1 : TCriteria = ( | ||
40 | + Style:(gtRowsOnly); | ||
41 | + Rows:[grEven]; | ||
42 | + Colors:[]; | ||
43 | + ); | ||
44 | + | ||
45 | + LCriteria2 : TCriteria = ( | ||
46 | + Style:(gtRowsOnly); | ||
47 | + Rows:[grOdd]; | ||
48 | + Colors:[]; | ||
49 | + ); | ||
50 | + | ||
38 | begin | 51 | begin |
39 | Result := False; | 52 | Result := False; |
40 | with AExperiment do | 53 | with AExperiment do |
@@ -53,19 +66,27 @@ begin | @@ -53,19 +66,27 @@ begin | ||
53 | C := C_CONDITION_TEMPLATE; | 66 | C := C_CONDITION_TEMPLATE; |
54 | with C do | 67 | with C do |
55 | begin | 68 | begin |
69 | + SetLength(Contingencies, 2); | ||
70 | + LConcequence := TConsequence.Create(AExperiment,1,[gscPoints, gscB, gscMessage,gscBroadcastMessage],['NICNAME','queijo','queijos']); | ||
71 | + Contingencies[0] := TContingency.Create(AExperiment,LConcequence,LCriteria1,False); | ||
72 | + LConcequence := TConsequence.Create(AExperiment,3,[gscPoints, gscA, gscMessage,gscBroadcastMessage],['NICNAME','queijo','queijos']); | ||
73 | + Contingencies[1] := TContingency.Create(AExperiment,LConcequence,LCriteria2,False); | ||
74 | + | ||
56 | ConditionName := SEC_CONDITION+IntToStr(1); | 75 | ConditionName := SEC_CONDITION+IntToStr(1); |
57 | Turn.Count:=0; | 76 | Turn.Count:=0; |
58 | Turn.Value:=2; | 77 | Turn.Value:=2; |
59 | Turn.Random:=False; | 78 | Turn.Random:=False; |
79 | + Cycles.Count:=0; | ||
80 | + Cycles.Value:=4; | ||
81 | + Cycles.Generation:=0; | ||
60 | end; | 82 | end; |
61 | - i := AppendCondition(C); | 83 | + AppendCondition(C); |
62 | end; | 84 | end; |
63 | end; | 85 | end; |
64 | 86 | ||
65 | function LoadExperimentFromFile(var AExperiment: TExperiment; AFilename: string):Boolean; | 87 | function LoadExperimentFromFile(var AExperiment: TExperiment; AFilename: string):Boolean; |
66 | var | 88 | var |
67 | LIniFile : TCIniFile; | 89 | LIniFile : TCIniFile; |
68 | - LExperiment : TExperiment; | ||
69 | 90 | ||
70 | //procedure HandleRootPath(var APath : string); | 91 | //procedure HandleRootPath(var APath : string); |
71 | //begin | 92 | //begin |
@@ -101,27 +122,6 @@ var | @@ -101,27 +122,6 @@ var | ||
101 | Result.G := StrToIntDef(GetAndDelFirstValue(LS),0); | 122 | Result.G := StrToIntDef(GetAndDelFirstValue(LS),0); |
102 | end; | 123 | end; |
103 | 124 | ||
104 | - function GetConsequence(S: string) : TConsequence; | ||
105 | - var | ||
106 | - CS : TGameConsequenceStyle; | ||
107 | - LS : string; | ||
108 | - begin | ||
109 | - // 0,0,0,0,0,0,NON | ||
110 | - LS := UpperCase(S + VV_SEP); | ||
111 | - Result.Points.A.Value := StrToIntDef(GetAndDelFirstValue(LS),0); | ||
112 | - Result.Points.A.Variation:=StrToIntDef(GetAndDelFirstValue(LS),0); | ||
113 | - | ||
114 | - Result.Points.B.Value := StrToIntDef(GetAndDelFirstValue(LS),0); | ||
115 | - Result.Points.B.Variation:=StrToIntDef(GetAndDelFirstValue(LS),0); | ||
116 | - | ||
117 | - Result.Points.G.Value := StrToIntDef(GetAndDelFirstValue(LS),0); | ||
118 | - Result.Points.G.Variation:=StrToIntDef(GetAndDelFirstValue(LS),0); | ||
119 | - | ||
120 | - Result.Style := []; | ||
121 | - for CS in TGameConsequenceStyle do | ||
122 | - Result.Style += [GetConsequenceStyleFromString(GetAndDelFirstValue(LS))] | ||
123 | - | ||
124 | - end; | ||
125 | 125 | ||
126 | function GetChoiceFromString(S:string) : TPlayerChoice; | 126 | function GetChoiceFromString(S:string) : TPlayerChoice; |
127 | var | 127 | var |
@@ -172,11 +172,11 @@ var | @@ -172,11 +172,11 @@ var | ||
172 | // Experiment; | 172 | // Experiment; |
173 | with LIniFile do | 173 | with LIniFile do |
174 | begin | 174 | begin |
175 | - LExperiment.Researcher := ReadString(SEC_EXPERIMENT, KEY_RESEARCHER,VAL_RESEARCHER); | ||
176 | - LExperiment.ExperimentName:=ReadString(SEC_EXPERIMENT, KEY_NAME,''); | ||
177 | - LExperiment.ExperimentAim:=ReadString(SEC_EXPERIMENT, KEY_AIM,''); | ||
178 | - LExperiment.GenPlayersAsNeeded:=ReadBool(SEC_EXPERIMENT, KEY_GEN_PLAYER_AS_NEEDED,True); | ||
179 | - LExperiment.CurrentCondition := ReadInteger(SEC_EXPERIMENT, KEY_CURRENT_CONDITION,0)-1; //zero based | 175 | + AExperiment.Researcher := ReadString(SEC_EXPERIMENT, KEY_RESEARCHER,VAL_RESEARCHER); |
176 | + AExperiment.ExperimentName:=ReadString(SEC_EXPERIMENT, KEY_NAME,''); | ||
177 | + AExperiment.ExperimentAim:=ReadString(SEC_EXPERIMENT, KEY_AIM,''); | ||
178 | + AExperiment.GenPlayersAsNeeded:=ReadBool(SEC_EXPERIMENT, KEY_GEN_PLAYER_AS_NEEDED,True); | ||
179 | + AExperiment.CurrentCondition := ReadInteger(SEC_EXPERIMENT, KEY_CURRENT_CONDITION,0)-1; //zero based | ||
180 | end; | 180 | end; |
181 | end; | 181 | end; |
182 | 182 | ||
@@ -184,30 +184,68 @@ var | @@ -184,30 +184,68 @@ var | ||
184 | var | 184 | var |
185 | LS : string; | 185 | LS : string; |
186 | i : integer; | 186 | i : integer; |
187 | + P : TPlayer; | ||
187 | begin | 188 | begin |
188 | i := 0; | 189 | i := 0; |
189 | LS := SEC_PLAYER+IntToStr(i+1); | 190 | LS := SEC_PLAYER+IntToStr(i+1); |
190 | with LIniFile do | 191 | with LIniFile do |
191 | while SectionExists(LS) do | 192 | while SectionExists(LS) do |
192 | - with LExperiment.Player[LExperiment.AppendPlayer] do | ||
193 | - begin | ||
194 | - Turn := ReadInteger(LS,KEY_PLAYER_TURN,i); | ||
195 | - Choice.Current := GetChoiceFromString(ReadString(LS,KEY_PLAYER_CHOICE_CURRENT,'0,NONE,')); | ||
196 | - Choice.Last := GetChoiceFromString(ReadString(LS,KEY_PLAYER_CHOICE_LAST,'0,NONE,')); | ||
197 | - ID := ReadString(LS,KEY_PLAYER_ID,s_random(20)); | ||
198 | - Nicname := ReadString(LS,KEY_PLAYER_NICNAME,GenResourceName(i)); | ||
199 | - Login := ReadString(LS,KEY_PLAYER_LOGIN,'jogador'+IntToStr(i+1)); | ||
200 | - Password := ReadString(LS,KEY_PLAYER_PASSWORD,'1234'); | ||
201 | - Points := GetPPointsFromString(ReadString(LS,KEY_PLAYER_POINTS,'0,0,')); | ||
202 | - Status := GetStatusFromString(ReadString(LS,KEY_PLAYER_STATUS,'esperando')); | ||
203 | - Data.Values[KEY_PLAYER_TEMP] := ReadString(LS,KEY_PLAYER_TEMP,''); | ||
204 | - end; | 193 | + begin |
194 | + if i = 0 then | ||
195 | + i := AExperiment.AppendPlayer; | ||
196 | + with P do | ||
197 | + begin | ||
198 | + Turn := ReadInteger(LS,KEY_PLAYER_TURN,i); | ||
199 | + Choice := GetChoiceFromString(ReadString(LS,KEY_PLAYER_CHOICE_LAST,'0,NONE,')); | ||
200 | + ID := ReadString(LS,KEY_PLAYER_ID,s_random(20)); | ||
201 | + Nicname := ReadString(LS,KEY_PLAYER_NICNAME,GenResourceName(i)); | ||
202 | + Login := ReadString(LS,KEY_PLAYER_LOGIN,'jogador'+IntToStr(i+1)); | ||
203 | + Password := ReadString(LS,KEY_PLAYER_PASSWORD,'1234'); | ||
204 | + Points := GetPPointsFromString(ReadString(LS,KEY_PLAYER_POINTS,'0,0,')); | ||
205 | + Status := GetStatusFromString(ReadString(LS,KEY_PLAYER_STATUS,'esperando')); | ||
206 | + Data.Values[KEY_PLAYER_TEMP] := ReadString(LS,KEY_PLAYER_TEMP,''); | ||
207 | + end; | ||
208 | + AExperiment.Player[i] := P; | ||
209 | + i := AExperiment.AppendPlayer; | ||
210 | + LS := SEC_PLAYER+IntToStr(i+1); | ||
211 | + end; | ||
205 | end; | 212 | end; |
206 | 213 | ||
207 | procedure ReadContingencies(ACondition:integer;IsMeta : Boolean); | 214 | procedure ReadContingencies(ACondition:integer;IsMeta : Boolean); |
208 | - var i : integer; | ||
209 | - LS,LCK : string; | ||
210 | - procedure SetLCK; | 215 | + var |
216 | + i : integer; | ||
217 | + LS,LCK : string; | ||
218 | + LConsequence : TConsequence; | ||
219 | + LCriteria:TCriteria; | ||
220 | + | ||
221 | + function GetCriteriaFromString(S:string):TCriteria; | ||
222 | + var | ||
223 | + LS : string; | ||
224 | + i, | ||
225 | + LCount: integer; | ||
226 | + begin | ||
227 | + LS := ExtractDelimited(1,S,['|']); | ||
228 | + LCount := WordCount(LS,[#0,',']); | ||
229 | + Result.Rows := []; | ||
230 | + for i := 1 to LCount do | ||
231 | + Result.Rows += [GetRowFromString(ExtractDelimited(i,LS,[',']))]; | ||
232 | + | ||
233 | + case ExtractDelimited(2,S,['|'])of | ||
234 | + 'NONE':Result.Style:=gtNone; | ||
235 | + 'CORES':Result.Style:=gtColorsOnly; | ||
236 | + 'E':Result.Style:=gtRowsAndColors; | ||
237 | + 'LINHAS':Result.Style:=gtRowsOnly; | ||
238 | + 'OU':Result.Style:=gtRowsOrColors; | ||
239 | + end; | ||
240 | + | ||
241 | + LS := ExtractDelimited(3,S,['|']); | ||
242 | + LCount := WordCount(LS,[#0,',']); | ||
243 | + Result.Colors := []; | ||
244 | + for i := 1 to LCount do | ||
245 | + Result.Colors += [GetColorFromString(ExtractDelimited(i,LS,[',']))]; | ||
246 | + end; | ||
247 | + | ||
248 | + procedure SetLCK(i:integer); | ||
211 | begin | 249 | begin |
212 | if IsMeta then | 250 | if IsMeta then |
213 | LCK := KEY_METACONTINGENCY+IntToStr(i+1) | 251 | LCK := KEY_METACONTINGENCY+IntToStr(i+1) |
@@ -216,72 +254,68 @@ var | @@ -216,72 +254,68 @@ var | ||
216 | end; | 254 | end; |
217 | begin | 255 | begin |
218 | LS := SEC_CONDITION+IntToStr(ACondition+1); | 256 | LS := SEC_CONDITION+IntToStr(ACondition+1); |
219 | - i := 0; | ||
220 | - SetLCK; | 257 | + i := AExperiment.AppendContingency(ACondition); |
258 | + SetLCK(i); | ||
221 | with LIniFile do | 259 | with LIniFile do |
222 | - while ValueExists(LS, LCK+KEY_CONSEQUE) do | ||
223 | - with LExperiment.Condition[ACondition].Contingencies[LExperiment.AppendContingency(ACondition)] do | ||
224 | - begin | ||
225 | - Meta:=IsMeta; | ||
226 | - Consequence := GetConsequence(ReadString(LS,LCK+KEY_CONSEQUE,DEF_CONSEQUENCE)); | ||
227 | - if IsMeta then | ||
228 | - Consequence.Message.Text := ReadString(LS,LCK+KEY_CONSEQUE_MESSAGE,DEF_CONSEQUENCE_MESSAGE) | ||
229 | - else | ||
230 | - Consequence.Message.Text := ReadString(LS,LCK+KEY_CONSEQUE_MESSAGE,DEF_CONSEQUENCE_MESSAGE); | ||
231 | - | ||
232 | - Criteria := GetResponseFromString(ReadString(LS,LCK+KEY_RESPONSE,DEF_RESPONSE)); | ||
233 | - | ||
234 | - Inc(i); | ||
235 | - SetLCK; | ||
236 | - end; | 260 | + while ValueExists(LS, LCK+KEY_CONSEQUE) and ValueExists(LS, LCK+KEY_CRITERIA)do |
261 | + begin | ||
262 | + LConsequence := TConsequence.Create(AExperiment,ReadString(LS,LCK+KEY_CONSEQUE,DEF_CONSEQUENCE)); | ||
263 | + LCriteria := GetCriteriaFromString(ReadString(LS,LCK+KEY_CRITERIA,DEF_CRITERIA)); | ||
264 | + AExperiment.Condition[ACondition].Contingencies[i] := TContingency.Create(AExperiment,LConsequence,LCriteria,IsMeta); | ||
265 | + i := AExperiment.AppendContingency(ACondition); | ||
266 | + SetLCK(i); | ||
267 | + end; | ||
237 | end; | 268 | end; |
238 | 269 | ||
239 | procedure ReadConditions; | 270 | procedure ReadConditions; |
240 | var | 271 | var |
241 | s1, LS : string; | 272 | s1, LS : string; |
242 | - LCondition : integer; | 273 | + i : integer; |
274 | + C :TCondition; | ||
243 | begin | 275 | begin |
244 | - LCondition := 0; | ||
245 | - LS := SEC_CONDITION+IntToStr(LCondition+1); | 276 | + i := 0; |
277 | + LS := SEC_CONDITION+IntToStr(i+1); | ||
246 | with LIniFile do | 278 | with LIniFile do |
247 | while SectionExists(LS) do | 279 | while SectionExists(LS) do |
248 | - with LExperiment.Condition[LExperiment.AppendCondition] do | ||
249 | - begin | ||
250 | - s1 := ReadString(LS, KEY_ENDCRITERIA,''); | ||
251 | - if s1 = '' then | ||
252 | - begin | ||
253 | - {$IFDEF DEBUG} | ||
254 | - WriteLn(WARN_CONDITION_WITH_NO_END+LS+'. '+KEY_ENDCRITERIA+KV_SEP+DEF_END+WARN_END); | ||
255 | - {$ENDIF} | ||
256 | - s1 := DEF_END; | ||
257 | - end; | ||
258 | - EndCriterium := GetEndCriteria(s1); | ||
259 | - ConditionName := ReadString(LS,KEY_COND_NAME,LS); | ||
260 | - Points.Count := GetPoints(ReadString(LS, KEY_POINTS_COUNT,DEF_POINTS)); | ||
261 | - Points.OnStart := GetPoints(ReadString(LS, KEY_POINTS_ONSTART,DEF_POINTS)); | ||
262 | - Turn.Count:= ReadInteger(LS, KEY_TURN_COUNT,1); | ||
263 | - Turn.Value:= ReadInteger(LS, KEY_TURN_VALUE,2); | ||
264 | - Turn.Random:= ReadBool(LS, KEY_TURN_RANDOM,False); | ||
265 | - Cycles.Count:= ReadInteger(LS, KEY_CYCLES_COUNT,1); | ||
266 | - Cycles.Value:= ReadInteger(LS, KEY_CYCLES_VALUE,10); | ||
267 | - Cycles.Generation:= ReadInteger(LS, KEY_CYCLES_GEN,1); | ||
268 | - | ||
269 | - // todo: create and initialize prompt based on its values | ||
270 | - /////////////////////////////////// | ||
271 | - // need to create classes first /// | ||
272 | - /////////////////////////////////// | ||
273 | - | ||
274 | - Prompt.PromptStyle:= GetPromptStyle(ReadString(LS,KEY_PROMPT_STYLE,'todos,sim,metacontingência,recuperar pontos,')); | ||
275 | - Prompt.PromptMessage := ReadString(LS,KEY_PROMPT_MESSAGE,DEF_PROMPTMESSAGE); | ||
276 | - | ||
277 | - ReadContingencies(LCondition,True); | ||
278 | - ReadContingencies(LCondition,False); | ||
279 | - | ||
280 | - Prompt.PromptTargets:=@Contingencies; | ||
281 | - | ||
282 | - Inc(LCondition); | ||
283 | - LS := SEC_CONDITION+IntToStr(LCondition+1); | ||
284 | - end; | 280 | + begin |
281 | + if i = 0 then | ||
282 | + i := AExperiment.AppendCondition; | ||
283 | + | ||
284 | + with C do | ||
285 | + begin | ||
286 | + s1 := ReadString(LS, KEY_ENDCRITERIA,''); | ||
287 | + if s1 = '' then | ||
288 | + begin | ||
289 | + {$IFDEF DEBUG} | ||
290 | + WriteLn(WARN_CONDITION_WITH_NO_END+LS+'. '+KEY_ENDCRITERIA+KV_SEP+DEF_END+WARN_END); | ||
291 | + {$ENDIF} | ||
292 | + s1 := DEF_END; | ||
293 | + end; | ||
294 | + EndCriterium := GetEndCriteria(s1); | ||
295 | + ConditionName := ReadString(LS,KEY_COND_NAME,LS); | ||
296 | + Points.Count := GetPoints(ReadString(LS, KEY_POINTS_COUNT,DEF_POINTS)); | ||
297 | + Points.OnStart := GetPoints(ReadString(LS, KEY_POINTS_ONSTART,DEF_POINTS)); | ||
298 | + Turn.Count:= ReadInteger(LS, KEY_TURN_COUNT,1); | ||
299 | + Turn.Value:= ReadInteger(LS, KEY_TURN_VALUE,2); | ||
300 | + Turn.Random:= ReadBool(LS, KEY_TURN_RANDOM,False); | ||
301 | + Cycles.Count:= ReadInteger(LS, KEY_CYCLES_COUNT,1); | ||
302 | + Cycles.Value:= ReadInteger(LS, KEY_CYCLES_VALUE,10); | ||
303 | + Cycles.Generation:= ReadInteger(LS, KEY_CYCLES_GEN,1); | ||
304 | + | ||
305 | + ReadContingencies(i,True); | ||
306 | + ReadContingencies(i,False); | ||
307 | + | ||
308 | + // if no contingencies, return false... | ||
309 | + | ||
310 | + Prompt := TPrompt.Create(AExperiment,ReadString(LS,KEY_PROMPT_STYLE,'todos,sim,metacontingência,recuperar pontos,')); | ||
311 | + Prompt.PromptStyle:= GetPromptStyle(ReadString(LS,KEY_PROMPT_STYLE,'todos,sim,metacontingência,recuperar pontos,')); | ||
312 | + Prompt.PromptMessage := ReadString(LS,KEY_PROMPT_MESSAGE,DEF_PROMPTMESSAGE); | ||
313 | + | ||
314 | + end; | ||
315 | + AExperiment.Condition[i]:= C; | ||
316 | + i := AExperiment.AppendCondition; | ||
317 | + LS := SEC_CONDITION+IntToStr(i+1); | ||
318 | + end; | ||
285 | end; | 319 | end; |
286 | 320 | ||
287 | begin | 321 | begin |
@@ -292,7 +326,7 @@ begin | @@ -292,7 +326,7 @@ begin | ||
292 | with LIniFile do | 326 | with LIniFile do |
293 | if SectionExists(SEC_EXPERIMENT) then | 327 | if SectionExists(SEC_EXPERIMENT) then |
294 | begin | 328 | begin |
295 | - LExperiment.Create(AExperiment.Owner); | 329 | + AExperiment := TExperiment.Create(AExperiment.Owner); |
296 | ReadExperiment; | 330 | ReadExperiment; |
297 | ReadPlayers; | 331 | ReadPlayers; |
298 | ReadConditions; | 332 | ReadConditions; |
@@ -303,10 +337,6 @@ begin | @@ -303,10 +337,6 @@ begin | ||
303 | LIniFile.Free; | 337 | LIniFile.Free; |
304 | Exit; | 338 | Exit; |
305 | end; | 339 | end; |
306 | - Result := True; | ||
307 | - LIniFile.Free; | ||
308 | - AExperiment := LExperiment; | ||
309 | - LExperiment.Free; | ||
310 | end | 340 | end |
311 | else | 341 | else |
312 | ShowMessage(ERROR_FILE_NOT_FOUND); | 342 | ShowMessage(ERROR_FILE_NOT_FOUND); |
@@ -341,23 +371,6 @@ var | @@ -341,23 +371,6 @@ var | ||
341 | Result := Result + IntToStr(APoints.G) + VV_SEP; | 371 | Result := Result + IntToStr(APoints.G) + VV_SEP; |
342 | end; | 372 | end; |
343 | 373 | ||
344 | - function GetConsequenceString(AConsequence : TConsequence) : string; | ||
345 | - var CS : TGameConsequenceStyle; | ||
346 | - begin | ||
347 | - Result := IntToStr(AConsequence.Points.A.Value); | ||
348 | - Result := Result + IntToStr(AConsequence.Points.A.Variation) + VV_SEP; | ||
349 | - | ||
350 | - Result := Result + IntToStr(AConsequence.Points.B.Value) + VV_SEP; | ||
351 | - Result := Result + IntToStr(AConsequence.Points.B.Variation) + VV_SEP; | ||
352 | - | ||
353 | - Result := Result + IntToStr(AConsequence.Points.G.Value) + VV_SEP; | ||
354 | - Result := Result + IntToStr(AConsequence.Points.G.Variation) + VV_SEP; | ||
355 | - | ||
356 | - for CS in AConsequence.Style do | ||
357 | - Result := Result + GetConsequenceStyleString(CS) + VV_SEP; | ||
358 | - end; | ||
359 | - | ||
360 | - | ||
361 | function GetChoiceString(AChoice : TPlayerChoice) : string; | 374 | function GetChoiceString(AChoice : TPlayerChoice) : string; |
362 | begin | 375 | begin |
363 | Result := GetRowString(AChoice.Row) + VV_SEP; | 376 | Result := GetRowString(AChoice.Row) + VV_SEP; |
@@ -413,8 +426,8 @@ begin | @@ -413,8 +426,8 @@ begin | ||
413 | 426 | ||
414 | with Contingencies[j] do | 427 | with Contingencies[j] do |
415 | begin | 428 | begin |
416 | - WriteString(LC,LCK+KEY_CONSEQUE,GetConsequenceString(Consequence)); | ||
417 | - WriteString(LC,LCK+KEY_RESPONSE,GetResponseString(Criteria)); | 429 | + WriteString(LC,LCK+KEY_CONSEQUE,Consequence.AsString); |
430 | + WriteString(LC,LCK+KEY_CRITERIA,CriteriaString); | ||
418 | end; | 431 | end; |
419 | end; | 432 | end; |
420 | end; | 433 | end; |
@@ -426,8 +439,7 @@ begin | @@ -426,8 +439,7 @@ begin | ||
426 | begin | 439 | begin |
427 | LC := SEC_PLAYER+IntToStr(i+1); | 440 | LC := SEC_PLAYER+IntToStr(i+1); |
428 | WriteInteger(LC,KEY_PLAYER_TURN,AExperiment.Player[i].Turn); | 441 | WriteInteger(LC,KEY_PLAYER_TURN,AExperiment.Player[i].Turn); |
429 | - WriteString(LC,KEY_PLAYER_CHOICE_CURRENT,GetChoiceString(AExperiment.Player[i].Choice.Current)); | ||
430 | - WriteString(LC,KEY_PLAYER_CHOICE_LAST,GetChoiceString(AExperiment.Player[i].Choice.Last)); | 442 | + WriteString(LC,KEY_PLAYER_CHOICE_LAST,GetChoiceString(AExperiment.Player[i].Choice)); |
431 | WriteString(LC,KEY_PLAYER_ID,AExperiment.Player[i].ID); | 443 | WriteString(LC,KEY_PLAYER_ID,AExperiment.Player[i].ID); |
432 | WriteString(LC,KEY_PLAYER_NICNAME,AExperiment.Player[i].Nicname); | 444 | WriteString(LC,KEY_PLAYER_NICNAME,AExperiment.Player[i].Nicname); |
433 | WriteString(LC,KEY_PLAYER_LOGIN,AExperiment.Player[i].Login); | 445 | WriteString(LC,KEY_PLAYER_LOGIN,AExperiment.Player[i].Login); |
units/game_resources.pas
@@ -26,8 +26,7 @@ resourcestring | @@ -26,8 +26,7 @@ resourcestring | ||
26 | SEC_PLAYER = 'Jogador.'; | 26 | SEC_PLAYER = 'Jogador.'; |
27 | KEY_PLAYER_TEMP = 'Data.X'; | 27 | KEY_PLAYER_TEMP = 'Data.X'; |
28 | KEY_PLAYER_TURN = 'Jogada'; | 28 | KEY_PLAYER_TURN = 'Jogada'; |
29 | - KEY_PLAYER_CHOICE_CURRENT = 'Escolha.Atual'; | ||
30 | - KEY_PLAYER_CHOICE_LAST = 'Escolha.Passada'; | 29 | + KEY_PLAYER_CHOICE_LAST = 'Escolha'; |
31 | KEY_PLAYER_ID = 'ID'; | 30 | KEY_PLAYER_ID = 'ID'; |
32 | KEY_PLAYER_NICNAME = 'Apelido'; | 31 | KEY_PLAYER_NICNAME = 'Apelido'; |
33 | KEY_PLAYER_LOGIN = 'Usuário'; | 32 | KEY_PLAYER_LOGIN = 'Usuário'; |
@@ -52,25 +51,26 @@ resourcestring | @@ -52,25 +51,26 @@ resourcestring | ||
52 | //KEY_PROMPT_VALUE = 'Questão.Apresentar'; // BOOL,CSQPROMPTCODE | 51 | //KEY_PROMPT_VALUE = 'Questão.Apresentar'; // BOOL,CSQPROMPTCODE |
53 | KEY_PROMPT_STYLE = 'Questão.Estilo'; // string | 52 | KEY_PROMPT_STYLE = 'Questão.Estilo'; // string |
54 | KEY_PROMPT_MESSAGE = 'Questão.Mensagem'; // string | 53 | KEY_PROMPT_MESSAGE = 'Questão.Mensagem'; // string |
55 | - | ||
56 | KEY_ENDCRITERIA = 'Critério.DeFinalizaçãoDaCondição'; //2,50,10,30, | 54 | KEY_ENDCRITERIA = 'Critério.DeFinalizaçãoDaCondição'; //2,50,10,30, |
57 | 55 | ||
58 | KEY_CONTINGENCY = 'Contingência.'; | 56 | KEY_CONTINGENCY = 'Contingência.'; |
59 | KEY_METACONTINGENCY = 'Metacontingência.'; | 57 | KEY_METACONTINGENCY = 'Metacontingência.'; |
60 | 58 | ||
61 | - KEY_RESPONSE = '.RespostaEsperada'; // ROW,COLOR,OPCODE | 59 | + // ROW,COLOR,OPCODE |
60 | + KEY_CRITERIA = '.EsquemaDeReforço'; | ||
62 | KEY_CONSEQUE = '.Consequência'; // A,B,G,CSQCODE | 61 | KEY_CONSEQUE = '.Consequência'; // A,B,G,CSQCODE |
63 | - KEY_CONSEQUE_MESSAGE = '.Consequência.Mensagem'; | 62 | + KEY_CONSEQUE_MESSAGE_PREPEND = '.Consequência.Mensagem.Prefixo'; |
63 | + KEY_CONSEQUE_MESSAGE_APPENDS = '.Consequência.Mensagem.Sufixo.Singular'; | ||
64 | + KEY_CONSEQUE_MESSAGE_APPENDP = '.Consequência.Mensagem.Sufixo.Plural'; | ||
65 | + | ||
64 | 66 | ||
65 | VAL_RESEARCHER = 'Pesquisador'; | 67 | VAL_RESEARCHER = 'Pesquisador'; |
66 | 68 | ||
67 | DEF_END = '2,20,10,10,'; // which come first, 20 cycles | 10% entrelaçamentos in the last 10 cycles | 69 | DEF_END = '2,20,10,10,'; // which come first, 20 cycles | 10% entrelaçamentos in the last 10 cycles |
68 | DEF_POINTS = '0,0,0,'; | 70 | DEF_POINTS = '0,0,0,'; |
69 | - DEF_CONSEQUENCE = '0,0,0,NON,50,50,'; | ||
70 | - DEF_METACONSEQUENCE_MESSAGE = 'Vocês produziram <$G> <$SG>.'; | ||
71 | - DEF_CONSEQUENCE_MESSAGE = '<$JOGADOR> ganhou <$A> <$SA> e <$B> <$SB>.'; | 71 | + DEF_CONSEQUENCE = '1,0|M,C,P,A,|$NICNAME|ponto|pontos|'; |
72 | DEF_METARESPONSE = 'IMPAR,E,DIFERENTES,'; | 72 | DEF_METARESPONSE = 'IMPAR,E,DIFERENTES,'; |
73 | - DEF_RESPONSE = 'PAR,E,INDIFERENTE,'; | 73 | + DEF_CRITERIA = 'PAR,E,INDIFERENTE,'; |
74 | DEF_PROMPTMESSAGE = 'Vocês perderam <$G> item escolar. Desejam recuperá-lo gastando pontos do Tipo A?'; | 74 | DEF_PROMPTMESSAGE = 'Vocês perderam <$G> item escolar. Desejam recuperá-lo gastando pontos do Tipo A?'; |
75 | 75 | ||
76 | const | 76 | const |
@@ -113,10 +113,7 @@ const | @@ -113,10 +113,7 @@ const | ||
113 | Password : ''; | 113 | Password : ''; |
114 | Status : gpsWaiting; | 114 | Status : gpsWaiting; |
115 | Data : nil; | 115 | Data : nil; |
116 | - Choice : ( | ||
117 | - Current : (Row:grNone; Color:gcNone;); | ||
118 | - Last : (Row:grNone; Color:gcNone;); | ||
119 | - ); | 116 | + Choice : (Row:grNone; Color:gcNone;); |
120 | Points : (A:0; B:0); | 117 | Points : (A:0; B:0); |
121 | Turn : -1; | 118 | Turn : -1; |
122 | ); | 119 | ); |
@@ -124,20 +121,13 @@ const | @@ -124,20 +121,13 @@ const | ||
124 | //C_OPERANT_1 : TContingency = | 121 | //C_OPERANT_1 : TContingency = |
125 | // ( | 122 | // ( |
126 | // Consequence : ( | 123 | // Consequence : ( |
127 | - // Style : [gscShowMessage,gscPoints]; | ||
128 | - // Points :(A : 0; B : 1; G : 0;); | 124 | + // Style : [gscShowMessage,gscPoints, gscB]; |
129 | // Message : '<$JOGADOR> produziu 1 ponto do tipo B.'; | 125 | // Message : '<$JOGADOR> produziu 1 ponto do tipo B.'; |
130 | - // Cycles : 0; // absolute, | ||
131 | - // VariationMin: 0; // porcentage, | ||
132 | - // VariationMax : 0; // porcentage | ||
133 | - // Prompt : ( | ||
134 | - // Message : ''; | ||
135 | - // Style : []; | ||
136 | - // ); | ||
137 | - // ); // prompt needs its own class | 126 | + // Value: 1; |
127 | + // Variation:1; | ||
138 | // | 128 | // |
139 | - // Response : ( | ||
140 | - // Operator_ : goNONE; | 129 | + // Criteria : ( |
130 | + // Style : goNONE; | ||
141 | // Rows : [grEven]; | 131 | // Rows : [grEven]; |
142 | // Colors : [gcNone]; | 132 | // Colors : [gcNone]; |
143 | // ); | 133 | // ); |
@@ -148,23 +138,15 @@ const | @@ -148,23 +138,15 @@ const | ||
148 | //C_OPERANT_2 : TContingency = | 138 | //C_OPERANT_2 : TContingency = |
149 | // ( | 139 | // ( |
150 | // Consequence : ( | 140 | // Consequence : ( |
151 | - // Style : [gscShowMessage,gscPoints]; | ||
152 | - // Points :(A : 3; B : 0; G : 0;); | 141 | + // Style : [gscShowMessage,gscPoints, gscA]; |
153 | // Message : '<$JOGADOR> produziu 3 pontos do tipo A.'; | 142 | // Message : '<$JOGADOR> produziu 3 pontos do tipo A.'; |
154 | - // Cycles : 0; // absolute, | ||
155 | - // VariationMin: 0; // porcentage, | ||
156 | - // VariationMax : 0; // porcentage | ||
157 | - // Prompt : ( | ||
158 | - // Message : ''; | ||
159 | - // Style : []; | ||
160 | - // ); | ||
161 | - // ); | ||
162 | // | 143 | // |
163 | - // Response : ( | 144 | + // Criteria : ( |
164 | // Operator_ : goNONE; | 145 | // Operator_ : goNONE; |
165 | - // Rows : [grOdd]; | 146 | + // Rows : [grEven]; |
166 | // Colors : [gcNone]; | 147 | // Colors : [gcNone]; |
167 | // ); | 148 | // ); |
149 | + // | ||
168 | // Meta : False; | 150 | // Meta : False; |
169 | // ); | 151 | // ); |
170 | 152 |
units/string_methods.pas
@@ -57,16 +57,16 @@ end; | @@ -57,16 +57,16 @@ end; | ||
57 | function GetRowFromString(S: string): TGameRow; | 57 | function GetRowFromString(S: string): TGameRow; |
58 | begin | 58 | begin |
59 | case UpperCase(S) of | 59 | case UpperCase(S) of |
60 | - '0', 'NONE' : Result := grNone; | ||
61 | - '1', 'UM', 'ONE' : Result := grOne; | ||
62 | - '2', 'DOIS', 'TWO' : Result := grTwo; | ||
63 | - '3', 'TRÊS', 'THREE' : Result := grThree; | ||
64 | - '4', 'QUATRO', 'FOUR' : Result := grFour; | ||
65 | - '5', 'CINCO', 'FIVE' : Result := grFive; | ||
66 | - '6', 'SEIS', 'SIX' : Result := grSix; | ||
67 | - '7', 'SETE', 'SEVEN' : Result := grSeven; | ||
68 | - '8', 'OITO', 'EIGHT' : Result := grEight; | ||
69 | - '9', 'NOVE', 'NINE' : Result := grNine; | 60 | + 'NA', '.' , '0', 'NONE' : Result := grNone; |
61 | + '01', '1', 'UM', 'ONE' : Result := grOne; | ||
62 | + '02', '2', 'DOIS', 'TWO' : Result := grTwo; | ||
63 | + '03', '3', 'TRÊS', 'THREE' : Result := grThree; | ||
64 | + '04', '4', 'QUATRO', 'FOUR' : Result := grFour; | ||
65 | + '05', '5', 'CINCO', 'FIVE' : Result := grFive; | ||
66 | + '06', '6', 'SEIS', 'SIX' : Result := grSix; | ||
67 | + '07', '7', 'SETE', 'SEVEN' : Result := grSeven; | ||
68 | + '08', '8', 'OITO', 'EIGHT' : Result := grEight; | ||
69 | + '09', '9', 'NOVE', 'NINE' : Result := grNine; | ||
70 | '10', 'DEZ', 'TEN' : Result := grTen; | 70 | '10', 'DEZ', 'TEN' : Result := grTen; |
71 | 'PAR', 'EVEN' : Result := grEven; | 71 | 'PAR', 'EVEN' : Result := grEven; |
72 | 'IMPAR', 'ODD' : Result := grOdd; | 72 | 'IMPAR', 'ODD' : Result := grOdd; |
@@ -90,12 +90,12 @@ end; | @@ -90,12 +90,12 @@ end; | ||
90 | function GetColorFromString(S: string): TGameColor; | 90 | function GetColorFromString(S: string): TGameColor; |
91 | begin | 91 | begin |
92 | case UpperCase(S) of | 92 | case UpperCase(S) of |
93 | - 'INDIFERENTE', 'NONE' : Result := gcNone; | ||
94 | - 'AMARELO', 'YELLOW' : Result := gcYellow; | ||
95 | - 'VERMELHO', 'RED' : Result := gcRed; | ||
96 | - 'ROXO','MAGENTA', 'VIOLETA' : Result := gcMagenta; | ||
97 | - 'AZUL', 'BLUE' : Result := gcBlue; | ||
98 | - 'VERDE', 'GREEN' : Result := gcGreen; | 93 | + '.', 'INDIFERENTE', 'NONE' : Result := gcNone; |
94 | + 'Y', 'AMARELO', 'YELLOW' : Result := gcYellow; | ||
95 | + 'B', 'AZUL', 'BLUE' : Result := gcBlue; | ||
96 | + 'G', 'VERDE', 'GREEN' : Result := gcGreen; | ||
97 | + 'R', 'VERMELHO', 'RED' : Result := gcRed; | ||
98 | + 'M', 'ROXO','MAGENTA', 'VIOLETA' : Result := gcMagenta; | ||
99 | '!=','<>','DIFERENTES', 'DIFFERENT' : Result := gcDiff; | 99 | '!=','<>','DIFERENTES', 'DIFFERENT' : Result := gcDiff; |
100 | '=','IGUAIS', 'EQUAL' : Result := gcEqual; | 100 | '=','IGUAIS', 'EQUAL' : Result := gcEqual; |
101 | end; | 101 | end; |