ロクの備忘録

情報専門学生がプログラミングのメモ代わりに書くブログ

【ひあすた二次創作】進捗報告 #1

皆さんこんにちわ!!ロクです。

現在、ひあすたの二次創作ゲームを製作中で、その進捗報告をしようと思います。

毎週日曜に報告しようかなーって思ってます。

時間に余裕がある方は⬇の#0も読んでくれると嬉しいです*.(๓´͈ ˘ `͈๓).*

locu.hateblo.jp

進捗報告

まず前回#0のブログを投稿したのですが、そのブログから今日までどんなものが作れたかの画像を貼り付けます。


まぁこんな感じで、ほんとざっくり作りました。

設定画面もありますが、ボタンと選択がちょっとできるだけで、解像度の設定やキーボード設定等の設定項目はまだ組んでません。

とりあえず今は、外部設計をしようかなって思ってます。

 

で、キャラクター選択の真ん中にモザイクがかかってるとは思いますが、そこはひあすた皆の画像をキャラ選択のアイコンにしようかなって思ってるので、ベータ版を公開するまでお楽しみにという事で...

 

こんな感じに簡単に進捗報告ができたらいいと思っています。

あとは、技術的メモです。

 

あと、お願いなんですが素材の制作費用が足らず困っていす...

もしよろしければコーヒー一杯奢ってはもらえないでしょうか?

支援お願いします

技術的情報

技術的情報は、Godot3から4にバージョン変更になったことによるメソッド名変更で苦戦した部分やちょっとてこづったことを簡単に書いていく。

ボタンセレクト

タイトル画面や選択画面ではキーボード十字キーとWASDとマウスでのフォーカスに対応させようと思っているのですが、仮組みなので取り合えず、十字キーとWASDだけで操作できるようにしようと思い、コーディングしていたのですが、Godotを少しだけしか触ったことがなかったので、Unityみたいな自動で十字操作できるようにしてくれる機能が調べた感じなかったので、コーディングしたのですが、UIの表示非表示やスクリプトの無効化などUnityとは違ったので少し戸惑いました。

なので、忘れないためにも下に書いておきます。

<ノード表示・非表示>
get_node(path).visible = true | false

<スクリプト有効化‘・無効化>
get_node(path).process_mode = Node.PROCESS_MODE_DISABLED //無効化
get_node(path).process_mode = Node.PROCESS_MODE_INHERIT  //有効化

ボタン等の色変更

get_node(path).modulate = Color(0, 0, 0) //RGB

JSONの読み込みとプロパティの表示

JSON(プログラム同士で値を共有したりするためのフォーマット)で、ライバーを管理しようかなって思い、さくっとJSONを今必要なプロパティだけで書いてみました。
一部だけ載せておきます。

{
"name": "CharacterParamter",
"version": "dev-1.0.0",
"list": [
	{
		"id": 1,
		"name": "ライバー名",
	},
	・
	・
	・
	]
}

で、このJSONを読み込んで、名前を動的にライバー名を変更したいと思います。
なのですが、Godot3から4にバージョンを移行したことでメソッド名が変更されたらしいのですが、Godot4の書き方しかわからないので読み込み部分のコードを載せておきます。参考にして頂けると幸いです。File(Godot3) → FileAccess(Godot4)

Godot4
var file = FileAccess.open(charaParamJson, FileAccess.READ)
var result = JSON.parse_string(file.get_as_text())
file.close()

get_node(<Labelノードのパス>).text = result.list[<添え字>].name

つまづいた所はこのくらいですね。

今回の報告は以上とします。

最後まで読んでいただきありがとうございます。

【ひあすた二次創作】HearStarの二次創作ゲームを開発していくぞ#0

みなさんこんにちわ。
主のロクです。

2023/8/9から、HearStarの二次創作ゲームを開発し始めました。

開発理由は、少し長くなりますが温かい目で見ていただけると嬉しいです。

 

理由を話す前にHearStarの皆のアカウントを貼っておきます。

公式アカウント: 水戸ちゃん

twitter.com

癒しのライバーの皆

twitter.com

twitter.com

twitter.com

twitter.com

