Освой C# играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Игра "Саймон говорит" (Simon says) позволяет развить память. Нужно повторять последовательность цветов.
Написана после просмотра видео.
На форме нужно разместить четыре кнопки и две текстовые метки.
Код для игры.
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
namespace SimonSays
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int onInList = 0;
List<int> pattern = new List<int>();
Random random = new Random();
bool playingBack = false;
private void button_red_Click(object sender, EventArgs e)
{
testCorrect(0);
}
private void button_blue_Click(object sender, EventArgs e)
{
testCorrect(1);
}
private void button_yellow_Click(object sender, EventArgs e)
{
testCorrect(2);
}
private void button_green_Click(object sender, EventArgs e)
{
testCorrect(3);
}
void testCorrect(int color)
{
if (playingBack)
{
return;
}
if (pattern[onInList] == color)
{
onInList++;
}
else
{
MessageBox.Show("You fail! Final score: " + pattern.Count.ToString());
pattern = new List<int>();
new Thread(playback).Start();
}
if (onInList >= pattern.Count)
{
pattern.Add(random.Next(0, 4));
onInList = 0;
new Thread(playback).Start();
}
label_score.Text = "Score: " + pattern.Count.ToString();
label_pattern.Text = "Item within pattern: " + onInList.ToString();
}
void playback()
{
playingBack = true;
foreach (int color in pattern)
{
switch (color)
{
case 0:
button_red.BackColor = Color.Red;
Thread.Sleep(200);
button_red.BackColor = Color.Transparent;
break;
case 1:
button_blue.BackColor = Color.Blue;
Thread.Sleep(200);
button_blue.BackColor = Color.Transparent;
break;
case 2:
button_yellow.BackColor = Color.Yellow;
Thread.Sleep(200);
button_yellow.BackColor = Color.Transparent;
break;
case 3:
button_green.BackColor = Color.Green;
Thread.Sleep(200);
button_green.BackColor = Color.Transparent;
break;
}
Thread.Sleep(200);
}
playingBack = false;
}
private void Form1_Load(object sender, EventArgs e)
{
pattern.Add(random.Next(0, 3));
new Thread(playback).Start();
}
}
}