TNP資料室 @ ウィキ
http://w.atwiki.jp/kokeiro/
TNP資料室 @ ウィキ
ja
2010-06-12T16:03:02+09:00
1276326182
-
ビット演算について
https://w.atwiki.jp/kokeiro/pages/89.html
*ビット演算について
補足資料です。
・&link_anchor(1){ビット演算について}
・&link_anchor(2){論理演算子について}
・&link_anchor(3){シフト演算子について}
・&link_anchor(4){typedefについて}
・&link_anchor(5){型変換について}
・&link_anchor(6){sizeof演算子について}
・&link_anchor(7){条件演算子について}
*&aname(1,option=nolink){ビット演算}
このページは、講義資料ではありません。講義では最低限覚えなければならないことを教えていますが、こちらで紹介する物は必ずしも覚えなくてもよい、しかし使えるとちょっと役に立つ機能を紹介します。&s(){マニア向け。}
''ビット演算''は、整数型変数の各ビットに対して、論理演算やシフト演算などをします。ビット演算ができるのは符号付整数型、符号なし整数型のオペランドに対してのみであり、浮動小数点型などのオペランドには使えません。
コンピュータで使われる記憶素子は2通りの値をとります。それをn個並べることで、2&sup(){n}通りの情報を表現することができます。この記憶素子1個分の情報量を''ビット''(bit)といいます。また、このビットをいくらかまとめた同次元の単位として''バイト''(byte)があります。ビットとバイトの間の関係は、実際には定義されていませんが、多くのコンピュータでは''1バイト=8ビット''として扱っています。このビットを使って数値を表現する方法として''2進数''があります。
C言語では、普通に数字列を書くと10進数として解釈されます。数字列の先頭に次の文字列を添えることで、次の基数で数値を表現することができます。
0b 2進数
0 8進数
0x 16進数
例えば、次のように使います。
#include <stdio.h>
int main(int argc, char *argv[]){
int b = 0b10, o = 010, d = 10, x = 0x10;
puts("\t%d\t%x");
printf("b\t%d\t%x\n", b, b);
2010-06-12T16:03:02+09:00
1276326182
-
コンパイラとか
https://w.atwiki.jp/kokeiro/pages/88.html
*コンパイルのために
C言語(C++)はコンパイラ言語です
コンパイルということをしないと、プログラムとして動いてくれません
よってC言語(C++)などを扱う場合には、コンパイルするための準備が必要です
*準備
コンパイルするためには、コンパイラというソフトウェアが必要です
ついでに、ソースとか書くのに便利な総合開発環境なんぞ入れてしまいましょう
とりあえず紹介する候補は3つ
&bold(){C言語の基本的なことだけやりたい、軽く触れるだけでいい ⇒⇒ &link_anchor(bcc){「bcc + C言語を始めよう!」}}
&bold(){快適な環境でやりたい 早くゲーム作りたい C++もやりたい ⇒⇒ &link_anchor(vc){「Visual C++」}}
&bold(){Linux等にもう慣れてる 家でも使いたい PCで色々やりたい ⇒⇒ &link_anchor(cyg){「Cygwin」}}
多分どれでもOKなはず
ちなみに導入方法とかが面倒な順は「 Cygwin > Visual c++ > C言語を始めよう!」(※個人の感想です あくまで参照として)
**&aname(bcc,option=nolink){bcc + C言語を始めよう!}
Cコンパイラ[[こちら>http://www.codegear.com/jp/downloads/free/cppbuilder]]からインストール可能です。
C言語を始めようは[[こちら>http://www.forest.impress.co.jp/lib/stdy/program/progeditor/cwohajimeyou.html]]からインストールできます。
Cコンパイラの導入の仕方まではTNP公式ページの[[こちら>http://tnp.ninja-web.net/c/c_compiler.html#builder]]を参照されたし。
CコンパイラとC言語を始めようを手に入れたら、C言語を始めようを起動し、
ビルド > Borland C++の設定 をクリックしてBCC32.EXEのパスのところにC:\borland\bcc55\bin\bcc32.exe と入力
2010-04-28T18:01:41+09:00
1272445301
-
Visual C++の警告抑止について
https://w.atwiki.jp/kokeiro/pages/87.html
*Visual C++の警告抑止について
・&link_anchor(1){警告抑止の対象}
・&link_anchor(2){警告抑止の方法}
*&aname(1,option=nolink){警告抑止の対象}
まず第一に、何でもかんでも警告抑止するのはやめましょう。本当にこの警告は抑止するべきなのかどうか見極めましょう。
多くの場合、VisualC++独自で定義している関数を使用しなさいという警告は抑止してかまいません。筆者は積極的に抑止しています。
警告の抑止の方法には多くのパターンがありますが、今回は警告を抑止する方法を2つ紹介します。
注意:筆者の開発環境はVisual C++ 2008 Express Editionです。
*&aname(2,option=nolink){警告抑止の方法}
つぎのソースをコンパイルしてみましょう。
#include<stdio.h>
int main(){
int Damare;
scanf("%d",&Damare);
return 0;
}
デフォルトの設定のままだと以下のような警告文が表示されます。
warning C4996: 'scanf': This function or variable may be unsafe.
Consider using scanf_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
scanf関数はセキュリティが万全な関数ではないので、scanf_s関数を使用するべきです。この警告を消したいなら_CRT_SECURE_NO_WARNINGSを定義しなさい。って感じの意味です。
scanf関数はもとより、多くの関数は適切に使用しないとバグを引き起こす原因となります。scanf関数は性質上、バグを引き起こしやすい関数です。そのため、VisualC++独自にセキュリティを強化したscanf_s関数の使用を薦めています。ちなみにscanf関数は適切に使用しないと変数のサイズを超えて値の入力を受け取ります。箱の大きさを無視しちゃうわけです。あふれちゃうわけです。他
2010-03-02T21:56:23+09:00
1267534583
-
DXライブラリについて
https://w.atwiki.jp/kokeiro/pages/86.html
*DXライブラリについて
この項目で学ぶこと
・&link_anchor(1){DXライブラリとは}
・&link_anchor(2){DXライブラリで出来ること}
・&link_anchor(3){DXライブラリの導入について}
・&link_anchor(4){ゲームプログラミングについて}
*&aname(1,option=nolink){DXライブラリとは}
Xライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。(本家サイト)より引用)
*&aname(2,option=nolink){DXライブラリで出来ること}
Windowsアプリケーションで画像や文字の表示、音楽の再生などをするための関数が使えるようになります。
*&aname(3,option=nolink){DXライブラリの導入について}
[[ここ>>http://homepage2.nifty.com/natupaji/DxLib/dxuse.html]]見てください。
*&aname(4,option=nolink){ゲームプログラミングについて}
[[こっち>DXライブラリ]]みてください。
2010-03-02T20:59:17+09:00
1267531157
-
ファイル操作について
https://w.atwiki.jp/kokeiro/pages/85.html
*ファイル操作について
この項目で学ぶこと
・&link_anchor(1){ファイル操作について}
・&link_anchor(2){ファイルを出力する}
・&link_anchor(3){ファイルを読み込む}
・&link_anchor(4){標準入出力ストリーム}
・&link_anchor(5){サンプルソース}
*&aname(1,option=nolink){ファイル操作について}
今回はテキストファイルの操作のみ紹介します。ファイル操作をするにはstdio.hに定義されているFILE構造体を用います。ファイル操作が出来るようになるとゲームのセーブデータなどを作ることが出来るようになります。
*&aname(2,option=nolink){ファイルを出力する}
まずはサンプルソースを見てください。
#include<stdio.h>
int main(){
FILE *fp; // ファイルポインタを宣言
fp = fopen("output.txt","w"); // ファイル名,オープンモード
fprintf(fp,"output.txtを出力します。\n"); // ファイルポインタ、出力する文字列。
fclose(fp); // ファイルを閉じる。閉じないと何かと危ない。
return 0;
}
ちなみにいちいちついてるfはfailの略です。説明は後で。
*&aname(3,option=nolink){ファイルを読み込む}
まずはサンプルソースを見てください
***先ほどのoutput.txtを読み込み、画面に出力する
#include<stdio.h>
int main(){
char Buf[256];
FILE *fp; // ファイルポインタを宣言
fp = fopen("output.txt","r"); // ファイル名,オープンモード
fscanf(fp,"%256s",Buf); // 文字列を変数に格納する
printf("%s\n",Buf); // 読み込んだ文字列を出力する
fclose(fp); // ファイルを閉じる。閉じないと何かと危ない。
return 0;
}
2010-06-16T11:48:57+09:00
1276656537
-
構造体の使い方について
https://w.atwiki.jp/kokeiro/pages/84.html
*構造体について
この項目で学ぶこと
・&link_anchor(1){構造体とは}
・&link_anchor(2){構造体のアクセスの仕方}
・&link_anchor(3){ポインタを使った構造体のアクセスの仕方}
・&link_anchor(4){Cの構造体の宣言について}
・&link_anchor(5){サンプルソース}
*&aname(1,option=nolink){構造体とは}
''構造体とは複数の変数をまとめたものです''。たとえば人のデータとして氏名、身長、体重が必要だったとします。構造体を用いるとこれらの変数をまとめることが出来ます。
*&aname(2,option=nolink){構造体の使い方}
''構造体は標準で定義されている構造体のほかに、自分で定義することが出来ます''。ここでは自分で定義し、使用する方法の一例を紹介します。C++からサポートされた記述の仕方になりますが、最近のコンパイラはほとんどC++に対応しているのでエラーは出ないと思います。
構造体の定義は関数の外に以下のように記述します。
struct 構造体タグ名{
データ型 変数名;
データ型 変数名;
...
};
''構造体内に定義された変数はメンバ変数といいます''。メンバ変数の型はばらばらのものでかまいません。今回の例では氏名はchar型、身長、体重はdouble型で用意します。用意された構造体は次のようにして宣言します。
構造体タグ名 構造体名
このように''普通の変数のように宣言することが出来ます''。''メンバ変数にアクセスするときは.(ドット)演算子を使用します''。使い方はサンプルソースを見てください。
***コケいろさんのデータ。もちろん数字は適当。
#include<stdio.h>
#include<string.h>
struct SPerson{ // StructPersonの略。筆者の略し方。
char Name[32];
double Height,Weight;
};
int main(){
SPerson Kokeiro;
strcpy(Kokeiro.Name,"コケいろ\0");
Kokeiro.Hei
2010-03-02T22:39:13+09:00
1267537153
-
関数の作り方について
https://w.atwiki.jp/kokeiro/pages/83.html
*関数の作り方について
この項目で学ぶこと
・&link_anchor(1){関数とは}
・&link_anchor(2){関数の定義の仕方}
・&link_anchor(3){プロトタイプ宣言について}
・&link_anchor(4){戻り値を利用する}
・&link_anchor(5){グローバル変数について}
・&link_anchor(6){参照渡しについて}
・&link_anchor(7){再帰呼び出しについて}
・&link_anchor(8){main関数について}
・&link_anchor(9){サンプルソース}
*&aname(1,option=nolink){関数とは}
いつだか触れたとおり、''関数とは複数の文、一連の処理の集まり''で、数学で扱う関数とはまったくの別物です。C言語には今まで使ってきたようなprintf関数やscanf関数などのあらかじめ用意している標準ライブラリ関数のほかに、プログラマが独自の関数を定義することが出来ます。多くの場合、関数は引数を変えることで動作を制御します。''引数とは処理の材料となる値のことで、今まで''( )''の中に記述してきた値のことです''。関数呼び出し時に渡す引数を特に''実引数''といいます。これまで使ってきたのが実引数です。
関数名(引数);
''引数がない関数も存在します''。今回はそのような関数も定義してみましょう。
今まで使用することがなかった関数の機能として、戻り値があります。''戻り値とは関数を実行した結果の値''のことをいいます。イメージするためにサンプルソースを見てみましょう。
***数学関数fabs,powを用いたサンプルソース
#include<stdio.h>
#include<math.h> // 数学関数を使用するときに必要
int main(){
double zettaiti,ruijou;
zettaiti = fabs(-123.4);
printf("-123.4の絶対値は「%f」です。\n",zettaiti);
ruijou = pow(2.,3.);
printf("2の3乗は「%f」です。\n",ruijou);
return 0;
}
fabs
2010-06-12T15:36:53+09:00
1276324613
-
配列の使い方について
https://w.atwiki.jp/kokeiro/pages/82.html
*配列の使い方について
この項目で学ぶこと
・&link_anchor(1){配列とは}
・&link_anchor(2){使い方}
・&link_anchor(3){ループと組み合わせて使用してみる}
・&link_anchor(4){アドレスとポインタについて}
・&link_anchor(5){多次元配列について}
*&aname(1,option=nolink){配列とは}
配列とは、複数の同じ方の変数を1つにまとめたものです。複数の変数を一列に並べたものと考えてもいいでしょう。
*&aname(2,option=nolink){使い方}
配列を使ってint型の変数「a」を10個用意したいときはこのように記述します。
int a[10];
この宣言により、''a[0],a[1],a[2]...a[8],a[9]という10個の変数が使えるようになりました''。''配列で用意された変数のことを要素といいます''。''カッコの中の数字を添え字(インデックス)といいます''。''添え字は0から始まるので、最後の添え字は「要素数-1」になります''。太字ばっかり。
要素は同じ型の普通の変数のように扱うことが出来ます。int型の配列を使って適当に計算して結果を出力してみましょう。また、配列の初期化の仕方も見ておきましょう。
***配列を使った計算
#include<stdio.h>
int main(){
int a[4]; // 配列を宣言
a[0] = 3; // 代入
a[1] = 4;
a[2] = a[0] + a[1]; // 和
a[3] = a[2] * 2; // 積
printf("a[0] = %d\n",a[0]); // 値を表示
printf("a[1] = %d\n",a[1]);
printf("a[2] = %d\n",a[2]);
printf("a[3] = %d\n",a[3]);
}
*&aname(3,option=nolink){ループと組み合わせて使用してみる}
''添え字には定数で指定する方法のほかに、整数型の変数を用いて指定することが出来ます''。そのため、ループを用いることで
2010-06-11T08:46:47+09:00
1276213607
-
いろいろ拡張する
https://w.atwiki.jp/kokeiro/pages/81.html
*いろいろ拡張する
後で一筆書きゲームを清書したものを挙げます。
なんかもういろいろ改善しまくります。というか、一筆書きという部分だけが一緒でソールファイルはほとんど別物にするつもりです。
2010-02-21T23:56:11+09:00
1266764171
-
次のステージに進めるようにする
https://w.atwiki.jp/kokeiro/pages/80.html
*次のステージに進めるようにする
今はステージ1しかありませんね。とりあえずステージを追加してみましょう。現在何面をプレイしているか記憶するグローバル変数PlayStageNumberを追加しましょう。ステージクリアしたらこの変数の値を増やし、次のステージのデータをロードします。
なんかもはや大改造です。どこを変更したのか分からなくなりましたっ!下の項目を読んで自分で改造してみてください。全3ステージ構成です。最後の最後で投げる!
-PlayStageNumberをグローバル変数として追加
-メインループが始まる前に1度だけPlayStageNumberを1で初期化する
-ステージをロードするとき、条件式がPlayStageNumberのswitch文でBord構造体配列に格納するステージを選ぶ
-全てのマスを通ったらクリア画面に移動する。PlayStageNumber==3のとき、全ステージクリア画面を表示。ZキーでPlayStageNumberを1にし、ClearFlagに0を入れてタイトルに戻る。全ステージクリアでなかったら、PlayStageNumberを1増やしてステージをロード、プレイヤーの位置を初期化してClearFlagに0を入れてゲームスタート。
-リタイア画面のとき、Zキーでステージをロードしなおしてプレイヤーの位置を初期化してゲームを再スタート
-ゲームプレイ中Zキーでクリアする機能を削除
これらの機能を追加しました。
ソースファイルをzipでまとめました。完成品なので参考にしたい方はどうぞ。勝手に改変なり何してもかまいません。ただし、このソースは簡単な構造ばかり選んで作っているので無駄が多いですし、見直しにくいです。暇なときに清書してもっとゲームらしくします。
[[一筆書き.zip>>http://ux.getuploader.com/kokeiro/download/3/%E4%B8%80%E7%AD%86%E6%9B%B8%E3%81%8D.zip]]
2010-02-21T23:51:57+09:00
1266763917