Relative Content

Author Archive for chen

C# exercises (8) Puzzle Game2

先週できたパズルゲームUIの改進 参考 http://www18.big.or.jp/~neon2/bunkatu/tips9.shtml 改進点: ピースを順番でセットするではなく、あらかじめランダムにセットして、マウス移動できるようにする ピースをあらかじめランダムにセット initialData の改造 PlayBox_Paint の改造 マウス移動できる 勝負判定 経過時間の表示

3.1.1 複合文

C の推奨されるスタイル C言語やJava言語は、中括弧 { } を使ってブロックを記述します。 中括弧だけでなく、ブロックの範囲を字下げ(インデント)して記述します。 ただ、中括弧をどの位置に記述するかによって、コーディング・スタイルの宗教論争が起きています。 主に中括弧の位置の違いなのですが、なぜか字下げスタイルと呼ばれています。 // 中括弧の開始を、文末に記述するスタイルを「K&R スタイル」といいます。 void FuncA() {   if ( … ) {   } } // 中括弧の開始を、文のない行に記述するスタイルを「BSD スタイル」といいます。 void FuncA() {   if ( … )   {   } } // 関数の開始も、文末に記述するスタイルを「Java スタイル」といいます。 void FuncA() {   if ( … ) {   } }   複合文(ブロック) 文の並びを{ }で囲んだものを「複合文」といいます。ブロックとも言います。 複合文は複数の「宣言」と「文」を扱うことができます。 関数の定義に使うブロック { […]

11.2 ポインタによる文字列の操作

ポインタのまとめ アドレス ポインタと使用手順 ポインタ配列 過去のページを参照 演習 ポインタを使ったプログラムをグループで作成する。 7-3-4-3(P245) 大きさ10の整数型配列を用意し、下図のように初期設定しなさい。 この配列を順に調べ、奇数の値のみ、別の大きさ10の整数型配列に代入しなさい。 また、配列の中身と、何個格納したかを画面表示しなさい。 実行結果 15 45 9 71 37 格納個数 = 5 ヒント: 大きさ10の整数型配列を用意し、初期設定する。 別の大きさ10の整数型配列を用意。 この配列を順に調べ、奇数の値のみ、別の大きさ10の整数型配列に代入。 配列の中身と、何個格納したかを画面表示。 #include <stdio.h> int main( void ) { int data1[10] = { 10, 15, 22, 45, 9, 66, 71, 4, 37, 82 }; int data2[10], i, cnt; int *p1, *p2; cnt […]

C# exercises (7) Puzzle Game

今回作るのは、イメージを読み込んで利用するパズルゲームです。イメージファイルを読み込むとそれを 9 分割し、ランダムに混ぜます。 プレビューのイメージをフォーム上クリックして配置、すべて正しい場所に配置できればクリアです。   フォーム作成 サイズ:500 x 400 背景色:適当 PictureBox配置 (Name) : PlayBox Size :        300 x 300 BackColor :  white プレビュー用PictureBox配置 (Name) : Preview Size :        100 x 100 BackColor :  white     メニュー作成 MenuStrip をフォームにドロップ、下記のようにメニュー追加 File Load Image…     ダイアログ作成 openFileDialog をフォームにドロップ、フィルターを設定 Image Files (*.png, *.jpg) | *.png; *.jpg   […]

3.1 if文

制御構文 制御構文は、上から下へ流れるプログラムを途中で流れを分岐させたり、流れを繰り返したりすることができる構文を表します。 制御構文の主な種類としてif文、for文、while文、switch文の4パターンあります。 if文を使うと、分岐構造を作ることができます。 条件式の真偽 状態 真偽 値 条件が満たされた場合 true(真) 1(0以外) 条件が満たされなかった場合 false(偽) 0  関係演算子 2つの値の大小を比較します。 条件を満たせば「真(true)」、条件を満たさなければ「偽(false)」となります。 関係演算子の形式は以下の通りです。 演算子 例 意味 < a < b aはbよりも小さい > a > b aはbよりも大きい <= a <= b aはbよりも小さい(a == bの条件も含む) >= a >= b aはbよりも大きい(a == bの条件も含む) == a == b aとbは等しい != a != b aとbは等しくない […]

11.1 文字列とポインタ

ポインタの配列 複数の文字列をchar型の2次元配列で宣言しました。それを下記に示します。 char kw[3][7] = {“double”, “extern”, “switch”}; 同様なものをポインタを使って宣言すると、下記のようにポインタの配列となります。 const static char *wday[ ] = { “Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, NULL }; [ ]の中には8が入るのですが、コンパイラが数えてくれるので省略しています。 wday[0]は最初は”Sunday”の先頭アドレスを指します。 wday[1]は最初は”Monday”の先頭アドレスを指します。 wday[0]++とすると、 wday[0]は”Sunday”の1番目の要素を指します。 wday[1]++とすると、 wday[1]は”Monday の2番目の要素を指します。 以下、同様です。 配列の最後の要素は、’NULL’です。このようにしてあるのは、ポインタの配列が幾つあるか計るためです。 ‘NULL’を使わない場合は、ポインタの配列の数を保持している変数が必要になります。 #include <stdio.h> /* ポインタwday[ ]の指している文字列の配列は、 const:書き変え禁止で static:他のファイルから参照禁止 */ const static char *wday[ ] = { “Sunday”, “Monday”, “Tuesday”, […]

