// File: arisKoutsou[P]oopproj/./src/game_utils.cpp
// Function: run()
void run(void) {  
  clearScreen();

  MainMenu mainMenu;
  string userInput;
  bool firstWelcome = true;

  do {
    if (firstWelcome) {
      mainMenu.welcome();
      firstWelcome = false;
    } else {
      mainMenu.displayMenu();
    }

    userInput = mainMenu.prompt();
    transform(userInput.begin(), userInput.end(),	      
	      userInput.begin(), :: tolower);

    if (userInput == "generatemap") {
      clearScreen();
      generateMap();
    } else if (userInput == "play") {
      play();
    } else if (userInput == "help") {
      clearScreen();
      mainMenu.help();
    } 
    clearScreen();	// When exiting from any case. Print ClearScreen.
  } while (userInput != "quit");
  cout << endl << "Exiting game..." << endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
callq 0xe550
leaq -0x20(%rbp), %rdi
callq 0x72f0
leaq -0x40(%rbp), %rdi
callq 0x5460
movb $0x1, -0x41(%rbp)
testb $0x1, -0x41(%rbp)
je 0x10920
leaq -0x20(%rbp), %rdi
callq 0x75a0
jmp 0x108f7
movb $0x0, -0x41(%rbp)
jmp 0x1092d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x55d0
leaq -0x20(%rbp), %rdi
callq 0x136e0
jmp 0x10b04
leaq -0x20(%rbp), %rdi
callq 0x7910
jmp 0x1092b
jmp 0x1092d
leaq -0x78(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x7630
jmp 0x1093c
leaq -0x40(%rbp), %rdi
movq %rdi, -0xa8(%rbp)
leaq -0x78(%rbp), %rsi
movq %rsi, -0xb0(%rbp)
callq 0x53f0
movq -0xb0(%rbp), %rdi
callq 0x55d0
movq -0xa8(%rbp), %rdi
callq 0x5280
movq -0xa8(%rbp), %rdi
movq %rax, -0x80(%rbp)
callq 0x5190
movq -0xa8(%rbp), %rdi
movq %rax, -0x88(%rbp)
callq 0x5280
movq %rax, -0x90(%rbp)
movq -0x80(%rbp), %rdi
movq -0x88(%rbp), %rsi
movq -0x90(%rbp), %rdx
movq 0x2f616(%rip), %rcx     # 0x3ffc8
callq 0x7e00
movq %rax, -0xa0(%rbp)
jmp 0x109c0
movq -0xa0(%rbp), %rax
movq %rax, -0x98(%rbp)
leaq 0x1e10a(%rip), %rsi     # 0x2eadf
leaq -0x40(%rbp), %rdi
callq 0x8e10
movb %al, -0xb1(%rbp)
jmp 0x109e6
movb -0xb1(%rbp), %al
testb $0x1, %al
jne 0x109f2
jmp 0x10a02
callq 0xe550
jmp 0x109f9
callq 0xc880
jmp 0x10a00
jmp 0x10a6b
leaq 0x1e0e2(%rip), %rsi     # 0x2eaeb
leaq -0x40(%rbp), %rdi
callq 0x8e10
movb %al, -0xb2(%rbp)
jmp 0x10a1a
movb -0xb2(%rbp), %al
testb $0x1, %al
jne 0x10a26
jmp 0x10a2f
callq 0x107f0
jmp 0x10a2d
jmp 0x10a69
leaq 0x1e0ba(%rip), %rsi     # 0x2eaf0
leaq -0x40(%rbp), %rdi
callq 0x8e10
movb %al, -0xb3(%rbp)
jmp 0x10a47
movb -0xb3(%rbp), %al
testb $0x1, %al
jne 0x10a53
jmp 0x10a67
callq 0xe550
jmp 0x10a5a
leaq -0x20(%rbp), %rdi
callq 0x7ad0
jmp 0x10a65
jmp 0x10a67
jmp 0x10a69
jmp 0x10a6b
callq 0xe550
jmp 0x10a72
jmp 0x10a74
leaq 0x1e07a(%rip), %rsi     # 0x2eaf5
leaq -0x40(%rbp), %rdi
callq 0x7f10
movb %al, -0xb4(%rbp)
jmp 0x10a8c
movb -0xb4(%rbp), %al
testb $0x1, %al
jne 0x108e6
jmp 0x10a9c
movq 0x2f51d(%rip), %rdi     # 0x3ffc0
movq 0x2f4f6(%rip), %rsi     # 0x3ffa0
callq 0x5330
movq %rax, -0xc0(%rbp)
jmp 0x10ab8
movq -0xc0(%rbp), %rdi
leaq 0x1dfc4(%rip), %rsi     # 0x2ea8a
callq 0x52f0
movq %rax, -0xc8(%rbp)
jmp 0x10ad4
movq -0xc8(%rbp), %rdi
movq 0x2f4be(%rip), %rsi     # 0x3ffa0
callq 0x5330
jmp 0x10ae9
leaq -0x40(%rbp), %rdi
callq 0x55d0
leaq -0x20(%rbp), %rdi
callq 0x136e0
addq $0xd0, %rsp
popq %rbp
retq
movq -0x50(%rbp), %rdi
callq 0x5550
nopl (%rax)