投稿記事

C#の記事 (5)

sixteen 2023/12/01 19:06

一連のゲームの流れを実装してみました

ご覧くださいましてありがとうございます。
今回は、
"難易度を選んで、ゲームをプレイする"
"ポーズメニューからやり直す"
"ポーズメニューから難易度を変更する"
といった、ゲームの流れに必要な各ステップを実装していました。
相変わらず地味な内容ですが、進捗をご報告させていただきます。

難易度を選んでゲーム開始、ポーズメニューからやり直す

"しっかり" の難易度を選んで、カードが配られた後、
"同じパターンで再挑戦" を選ぶと、
同じカードの配置で最初からやり直す、
"違うパターンで再挑戦" を選ぶと、
山札をシャッフルし直してカードを配置し直す、
"難易度を変える" を選ぶと、
難易度を変更し直せる、
という仕組みにしてみました。

個人的にこの辺りの機能は必須になるな、と感じていたので、
時間を掛けて実装しておりました。
なぜ必須と感じていたかについて、少しお話をさせて頂きます。

ソリティアは "詰み" になってしまうことが多い

今回わたしが開発している、
"トライピークス" というルールのソリティアに限った話ではなく、
ソリティアと呼ばれるゲームは、比較的 "詰み" になってしまうことが多いです。

Windowsに昔、インストールされていた "クロンダイク" というソリティアでは、
"これ以上、どこにもカードが動かせない"

"ゴルフ" や "トライピークス" というソリティアでは、
"数字が1違いのカードがない"

"モンテカルロ" というソリティアでは、
"隣接しているカードに同じ数字のものがない"

といった"詰み" の状況に、
プレイしながら意図せず陥ってしまうことが多々あります。

この "詰み" になってしまった時に、

  • 何か見落としていたかもしれないから、最初からやり直してみよう
  • このパターンは難しい気がするから、シャッフルしてやり直してみよう
  • 難易度を上げ過ぎたかもしれないから、難易度を下げてみよう

といった対応ができないとしんどいよなぁ、
と自分でプレイして感じていたので、
このような形で実装してみました。

まだまだ要素は足りない

色々機能を実装してきてはいるのですが、
まだまだ足りないなぁと感じている要素があります。

詰んでしまったときの対応

前項でも触れましたが、"詰んでしまったときの対応" に関しても、
もう少しアイディアがあるので、この辺りも実装しておきたいです。

遊び方の説明

ゲーム内でちゃんとした説明を作りたい!
と常々考えているので、ちゃんと実装方針を決めていきたいと思っています。

セーブ・ロード

成績の保存などはまだできていないので、
この辺りも着手しないとなぁ、と思っています。

本年も大変お世話になりました

まだまだ要素は足りておらず、開発にもう少し時間がかかりそうです。
お待たせして申し訳ございません。


https://ci-en.dlsite.com/creator/9335/article/683572

去年、入院して手術した、という記事を上げましたが、
今でも定期診断に通っていて、
明日も病院で定期診断を受けに行く、
という状況です。
(土曜日の病院は本当に混んでてつらい…会計だけでなぜあんなに並ぶのか…)

以前は仕事しながら、休みの日に一日中コード書いている、
なんてことができていたのですが、
ちょっとさすがに昔と同じようなことはできないので、
休み休み、体に負担のない程度で抑えながら作業を続けております。

当初の予定では1年ほどで形にできるはず!
と意気込んでいましたが、
今は "体に無理のない範囲で続けて、必ず形にする" というスタンスで取り組んでおりますので、
気長にお待ちいただけますと幸いです。


本記事が本年最後の更新となります。
本年も大変お世話になりました。
よいお年をお迎えください。
来年もどうぞよろしくお願い申し上げます。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

sixteen 2023/01/01 19:00

デバッグ用のログ出力機能を作成しました

明けましておめでとうございます。
本年もどうぞよろしくお願い申し上げます。

