プログラミング初心者がC#で脱出ゲームを作ってみた その3【プログラム編】

2015/07/18

はじめに

どうも、koizumiです。

隠された暗号を探し部屋を脱出するゲームを制作しながら解説をします。

前回は描画処理やアイテムの機能をプログラムしました。

いかがだったでしょうか?

今回はデジタル暗証番号ドアロックをメインにプログラムします。

よろしくお願いします。

フォームのロード処理

今回はプログラムを作成する前に下準備をします。

暗証番号を入力しロックを解除するためには暗証番号があらかじめ用意されてなければなりません。

なので、ゲーム画面を読み込んだときに乱数で3桁の暗証番号を決めるようにします。

乱数を決める関数はVisual Studioに用意されているので、それを利用します。

[shell]
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int FtNr;
int SdNr;
int TdNr;
bool St;
bool Power;
bool door;
string uLock;
public void Form1_Load(object sender, EventArgs e)
{
St = true;
Power = false;
door = true;
FtNr = 0;
SdNr = 0;
TdNr = 0;
Random rnd = new Random();
int random1 = rnd.Next(1, 9);
int random2 = rnd.Next(1, 9);
int random3 = rnd.Next(1, 9);
uLock = random1.ToString() + random2.ToString() + random3.ToString();//暗証番号
label1.Padding = new Padding(87, 0, 86, 0);
pictureBox14.Visible = false;//メモ用紙
pictureBox15.Visible = false;//ドライバー
MessageBox.Show("閉じ込められたようだ");
}[/shell]

Padding(a,b,c,d)はaがラベル内左側の空白でbが上側、cが右側、dが下側です。

このPadding()は常に数字や文字を真ん中に表示するために使いました。

Next(a,b)はaが乱数の範囲の最小値で、bが最大値です。

Tostring()では変数をstring型に変換していると思って構いません。

暗証番号入力装置の表示

前回のアイテム判定ですべての穴をクリックしてそれぞれの判定がfalseになったときに、ドア上のピクチャボックスをオレンジ色に変えて、Powerの判定をtrueになるようにしました。

Powerの判定がtrueのとき、1から9までの数字が入ったピクチャボックスをクリックすると、別に用意してある暗証番号を入力するためのパネルを表示するプログラムを作成します。

 

[shell]public void pictureBox10_Click(object sender, EventArgs e)
{
if (Power)
{
if (St)
{
panel1.Visible = true;
St = false;
}
else
{
panel1.Visible = false;
St = true;
}
}
else
{
MessageBox.Show("電力が供給されていないようだ");
}
}[/shell]

ここでのpicturebox10というのが右側にある小さい装置で、panel1は左側の大きい装置のことです。小さい装置だと入力しづらいので、装置を拡大表示したと思ってください。

小さい装置をクリックすると大きい装置を表示します。大きい装置が表示されている間に再び小さい装置をクリックすると大きい装置を非表示します。

デジタル暗証番号ドアロック

パネル内の数字をクリックすると、クリックした順に3つの数字をラベルに出力して、フォームのロード処理で設定した変数と入力した3桁の数字を照合し、合っていればドアのロックを解除するプログラムを作成します。

ちなみにパネル内の数字はすべてピクチャボックスです。ここでは1のピクチャボックスを例にします。

ラベルは文字をラベル内に出力するオブジェクトと思って構いません。

 

[shell] public void pictureBox1_Click(object sender, EventArgs e)
{
if (FtNr == 0)
{
FtNr = 1;
label1.Padding = new Padding(89 – 16, 0, 89 – 15, 0);
label1.Text = FtNr.ToString();
}
else if (SdNr == 0)
{
SdNr = 1;
label1.Padding = new Padding(89 – 24, 0, 89 – 23, 0);
label1.Text = FtNr.ToString() + SdNr.ToString();
}
else if (TdNr == 0)
{
TdNr = 1;
label1.Padding = new Padding(89 – 32, 0, 89 – 31, 0);
label1.Text = FtNr.ToString() + SdNr.ToString() + TdNr.ToString();
if (label1.Text == uLock)
{
label1.Padding = new Padding(89 – 67, 0, 89 – 68, 0);
label1.ForeColor = Color.Blue;
label1.Text = "UNLOCK";
door = false;
}
else
{
label1.Text = "ERROR";
FtNr = 0;
SdNr = 0;
TdNr = 0;
label1.Padding = new Padding(89 – 58, 0, 89 – 58, 0);
}
}[/shell]

 

暗証番号があっている場合はUNLOCK、あっていない場合はERRORとそれぞれラベルに表示されるようにしました。

暗証番号を間違えた場合にのみ入力した3ケタの数字を0に初期化するようにしました。

ラベルオブジェクトはstring型なのでint型の数値を入れることはできません。

なので、int型の変数の後にTostring()をつけるとstring型になります。

 

終わりに

今回はデジタル暗証番号ドアロックをメインにプログラムしました。

暗証番号を入力する装置はどこか電卓に似ている気がします。

今回作ったゲームは制作時間が短かったので内容が薄いですが、完成したものを記事にアップロードする予定です。

さらに改良を加えてよりよいものを作れるといいなーと思っています。

次回は部屋の仕掛けなどをプログラムする予定です。

閲覧していただき、ありがとうございました。

 

投稿者情報

koizumi

プログラミング初心者のkoizumiです。最近はC#を勉強しています。
趣味はスノーボード、ゲーム、一人旅です。この記事では主に自分が作ったものを紹介していく予定です。

>> koizumi が執筆した他の記事を読む

法人向け人気レンタルサーバー
法人向け人気専用サーバー
個人向け人気レンタルサーバー