開発環境
- OS: Windows 10 Pro
- IDE(統合開発環境): Visual Studio Community 2017
Head First C# ―頭とからだで覚えるC#の基本 (Andrew Stellman (著)、Jennifer Greene (著)、佐藤 嘉一 (監修, 監修)、木下 哲也 (翻訳)、オライリージャパン)の9章(イベントとデリゲート - 見ていないときのコードの動作)、自分で考えてみよう(p. 408)を取り組んでみる。
コード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp24
{
public partial class Form1 : Form
{
Mole mole;
Random random = new Random();
public Form1()
{
InitializeComponent();
mole = new Mole(random, new Mole.PopUp(MoleCallBack));
timer1.Interval = random.Next(500, 1000);
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
ToggleMole();
}
private void ToggleMole()
{
if (mole.Hidden == true)
{
mole.Show();
}
else
{
mole.HideAgain();
}
timer1.Interval = random.Next(500, 1000);
timer1.Start();
}
private void MoleCallBack(int MoleNumber, bool show)
{
if (MoleNumber < 0)
{
timer1.Stop();
return;
}
Button button;
switch (MoleNumber)
{
case 0:button = button1; break;
case 1: button = button2; break;
case 2: button = button3; break;
case 3: button = button4; break;
default:
button = button5;
break;
}
if (show == true)
{
button.Text = "ここだ!";
button.BackColor = Color.Red;
}
else
{
button.Text = "";
button.BackColor = SystemColors.Control;
}
timer1.Interval = random.Next(500, 1000);
timer1.Start();
}
private void button1_Click(object sender, EventArgs e)
{
mole.Smacked(0);
}
private void button2_Click(object sender, EventArgs e)
{
mole.Smacked(1);
}
private void button3_Click(object sender, EventArgs e)
{
mole.Smacked(2);
}
private void button4_Click(object sender, EventArgs e)
{
mole.Smacked(3);
}
private void button5_Click(object sender, EventArgs e)
{
mole.Smacked(4);
}
}
public class Mole
{
public delegate void PopUp(int hole, bool show);
private PopUp popUpCallback;
private bool hidden;
private int timesHit = 0;
private int timesShown = 0;
private int hole = 0;
Random random;
public Mole(Random random, PopUp popUpCallback)
{
if (popUpCallback == null)
{
throw new ArgumentException("popUpCallBackはnullになることはできません");
}
this.random = random;
this.popUpCallback = popUpCallback;
hidden = true;
}
public bool Hidden { get { return hidden; } }
public void Show()
{
timesShown++;
hidden = false;
hole = random.Next(5);
popUpCallback(hole, true);
}
public void HideAgain()
{
hidden = true;
popUpCallback(hole, false);
CheckForGameOver();
}
public void Smacked(int holeSmacked)
{
if (holeSmacked == hole)
{
timesHit++;
hidden = true;
CheckForGameOver();
popUpCallback(hole, false);
}
}
private void CheckForGameOver()
{
if (timesShown >= 10)
{
popUpCallback(-1, false);
MessageBox.Show("スコアー" + timesHit + "点", "ゲームオーバー");
Application.Exit();
}
}
}
}
0 コメント:
コメントを投稿