Mario kart

Clémentine Jager

Dans ‘Mario Kart 8 Deluxe’ sur la ‘Nintendo Switch’, chaque personnage dispose de caracteristiques, mais contrairement aux karts et aux éléments de personnalisation, elles ne sont pas affichées à l’écran. Ces caracteristiques sont :

Ces paramètres sont notés sur une échelle qui va de 1 à 6 et ont été répertoriés par la communauté des fans du jeu.

Nous allons utiliser flextable pour présenter le détail de ces statistiques pour chaque personnage.

Les données et images

Les données sont mises à dispositions ici: https://docs.google.com/spreadsheets/d/1g7A-38tn9UAIbB2B3sZI-MpILsS3ZS870UTVMRRxh4Q/edit#gid=0

On ajoute deux colonnes contenant le chemin relatif des images à afficher plus tard avec la fonction dplyr::mutate(). Ces images sont rangés dans le répertoire ‘mario’, voici la liste des fichiers qui y sont stockés :

library(here)
## here() starts at /Users/davidgohel/gitprojects/ardata.fr
mario_dir_img <- here(
  "content", "flextable-gallery", 
  "2021-01-12-mario-kart", "mario")

fs::dir_tree(mario_dir_img)
## /Users/davidgohel/gitprojects/ardata.fr/content/flextable-gallery/2021-01-12-mario-kart/mario
## ├── BebeHarmonie.png
## ├── BebeMario.png
## ├── BebePeach.png
## ├── Bowser.png
## ├── Harmonie.png
## ├── KoopaTroopa.png
## ├── Luigi.png
## ├── Mario.png
## ├── MarioMetal.png
## ├── Peach.png
## ├── PeachChat.png
## ├── Star_coin.png
## ├── Tanuki.png
## ├── Toad.png
## ├── Toadette.png
## ├── Waluigi.png
## └── Wario.png

Notez que l’on n’affiche pas toutes les colonnes mais seulement celles qui vont de ‘Characters’ à ‘Accel’.

library(readxl)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✔ ggplot2 3.3.5     ✔ purrr   0.3.4
## ✔ tibble  3.1.6     ✔ dplyr   1.0.8
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   2.1.2     ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ purrr::compose() masks flextable::compose()
## ✖ dplyr::filter()  masks stats::filter()
## ✖ dplyr::lag()     masks stats::lag()
mk_file <- here(
  "content", "flextable-gallery", 
  "2021-01-12-mario-kart", "mario-kart.xlsx")
mario_kart <- read_excel(mk_file, skip = 1) %>%
  mutate(
    image = file.path("mario", paste0(image, ".png")),
    star = file.path("mario", star)
  )
mario_kart %>% select(Characters:Accel)

Création du flextable

library(flextable)
library(officer)
## 
## Attachement du package : 'officer'
## L'objet suivant est masqué depuis 'package:readxl':
## 
##     read_xlsx

set_flextable_defaults(
  font.family = "Arial", font.size = 9, 
  padding = 2, digits = 1)

var_stat <- setdiff(
  names(mario_kart), 
  c("image", "star", "color", "Characters"))

ft <- flextable(mario_kart, col_keys = c("Characters", var_stat)) %>% 
  set_header_labels(Land_speed = "Land", `Anti-G_speed` = "Anti-G", 
                    Water_speed = "Water", Gliding_speed = "Gliding") %>% 
  add_header_row(values = c("Characters", "Speed", "Accel", "Weight", 
                            "Handling", "Traction", "M-turbo"), 
                 colwidths = c(1, 4, 1, 1, 
                               4, 1, 1)) %>% 
  theme_box() %>% 
  merge_v(part = "header") %>% bold(part = "header") %>% 
  valign(valign = "center", part = "header") %>% 
  mk_par(j = "Characters", 
          value = as_paragraph(
            as_b(
              colorize(Characters, color = mario_kart$color)), 
            as_chunk(" "), 
            as_image(image, width = 0.2, height = 0.2)) 
  ) %>% 
  colformat_double(digits = 1) %>% 
  theme_zebra(odd_header = "#c7254e", even_header = "#c7254e",
              odd_body = "#fff5f5", even_body = "#f8f9fa") %>% 
  color(part = "header", color = "white") %>% 
  align(align = "right", part = "all") %>%
  autofit()
ft

Mettre en évidence les meilleurs scores

Ajoutons la pièce dans la colonne où chaque personnage a le score le plus élevé.

for(column in var_stat) {
  i_selector <- as.formula(
    paste0("~`", column, "`>= max(`",
    column, "`, na.rm = TRUE)"))
  ft <- mk_par(ft,
            i = i_selector, j = column,
            value = as_paragraph(
              as_image(star, width = .15, height = .15),
              as_chunk(" "),
              as_chunk(.)), use_dot = TRUE
    )
}
ft <- autofit(ft)
ft