C# exercises (6) Graphics and Paint

Graphicsオブジェクト ウインドウの内部を表示したり描き直したりする必要が生ずると、Formに「Paint」というイベントが発生し、Paintプロパティに設定されているメソッドが呼び出されるようになっています。 このPaintイベント用のメソッドは、これまでのクリック時のイベント用メソッドなどとは微妙に違いがあります。これは以下のように定義されます。 private void メソッド名 (object sender, PaintEventArgs e) {     ……ここに描画処理を書く…… } 第1引数に、イベントが発生したオブジェクトが渡されるのは同じですが、第2引数に渡されるのはSystem.Windows.Formsパッケージの「PaintEventArgs」というクラスのインスタンスです。これは、描画のためのイベント情報を管理するもので、描画に必要なオブジェクトなどもこの中にまとめられているのです。 中でも重要なのが「Graphics」というオブジェクトです。これはSystem.Drawingパッケージに用意されているクラスで、これはGDI+(Graphics Device Interfaceというグラフィック描画のための機能の強化版)を利用して画面にさまざまな描画を行うための機能を提供します。 Paintイベント フォームのプロパティをイベントに切り替えて、Paintイベントを探し、メソッド名Form1Paintを入力 Paintイベントで渡されるPaintEventArgsインスタンスから以下のようにして取り出します。 Graphics 変数 = 《PaintEventArgs》.Graphics; Penと図形の描画 g.DrawLine(p,75,75,50,50);  // 直線 g.DrawEllipse(p,75,75,50,50);  // 円 private void Form1Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Pen p = new Pen(Color.Red); // Penインスタンスの作成 g.DrawEllipse(p,75,75,50,50); } Penと多角形を描く private void […]

10.3 ポインタと配列

ポインタの仕組み:ポインタで変数を指す ポインタとは ポインタ (pointer)とは、あるオブジェクトがなんらかの論理的位置情報でアクセスできるとき、それを参照するものである。有名な例としてはC/C++でのメモリアドレスを表すポインタが挙げられる。(ja.wikipedia.org) ポインタ=メモリアドレス 間接演算子 * と アドレス演算子 & ポインタの使用手順 宣言 アドレスの設定 使用 ポインタで変数 間接演算子を使って、ポインタが指すメモリの値を取得することを間接参照するといいます。 間接演算子を用いれば、アドレスを間接参照するだけではなく、ポインタが表すアドレスに値を間接代入することもできます。 #include <stdio.h> int main() { int iVar = 0; int *iPo = &iVar; // 宣言&設定 printf(“*iPo = %d\n” , *iPo); // 使用 *iPo = 100; // 間接代入 printf(“iVar = %d\n” , iVar); return 0; }   ポインタで配列 配列とポインタは全く別物 配列とは、多数の変数を順番つけでまとめて扱う方法であり、 ポインタとは、変数のショートカットを作る方法です。 […]

2.2 型

型と型変換 型 int — 整数 double — 浮動小数点数 平均点を求めるプログラム #include <stdio.h> int main(int argc, const char * argv[]) { // insert code here… int score[5]; // 5人の点数を入れる配列 int sum; // 合計点 // 各点数を入れる score[0] = 77; score[1] = 80; score[2] = 65; score[3] = 60; score[4] = 70; // 各点数を全て足して合計点を求める sum = score[0] + score[1] […]

10.1 アドレス

ポインタの仕組み:アドレスとは ポインタはC言語(および拡張言語)に特有の概念で、C言語を学び始めた初心者が必ずといっていいほどつまづく概念でもあります。ポインタがどうしても理解できないためにC言語に挫折してしまう方もいます。 アドレスの基本 コンピュータの記憶装置(メモリ)には、アドレスが付けられている。 変数のアドレス 変数のアドレスを取得するには変数名の前にアンパサンド “&”をつけます。 int a = 123; printf(“aのアドレス : %p\n”, &a); 配列のアドレス 配列の先頭をアドレスは、配列名だけで示します。要素のアドレスは&配列名[添字]で示します。 #include <stdio.h> int main() { char str[3] = “AB”; printf(“str[0]の要素のアドレス: %p\n”, &str[0]); printf(“strのアドレス: %p\n”, str); getch(); return 0; }     二次元配列のアドレス 二次元配列の先頭アドレスは、配列名だけで示します。要素のアドレスは&配列名[行][列]で示します。 値とアドレスの表現 変数、1次元配列、2次元配列の整理 値 (要素)アドレス 先頭アドレス 変数 変数名 &変数名 1次元配列 配列名[添字] &配列名[添字] 配列名 2次元配列 配列名[行][列] &配列名[行][列] […]