ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

C#

CSVファイルを読み込む

C#

.NETにはCSV形式のファイルを読み込むクラスTextFieldParserが用意されている。 using Microsoft.VisualBasic.FileIO; public void CSVFileRead(string filename) { TextFieldParser parser = new TextFieldParser(filename, System.Text.Encoding.GetEncodi…

#define

C#

Microsoft previous versions of technical documentation | Microsoft Docs C#での#defineはシンボルを定義するだけで、値を代入することはできない。 つまり次のようなコードはエラーとなる。 #define VK_RETURN 0x0D これは知らなかった。そういえば今ま…

テキストファイルの書き込み

C#

C#でテキストファイルの書き込みにはStreamWriterを使えば簡単。 using System.IO; StreamWriter sw = new StreamWriter(@"test.txt", true); sw.Write( "Test" ); sw.WriteLine( "Test" ); sw.Close(); StreamWriterの第2引数のboolがtrueの場合はすでにフ…

C#はあきらめるか

C#ではManaged DirectXを使うようだ。 Microsoft API and Reference Catalog ただちょっと気になったのはもうManaged DirectXは開発がストップしているという。 代わりにXNAが用意されている。しかしXNAだとメインマシンのノートで動作しない。 ということで…

foreachその3

C#

foreachでは配列やコレクションの要素について簡単に繰り返して情報の取得が出来る。しかし、値の変更に使用することは出来ない。 作成したオブジェクトの配列をforeachを使って値をセットするメソッドを呼んでいたのだが、結局値はセットされなかった。こう…

プロパティ

C#

プロパティは使う側からはフィールドのようにアクセスできるが、クラス側ではメソッドのように実装できるもの。 プロパティはgetアクセサとsetアクセサで実装する。getアクセサはプロパティが読み込まれたときに行う処理を書き、setアクセサはプロパティに値…

構造体のコンストラクタ

C#

構造体を作成して、引数無しのコンストラクタを作成しようとしたらエラーになってしまった。エラーでは引数無しのコンストラクタは作成できないとある。何故だろうとヘルプを見てみると、 各構造体には、オブジェクトをゼロに初期化する既定のコンストラクタ…

コントロールを配列で作る方法で参考にしたサイト。 C# と VB.NET の入門サイト さらに人から教えてもらったC#やVisual StudioなどのTIPSが載っているサイト。いろんなTIPSが数多く載っているので便利。 .NET Tips - DOBON.NET

List

C#

C#でリストを使うときは次の通り。 List<int> intlist = new List<int>(); intlist.Add(123); intlist.Add(456); intlist.Add(789); System.Console.WriteLine("{0}", intlist.Count); System.Console.WriteLine("{0}", intlist[1]); intlist.Insert(1, 999); intlist.</int></int>…

テキストファイルの読み込み

C#

C#でテキストファイルを読み込むにはStreamReaderを使う。 using System.IO; StreamReader fs; string str; fs = new StreamReader("test.txt"); while (fs.Peek() >= 0) { str = fs.ReadLine(); System.Console.WriteLine(str); } fs.Close(); 1行読み込む…

文字列での@記号

C#

C#で文字列を記述するときに、先頭に@記号をつけるとエスケープ文字と改行を無視することになる。 System.Console.WriteLine("this\nis\ntest.\n"); System.Console.WriteLine(@"this\nis\ntest.\n"); このコードを実行した結果は次の通り。 this is test. t…

Equals

C#

オブジェクトが等しいかどうかの判定に ValueType.Equals が使える。 Object a = new Object(); Object b = new Object(); bool result; result = a.Equals(b); result = ValueType.Equals(a, b); 参照型だった場合はどうなるかとか、nullだった場合とか、ま…

切捨て、切り上げ、丸め

C#

C#で切り捨てはFloor、切り上げはCeiling、丸めはRound。 double f = 123.456; System.Console.WriteLine(Math.Floor(f)); System.Console.WriteLine(Math.Ceiling(f)); System.Console.WriteLine(Math.Round(f)); の実行結果は、 123 124 123となる。

min,max

C#

二つの数値を比較して小さい方を返すMath.min、大きい方を返すMath.max。 float a,b; float max = Math.max(a,b); float min = Math.min(a,b); Cのときはminやmaxは無かったので、マクロを使ったり、三項演算子を使ったりしてコーディングしていた。 C#でも…

文字列の数値を数値の変数へ変換する

C#

文字列の数字を数値型の変数へと変換する方法。Cでいえばatoi()とかatof()。 数値へと変換するにはTryParseメソッドを使えばよい。たとえばInt32型に変換する場合は次の通り。 Int32 test; Int32.TryParse("123", out test); TryParseは正しく変換できた場合…

テキストの分割

C#

string型のテキストを区切り文字で分割するには、Splitメソッドを使う。たとえば、','で区切る場合は次の通り。 string text = "this,is,test"; string[] splittext = text.Split(','); int num = splittext.Length; foreach(string str in splittext) { Sys…

foreachその2

C#

ListBoxに追加した項目すべてをforeachで参照する方法。たとえば、昨日のPoint構造体を追加したような場合は、 foreach (Point item in listBox1.Items) { System.Console.WriteLine(item); } もちろん、この場合、ListBoxにはPoint構造体のオブジェクトのみ…

override

C#

派生クラスで基本クラスのメソッドをオーバーライドするときは、overrideキーワードを付ける必要がある。ここはC++と違う点。 class Parent { public virtual void Func() {} } class Child : Parent { public override void Func() {} } オーバーライドする…

可変長配列

C#

VisualC#で可変長配列には、System.Collections.ArrayList を使えばよい。 メソッドAddで末尾に要素を追加。要素の型はオブジェクト。プロパティCountで個数を取得。各要素へは[]で参照できる。 using System.Collections; void func() { ArrayList list = n…

シール型

C#

今までベクトル型を用意しないでコーディングしてきたのだけれども、ベクトル演算を使う処理が多くなってきたのでベクトル型を作ることにした。 で、待てよとYanesdkを見てみるとYanesdk.MathにVector2D、Vector3Dが用意されていた。ということでこちらを使…

既定値

C#

前回、Rectを作成して値を設定しなかったときは0が入るものとして使ってしまったけど、C#では初期値はどうなっているのか、ちゃんと知っておかないと。 C#ではnew演算子で既定のコンストラクタを呼び出したときにはintやfloatは0となる。 structの場合はすべ…

値型と参照型

C#

どうも値型や参照型についての知識が怪しいので復習。 値型はスタックに内容が割り当てられる。 参照型はヒープに割り当てられる。 intやfloatのデータ型は値型となる。 構造体も値型となる。 値型をメソッドに渡すときはコピーが発生するので、大きな構造体…

base

C#

なにかを継承したクラスのコンストラクタで継承元クラスのコンストラクタを呼び出したいときは、baseを使う。これはC++と違うところ。 class Parent { public Parent(int x) { } } class Child : Parent { public Child(int x) : base(0) { } } じゃあ、base…

PI,sin,cos

C#

C#でsinやcosを使いたいときには、クラスライブラリのSystem.Mathクラスを使う。 またPIの値もMathクラスにある。 using System; void func() { double x = Math.Cos(Math.PI / 2.0); double y = Math.Sin(Math.PI / 2.0); }

ソース分割

C#

今までのプロジェクトやテストプログラムでは、ほとんどForm1.csに直接コーディングしていったが、今回からなるべくソースは見やすいようにファイルを分けるようにしている。 今までやってきたCやC++の場合はヘッダファイルを作ってincludeしていた。このと…

as演算子

C#

C#にはキャストに似たデータ型を変換する演算子 as がある。互換性のある参照型の間での変換を行う。キャストと違うのは変換エラーが起きたときに、例外ではなくnullを返す。 class Test {} public Func() { object obj = new Test(); // as演算子で変換 Tes…

public, protected, private

C#

クラス内のメソッドやメンバ変数(C#ではフィールドというのかな)のアクセス制限を指定するものはC++と同じようにpublic, protected, privateを使う。C#の場合はC++の場合と少し違ってメソッドや変数の宣言に付けて使う。 class Test { private int iData; pu…

配列

C#

C#で配列を使う場合は次の通り。 int[] data; data = new int[10]; C#では配列は参照型なので、実体を作るためにnewで生成する必要がある。 2次元配列の場合は次の通り。 int[,] data; data = new int[10,10]; 宣言時に初期化するような場合は次の通り。 int…

foreach

C#

配列等の要素に対して繰り返す処理を行うような場合に使用するステートメント。 整数配列の内容を表示する例 int[] data = new int[] { 1, 3, 5, 7 }; foreach( int i in data ) { System.Console.WriteLine(i); }foreachでは値を参照するだけで、配列の内容…

WriteLine

C#

とりあえず手っ取り早くなんらかの文字列を出力したい場合には、System.Console.WriteLineを使えばよい。VisualStudioの出力ウィンドウに表示される。printfのように使えそうだ。 System.Console.WriteLine( "test" ); int i = 0; System.Console.WriteLine(…