![見出し画像](https://assets.st-note.com/production/uploads/images/51452927/rectangle_large_type_2_c5bfc1d204a4dd40228676522d85ffb1.jpg?width=1200)
【プチコン4】乱数で文字色を変えるプログラム
自作ゲームでお笑いの頂点を取った野田クリスタルさんのネタを真似たツイートをしていたら本人の発売したゲームがすごいことになっていました。
#petitcom #プチコン4
— 七峰らいが (@Rai_N01) April 19, 2021
「RND関数で指定した数値を、カラーコードのRGB変数に、変換したいよー(マ●カルラブリー風)」
と思ったんですが、16進数(6桁)の文字列→16進数(2桁)の文字列→10進数の数値に遠回りしようとしたせいか難しい……結局HSVで光らせてみたりして。
画像3枚目の変数Yは消し漏れです pic.twitter.com/Z7d6iErx2m
自分が作ろうとしたのは、#000000~#FFFFFFの色コードでロールプレイングゲームのキャラクター番号を振り分けるというプログラムでした。より分かりやすく言えばポケモンのトレーナーIDに近いアイデアです。
プログラムを作った日からこの報告書を書くまでの二週間のブランクで作業の記憶がほとんど抜け落ちてしまいました(20代と思えない記憶力)が、最初はとりあえず乱数で決めた10進数の数値を16進数の文字列変数に変えてみたのがダメで(文字列変数→変数に戻せない)昔作った文字を光らせるプログラムを参考にHSVで0~360の色相をランダムに変更するプログラムを作ったり、迷走していました。
そこでTwitterで二名の方にご助言をいただきました。ryumagoさん、みなつさん、ありがとうございました。
&H0Aと10はイコールですよ
— ryumago (@ryumago) April 20, 2021
特別文字化させなくても大丈夫
あと、RGB値を変数に格納するのも
変数の値を使って色指定するのも出来ます
例えば、変数 C にカラーコードが入っているとき、
— みなつ(🐾) (@tksm372) April 21, 2021
RGB C OUT R_VAL,G_VAL,B_VAL
とすると、カラーコードCをRGBの各成分に分解できて便利かもです~(●´ω`●)https://t.co/Xb2fhRO3EQ pic.twitter.com/WepoOUqiU3
「RGB 色コード OUT R,G,B」という変数から色コードを取得する命令が解決策となり(ツイートの〇_VALは変数名にあたる)、RGBの色コードをランダムに決定するプログラムを組むことができました。
後は以前巷のプチコン4講座をちょっとかじった知識でメインループを作ったり、ユーザー関数を定義したり、上限いっぱいで効果音と共に画面にカントの言葉「Es ist gut(これでよし)」と表示する終了処理を作ったり(昔別冊コロコロコミックで「カンニンGOOD」って漫画があって、主人公満天完人が最終回でこの言葉を言うんです)と余裕しゃくしゃくでした。
![画像1](https://assets.st-note.com/production/uploads/images/51436086/picture_pc_95748a33a114e7ead4493db9b3e0d3ac.jpg?width=1200)
![画像2](https://assets.st-note.com/production/uploads/images/51436091/picture_pc_56ec946745947e512490ddc6d8009d06.jpg?width=1200)
![画像3](https://assets.st-note.com/production/uploads/images/51436171/picture_pc_008c99a78ed423de033b63f5c4c5ca15.jpg?width=1200)
真っ黒の画面に色の付いた■を並べてもよくわからなかったので、背景を白くし変数の値も併記した。実行から終了までの時間はおおむね4分程度
あと確か、後述する札を配るプログラムのバグでループが終わりに近づくほど乱数が別の色を出すまで同じ色が出ている(プログラム上IF文内の色を変える処理を行なわずスルーしていたためか)
ですがこれで完成とはならず、次の壁が立ちはだかりました。
このプログラムにはchitoseArkさんの『「涼宮ハルヒの憂鬱キャラセリフかるた集」読み上げソフト』における「1度再生した読み札ファイルは除外するプログラム」を見様見真似で組み込んでいるのですが、そもそも#000000~#FFFFFFにあたる16,777,216枚数分ある札を配り切るための配列変数は作れません。
実行してもエラーにならない配列変数の値は9,999,999(7桁)まででした。
chitoseArkさんはPi STARTERによるラズベリーパイ上のSmileBASICで開発なさっており、所謂プチコン3号の環境ですが1Pプレイ用の人狼ゲームを開発された方です
して、9,999,999番目の色っていうのはプチコン4上ではR(152),G(150),B(127)で、全体を通して青色と緑色までは出せるのに、赤色が綺麗に出ないということがわかりました。
というか、そもそも約一千万人弱もキャラメイクしないと思いますが、仮にこのままRPGを作ったとしてそのような大量の数(山札の中からランダムにカードが配られたような状態)から特定のキャラクター情報を呼び出そうというのも、想像すると砂場から砂粒をひとつ拾うような大・数当てゲームの様相を呈しているのがわかります。
![画像4](https://assets.st-note.com/production/uploads/images/51442145/picture_pc_15f55813e53371d3cc4b14493db6c451.jpg?width=1200)
![画像5](https://assets.st-note.com/production/uploads/images/51442151/picture_pc_4bfe78e71da20d48d1dafeab77bd09a1.jpg?width=1200)
今の状態は例えるなら、大量に並べられたバスケットゴールの中に1個ずつボールを放り投げているような状態
とはいえ16,777,216個分の配列変数は作れなくても1個の変数に0~16,777,216の数値を代入することはできたので、乱数で色を変えるプログラムは一応完成しました。以下がそのソースコードとなります。
![画像6](https://assets.st-note.com/production/uploads/images/51443951/picture_pc_0c3f469bb7e18bc3f51532c5df602f0d.jpg?width=1200)
![画像7](https://assets.st-note.com/production/uploads/images/51443958/picture_pc_f13446c990eeea540b799947d66205b9.jpg?width=1200)
![画像8](https://assets.st-note.com/production/uploads/images/51443969/picture_pc_b65e7c467b7c37acbf8977f06d005959.jpg?width=1200)
コードを読み解く上の注意点
・OPTION STRICTを宣言しておらず変数R_VAL,G_VAL,B_VALが未定義のまま動作している。
・RND関数(サイコロ)で出た値(C)が未読(0)か既読(1)かを判断し、既読なら無視する処理をコメントアウトしている。またRNDのシード値7は「なんとなくそれでバラけたような気がする」だけに思われる。
・上記のコメントアウトによって配列変数SCC[256]は宣言しただけで機能していない。ちなみに変数名はSoul.Color.CHORDの略で、RPGで作成するキャラクターの魂の色を指す。
![画像9](https://assets.st-note.com/production/uploads/images/51445072/picture_pc_79334a77fb7b09556c36a2baf759cd99.jpg?width=1200)
引き写ししたら1~255までランダムに色を決めるようになっているはずです。
一応綺麗な色が出るようにはなりましたが、これだと乱数がダブってしまうのを止められず、キャラクターの各パラメータをまとめるID番号にするにはちょっとバグが出やすそうでリスキーかな? と思いました。まあ、RGBの値が1つや2つ違うくらいの色の違いを見分けるのはそれはそれで大変なんですが……。
考えれば考えるほど底なし沼に嵌っていって、とりあえず先に仮のパラメータを表示するステータス画面を作ってしまおうかと、なおキーヌさんの講座用プログラムから該当する部分を抜き書きしようとしたら今度はエラーの火消しに手が回らなくなりました。目コピではプログラミングの知識が深まらないことを痛感しました。
今回は自分の考える「敵や味方キャラクターのパラメータを入れ替えたり書き換えたりして楽しめるRPG」における「キャラクター固有の色情報」を決めるためのプログラムでした。
この通称(自分しか呼んでないけど)「因果の塔」企画、まったく絵に描いた餅どころかほとんど白紙のようなものなので着地点がどこにもないのですが、今後も研究課題として取り組んでいきたいと思います。
とはいえ、今は自分の「こういうプログラムが作れないか?」というニーズでモチベーションを作ってプチコン4を触っているような感じで、以前考えていたようなネットのプチコン4講座を片っ端から当たってみる予定が後回しになっているのが現状です。
いきなりツイッター上でゲームセンターあらしの話を始めて大風呂敷を広げた熱血プチコン4学習漫画「プチコンアニキ」も未着手ですし。
話題にしていただけて有り難いです。ちなみにマンガ版「あらし」は色んな小説・映画・ドラマ等のパロディだらけです→アマゾンプライムで「ゲームセンターあらし」を少し見た後でゲーム/ホビーマンガの熱血ノリにちょっと妄想した話 - Togetter https://t.co/2fbgpLcp1j @togetter_jpより
— すがやみつる(公式サイト・リニューアル中) (@msugaya) April 12, 2021
島本和彦さんと5年前に札幌で、熱血(?)トークイベントをやしましたよ。会場にいらしていた方が、写真もアップしてくれてました。テーマは、先行作品をいかにしてパクる……(^_^;)……もといインスパイアするか(笑)でした。 https://t.co/g9Emg0VnUk https://t.co/9ASyn2gdRE
— すがやみつる(公式サイト・リニューアル中) (@msugaya) April 12, 2021
すがや先生、その節は本当にすみませんでした。
…………R-TYPE FINAL2やったりFit Boxing 2やったりウマ娘やったりと1日が24時間あっても足りないです。最初は夕方~夜の空き時間でプチコンできるかなと思ってたけど、Switchの前で考え込むと3~4時間くらい吹き飛んで眠るどころじゃなくなってしまう……。
報告は以上です。
(終)
この記事が気に入ったらサポートをしてみませんか?