Question: For this project, you are given a program that implements a game where a human user tries to escape from four robots. The user and

For this project, you are given a program that implements a game where a human user tries to escape from four robots. The user and four robots are on an x-y grid. On every step, you enter a move for the human. The robots will attempt to get closer to the human. When a robot has the same x-y coordinates as the human, the game is over. You will translate this program faithfully, following all function call guidelines and MIPS register use conventions. Two arrays x[4] and y[4] keep track of the x- and y-coordinates of four robots. The positions of the human and the four robots are initialized in the program. On each step, the user enters a move; the positions of the human and the robots are updated. This continues until the human dies. This figure gives an idea of the game; well work with a text-only version, sorry.

C++ code and part of MIPS code can be found below:

#C++ code:

#include using namespace std;

int moveRobots(int *, int *, int, int ); int getNew(int, int);

int main() { int x[4], y[4], i, j, myX = 25, myY = 25, move, status = 1;

// initialize positions of four robots x[0] = 0; y[0] = 0; x[1] = 0; y[1] = 50; x[2] = 50; y[2] = 0; x[3] = 50; y[3] = 50;

cout << "Your coordinates: 25 25 ";

while (status == 1) { cout << "Enter move (1 for +x, -1 for -x, 2 for + y, -2 for -y):"; cin >> move;

// process user's move if (move == 1) myX++; else if (move == -1) myX--; else if (move == 2) myY++; else if (move == -2) myY--;

// update robot positions status = moveRobots(&x[0],&y[0],myX,myY);

cout << "Your coordinates: " << myX << " " << myY << endl; for (i=0;i<4;i++) cout << "Robot at " << x[i] << " " << y[i] << endl;

} cout << "AAAARRRRGHHHHH... Game over "; }

int moveRobots(int *arg0, int *arg1, int arg2, int arg3) { int i, *ptrX, *ptrY, alive = 1;

ptrX = arg0; ptrY = arg1; for (i=0;i<4;i++) { *ptrX = getNew(*ptrX,arg2); // update x-coordinate of robot i *ptrY = getNew(*ptrY,arg3); // update y-coordinate of robot i

// check if robot caught user if ((*ptrX == arg2) && (*ptrY == arg3)) { alive = 0; break; } ptrX++; ptrY++; } return alive; }

// move coordinate of robot closer to coordinate of user int getNew(int arg0, int arg1) { int temp, result;

temp = arg0 - arg1; if (temp >= 10) result = arg0 - 10; else if (temp > 0) result = arg0 - 1; else if (temp == 0) result = arg0; else if (temp > -10) result = arg0 + 1; else if (temp <= -10) result = arg0 + 10;

return result; }

MIPS code:

#

# A proper program header goes here...

#

#

.data

x: .word 0:4 # x-coordinates of 4 robots

y: .word 0:4 # y-coordinates of 4 robots

str1: .asciiz "Your coordinates: 25 25 "

str2: .asciiz "Enter move (1 for +x, -1 for -x, 2 for + y, -2 for -y):"

str3: .asciiz "Your coordinates: "

sp: .asciiz " "

endl: .asciiz " "

str4: .asciiz "Robot at "

str5: .asciiz "AAAARRRRGHHHHH... Game over "

#i $s0

#myX $s1

#myY $s2

#move $s3

#status $s4

#temp,pointers $s5,$s6

.text

.globl inc

.globl getNew

main: li $s1,25 # myX = 25

li $s2,25 # myY = 25

li $s4,1 # status = 1

la $s5,x

la $s6,y

sw $0,($s5) # x[0] = 0; y[0] = 0;

sw $0,($s6)

sw $0,4($s5) # x[1] = 0; y[1] = 50;

li $s7,50

sw $s7,4($s6)

sw $s7,8($s5) # x[2] = 50; y[2] = 0;

sw $0,8($s6)

sw $s7,12($s5) # x[3] = 50; y[3] = 50;

sw $s7,12($s6)

la $a0,str1 # cout << "Your coordinates: 25 25 ";

li $v0,4

syscall

bne $s4,1,exitw # while (status == 1) {

while: la $a0,str2 # cout << "Enter move (1 for +x,

li $v0,4 # -1 for -x, 2 for + y, -2 for -y):";

syscall

li $v0,5 # cin >> move;

syscall

move $s3,$v0

bne $s3,1,else1 # if (move == 1)

add $s1,$s1,1 # myX++;

b exitif

else1: bne $s3,-1,else2 # else if (move == -1)

add $s1,$s1,-1 # myX--;

b exitif

else2: bne $s3,2,else3 # else if (move == 2)

add $s2,$s2,1 # myY++;

b exitif

else3: bne $s3,-2,exitif # else if (move == -2)

add $s2,$s2,-1 # myY--;

exitif: la $a0,x # status = moveRobots(&x[0],&y[0],myX,myY);

la $a1,y

move $a2,$s1

move $a3,$s2

jal moveRobots

move $s4,$v0

la $a0,str3 # cout << "Your coordinates: " << myX

li $v0,4 # << " " << myY << endl;

syscall

move $a0,$s1

li $v0,1

syscall

la $a0,sp

li $v0,4

syscall

move $a0,$s2

li $v0,1

syscall

la $a0,endl

li $v0,4

syscall

la $s5,x

la $s6,y

li $s0,0 # for (i=0;i<4;i++)

for: la $a0,str4 # cout << "Robot at " << x[i] << " "

li $v0,4 # << y[i] << endl;

syscall

lw $a0,($s5)

li $v0,1

syscall

la $a0,sp

li $v0,4

syscall

lw $a0,($s6)

li $v0,1

syscall

la $a0,endl

li $v0,4

syscall

add $s5,$s5,4

add $s6,$s6,4

add $s0,$s0,1

blt $s0,4,for

beq $s4,1,while

# }

exitw: la $a0,str5 # cout << "AAAARRRRGHHHHH... Game over ";

li $v0,4

syscall

li $v0,10 #}

syscall

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!