-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathAngelaModel.cs
661 lines (599 loc) · 24.8 KB
/
AngelaModel.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
/*Angela Xu and Daniel Kim
* May 15 2014
* SimFarm allows the user to build products, harvest them and earn money*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SimFarm
{
class AngelaModel
{
//stores the sharaedvariables
private SharedVariables _variables;
/// <summary>
/// AngelaModel Constructor
/// </summary>
/// <param name="variables">to get the shared variables</param>
public AngelaModel(SharedVariables variables)
{
_variables = variables;
}
/// <summary>
/// checks if the plant is being placed beside animals
/// if it is, it cannot be placed there
/// </summary>
/// <param name="col">col the piece is being placed at</param>
/// <param name="row">row the piece is being placed at</param>
/// <returns>returns if the plant is placed</returns>
public bool PlacePlant(int row, int col)
{
//if product is being placed in top left corner it will check surrounding
if (row == 0 && col == 0)
{
if (_variables.Grid[row, col + 1] is Animal || _variables.Grid[row + 1, col] is Animal)
{
return false;
}
}
//if product is being placed in bottom left corner it will check surrounding
else if (row == 0 && col == _variables.NumCols - 1)
{
if (_variables.Grid[row, col - 1] is Animal || _variables.Grid[row + 1, col] is Animal)
{
return false;
}
}
//if product is being placed in top right corner it will check surrounding
else if (row == _variables.NumRows - 1 && col == 0)
{
if (_variables.Grid[row - 1, col] is Animal || _variables.Grid[row, col + 1] is Animal)
{
return false;
}
}
//if product is being placed in bottom right corner it will check surrounding
else if (row == _variables.NumRows - 1 && col == _variables.NumCols - 1)
{
if (_variables.Grid[row, col - 1] is Animal || _variables.Grid[row - 1, col] is Animal)
{
return false;
}
}
//if product is being placed in top row it will check surrounding
else if (row == 0)
{
if (_variables.Grid[row, col + 1] is Animal || _variables.Grid[row + 1, col] is Animal || _variables.Grid[row, col - 1] is Animal)
{
return false;
}
}
//if product is being placed in bottom row it will check surrounding
else if (row == _variables.NumRows - 1)
{
if (_variables.Grid[row, col + 1] is Animal || _variables.Grid[row - 1, col] is Animal || _variables.Grid[row, col - 1] is Animal)
{
return false;
}
}
//if product is being placed in top col it will check surrounding
else if (col == 0)
{
if (_variables.Grid[row, col + 1] is Animal || _variables.Grid[row + 1, col] is Animal || _variables.Grid[row - 1, col] is Animal)
{
return false;
}
}
//if product is being placed in last col it will check surrounding
else if (col == _variables.NumCols - 1)
{
if (_variables.Grid[row, col - 1] is Animal || _variables.Grid[row + 1, col] is Animal || _variables.Grid[row - 1, col] is Animal)
{
return false;
}
}
//if animal is surrounded by plants, it will return false meaning the animal cannot be built there
else
{
if (_variables.Grid[row + 1, col] is Animal || _variables.Grid[row, col + 1] is Animal || _variables.Grid[row - 1, col] is Animal || _variables.Grid[row, col - 1] is Animal)
{
return false;
}
}
return true;
}
/// <summary>
/// checks is animal is surrounded by the same animal
/// if it is, it will earn 10% quality bonus
/// </summary>
/// <param name="row">row the animal is at</param>
/// <param name="col">col the animal is at</param>
/// <returns>whether or not it will receive a 10% quality bonus</returns>
public bool SurroundedBySameAnimals(int row, int col)
{
//runs if it is not in last row
if (row != _variables.NumRows - 1)
{
//checks if square is empty
if (_variables.Grid[row + 1, col] != null)
{
//checks if the square above is empty
if (_variables.Grid[row + 1, col].ProductImage == _variables.Grid[row, col].ProductImage)
{
return true;
}
}
}
//runs if it is not the first row
if (row != 0)
{
//checks if square is empty
if (_variables.Grid[row - 1, col] != null)
{
//checks if the square below is empty
if (_variables.Grid[row - 1, col].ProductImage == _variables.Grid[row, col].ProductImage)
{
return true;
}
}
}
//runs when it is not in the last col
if (col != _variables.NumCols - 1)
{
//checks if square is empty
if (_variables.Grid[row, col + 1] != null)
{
//checks is teh square to the right is empty
if (_variables.Grid[row, col + 1].ProductImage == _variables.Grid[row, col].ProductImage)
{
return true;
}
}
}
//runs when it is not in first col
if (col != 0)
{
//checks if square is empty
if (_variables.Grid[row, col - 1] != null)
{
//checks if the square to the left is empty
if (_variables.Grid[row, col - 1].ProductImage == _variables.Grid[row, col].ProductImage)
{
return true;
}
}
}
return false;
}
/// <summary>
/// checks is plant is surrounded by empty land
/// if it is, it will earn 25% quality bonus
/// </summary>
/// <param name="row">row plant is at</param>
/// <param name="col">col plant is at</param>
/// <returns>whether or not it will receive a 25% quality bonus</returns>
public bool SurroundedByEmptyLand(int row, int col)
{
//plant is in top left corner
if (row == 0 && col == 0)
{
//if plant is surrounded by empty land, it will return true meaining it will get a quality bonus
if (_variables.Grid[row, col + 1] == null && _variables.Grid[row + 1, col] == null)
{
return true;
}
}
//plant is in top right corner
else if (row == 0 && col == _variables.NumCols - 1)
{
//if plant is surrounded by empty land, it will return true meaining it will get a quality bonus
if (_variables.Grid[row, col - 1] == null && _variables.Grid[row + 1, col] == null)
{
return true;
}
}
//if plant is in botton left corner
else if (row == _variables.NumRows - 1 && col == 0)
{
//if plant is surrounded by empty land, it will return true meaining it will get a quality bonus
if (_variables.Grid[row - 1, col].ProductImage == _variables.Grid[row, col].ProductImage && _variables.Grid[row, col + 1].ProductImage == _variables.Grid[row, col].ProductImage)
{
return true;
}
}
//plant is in bottom right corner
else if (row == _variables.NumRows - 1 && col == _variables.NumCols - 1)
{
//if plant is surrounded by empty land, it will return true meaining it will get a quality bonus
if (_variables.Grid[row, col - 1] == null || _variables.Grid[row - 1, col] == null)
{
return true;
}
}
//plant is in top row
else if (row == 0)
{
//if plant is surrounded by empty land, it will return true meaining it will get a quality bonus
if (_variables.Grid[row, col + 1] == null && _variables.Grid[row + 1, col] == null && _variables.Grid[row, col - 1] == null)
{
return true;
}
}
//plant is in bottom row
else if (row == _variables.NumRows - 1)
{
//if plant is surrounded by empty land, it will return true meaining it will get a quality bonus
if (_variables.Grid[row, col + 1] == null && _variables.Grid[row - 1, col] == null && _variables.Grid[row, col - 1] == null)
{
return true;
}
}
//plant is in first col
else if (col == 0)
{
//if plant is surrounded by empty land, it will return true meaining it will get a quality bonus
if (_variables.Grid[row, col + 1] == null && _variables.Grid[row + 1, col] == null && _variables.Grid[row - 1, col] == null)
{
return true;
}
}
//plant is in bottom col
else if (col == _variables.NumCols - 1)
{
//if plant is surrounded by empty land, it will return true meaining it will get a quality bonus
if (_variables.Grid[row, col - 1] == null && _variables.Grid[row + 1, col] == null && _variables.Grid[row - 1, col] == null)
{
return true;
}
}
//plant is not at edge of grid
else
{
//if plant is surrounded by empty land, it will return true meaining it will get a quality bonus
if (_variables.Grid[row + 1, col] == null && _variables.Grid[row, col + 1] == null && _variables.Grid[row, col - 1] == null && _variables.Grid[row - 1, col] == null)
{
return true;
}
}
return false;
}
/// <summary>
/// checks if the animal is being placed beside a plant
/// if it is, it will not be placed
/// </summary>
/// <param name="row">row animal is being placed at</param>
/// <param name="col">col animal is being placed at</param>
/// <returns>returns if the animal is placed</returns>
public bool PlaceAnimal(int row, int col)
{
//animal is in top left corner
if (row == 0 && col == 0)
{
//if animal being placed is surrounded by plant, it will return false meaining it will not be placed
if (_variables.Grid[row, col + 1] is Plant || _variables.Grid[row + 1, col] is Plant)
{
return false;
}
}
//animal is in top right corner
else if (row == 0 && col == _variables.NumCols - 1)
{
//if animal being placed is surrounded by plant, it will return false meaining it will not be placed
if (_variables.Grid[row, col - 1] is Plant || _variables.Grid[row + 1, col] is Plant)
{
return false;
}
}
//animal is in bottom left corner
else if (row == _variables.NumRows - 1 && col == 0)
{
//if animal being placed is surrounded by plant, it will return false meaining it will not be placed
if (_variables.Grid[row - 1, col] is Plant || _variables.Grid[row, col + 1] is Plant)
{
return false;
}
}
//animal is in bottom right corner
else if (row == _variables.NumRows - 1 && col == _variables.NumCols - 1)
{
//if animal being placed is surrounded by plant, it will return false meaining it will not be placed
if (_variables.Grid[row, col - 1] is Plant || _variables.Grid[row - 1, col] is Plant)
{
return false;
}
}
//animal is in the first row
else if (row == 0)
{
//if animal being placed is surrounded by plant, it will return false meaining it will not be placed
if (_variables.Grid[row, col + 1] is Plant || _variables.Grid[row + 1, col] is Plant || _variables.Grid[row, col - 1] is Plant)
{
return false;
}
}
//animal is in the last row
else if (row == _variables.NumRows - 1)
{
//if animal being placed is surrounded by plant, it will return false meaining it will not be placed
if (_variables.Grid[row, col + 1] is Plant || _variables.Grid[row - 1, col] is Plant || _variables.Grid[row, col - 1] is Plant)
{
return false;
}
}
//animal is in the first col
else if (col == 0)
{
//if animal being placed is surrounded by plant, it will return false meaining it will not be placed
if (_variables.Grid[row, col + 1] is Plant || _variables.Grid[row + 1, col] is Plant || _variables.Grid[row - 1, col] is Plant)
{
return false;
}
}
//animal is in the last col
else if (col == _variables.NumCols - 1)
{
//if animal being placed is surrounded by plant, it will return false meaining it will not be placed
if (_variables.Grid[row, col - 1] is Plant || _variables.Grid[row + 1, col] is Plant || _variables.Grid[row - 1, col] is Plant)
{
return false;
}
}
//animal is not at the edge of the grid
else
{
//if animal is surrounded by plants, it will return false meaning the animal cannot be built there
if (_variables.Grid[row, col + 1] is Plant || _variables.Grid[row + 1, col] is Plant || _variables.Grid[row - 1, col] is Plant || _variables.Grid[row, col - 1] is Plant)
{
return false;
}
}
return true;
}
/// <summary>
/// creates a new corn
/// </summary>
/// <param name="row">row that corn is built at</param>
/// <param name="col">col that corn is built at</param>
/// <returns>whether corn was built</returns>
public bool BuildCorn(int row, int col)
{
//stores whether plant can be placed
bool placePlant = PlacePlant(row, col);
//checks is plance plant is true
if (placePlant == true)
{
//creates a new corn at that grid location
_variables.Grid[row, col] = new Corn();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// build a new tomato
/// </summary>
/// <param name="row">row tomato is built at</param>
/// <param name="col">col tomato is built at</param>
/// <returns>whether tomato was built</returns>
public bool BuildTomato(int row, int col)
{
//stores whether plant can be placed
bool placePlant = PlacePlant(row, col);
//checks is plance plant is true
if (placePlant == true)
{
//creates a new tomato at that grid location
_variables.Grid[row, col] = new Tomato();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// build a new asparagus
/// </summary>
/// <param name="row">row being built at</param>
/// <param name="col">col being built at</param>
/// <returns>whether it was built</returns>
public bool BuildAsparagus(int row, int col)
{
//stores whether plant can be placed
bool placePlant = PlacePlant(row, col);
//checks is plance plant is true
if (placePlant == true)
{
//creates a new asparagus at that grid location
_variables.Grid[row, col] = new Asparagus();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// build a new broccoli
/// </summary>
/// <param name="row">row being built at</param>
/// <param name="col">col being built at</param>
/// <returns>whether it was built</returns>
public bool BuildBroccoli(int row, int col)
{
//stores whether plant can be placed
bool placePlant = PlacePlant(row, col);
//checks is plance plant is true
if (placePlant == true)
{
//creates a new broccoli at that grid location
_variables.Grid[row, col] = new Broccoli();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// build a new potato
/// </summary>
/// <param name="row">row being built at</param>
/// <param name="col">col being built at</param>
/// <returns>whether it was built</returns>
public bool BuildPotato(int row, int col)
{
//stores whether plant can be placed
bool placePlant = PlacePlant(row, col);
//checks is plance plant is true
if (placePlant == true)
{
//creates a new potato at that grid location
_variables.Grid[row, col] = new Potato();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// build a new sweet potato
/// </summary>
/// <param name="row">row being built at</param>
/// <param name="col">col being built at</param>
/// <returns>whether it was built</returns>
public bool BuildSweetPotato(int row, int col)
{
//stores whether plant can be placed
bool placePlant = PlacePlant(row, col);
//checks is plance plant is true
if (placePlant == true)
{
//creates a new sweet potato at that grid location
_variables.Grid[row, col] = new SweetPotato();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// build a new pork
/// </summary>
/// <param name="row">row being built at</param>
/// <param name="col">col being built at</param>
/// <returns>whether it was built</returns>
public bool BuildPork(int row, int col)
{
//stores whether animal can be placed
bool placeAnimal = PlaceAnimal(row, col);
//checks is plance animal is true
if (placeAnimal == true)
{
//creates a new pork at that grid location
_variables.Grid[row, col] = new Pork();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// build a new chicken
/// </summary>
/// <param name="row">row being built at</param>
/// <param name="col">col being built at</param>
/// <returns>whether it was built</returns>
public bool BuildChicken(int row, int col)
{
//stores whether animal can be placed
bool placeAnimal = PlaceAnimal(row, col);
//checks is plance animal is true
if (placeAnimal == true)
{
//creates a new chicken at that grid location
_variables.Grid[row, col] = new Chicken();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// build a new beef
/// </summary>
/// <param name="row">row being built at</param>
/// <param name="col">col being built at</param>
/// <returns>whether it was built</returns>
public bool BuildBeef(int row, int col)
{
//stores whether animal can be placed
bool placeAnimal = PlaceAnimal(row, col);
//checks is plance animal is true
if (placeAnimal == true)
{
//creates a new beef at that grid location
_variables.Grid[row, col] = new Beef();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// build a new hen
/// </summary>
/// <param name="row">row being built at</param>
/// <param name="col">col being built at</param>
/// <returns>whether it was built</returns>
public bool BuildHen(int row, int col)
{
//stores whether animal can be placed
bool placeAnimal = PlaceAnimal(row, col);
//checks is plance animal is true
if (placeAnimal == true)
{
//creates a new hen at that grid location
_variables.Grid[row, col] = new Hen();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// build a new cow
/// </summary>
/// <param name="row">row being built at</param>
/// <param name="col">col being built at</param>
/// <returns>whether it was built</returns>
public bool BuildCow(int row, int col)
{
//stores whether animal can be placed
bool placeAnimal = PlaceAnimal(row, col);
//checks is plance animal is true
if (placeAnimal == true)
{
//creates a new cow at that grid location
_variables.Grid[row, col] = new Cow();
//subtracts the purchase cost of the product
_variables.Money -= _variables.Grid[row, col].PurchaseCost;
return true;
}
return false;
}
/// <summary>
/// checks if square is empty
/// </summary>
/// <param name="row">row square is at</param>
/// <param name="col">col square is at</param>
/// <returns>whether square is empty</returns>
public bool EmptySquare(int row, int col)
{
//check if grid at the row and col is empty and returns false
if (_variables.Grid[row, col] != null)
{
return false;
}
return true;
}
}
}