昨年末は、前回の記事(https://ci-en.dlsite.com/creator/9335/article/735524)で、
「デバッグ用の機能を作る」と申し上げましたが、
その機能のひとつとして、ログ出力機能を作成しました。
新年早々、地味な話題で大変恐縮ですが、
ご興味がありましたら、お付き合いいただければ幸いです。

カード操作の履歴の詳細を出力するようにしました

山札の配置、カードの配布、カードの選択など、
ゲーム中のカードの操作履歴を全て、
Unityのログに出力するようにしました。

また、Unityのログに出力された内容を、
出力したタイミングの時刻を含めて、
テキストファイルにリアルタイムで出力できるようにしました。
Visual Studio Code で該当のファイルを開いていると、
以下のようにリアルタイムで更新されるようになっています。

このようにしてみたのは、
昨年の5月の記事(https://ci-en.dlsite.com/creator/9335/article/643983)にて、
「Unityのログがガタガタなので、ファイルに出力して、
テキストエディタでリアルタイムで確認できるようにしようかと思っています。」
と申し上げておりましたが、
このタイミングでやってみようと思い立ち、
実装してみた、という感じです。

テキストファイルに出力して保存しておくことで、
「どのタイミングで不具合が生じたのか」
が分かりやすくなるというメリットもあるので、
今回実装してみてよかったと思います。

現に、アンドゥとリドゥを複数回実行するとバグが発生しているのを、
今回のログ出力で確認し、修正することができました。
年明けからの作業に向けて環境整備ができたので、
年末の作業としては良かったかなと感じています。

今回は文字の出力をメインに実装をしておりましたが、
単純そうに見えて、地味に厄介な問題がありますので、
今回は文字列の取り扱い方について、
フォローしていただいている方向けにお話させていただこうと思います。
ご興味がありましたら、フォローしていただけますと幸いです。
宜しくお願いいたします。

フォロワー以上限定無料

文字列の連結について、少し掘り下げてお話させていただきます。

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

sixteen 2022/11/01 19:00

カードを動かす処理を実装中です

ご覧くださいましてありがとうございます。
入院生活からの通院生活を経て、
10月からようやく、作業を再開することができましたので、
微々たる内容ですが進捗をご報告させていただきます。
お付き合いいただけますと幸いです。

カードを1枚動かす処理を実装しました

Arrange というボタンを押すと、
山札から場へ、カードを一枚移動する、
という処理を実装しました。

カードを配る処理を実装している途中で入院したことを前回思い出し、
今回これを実装した、という感じです。

「山札から場にカードを出す」という処理を、
「山札のカードを、場にある空のカードと交換する」
という処理で実装しているため、
上記のGIFアニメーションでは、
ダイヤのAのカードと、グレーのカードが交換される、
という見た目になっています。

アンドゥやリドゥなどの処理を簡単にするには、
こういう実装のほうがよさそうだな、
と前作のリリース後に感じましたので、
今回はこのような方法で実装しております。

もちろん製品版ではグレーのカードは見えなくなるよう、
対応する予定です。
現在はデバッグのしやすさを兼ねて、表示するようにしています。

不具合が発生しております

一応、上記の通り動作はしているのですが、
複数回、交換を実行すると、
カードが重なってしまう不具合が生じています。

そのためもう少し、交換の処理の実装に時間がかかりそうです。
たぶん来月も同じような内容になってしまうかと思いますが、
ご容赦ください。

ScriptableObjectを使ってみました

今回はこのカードの配置や交換のパラメータの設定に、
ScriptableObject という Unity の機能を使ってみました。
(https://docs.unity3d.com/ja/2018.4/Manual/class-ScriptableObject.html)

入院前の6月の記事(https://ci-en.dlsite.com/creator/9335/article/652265)で、
少しだけ触れたのですが、
具体的なことには言及できませんでしたので、
今回は、ScriptableObject とはどういうもので、
どのように使ったのかを、
フォローしていただいている方向けにご説明したいと思います。
ご興味があれば、フォローしていただければ幸いです。

フォロワー以上限定無料

Unity の ScriptableObject について、少し掘り下げてお話させていただきます

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

sixteen 2022/10/01 19:00

開発再開に向けて作業内容を振り返っています

ご覧くださいましてありがとうございます。
2ヶ月も更新を止めてしまって申し訳ございません。
このような状態になってもフォローしてくださる方がいらっしゃいまして、
大変感謝しております。

フォローして頂いた方は、フォローさせて頂いた上で、
Twitterのアカウントをお持ちの方はそちらでもフォローさせて頂きました。
今後ともどうぞよろしくお願い申し上げます。

お礼

8月、9月に弊サークルの作品をご購入いただきました方々、
本当にありがとうございます。
リハビリ中の大きな励みになりました。
重ねて御礼申し上げます。

徐々にではありますが、
開発を再開してまいりますので、
どうぞよろしくお願いいたします。

順調に回復しております

前回の記事(https://ci-en.dlsite.com/creator/9335/article/683572)で、
手術後の療養のため、
3ヶ月ほどお休みをさせて頂く旨をお知らせさせて頂きました。

8月からは通院生活を続けておりましたが、
おかげさまで順調に回復しており、
9月に入ってからは通院の頻度も少しずつ下がってきております。
年末頃には元の生活に完全に戻れそうです。

まだ万全とは言えない状態ですが、
少しずつ作業にも着手したいと思っていて、
現在は数ヶ月前の作業内容を振り返って、
何をしていたかをプログラムを見ながら思い出しているところです。

流石に3ヶ月以上間が空いてしまったので、
何をしていたかを思い出すだけでも結構時間がかかっています。

幸い、コーディング規約に則ってコードをずっと書いていたため、
「どこに何を書いたか覚えていない」
といった状態にはなっておりませんので、
今月から作業を徐々に再開できそうです。

作業をろくに進められていないため、
近況報告だけとなってしまうのも少々憚られますので、
今回はフォローしていただいている方向けに、
「コーディング規約」について、少しお話させていただければと思います。
ご興味がありましたら、フォローしていただければ幸いです。
よろしくお願いいたします。

フォロワー以上限定無料

C#のコーディング規約について少し掘り下げてお話させていただきます

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

sixteen 2022/05/21 19:09

ソリティアのプログラムをUnity上で動作確認しています

ご覧くださいましてありがとうございます。
今回は、ようやくコンソールの黒い画面の作業の終わりが見え始めてきましたので、
Unity上で動作確認を行っておりました。
とはいえ、まだUnity上のログ出力で最低限の動作確認ですので、
まだまだ地味な画面が続きそうです。
現時点でどのようになっているか、お話をさせていただければと思います。

GWセールでご購入いただきました皆様ありがとうございます!

GWセールで拙作「潮吹きゴルフソリティア」をご購入いただきました方々、
本当にありがとうございます。
手に取っていただけて大変励みになっております。

現在は、ゴルフの派生ルールの「トライピークス」というルールのソリティアを、
目下開発中ですので、ご期待頂ければ幸いです。
とても分かりにくいですが、
現在、コンソール版で、ルールを実装して動作確認を完了したところです。

前作より演出面を強化して、お届けしたいと思っておりますので、
どうぞよろしくお願いいたします。

Unity の Debug.Log で、カードの状態を表示

Unity の機能の一つである、
Debug.Log メソッドを使用して、
現在のカードの状態がどうなっているか、
表示できるようにしておりました。

これは、前々回(https://ci-en.dlsite.com/creator/9335/article/629238)
で実装しておりました、
黒い画面の表示を、Unityのデバッグ表示画面に出してみた、
という状態です。

最低限のキー入力で、
Sを押したらシャッフル、Rを押したらリセット、
といったことがUnity上でもできているかの確認ができるようになっています。

ただちょっと気になっているのが、
コンソールの黒い画面では文字が綺麗に並んでいるのに対して、
Unityのデバッグ画面では、文字の大きさが一致していないためなのか、
結構ガタガタになってしまっていて、
ちょっと見辛いなぁ…と思っています。

ただ動作自体は確認できておりますので、
これが見辛くて開発に支障が出るようでしたら、
ファイルに出力して、
テキストエディタでリアルタイムで確認できるようにしようかと思っています。

今月は、黒い画面上のコンソール環境とUnityという、
2つの異なる環境で、
プログラムの変更をどうやって最低限に抑えるかを工夫しておりました。
具体的にどういうことをしていたか、
少しお話をさせていただきます。

異なる動作環境での分岐処理を減らしたい

C#のコンソール画面に何かを表示するときは、

Console.WriteLine("ABC");

のように、Console.WriteLine() というメソッドを使うのが一般的です。

一方、Unityのコンソール画面に何かを表示するときは、

Debug.Log("ABC");

のように、Debug.Log() というメソッドを使うことが多いです。

このとき、手っ取り早く実装しようとすると、

if (コンソールだったら)
{
    Console.WriteLine("ABC");
}
else if (Unityだったら)
{
    Debug.Log("ABC");
}

このように、動作環境に合わせた条件文を書くことになります。

もちろんこれでも動くので良いと言えば良いのですが、
他にも環境によって動作を変える場合、
そのたびにif文やswitch文による分岐が増えてしまうことになります。

また、Unityの環境下では使わないConsole.WriteLine メソッドが、
Unityの環境に残ってしまうという、
あまり望ましくない状態になってしまいます。

こういう場合にわたしが良く用いる対処方法について、
フォローしていただいている方限定で、
少し掘り下げてお話させていただこうと思います。
ご興味がありましたら、お付き合いいただければ幸いです。

フォロワー以上限定無料

少し技術的な話題をご提供いたします。 料金はかかりませんので、ご興味があればぜひご参加ください。

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索