This answer stays with tikz partly to avoid duplicating something with plain rules. Since we're using tikz, we might as well use it to generate the random elements we need.
Overview
This answer provides a tikz library, scrambler, which creates a board with lettered tiles using colours picked randomly from a colour series. Most aspects are now configurable using standard pgfkeys syntax.
This makes the code longer rather than shorter. However, the code required in the document body is extremely minimal and the library can be reused as required. For example, the following document produces the three illustrations shown below:
\documentclass[10pt,border=3mm,tikz,rgb]{standalone}
\usetikzlibrary{scrambler}
\begin{document}
\ms{S, c, h, a, d, e, .}
\ms{Ll,w,y,d,-,f,e,l,-,y,r,-,a,s,y,n,.}
\ms[shade picker={12}{colourseries},board size=8x3,letter colour=white]{R,a,i,n,b,o,w,!}
\end{document}
A library is usually where I end up when I clean up tikz code: I have libraries for cats, cauldrons, trams, tortoises, spheres and so on.
Details
I use a colour series with 50 greys. So far, so not random. We pick them randomly using a tikz key, pick shade, which sets lliw to the result1. While greys are used by default, this can easily be changed using the shade picker={<number>}{<colorseries>} key.
I've randomised the grey for the background since otherwise there are only 49. On some compilations, this means the background may be white or nearly white. Recompile a few times if you don't like the results.
Syntax
The tikz key board size=<width>x<depth> allows you to configure the board size. The default is 7x7.
The background node adapts to the board size, allowing a margin of 5mm.
letter colour=<colour> is red by default and sets the colour of the letters.
bx and board are tikz styles which can be changed to modify the style of the tiles and/or background respectively. To maintain randomness, scrambler/pick shade,fill=lliw should be included. If you prefer non-randomness, you may, of course, change this freely.
\ms[<options>]{<list>} takes a comma separated list of things to go in the squares. Letters in this case. The optional argument can be used for configuration.
Examples
\ms{S, c, h, a, d, e, .}

With a phrase separated by hyphens:
\ms{Ll,w,y,d,-,f,e,l,-,y,r,-,a,s,y,n,.}

The phrase is from a rhyme in which every line has the form ' like the '. 'Llwyd fel yr asyn' means 'grey like the donkey'2.
With an oblong board, more colour and white letters:
\ms[shade picker={12}{colourseries},board size=8x3,letter colour=white]{R,a,i,n,b,o,w,!}

Code
\begin{filecontents}[overwrite]{tikzlibraryscrambler.code.tex}
\usetikzlibrary{backgrounds,fit}
% addaswyd o gwestiwn MS-SPO: https://tex.stackexchange.com/q/733354/
% ateb: https://tex.stackexchange.com/a/733378/
\definecolorseries{greyseries}{rgb}{last}[gray]{1}[gray]{0}
\resetcolorseries[50]{greyseries}
\definecolorseries{colourseries}{hsb}{grad}[hsb]{.575,1,1}{.987,-.234,0}
\resetcolorseries[12]{colourseries}
\newcount\scramblerboardwidth
\newcount\scramblerboarddepth
\tikzset{%
scrambler/.search also={/tikz},
scrambler/.cd,
pick shade/.code 2 args={%
\pgfmathparse{random(1,#1)}%
\colorlet{lliw}{#2!![\pgfmathresult]}%
},
pick shade/.default={50}{greyseries},
shade picker/.code 2 args={%
\pgfkeys{/tikz/scrambler/pick shade/.default={#1}{#2}}%
},
board size/.code args={#1x#2}{%
\scramblerboardwidth=#1 \relax
\scramblerboarddepth=#2 \relax
},
board size/.default=7x7,
letter colour/.code={%
\colorlet{lettercolour}{#1}%
},
letter colour=red,
bx/.style={minimum size=1cm,text=lettercolour,font={\bfseries},scrambler/pick shade,fill=lliw},
board/.style={scrambler/pick shade,fill=lliw,inner sep=5mm},
}
\NewDocumentCommand\ms{+O{}+m}{%
\begin{tikzpicture}
\pgfkeys{/tikz/scrambler/.cd,board size,#1}%
\def\tempa{#2}%
\def\cycleaux##1,##2\null{##1}%
\def\cyclerem##1,##2\null{##2}%
\foreach \j [remember=\tempa] in {1,...,\scramblerboarddepth}
{%
\foreach \i [remember=\tempa,remember=\tempc] in {1,...,\scramblerboardwidth} {%
\edef\tempb{\expandafter\cycleaux\tempa\null}%
\node[scrambler/bx] at (\i,\j) {\tempb};
\edef\tempc{\expandafter\cyclerem\tempa\null}%
\edef\tempa{\tempc,\tempb}%
}%
\edef\tempb{\expandafter\cycleaux\tempa\null}%
\edef\tempc{\expandafter\cyclerem\tempa\null}%
\edef\tempa{\tempc,\tempb}%
}%
\begin{scope}[on background layer]
\node [scrambler/board, fit=(current bounding box)] at (current bounding box.center) {};
\end{scope}%
\end{tikzpicture}%
}
\end{filecontents}
\documentclass[10pt,border=3mm,tikz,rgb]{standalone}
\usetikzlibrary{scrambler}
\begin{document}
\ms{S, c, h, a, d, e, .}
\ms{Ll,w,y,d,-,f,e,l,-,y,r,-,a,s,y,n,.}
\ms[shade picker={12}{colourseries},board size=8x3,letter colour=white]{R,a,i,n,b,o,w,!}
\end{document}
1Because I bet David can't say it, even if he can gŵgl it.a
2Yes, I know they aren't all grey. Look, I didn't write it, OK? Besides, 'grey or brownish or tan-coloured like the donkey' wouldn't scan.
aNo, Germans can't say it either. No, we didn't name their country or capital with it. You're confusing Germany with England.