MARS 4.5 PROJECT MIPS LANGUAGE

.datamaze: .asciiz “n##########n#*1342171#n#01#####1#n#84#19224#n####1#####n#11#12561#n#16#####1#n#64131281#n##1#######n#12647893E#n”win_msg: .asciiz “You win!n”prompt: .asciiz “Enter move (w/a/s/d): “invalid_move: .asciiz “Invalid move!n”current_sum_msg: .asciiz “Current Sum: “correct_answers_msg: .asciiz “Correct Answers: “time_elapsed_msg: .asciiz “Time Elapsed: “seconds_msg: .asciiz ” secondsn”final_sum_msg: .asciiz “Final Sum: “final_correct_answers_msg: .asciiz “Total Correct Answers: “final_time_msg: .asciiz “Total Time: “newline: .asciiz “n”debug_msg: .asciiz “Debug: Reached En”debug_position: .asciiz “Debug: Position: “debug_character: .asciiz ” Character: “debug_reached: .asciiz ” Debug: Reached ‘E’!n”# Maze dimensionsmaze_width: .word 10maze_height: .word 10# Player starting positionplayer_x: .word 1player_y: .word 1# Game statscurrent_sum: .word 0correct_answers: .word 0# Timerstart_time: .word 0end_time: .word 0.textmain:# Initialize player positionla $t0, player_xla $t1, player_yli $t2, 1sw $t2, 0($t0)sw $t2, 0($t1)# Initialize game statsla $t3, current_sumsw $zero, 0($t3)la $t3, correct_answerssw $zero, 0($t3)# Initialize start timeli $v0, 30 # System call for timesyscallla $t3, start_timesw $v0, 0($t3)# Print initial mazela $a0, mazeli $v0, 4syscall# Display initial statsjal display_statsgame_loop:# Load player positionlw $t0, player_xlw $t1, player_y# Calculate player position in the maze stringla $t9, mazeli $t4, 11 # Each row is 11 characters including newlinemul $t5, $t0, $t4 # Row offsetadd $t5, $t5, $t1 # Column offsetadd $t5, $t5, $t9 # Final address in maze string# Restore original maze character (if not starting position)bne $t0, 1, not_starting_posbne $t1, 1, not_starting_posj skip_restorenot_starting_pos:li $t6, ‘ ‘ # Assuming empty spacesb $t6, 0($t5)skip_restore:# Prompt for movela $a0, promptli $v0, 4syscall# Read user inputli $v0, 12syscallmove $t3, $v0# Validate user inputli $t7, ‘w’li $t8, ‘a’li $t9, ‘s’li $t0, ‘d’beq $t3, $t7, process_inputbeq $t3, $t8, process_inputbeq $t3, $t9, process_inputbeq $t3, $t0, process_inputj invalidprocess_input:# Calculate new position based on inputlw $t0, player_xlw $t1, player_ymove $t4, $t0move $t5, $t1beq $t3, ‘w’, move_upbeq $t3, ‘a’, move_leftbeq $t3, ‘s’, move_downbeq $t3, ‘d’, move_rightmove_up:sub $t4, $t0, 1j validate_movemove_down:add $t4, $t0, 1j validate_movemove_left:sub $t5, $t1, 1j validate_movemove_right:add $t5, $t1, 1j validate_movevalidate_move:# Check boundarieslw $t6, maze_widthlw $t7, maze_heightbltz $t4, invalidbltz $t5, invalidbge $t4, $t7, invalidbge $t5, $t6, invalid# Calculate maze indexli $t8, 11 # Each row is 11 characters including newlinemul $t8, $t8, $t4 # Row offsetadd $t8, $t8, $t5 # Column offset# Check maze value at new positionla $t9, mazeadd $t9, $t9, $t8lb $t9, 0($t9)# Debug: Print position and characterla $a0, debug_positionli $v0, 4syscallmove $a0, $t4li $v0, 1syscallla $a0, debug_characterli $v0, 4syscallmove $a0, $t9li $v0, 11syscallla $a0, newlineli $v0, 4syscall# Check if move is validbeq $t9, ‘#’, invalid# Check if player reached the end ‘E’li $t0, ‘E’beq $t9, $t0, win# Check if stepping on a numbersub $t6, $t9, ‘0’ # Convert character to numberbltz $t6, skip_updatebgt $t6, 9, skip_update# Update current sumlw $t7, current_sumadd $t7, $t7, $t6sw $t7, current_sum# Increment correct answers countlw $t7, correct_answersaddi $t7, $t7, 1sw $t7, correct_answersskip_update:# Update player positionsw $t4, player_xsw $t5, player_y# Calculate the new position in the maze stringla $t9, mazelw $t0, player_xlw $t1, player_yli $t4, 11 # Each row is 11 characters including newlinemul $t5, $t0, $t4 # Row offsetadd $t5, $t5, $t1 # Column offsetadd $t5, $t5, $t9 # Final address in maze string# Update the player’s position in the mazeli $t6, ‘*’sb $t6, 0($t5)# Print mazela $a0, mazeli $v0, 4syscall# Display current sum and correct answersjal display_statsj game_loopinvalid:la $a0, invalid_moveli $v0, 4syscallj game_loopwin:# Record end timeli $v0, 30 # System call for timesyscallla $t3, end_timesw $v0, 0($t3)# Debug message to indicate we have reached the win conditionla $a0, debug_reachedli $v0, 4syscall# Display win messagela $a0, win_msgli $v0, 4syscall# Display final statsjal display_final_stats# End the game by exiting the programli $v0, 10syscalldisplay_stats:# Display current sumla $a0, current_sum_msgli $v0, 4syscalllw $a0, current_sumli $v0, 1syscall# Display correct answers countla $a0, correct_answers_msgli $v0, 4syscalllw $a0, correct_answersli $v0, 1syscall# Display time elapsedli $v0, 30 # System call for timesyscallla $t4, start_timelw $t4, 0($t4)sub $t6, $v0, $t4la $a0, time_elapsed_msgli $v0, 4syscallmove $a0, $t6li $v0, 1syscallla $a0, seconds_msgli $v0, 4syscall# Print newlinela $a0, newlineli $v0, 4syscalljr $radisplay_final_stats:# Display final sumla $a0, final_sum_msgli $v0, 4syscalllw $a0, current_sumli $v0, 1syscall# Display final correct answers countla $a0, final_correct_answers_msgli $v0, 4syscalllw $a0, correct_answersli $v0, 1syscall# Calculate and display total timela $t4, end_timelw $t4, 0($t4)la $t5, start_timelw $t5, 0($t5)sub $t6, $t4, $t5la $a0, final_time_msgli $v0, 4syscallmove $a0, $t6li $v0, 1syscallla $a0, seconds_msgli $v0, 4syscall# Print newlinela $a0, newlineli $v0, 4syscalljr $ra create a code when you go to the direction then it will ask you to enter the sum of two numbers that * is going tolike the picture