たぶんちゃんとした概念とかクラス分けとかあったりすると思うけど(mementoパターンとかcommandパターンとか)、smile basicだと構造体もクラスも使えないので、配列をスタック代わりに使っている感じです。 あるコマンド(ここからここへ線を引け)を実行したときに、そのコマンドを実行する前と同じようになる打ち消し(変更差分)のコマンド(ここからここへの線のうち、色はもともとそこにあった色)が undo処理になるので、作りとしてはそうなってる感じです。 何度もコマンド実行してundoで戻り続けても、コマンドごとに1つ前の打ち消しundoが実行されるので、ちゃんと最初まで戻れるって感じです。 変更前の画面メモリ全部持つのも方法ですが、1つの点を打ったのに1画面全部持っていたらメモリがたりなくなっちゃうので、最小限の打ち消し情報を持っている設計のような感じです。