twitter.com

ライバーの皆を産んでくれたママ

twitter.com

開発理由

なぜ開発を始めたのかというと、次の理由があります。

  1. HearStarの事が大好きだから(主は箱推しです)
  2. HearStarの事をもっと布教したいから
  3. HearStarが大好きなので、創作活動をしたかったから
  4. Godotエンジンを使いたかったから

この4つが理由です。

まず、1の「HearStarの事が大好きだから(主は箱推しです)」理由についてですが、HearStarというVTuber事務所があるのですが、その事務所のライバーさん達がめっさ可愛く、まじで癒しなんです(語彙がなくなるほど)!!

 

2の「HearStarの事をもっと布教したいから」は、1と被るんですけど、HearStarが大好きだから皆に知ってもらいたくて、「ゲームを作ったら皆に布教できるんでは?」と思い作ることを決めました。(ゲームがやってもらえればの話)

 

3の「HearStarが大好きなので、創作活動をしたかったから」は、布教と被るかもだけど、HearStarの皆が大好きだから何か作ったり創作活動で応援できないかと思って、自分にできることといえばプログラミングぐらい....ということは、ゲームだ!!と思い、開発を始めました。(あっ、これ、2とほぼ一緒じゃね?w)

 

4の「Godotエンジンを使いたかったから」は、ただ単にUnityやUnrealじゃなくて2D特化してる、エンジンでゲーム作りたいな~と思っただけw
これに関しては、HearStarは関係ナッシング

 

こんな感じの理由で作ろうと思いました。

で、何のゲーム作るんだよ?って思うかもしれないけど、「HoloCure」パクろうかなって思ってます。w

具体的には、「HoloCure」って『Vampire Survivors』や『Magic Survival』を基にしてるらしいので、大手事務所の二次創作を真似してみようかな~と思ったわけです。

 

技術的内容は、今後どんどん投稿していこうと思っています。

投稿場所は、

locu.hateblo.jplocu-6.itch.io

この二つで投稿していこうと思うのでよろしくお願いします。

配布はitch.shでしたいと思います。完全無料です。

 

あと、お願いなんですが素材の制作費用が足らず困っていす...

もしよろしければコーヒー一杯奢ってはもらえないでしょうか?

支援お願いします

【yukicoder】 No.2371 最大の試練それは起床

こんにちわ!!ロクです。

今回は、時間の比べる方法を簡単にメモしておきます。

 

今回の問題はこちら

yukicoder.me

問題
バーチャルコンテスト「あさかつ」は毎日7時30分0秒から8時30分0秒まで開催されます。
hibit君が0時0分0秒に就寝して、その日のH時M分30秒に起床した場合、下記のどれに該当するか判定してください。
  • あさかつに間に合う、つまりその日のあさかつの開始より前に起床する
  • あさかつに遅刻する、つまりその日のあさかつの開催中に起床する
  • あさかつに間に合わない、つまりその日のあさかつの終了より後に起床する
制約
  • 入力はすべて整数
  • 0≤H≤23
  • 0≤M≤59
出力
間に合うならば Yes、遅刻するならば Late、間に合わないならば No を出力してください。

こういう問題は、時・分を秒数に変換すれば簡単になります。

 

あさかつが、7時30分0秒から始まるみたいなので、この時間を秒数に変換すると

7h × 360 + 30m × 60 = 27000s

このようになります。
あさかつの終わる時間も変換してみると

8h × 360 + 30m × 60 = 30600s

になるので、あさかつのじかんは、27000 <= i <= 30600ということになりますね。
この条件を使って、コードを書いてみるとこうなりました。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int h, m;
    cin >> h >> m;

    int startSec = 27000,
        endSec = 30600,
        nowSec = (h * 3600) + (m * 60) + 30;

    if(startSec > nowSec){
        cout << "Yes" << endl;
    } else if(nowSec <= endSec){
        cout << "Late" << endl;
    } else {
        cout << "No" << endl;
    }

}

この考え方はよく使う(僕の中で)と思うので、覚えておくと処理時間の短縮やメモリ使用量が減らせたりできるので、覚えておきましょう!!

