Beispiel #1
0
 public function testAWordCanBeCreated()
 {
     $faker = Faker\Factory::create();
     $user = factory(User::class)->create(['username' => 'janedoe2']);
     $word_str = $faker->word;
     $args = array('word' => $word_str, 'user_id' => $user->id);
     $word = Word::create($args);
     $first_letter = Letter::where('word_id', $word->id)->where('ordinal', '1')->first();
     $this->assertEquals($word->word, $word_str);
     $this->assertEquals($first_letter->letter, substr($word_str, 0, 1));
     if (strlen($word_str) > 1) {
         $second_letter = Letter::where('word_id', $word->id)->where('ordinal', 2)->first();
         $this->assertEquals($second_letter->letter, substr($word_str, 1, 1));
     }
 }
 public static function validate_word($game_id)
 {
     $letters = \Input::get('letters');
     if (self::has_winner($game_id)) {
         $list = \App\Models\Game_User::where('game_id', $game_id)->where('has_won', 1)->first();
         $user_win = \App\Models\User::where('id', '=', $list->user_id)->first();
         $msg = 'Ya existe un ganador y es ' . $user_win->first_name . '.';
         return response()->json(['errors' => true, 'msg' => $msg]);
     }
     if (self::has_ended($game_id)) {
         return response()->json(['errors' => true, 'msg' => 'El juego termino']);
     }
     if (self::have_turn($game_id)) {
         return response()->json(['errors' => true, 'msg' => 'NO es su turno.']);
     }
     if (self::have_give_up($game_id)) {
         return response()->json(['errors' => true, 'msg' => 'Usted ya se rindió.']);
     }
     $game_users = \App\Models\Game_User::where('game_id', '=', $game_id)->get();
     $turn = 0;
     foreach ($game_users as $game_user) {
         $turn += \App\Models\Game_Board_User::where('game_user_id', '=', $game_user->id)->count();
     }
     $board = self::board_generate($game_id);
     foreach ($letters as $letter) {
         $board[$letter['x']][$letter['y']]['letter'] = $letter['letter'];
     }
     $word = '';
     foreach ($letters as $letter) {
         $word .= $letter['letter'];
     }
     if ($turn == 0) {
         if ($letters[0]['x'] != 8 || $letters[0]['y'] != 8) {
             return response()->json(['errors' => true, 'msg' => 'La posición es incorrecta']);
         } elseif (self::check_word($word)) {
             $points = 0;
             $word_mult = 0;
             foreach ($letters as $letter) {
                 $letter_id = \App\Models\Letter::where('letter', $letter['letter'])->get();
                 $game_user_id = \App\Models\Game_User::where('game_id', $game_id)->where('user_id', Auth::user()->id)->first();
                 \App\Models\Game_Board_User::create(['x' => $letter['x'], 'y' => $letter['y'], 'letter_id' => $letter_id[0]['id'], 'game_user_id' => $game_user_id['id']]);
                 if ($board[$letter['x']][$letter['y']]['type'] == 1) {
                     $points += $letter_id[0]['points'] * $board[$letter['x']][$letter['y']]['multiplier'];
                 } elseif ($board[$letter['x']][$letter['y']]['type'] == 2) {
                     $word_mult += $board[$letter['x']][$letter['y']]['multiplier'];
                     $points += $letter_id[0]['points'];
                 } else {
                     $points += $letter_id[0]['points'];
                 }
                 $inventory = \App\Models\Letter_User::where('game_id', $game_id)->where('letter_id', $letter_id[0]['id'])->first();
                 $inventory->delete();
             }
             $game_user_id = \App\Models\Game_User::where('game_id', $game_id)->where('user_id', Auth::user()->id)->first();
             if ($word_mult > 0) {
                 $points = $points * $word_mult;
             }
             $game_user_id['points'] += $points;
             $game_user_id->save();
             self::cleanConsTurn($game_id);
             self::turn_pass($game_id);
             self::cleanConsTurn($game_id);
             return response()->json(['errors' => false, 'msg' => 'La palabra es correcta']);
         } else {
             return response()->json(['errors' => true, 'msg' => 'La palabra no se encuentra en el diccionario']);
         }
     } else {
         $is_ok = true;
         for ($i = 1; $i < 16; $i++) {
             $word = '';
             for ($j = 1; $j < 16; $j++) {
                 if (is_string($board[$i][$j]['letter'])) {
                     $word .= $board[$i][$j]['letter'];
                 } elseif (is_string($board[$i][$j]['letter']['letter'])) {
                     $word .= $board[$i][$j]['letter']['letter'];
                 } elseif (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 } else {
                     $word = '';
                 }
             }
             if (is_string($board[$i][$j - 1]['letter'])) {
                 if (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 }
             } elseif (is_string($board[$i][$j - 1]['letter']['letter'])) {
                 if (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 }
             }
         }
         for ($i = 1; $i < 16; $i++) {
             $word = '';
             for ($j = 1; $j < 16; $j++) {
                 if (is_string($board[$j][$i]['letter'])) {
                     $word .= $board[$j][$i]['letter'];
                 } elseif (is_string($board[$j][$i]['letter']['letter'])) {
                     $word .= $board[$j][$i]['letter']['letter'];
                 } elseif (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 } else {
                     $word = '';
                 }
             }
             if (is_string($board[$j - 1][$i]['letter'])) {
                 if (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 }
             } elseif (is_string($board[$j - 1][$i]['letter']['letter'])) {
                 if (strlen($word) > 1) {
                     if (!self::check_word($word)) {
                         $is_ok = false;
                     }
                 }
             }
         }
         if ($is_ok) {
             $points = 0;
             $word_mult = 0;
             foreach ($letters as $letter) {
                 $letter_id = \App\Models\Letter::where('letter', $letter['letter'])->get();
                 $game_user_id = \App\Models\Game_User::where('game_id', $game_id)->where('user_id', Auth::user()->id)->first();
                 \App\Models\Game_Board_User::create(['x' => $letter['x'], 'y' => $letter['y'], 'letter_id' => $letter_id[0]['id'], 'game_user_id' => $game_user_id['id']]);
                 if ($board[$letter['x']][$letter['y']]['type'] == 1) {
                     $points += $letter_id[0]['points'] * $board[$letter['x']][$letter['y']]['multiplier'];
                 } elseif ($board[$letter['x']][$letter['y']]['type'] == 2) {
                     $word_mult += $board[$letter['x']][$letter['y']]['multiplier'];
                     $points += $letter_id[0]['points'];
                 } else {
                     $points += $letter_id[0]['points'];
                 }
                 $inventory = \App\Models\Letter_User::where('game_id', $game_id)->where('letter_id', $letter_id[0]['id'])->first();
                 $inventory->delete();
             }
             $game_user_id = \App\Models\Game_User::where('game_id', $game_id)->where('user_id', Auth::user()->id)->first();
             if ($word_mult > 0) {
                 $points = $points * $word_mult;
             }
             $game_user_id['points'] += $points;
             $game_user_id->save();
             self::cleanConsTurn($game_id);
             self::turn_pass($game_id);
             self::cleanConsTurn($game_id);
             return response()->json(['errors' => false, 'msg' => 'La palabra es correcta']);
         } else {
             return response()->json(['errors' => true, 'msg' => 'La palabra no se encuentra en el diccionario']);
         }
     }
 }