【C++】const の扱いが複雑すぎる その2- 言語仕様で決まっていない運用面の問題について

C++ の const の基本的な使い方は以下の記事にまとめています。

今回は言語仕様で明確に決まっていないところ(運用面の問題)について説明します。

“【C++】const の扱いが複雑すぎる その2- 言語仕様で決まっていない運用面の問題について” の続きを読む

【コーディング】作って後悔したクラスー巨大なマネージャークラス

class なんかすごいマネージャー
{
 クラス A を生成
 クラス B を生成
 クラス C を…
 …以下、延々と続く

 クラス A を生成する前の準備
 クラス B を生成する前の準備
 クラス C を…
 …以下、延々と続く

 クラス B の状態を変える
 クラス D の状態を変える
 …以下、延々と続く

 クラス B の状態を返す
 クラス C の…
 …以下、延々と続く

 クラス A のコールバック先
 クラス B の…
 …以下、延々と続く
}

省略しているが、扱うクラスは10個以上。
メソッドの実装コードを含めると1000行を超える

“【コーディング】作って後悔したクラスー巨大なマネージャークラス” の続きを読む

【C#】GetEnumerator() の使い方まとめ

動作環境
.Net 6.0
Visual Studio 2022

IEnumerator<T> GetEnumerator()

この特殊なメソッドの使い方を調べたので、そのまとめ。
「GetEnumerator ってよく聞くけど、使い方はよく分かんない」という人向け。

大きく分けると以下の2つの目的で使用

  1. foreach でグルグル回すために使う
  2. コルーチンとして使う

“【C#】GetEnumerator() の使い方まとめ” の続きを読む

【Fallout4 CreationKit】Mod Organizer v2.x で起動する方法

インストール方法

Fallout 4 の Creation Kit は Steam からダウンロードするようになりました。
Fallout 4 があるフォルダにインストールしないと起動しません。

Mo2への登録方法

Mo2 から起動する場合、以下の手順で登録を行います。


歯車のアイコンを押す
※マウスオーバーすると「Mod Organizer を経由して起動できる実行可能ファイルを構成する」を表示されます。


以下のように入力
タイトル Creation Kit
実行ファイル インストールした Creation Kit の実行ファイルを選択
開始フォルダ インストールした Creation Kit があるフォルダを選択
Steam AppIDの上書き…をチェックするとテキストボックスが表示されるので 1946160 を入力


追加、または、変更ボタンを押す

Mo2から起動する方法

Mo2 の「実行」ボタンの隣にあるプルダウンリストから Creation Kit を選択して、「実行」ボタンを押す

資料

Fallout4: Creation Kit の AppID が掲載されている Steam の公式ページ
https://steamdb.info/app/1946160/

【C++】Visual Studio Code で MinGW を使って C++ の boost をコンパイルする

・Visual Studio を無料で使える人数を超えてしまう
・エンタープライズ企業に当てはまる

などの理由で、会社や派遣先のクライアントが Visual Studio Professional のライセンスを用意してくれない場合に Visual Studio Code を使うことになります。
C# はわりと良い子なのですが、C++ のセットアップはすこぶる面倒です。
ググっても英語サイトや古い情報、不十分な情報の断片ばかりヒットするので、Cygwin や Linux 環境でコンパイルした経験がない人にはハードルが高いと思います。
個人利用とか、特にこだわりがないなら Visual Studio を使った方が断然良いです。

Visual Studio Code で C++ の boost が使えるようになるまで、2時間くらい格闘したので、セットアップ手順を書きます。

“【C++】Visual Studio Code で MinGW を使って C++ の boost をコンパイルする” の続きを読む

【.Net C#】Thread.Sleep と Task.Delay が遅い

ゲームを作るときに Unity を使ったりする場合は気にする必要がないのですが、そういったツールを使わない場合、FPS を固定させるために1フレーム未満で処理が完了したら残りの時間待つ…という処理が必要になります。

※本稿での FPS は、ファーストパーソンシューターの略ではなく、フレーム・パー・セカンド(毎秒のフレーム数)のことです。

そうしないと、フレームレートが一定にならないので FPS も一定になりません。
ゲームのスピードが毎フレームバラバラになり、カクカクした動きになります。

FPS 60 の場合、1フレームは 16.6666…ミリセカンド以内に処理する。
FPS 30 の場合、1フレームは 33.3333…ミリセカンド以内に処理する。

ゲームループ(float delta_time) {
 ゲームの色んな処理をする
 if (1フレーム未満で処理が終わってる) {
  余った時間待つ
 }
 次のフレームの処理へ
}

疑似コードで表現すると、上記のような処理になります。
本稿では、上記疑似コード中の「余った時間待つ」処理を .Net を使って実装する場合の注意点について説明します。

“【.Net C#】Thread.Sleep と Task.Delay が遅い” の続きを読む

【Python】3.x系で sys.stdin や input() でエラーが出るときの解決方法

Uninstall Python 2.x from your computer.
Pyton 2系をアンインストールする。

UnicodeDecodeError: ‘cp932’ codec can’t decode byte バイトコード in position 行番号: illegal multibyte sequence

3.7 系から 3.9 系に変えたら、UTF-8 で記載したテキストファイルの読み込みでエラーが出るようになった。
これは open(パス, ‘utf-8’, モード) とエンコードを指定することで出なくなる。

【C++/C#】Closure(クロージャ)って何?

C++ を使っているチームのソースコードを見てるとクロージャという言葉をちょいちょい目にするのですが、C# だと全く見ないですね。
厳密な定義はないっぽい(ぼんやりとした定義はある)ので、人によって認識がバラバラです。
なので、「関数オブジェクトのことっぽいけど、なんでクロージャって言うんだろう?関数オブジェクトとは違うの?」という疑問があったので調べてみました。

“【C++/C#】Closure(クロージャ)って何?” の続きを読む