(def stylings [:minimalist :hyper-realistic :semi-autobiographical
               :addictive :beautiful :whimsical :cel-shaded
               :very-personal :dark :indulgent :over-the-top
               :gore-drenched :16-bit-retro :8-bit-retro :grayscale
               :abstract :bass-thumping])

(def genres [:puzzle :platformer :4x :adventure
             :interactive-fiction :ball-and-paddle :beat-em-up
             :hack-and-slash :fighting :maze :pinball :fps
             :twin-stick-shooter :shoot-em-up :horror :rpg :racing
             :sports :music :party :roguelike :dating-sim :strategy
             :virtual-pet :wordplay :chesslike :card :sandbox])
(def adjectives ["scary" "easy" "sexy" "punny" "funny" "quirky" "high-stakes"
                 "time-sensitive"])
(def places ["the forest" "space" "cyberspace" "the hood" "a graveyard"
             "the desert" "the suburbs" "a non-Euclidean space" "a carnival"
             "a house of horrors" "a wasteland" "a microscopic world"
             "the jungle" "an alien world"])
(def creatures ["penguins" "elemental monsters" "ordinary animals" "puppies"
                "kittens" "Cthulhu mythos monsters" "super-powered children"
                "Greek mythological beasts" "Asian mythological beasts"
                "abstract beings" "jocks" "nerds" "cheerleaders" "executives"])
(def things ["swords" "clothing" "computers" "guns" "futuristic weapons"
             "children's toys" "numerous varieties of identical polearms" "art"
             "haunted objects" "potions" "alcohol" "food" "cheese" "drugs"
             "books" "corpses"])
(def eras ["medieval times" "classical times" "the time of the Plague"
           "the Renaissance" "the time of the American Revolution"
           "the age of imperialism" "the time of the American Civil War"
           "the time of WWI" "the time of WWII" "the Great Depression"
           "the 1920s" "the 1950s" "the 1960s" "the 1970s" "the 1980s" "199X"
           "modern times" "an alternate history" "an alternate prehistory"
           "prehistoric times" "Biblical times" "the age of the Five Kingdoms"
           "the time of the birth of firearms" "the time of conquistadors"
           "the time of Genghis Khan" "the time of Alexander the Great"
           "the time of the French Revolution" "the time of the pharaohs"])
(def activities (into [] {
  :solve (mapv #(str % " puzzles") adjectives),
  :perform ["pop songs" "EDM remixing" "circus acts" "Shakespearean plays"
             "opera classics" "gangsta rap" "kid's songs" "rock songs"
             "metal songs" "country songs" "folk songs" "mariachi music"],
  :explore places
  :command creatures,
  :capture creatures,
  :race (mapv #(str "in " %) places),
  :train creatures,
  :riot ["for a cause", "for fun", "for profit"],
  :coach ["basketball teams" "baseball teams" "football teams" "soccer teams"
           "rugby teams" "sexy beach volleyball teams" "high school wrestlers"
           "martial arts students"],
  :defend creatures,
  :guide (mapv #(str "travelers through " %) places),
  :search (mapv #(str "for " %) things),
  :cheat ["as an intended mechanic" "by exploiting intentional glitches"
           "by exploiting unintended glitches" "using the Konami code"],
  :lead (mapv #(str "armies during " %) eras),
  :gamble ["on poker" "on horse racing" "on slot machines" "on pachinko"
            "on roulette" "on Russian roulette" "on beer pong"]
  :build things
  :navigate ["with limited technology" "with modern technology"
              "with futuristic technology" "with magic" "through cyberspace"]
  :party (mapv #(str "with " %) creatures),
  :spy (mapv #(str "in " %) eras),
  :conquer (mapv #(str "in " %) eras),
  :infiltrate places,
  :rescue creatures,
  :destroy things,
  :trade (mapv #(str "in " %) eras),
  :design things,
  :manage ["finances" "a farm" "a transportation agency" "a city" "a nation"
            "a planet" "a species" "a family" "an anthill" "a pet"]
  :negotiate (mapv #(str "with " %) creatures),
  :hunt creatures
  :escape places
  :duel (mapv #(str "rival trainers of " %) creatures),
  :decorate things,
  :customize things,
  :calculate ["carefully" "quickly"]
  }))

(defn game-gen []
  (clojure.string/join
    " "
    (remove
      #{""}
      [(clojure.string/join
        " and "
        (set (repeatedly (rand-int 2)
            #(name (rand-nth stylings)))))
       (clojure.string/join "/"
        (set (repeatedly (inc (quot (rand-int 5) 2))
            #(name (rand-nth genres)))))
       "game where you" (clojure.string/join " and "
         (set (repeatedly (inc (rand-int 2))
             #(let [a (rand-nth activities)] (str (name (first a)) " " (rand-nth (second a)))))))])))
(println (clojure.string/join "\n" (repeatedly 800 game-gen)))