【yukicoder】「はじめのn歩」数学的コーディング

yukicoder.me

自分なりに理解し、解説するので間違っている可能性がありますが間違いがありましたら、コメントしてくれると嬉しいです!!

 

それでは今回の問題です。

問題
1歩でぴったりaセンチメートル歩ける。
bセンチメートルの区間を歩くのに最小で何歩歩く?
なお、区間はオーバーしても良い。
制約
a b ともに正の整数。 ( 1 ≦ a, b ≦ 10^9 ) 
※n^aは、nのa乗と読みます。
問題文は理解した前提で書いていくのでご了承ください。
 
この問題、愚直に書いてもACになります。
下のコードを見てみてください。
#include <bits/stdc++.h>
using namespace std;int main() {     long long a, b;     cin >> a >> b;     int walk = 0;     while(b > 0){         b -= a;         walk++;     }     cout << walk << endl; }

このコード一見よさそうに見えますが、なんかwhileで回さなくても出来そうじゃないですか?
それに、1000000000(10^9)なんて入力されたら、時間がとてもかかりますよね。
その前にとりあえず、このコードを提出してみたら、

345ms

でした。
「なんだ。処理時間速いじゃん」って思った方もいるかもしれませんが、僕の中では遅いです。

Javaだったらこの時間くらいだな~とは思いますが、コーディング言語はC++ですから、遅く感じます。
なので改善できる点と言えば、whileのところをどうにかして繰り返さないで処理できないかと言う事です。

whileの部分なんだか、偶数と奇数で求められそうじゃないですか。
b % aが0だったら偶数。
例) 100 % 10 = 0
反対にb % a が1だったら奇数。
例) 5 % 2 = 2 余り 1

この性質使えばこの問題解けそうなので、とりあえずコーディングして出力してみましょう。

 

#include <bits/stdc++.h>
using namespace std;int main() { long long a, b; cin >> a >> b; if(b % a == 0){ cout << b / a << endl; } else { cout << (b / a) + 1 << endl; } }

このように書いてみました。
これで一回提出してみたら。

処理時間は3msで、ACが出ました!!

ザックリ解説をします。
今回の、テストケースは3つありました

入力

テストケース1) 2 5
テストケース2) 10 100
テストケース3) 123456789 987654321

出力

テストケース1) 3
テストケース2) 10
テストケース3) 9

 

今回の出力を見ると、テストケース1から順番に奇数、偶数、奇数となっています。

これはもしやと思い

テストケース1を「b / a」したところ答えが、「2.5」になりました。
テストケース2を「b / a」してみた答えが、「10」になり、出力結果と同じ答えになりました。

てことは、aとbどちらかが、奇数だったら答えは、「(b / a) + 1」になると言う事になります。

反対に、aとbどちらとも偶数だったら答えは、「b / a」になると言う事です。

 

なので今回のコードはbがaに割り切れたら、「b / a」の計算結果を出力。

割り切れなかったら、「( b / a ) + 1」が答えとなりました。

 

ここまで読んでいただきありがとうございます!!

【yukicoder】yukicoder始めました

AtCoder以外にも競プロやりたいなぁ~って思って探してたら、「yukicoder」という競プロ用の練習サイト?をみつけて面白そうと思い、始めてみました。

yukicoder.me

 

簡単な問題でも、愚直に書くより数学知識を使って書く方がスリムで美しいコードになるので、忘れたときに見返せるようにブログにメモとして考え方を残しておきます。

 

僕みたいに数学がわからないけどプログラミングをやっていきたいと思う方の参考になればいいと思います。

yukicoder.me

書き方解説ページ

locu.hateblo.jp

自己紹介

名前 ▷▶ ロク
性別 ▷▶ ♂︎
趣味 ▷▶ プログラミング(AtCoder etc..)
大好きな人? ▷▶ VOCALOID
主な投稿内容 ▷▼

  • AtCoder問題の解き方(僕が解くのむずかった問題)
  • 自作ソフトの配布&ソース解説
  • 技術的メモ

自己紹介ってこんくらいかな?
そんなに文章は長く書きませんので、わかりにくかったりしたら、コメントください