-
Notifications
You must be signed in to change notification settings - Fork 0
/
game_display.c
77 lines (70 loc) · 2.24 KB
/
game_display.c
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
/** @file game_display.c
@author Samuel Burtenshaw, Zachary Kaye
@date 5 October 2020
@brief module that controls the display during runtime.
*/
#include "game_display.h"
#include "game.h"
#include "../fonts/font5x7_1.h"
#include "tinygl.h"
#include "task.h"
// Initialise tinygl and apply preferences.
void game_display_init(void)
{
tinygl_init (TASK_RATE / DISPLAY_RATE);
tinygl_font_set (&font5x7_1);
tinygl_text_speed_set (TEXT_SPEED);
tinygl_text_mode_set (TINYGL_TEXT_MODE_SCROLL);
}
// Updates display by calling tinygl_update
void update_display(__unused__ void *data)
{
tinygl_update();
}
// Changes the display to print a specific message based on current state
void current_message(game_states_t state)
{
switch (state) {
case STATE_INIT:
tinygl_text (STARTUP_MESSAGE); // Display startup message
break;
case STATE_WAIT:
tinygl_text (WAIT_MESSAGE); // Display connect message
break;
case STATE_AGAIN:
tinygl_text (AGAIN_MESSAGE); // Display again message
break;
default: //If there is no message clear the screen
tinygl_clear();
break;
}
}
// Checks whether the player won, lost or drew.
void display_result (void *data)
{
state_t *game_state = data;
uint8_t your_choice = game_state->curr_choice;
uint8_t opp_choice = game_state->other_choice;
//Based on the result displays a char
if (game_state->state == STATE_RESULT) {
if (opp_choice != PAPER_CHOICE && opp_choice != SCISSOR_CHOICE && opp_choice != ROCK_CHOICE) {
display_char(UNKNOWN);
} else if (your_choice == opp_choice) {
display_char(DRAW);
} else if ((your_choice == ROCK_CHOICE && opp_choice == SCISSOR_CHOICE) ||
(your_choice == SCISSOR_CHOICE && opp_choice == PAPER_CHOICE) ||
(your_choice == PAPER_CHOICE && opp_choice == ROCK_CHOICE)) {
display_char(WIN);
} else {
display_char(LOSS);
}
}
}
// Method to display a char on the fun-kit display
void display_char (char char_to_disp)
{
char buffer[2];
buffer[0] = char_to_disp;
buffer[1] = '\0';
tinygl_text (buffer);
}