Skip to content

Add RPS game flow, UI and sound updates#4

Open
Meowcaroni wants to merge 5 commits intomasterfrom
seb-dev
Open

Add RPS game flow, UI and sound updates#4
Meowcaroni wants to merge 5 commits intomasterfrom
seb-dev

Conversation

@Meowcaroni
Copy link
Collaborator

Created full rock-paper-scissors button-driven game flow:

  • Added function handlers for starting game, cycling choices, and confirming choices
  • Initiated main menu startup + awake LED

Added sounds for main menu startup and draw game

Edited UI and rock-paper-scissors algorithm functions to better utilize player_choice and cpu_choice in main.c

Comment on lines +85 to +89
btnctrl_register_event(NULL, start_game);
break;
case DRAW:
play_draw_sound();
btnctrl_register_event(NULL, start_game);

This comment was marked as outdated.


// Initialize game screen and register button events for cycling and confirming choice
void start_game() {
btnctrl_unregister_event(); // Clear main menu event

This comment was marked as outdated.


rps_choice cpuChoice = (rps_choice)(esp_random() % 3); // Generate random CPU choice
rps_outcome outcome = determine_rps_outcome(playerChoice, cpuChoice); // Determine game outcome
init_result_screen(outcome, playerChoice, cpuChoice); // Update screen with outcome and choices
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: The init_result_screen function is declared with four parameters in its header but is defined and called with only three, leading to undefined behavior.
Severity: HIGH

Suggested Fix

Update the function declaration in include/ui.h to match the implementation in src/ui.c. The declaration should be changed to expect three parameters: void init_result_screen(rps_outcome outcome, rps_choice player_choice, rps_choice cpu_choice);.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.

Location: src/main.c#L80

Potential issue: There is a mismatch between the declaration and definition of the
`init_result_screen` function. The header file `include/ui.h` declares the function with
four parameters, including a `char* gift_card_code`. However, the implementation in
`src/ui.c` and the call in `src/main.c` both use only three parameters. This discrepancy
violates the C standard and results in undefined behavior. While it may compile with a
warning, it can lead to runtime instability or crashes on different platforms or with
different compiler settings.

// Initiate main menu
init_main_menu();
play_main_menu_sound();
btnctrl_register_event(NULL, start_game);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: The btnctrl_register_event function is called with a NULL select_cb, but the underlying iot_button_register_cb call's return value isn't checked, silently ignoring the resulting registration failure.
Severity: HIGH

Suggested Fix

In btnctrl_register_event, check the return value of iot_button_register_cb. If it returns an error, handle it appropriately, for example by logging the error or returning a status code to the caller. Ensure that a valid, non-NULL callback is provided if the select button functionality is required.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.

Location: src/main.c#L37

Potential issue: The function `btnctrl_register_event` is called with a `NULL` value for
the `select_cb` parameter in `main.c` on lines 37, 89, and 93. This `NULL` value is
passed to the external library function `iot_button_register_cb`, which returns an
`ESP_ERR_INVALID_ARG` error when the callback is `NULL`. The code does not check the
return value of this function, so the error is silently ignored. This results in the
select button's callback failing to register. Subsequent calls to
`btnctrl_unregister_event` then operate on an invalid button state, leading to
unpredictable behavior where the select button does not function as expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant