user: Converte this assembly snippet into its equivalent C code:

```asm
<PLAY_engine>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x270,%rsp
  mov    %rdi,-0x268(%rbp)
  mov    %esi,-0x26c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x254(%rbp)
  movl   $0x0,-0x250(%rbp)
  movl   $0x0,-0x240(%rbp)
  movl   $0x0,-0x23c(%rbp)
  movl   $0x0,-0x248(%rbp)
  movl   $0x0,-0x244(%rbp)
  movl   $0x0,-0x228(%rbp)
  movl   $0x0,-0x224(%rbp)
  movw   $0x2323,-0xa(%rbp)
  movl   $0x0,-0x25c(%rbp)
  jmp    L126
L370:
  movl   $0x0,-0x258(%rbp)
  jmp    L304
L172:
  mov    -0x258(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x25c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x210,%rax
  movb   $0xb2,(%rax)
  mov    -0x258(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x25c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movl   $0x0,-0x1a0(%rbp,%rax,4)
  addl   $0x1,-0x258(%rbp)
L304:
  mov    -0x258(%rbp),%eax
  cmp    -0x26c(%rbp),%eax
  jl     L172
  addl   $0x1,-0x25c(%rbp)
L126:
  mov    -0x25c(%rbp),%eax
  cmp    -0x26c(%rbp),%eax
  jl     L370
  jmp    L47
L415:
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    -0x26c(%rbp),%edx
  lea    -0x210(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <exibe_tabuleiro@plt>
  mov    -0x250(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L191
  movl   $0x0,-0x24c(%rbp)
  jmp    L559
L191:
  movl   $0x1,-0x24c(%rbp)
L559:
  mov    -0x23c(%rbp),%ecx
  mov    -0x240(%rbp),%eax
  mov    -0x24c(%rbp),%edx
  lea    0x1(%rdx),%esi
  mov    %ecx,%r9d
  mov    $0x1a,%r8d
  mov    %eax,%ecx
  mov    $0x1a,%edx
  lea    D103(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpl   $0x0,-0x248(%rbp)
  jne    L545
  mov    $0xa3,%esi
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x238(%rbp),%rax
  mov    %rax,%rsi
  lea    D187(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0xa3,%esi
  lea    D73(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x230(%rbp),%rax
  mov    %rax,%rsi
  lea    D187(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x238(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x238(%rbp)
  mov    -0x230(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x230(%rbp)
  mov    -0x238(%rbp),%eax
  cmp    %eax,-0x26c(%rbp)
  jle    L535
  mov    -0x238(%rbp),%eax
  test   %eax,%eax
  js     L535
  mov    -0x230(%rbp),%eax
  cmp    %eax,-0x26c(%rbp)
  jle    L535
  mov    -0x230(%rbp),%eax
  test   %eax,%eax
  js     L535
  mov    -0x238(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  mov    %rax,%rdx
  mov    -0x268(%rbp),%rax
  add    %rax,%rdx
  mov    -0x230(%rbp),%eax
  mov    -0x238(%rbp),%ecx
  mov    -0x230(%rbp),%esi
  cltq
  movzbl (%rdx,%rax,1),%edx
  movslq %esi,%rsi
  movslq %ecx,%rcx
  mov    %rcx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rsi,%rax
  sub    $0x210,%rax
  mov    %dl,(%rax)
  mov    -0x238(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  mov    %rax,%rdx
  mov    -0x268(%rbp),%rax
  add    %rax,%rdx
  mov    -0x230(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  mov    %al,-0xc(%rbp)
  mov    -0x238(%rbp),%eax
  mov    %eax,-0x220(%rbp)
  mov    -0x230(%rbp),%eax
  mov    %eax,-0x21c(%rbp)
  movl   $0x1,-0x228(%rbp)
  jmp    L164
L535:
  movl   $0x0,-0x228(%rbp)
L164:
  addl   $0x1,-0x248(%rbp)
  jmp    L47
L545:
  cmpl   $0x1,-0x248(%rbp)
  jne    L380
  mov    $0xa3,%esi
  lea    D177(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x238(%rbp),%rax
  add    $0x4,%rax
  mov    %rax,%rsi
  lea    D187(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0xa3,%esi
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x230(%rbp),%rax
  add    $0x4,%rax
  mov    %rax,%rsi
  lea    D187(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x234(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x234(%rbp)
  mov    -0x22c(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x22c(%rbp)
  mov    -0x234(%rbp),%eax
  cmp    %eax,-0x26c(%rbp)
  jle    L551
  mov    -0x234(%rbp),%eax
  test   %eax,%eax
  js     L551
  mov    -0x22c(%rbp),%eax
  cmp    %eax,-0x26c(%rbp)
  jle    L551
  mov    -0x22c(%rbp),%eax
  test   %eax,%eax
  js     L551
  mov    -0x234(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  mov    %rax,%rdx
  mov    -0x268(%rbp),%rax
  add    %rax,%rdx
  mov    -0x22c(%rbp),%eax
  mov    -0x234(%rbp),%ecx
  mov    -0x22c(%rbp),%esi
  cltq
  movzbl (%rdx,%rax,1),%edx
  movslq %esi,%rsi
  movslq %ecx,%rcx
  mov    %rcx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rsi,%rax
  sub    $0x210,%rax
  mov    %dl,(%rax)
  mov    -0x234(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  mov    %rax,%rdx
  mov    -0x268(%rbp),%rax
  add    %rax,%rdx
  mov    -0x22c(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  mov    %al,-0xb(%rbp)
  mov    -0x234(%rbp),%eax
  mov    %eax,-0x218(%rbp)
  mov    -0x22c(%rbp),%eax
  mov    %eax,-0x214(%rbp)
  movl   $0x1,-0x224(%rbp)
  jmp    L343
L551:
  movl   $0x0,-0x224(%rbp)
L343:
  addl   $0x1,-0x248(%rbp)
  jmp    L47
L380:
  movl   $0x0,-0x248(%rbp)
  mov    -0x228(%rbp),%eax
  test   %eax,%eax
  je     L175
  mov    -0x224(%rbp),%eax
  test   %eax,%eax
  jne    L580
L175:
  mov    $0xc6,%r8d
  mov    $0xe4,%ecx
  mov    $0x87,%edx
  mov    $0xa0,%esi
  lea    D51(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x220(%rbp),%eax
  mov    -0x21c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  test   %eax,%eax
  jne    L218
  mov    -0x220(%rbp),%eax
  cmp    %eax,-0x26c(%rbp)
  jg     L100
  mov    -0x220(%rbp),%eax
  test   %eax,%eax
  jns    L100
  mov    -0x21c(%rbp),%eax
  cmp    %eax,-0x26c(%rbp)
  jg     L100
  mov    -0x21c(%rbp),%eax
  test   %eax,%eax
  js     L218
L100:
  mov    -0x220(%rbp),%eax
  mov    -0x21c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x210,%rax
  movb   $0xb2,(%rax)
L218:
  mov    -0x218(%rbp),%eax
  mov    -0x214(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  test   %eax,%eax
  jne    L170
  mov    -0x218(%rbp),%eax
  cmp    %eax,-0x26c(%rbp)
  jg     L209
  mov    -0x218(%rbp),%eax
  test   %eax,%eax
  jns    L209
  mov    -0x214(%rbp),%eax
  cmp    %eax,-0x26c(%rbp)
  jg     L209
  mov    -0x214(%rbp),%eax
  test   %eax,%eax
  js     L170
L209:
  mov    -0x218(%rbp),%eax
  mov    -0x214(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x210,%rax
  movb   $0xb2,(%rax)
L170:
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L47
L580:
  movzbl -0xc(%rbp),%edx
  movzbl -0xb(%rbp),%eax
  cmp    %al,%dl
  jne    L286
  mov    -0x220(%rbp),%edx
  mov    -0x218(%rbp),%eax
  cmp    %eax,%edx
  jne    L374
  mov    -0x21c(%rbp),%edx
  mov    -0x214(%rbp),%eax
  cmp    %eax,%edx
  je     L178
L374:
  mov    -0x220(%rbp),%eax
  mov    -0x21c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  cmp    $0x1,%eax
  je     L178
  mov    -0x218(%rbp),%eax
  mov    -0x214(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  cmp    $0x1,%eax
  jne    L0
L178:
  mov    $0xa0,%r9d
  mov    $0xc6,%r8d
  mov    $0xe4,%ecx
  mov    $0x87,%edx
  mov    $0xa0,%esi
  lea    D85(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x220(%rbp),%eax
  mov    -0x21c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  test   %eax,%eax
  jne    L520
  mov    -0x220(%rbp),%eax
  mov    -0x21c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x210,%rax
  movb   $0xb2,(%rax)
L520:
  mov    -0x218(%rbp),%eax
  mov    -0x214(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  test   %eax,%eax
  jne    L129
  mov    -0x218(%rbp),%eax
  mov    -0x214(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x210,%rax
  movb   $0xb2,(%rax)
  jmp    L129
L0:
  movzbl -0xc(%rbp),%eax
  cmp    $0x40,%al
  jne    L117
  mov    $0x93,%edx
  mov    $0x88,%esi
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x24c(%rbp),%eax
  cltq
  mov    -0x240(%rbp,%rax,4),%eax
  lea    0x4(%rax),%edx
  mov    -0x24c(%rbp),%eax
  cltq
  mov    %edx,-0x240(%rbp,%rax,4)
  mov    -0x24c(%rbp),%eax
  cltq
  movzbl -0xa(%rbp,%rax,1),%eax
  cmp    $0x23,%al
  je     L469
  mov    -0x24c(%rbp),%eax
  cltq
  movb   $0x23,-0xa(%rbp,%rax,1)
  addl   $0x1,-0x250(%rbp)
L469:
  movzbl -0xc(%rbp),%edx
  mov    -0x24c(%rbp),%eax
  cltq
  mov    %dl,-0xa(%rbp,%rax,1)
  addl   $0x1,-0x244(%rbp)
  jmp    L561
L117:
  movzbl -0xc(%rbp),%eax
  cmp    $0x24,%al
  jne    L215
  mov    $0x93,%edx
  mov    $0x88,%esi
  lea    D161(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x24c(%rbp),%eax
  cltq
  mov    -0x240(%rbp,%rax,4),%eax
  lea    0x7(%rax),%edx
  mov    -0x24c(%rbp),%eax
  cltq
  mov    %edx,-0x240(%rbp,%rax,4)
  mov    -0x24c(%rbp),%eax
  cltq
  movzbl -0xa(%rbp,%rax,1),%eax
  cmp    $0x23,%al
  je     L341
  mov    -0x24c(%rbp),%eax
  cltq
  movb   $0x23,-0xa(%rbp,%rax,1)
  addl   $0x1,-0x250(%rbp)
L341:
  movzbl -0xc(%rbp),%edx
  mov    -0x24c(%rbp),%eax
  cltq
  mov    %dl,-0xa(%rbp,%rax,1)
  addl   $0x1,-0x244(%rbp)
  jmp    L561
L215:
  mov    $0x88,%esi
  lea    D69(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x24c(%rbp),%eax
  cltq
  mov    -0x240(%rbp,%rax,4),%eax
  lea    0x2(%rax),%edx
  mov    -0x24c(%rbp),%eax
  cltq
  mov    %edx,-0x240(%rbp,%rax,4)
  addl   $0x1,-0x250(%rbp)
  addl   $0x1,-0x244(%rbp)
L561:
  mov    -0x220(%rbp),%eax
  mov    -0x21c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movl   $0x1,-0x1a0(%rbp,%rax,4)
  mov    -0x218(%rbp),%eax
  mov    -0x214(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movl   $0x1,-0x1a0(%rbp,%rax,4)
  addl   $0x1,-0x254(%rbp)
L129:
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L47
L286:
  mov    -0x220(%rbp),%edx
  mov    -0x218(%rbp),%eax
  cmp    %eax,%edx
  jne    L352
  mov    -0x21c(%rbp),%edx
  mov    -0x214(%rbp),%eax
  cmp    %eax,%edx
  je     L279
L352:
  mov    -0x220(%rbp),%eax
  mov    -0x21c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  cmp    $0x1,%eax
  je     L279
  mov    -0x218(%rbp),%eax
  mov    -0x214(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  cmp    $0x1,%eax
  jne    L247
L279:
  mov    $0xa0,%r9d
  mov    $0xc6,%r8d
  mov    $0xe4,%ecx
  mov    $0x87,%edx
  mov    $0xa0,%esi
  lea    D85(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L67
L247:
  mov    $0x88,%esi
  lea    D56(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x244(%rbp)
  movzbl -0xc(%rbp),%eax
  cmp    $0x40,%al
  jne    L105
  mov    -0x24c(%rbp),%eax
  cltq
  mov    -0x240(%rbp,%rax,4),%eax
  lea    -0x4(%rax),%edx
  mov    -0x24c(%rbp),%eax
  cltq
  mov    %edx,-0x240(%rbp,%rax,4)
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L105:
  movzbl -0xc(%rbp),%eax
  cmp    $0x24,%al
  jne    L291
  mov    -0x24c(%rbp),%eax
  cltq
  mov    -0x240(%rbp,%rax,4),%eax
  lea    -0x7(%rax),%edx
  mov    -0x24c(%rbp),%eax
  cltq
  mov    %edx,-0x240(%rbp,%rax,4)
  lea    D175(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L291:
  mov    $0x21,%edi
  call   <putchar@plt>
  addl   $0x1,-0x250(%rbp)
L67:
  mov    -0x220(%rbp),%eax
  mov    -0x21c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  test   %eax,%eax
  jne    L516
  mov    -0x220(%rbp),%eax
  mov    -0x21c(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x210,%rax
  movb   $0xb2,(%rax)
L516:
  mov    -0x218(%rbp),%eax
  mov    -0x214(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x1a0(%rbp,%rax,4),%eax
  test   %eax,%eax
  jne    L435
  mov    -0x218(%rbp),%eax
  mov    -0x214(%rbp),%edx
  movslq %edx,%rcx
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x210,%rax
  movb   $0xb2,(%rax)
L435:
  mov    $0x0,%eax
  call   <getchar@plt>
L47:
  mov    -0x26c(%rbp),%eax
  imul   %eax,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  cmp    %eax,-0x254(%rbp)
  jl     L415
  mov    -0x244(%rbp),%edx
  lea    -0x240(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <finaliza@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L540
  call   <__stack_chk_fail@plt>
L540:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D25
datatype: string
name: disassemble_data
arguments: data_label: D103
datatype: string
name: disassemble_data
arguments: data_label: D2
datatype: string
name: disassemble_data
arguments: data_label: D187
datatype: string
name: disassemble_data
arguments: data_label: D73
datatype: string
name: disassemble_data
arguments: data_label: D177
datatype: string
name: disassemble_data
arguments: data_label: D14
datatype: string
name: disassemble_data
arguments: data_label: D51
datatype: string
name: disassemble_data
arguments: data_label: D85
datatype: string
name: disassemble_data
arguments: data_label: D54
datatype: string
name: disassemble_data
arguments: data_label: D161
datatype: string
name: disassemble_data
arguments: data_label: D69
datatype: string
name: disassemble_data
arguments: data_label: D56
datatype: string
name: disassemble_data
arguments: data_label: D29
datatype: string
name: disassemble_data
arguments: data_label: D175
datatype: string

tool: D25: clear

tool: D103: 
Vez: Jogador %d               Pontos: |Jogador 1%c %d|     |Jogador 2%c %d|
 

tool: D2: 
Digite o n%cmero da linha do primeiro item: 

tool: D187: %d

tool: D73: Digite o n%cmero da coluna do primeiro item: 

tool: D177: 
Digite o n%cmero da linha do segundo item: 

tool: D14: Digite o n%cmero da coluna do segundo item: 

tool: D51: 
Jogada inv%clida! As posi%c%ces n%co existem no tabuleiro.

tool: D85: 
Jogada inv%clida! As posi%c%ces s%co iguais, ou j%c foram jogadas.

tool: D54: 
Voc%c ganhou o b%cnus de 4 pontos!

tool: D161: 
Voc%c ganhou o b%cnus de 7 pontos!

tool: D69: 
Voc%c ganhou 2 pontos!

tool: D56: 
Voc%c perdeu

tool: D29:  4 pontos

tool: D175:  7 pontos

assistant: ```c
void PLAY_engine(char matriz[10][10], int limite) {
  int i, j, final = 0, n_player = 0, id_player, pontos[2] = {0, 0}, linha[2], coluna[2], valida[10][10];
  int po_item = 0, p_jog[2][2], jogadas = 0, valida_pos[2] = {0, 0};
  char exibicao[10][10], saida[2], historico[2] = {'#', '#'};
  for (i = 0; i < limite; i++) {
    for (j = 0; j < limite; j++) {
      exibicao[i][j] = 178;
      valida[i][j] = 0;
    }
  }
  while (final < ((limite * limite) / 2)) {
    system("clear");
    exibe_tabuleiro(exibicao, limite);
    if (n_player % 2 == 0)
      id_player = 0;
    else
      id_player = 1;
    printf("\nVez: Jogador %d               Pontos: |Jogador 1%c %d|     |Jogador 2%c %d|\n ", id_player + 1, 26, pontos[0], 26, pontos[1]);
    if (po_item == 0) {
      printf("\nDigite o n%cmero da linha do primeiro item: ", 163);
      scanf("%d", &linha[0]);
      printf("Digite o n%cmero da coluna do primeiro item: ", 163);
      scanf("%d", &coluna[0]);
      linha[0]--;
      coluna[0]--;
      if (linha[0] < limite && linha[0] >= 0 && coluna[0] < limite && coluna[0] >= 0) {
        exibicao[linha[0]][coluna[0]] = matriz[linha[0]][coluna[0]];
        saida[0] = matriz[linha[0]][coluna[0]];
        p_jog[0][0] = linha[0];
        p_jog[0][1] = coluna[0];
        valida_pos[0] = 1;
      } else {
        valida_pos[0] = 0;
      }
      po_item++;
    } else if (po_item == 1) {
      printf("\nDigite o n%cmero da linha do segundo item: ", 163);
      scanf("%d", &linha[1]);
      printf("Digite o n%cmero da coluna do segundo item: ", 163);
      scanf("%d", &coluna[1]);
      linha[1]--;
      coluna[1]--;
      if (linha[1] < limite && linha[1] >= 0 && coluna[1] < limite && coluna[1] >= 0) {
        exibicao[linha[1]][coluna[1]] = matriz[linha[1]][coluna[1]];
        saida[1] = matriz[linha[1]][coluna[1]];
        p_jog[1][0] = linha[1];
        p_jog[1][1] = coluna[1];
        valida_pos[1] = 1;
      } else {
        valida_pos[1] = 0;
      }
      po_item++;
    } else {
      po_item = 0;
      if (valida_pos[0] == 0 || valida_pos[1] == 0) {
        printf("\nJogada inv%clida! As posi%c%ces n%co existem no tabuleiro.", 160, 135, 228, 198);
        if (valida[p_jog[0][0]][p_jog[0][1]] == 0 && (p_jog[0][0] < limite || p_jog[0][0] >= 0 || p_jog[0][1] < limite || p_jog[0][1] >= 0))
          exibicao[p_jog[0][0]][p_jog[0][1]] = 178;
        if (valida[p_jog[1][0]][p_jog[1][1]] == 0 && (p_jog[1][0] < limite || p_jog[1][0] >= 0 || p_jog[1][1] < limite || p_jog[1][1] >= 0))
          exibicao[p_jog[1][0]][p_jog[1][1]] = 178;
        getchar();
      } else if (saida[0] == saida[1]) {
        if ((p_jog[0][0] == p_jog[1][0] && p_jog[0][1] == p_jog[1][1]) || valida[p_jog[0][0]][p_jog[0][1]] == 1 || valida[p_jog[1][0]][p_jog[1][1]] == 1) {
          printf("\nJogada inv%clida! As posi%c%ces s%co iguais, ou j%c foram jogadas.", 160, 135, 228, 198, 160);
          if (valida[p_jog[0][0]][p_jog[0][1]] == 0)
            exibicao[p_jog[0][0]][p_jog[0][1]] = 178;
          if (valida[p_jog[1][0]][p_jog[1][1]] == 0)
            exibicao[p_jog[1][0]][p_jog[1][1]] = 178;
        } else {
          if (saida[0] == '@') {
            printf("\nVoc%c ganhou o b%cnus de 4 pontos!", 136, 147);
            pontos[id_player] += 4;
            if (historico[id_player] != '#') {
              historico[id_player] = '#';
              n_player++;
            }
            historico[id_player] = saida[0];
            jogadas++;
          } else if (saida[0] == '$') {
            printf("\nVoc%c ganhou o b%cnus de 7 pontos!", 136, 147);
            pontos[id_player] += 7;
            if (historico[id_player] != '#') {
              historico[id_player] = '#';
              n_player++;
            }
            historico[id_player] = saida[0];
            jogadas++;
          } else {
            printf("\nVoc%c ganhou 2 pontos!", 136);
            pontos[id_player] += 2;
            n_player++;
            jogadas++;
          }
          valida[p_jog[0][0]][p_jog[0][1]] = 1;
          valida[p_jog[1][0]][p_jog[1][1]] = 1;
          final++;
        }
        getchar();
      } else {
        if ((p_jog[0][0] == p_jog[1][0] && p_jog[0][1] == p_jog[1][1]) || valida[p_jog[0][0]][p_jog[0][1]] == 1 || valida[p_jog[1][0]][p_jog[1][1]] == 1) {
          printf("\nJogada inv%clida! As posi%c%ces s%co iguais, ou j%c foram jogadas.", 160, 135, 228, 198, 160);
        } else {
          printf("\nVoc%c perdeu", 136);
          jogadas++;
          if (saida[0] == '@') {
            pontos[id_player] -= 4;
            printf(" 4 pontos");
          }
          if (saida[0] == '$') {
            pontos[id_player] -= 7;
            printf(" 7 pontos");
          }
          printf("!");
          n_player++;
        }
        if (valida[p_jog[0][0]][p_jog[0][1]] == 0)
          exibicao[p_jog[0][0]][p_jog[0][1]] = 178;
        if (valida[p_jog[1][0]][p_jog[1][1]] == 0)
          exibicao[p_jog[1][0]][p_jog[1][1]] = 178;
        getchar();
      }
    }
  }
  finaliza(pontos, jogadas);
}
```