Есть игра "Найди элементы на картинке" есть две разных картинки,где нужно искать элементы.
Получается что нужно как то сделать рейтинг,но у меня не получается
Суть такова: у меня не получается посчитать их время прохождения (у таймера обратный отсчет,т.е. с 3-х минут). И тут есть проблемы. Нужно как то посчитать за какое время они нашли все предметы и нужно запоминать каждую игру! (чтобы потом в дальнейшем выводить результат каждой игры)
Вот код всего процесса:
public Form3()
{
InitializeComponent();
objects = new List<MapObject>();
objects.Add(new MapObject()
{
Name = "Парусник",
X = 180,
Y = 34,
Width = 27,
Height = 37
});
objects.Add(new MapObject()
{
Name = "Пароход",
X = 304,
Y = 20,
Width = 49,
Height = 19
});
objects.Add(new MapObject()
{
Name = "Кактус",
X = 369,
Y = 127,
Width = 11,
Height = 20
});
objects.Add(new MapObject()
{
Name = "Лошадь",
X = 336,
Y = 80,
Width = 18,
Height = 18
});
objects.Add(new MapObject()
{
Name = "Дирижер",
X = 228,
Y = 156,
Width = 17,
Height = 19
});
objects.Add(new MapObject()
{
Name = "Мяч",
X = 213,
Y = 261,
Width = 20,
Height = 20
});
}
List<MapObject> objects;
private void Timer1_Tick(object sender, EventArgs e)
{
tk = --i;
TimeSpan span = TimeSpan.FromSeconds(tk);
string label = span.ToString(@"mm\:ss");
label1.Text = label.ToString();
if (i <= 0)
{
label9.Visible = true;
label1.Visible = false;
timer1.Stop();
pictureBox1.Visible = false;
pictureBox2.Visible = true;
}
}
int i;
int tk;
string c;
private void Button2_Click(object sender, EventArgs e)
{
button2.Visible = false;
pictureBox1.Visible = true;
i = 180;
c = "3:00";
label1.Text = c;
timer1.Interval = 1000;
timer1.Enabled = true;
timer1.Start();
}
private void PictureBox1_MouseClick(object sender, MouseEventArgs e)
{
int currentX = e.X;
int currentY = e.Y;
bool FindSome = false;
for (int i = 0; i < objects.Count; i++)
{
if (currentX > (objects[i].X - objects[i].Width / 2) & currentX < (objects[i].X + objects[i].Width / 2)
& currentY > (objects[i].Y - objects[i].Height / 2) & currentY < (objects[i].Y + objects[i].Height / 2))
{
MessageBox.Show("Вы нашли слово : " + objects[i].Name);
objects[i].IsClicked = true;
FindSome = true;
}
}
if (!FindSome) TimeDec();
if (IsAllClicked())
{
label8.Visible = true;
label1.Visible = false;
timer1.Stop();
pictureBox1.Visible = false;
pictureBox2.Visible = false;
}
}
private void TimeDec()
{
MessageBox.Show("Никуда не попали");
i -= 5;
}
private bool IsAllClicked()
{
bool AllObjectsClicked = true;
foreach (MapObject item in objects)
{
if (!item.IsClicked)
{
AllObjectsClicked = false; break;
}
}
return AllObjectsClicked;
}
Вот код из класса(mapobject):
class MapObject
{
public string Name;
public int X;
public int Y;
public int Width;
public int Height;
public bool IsClicked = false;
}
Ну вот в коде место, где игрок нашел все предметы.
if (IsAllClicked())
{
...
Сюда и будем добавлять логику сохранения рекорда. Эту логику я предлагаю вынести в отдельный метод, например, SaveRecord
:
if (IsAllClicked())
{
SaveRecord();
...
В этом методе будут все расчеты и сохранение.
Нужно как то посчитать за какое время они нашли все предметы
Это можно сделать на основе того сколько времени осталось (i
):
public void SaveRecord()
{
int timeInSeconds = 180 - i;
Пара моментов:
timeLeft
;180
;Timer
к сожалению не гарантирует точность отсчета. Пока он, наверное, Вам подойдет, но готовьтесь тому что замер времени с секундомером не будет сходится с таймером Вашей игры. Если в будущем понадобятся более точные измерения посмотрите в сторону Stopwatch
.и нужно запоминать каждую игру! (чтобы потом в дальнейшем выводить результат каждой игры)
Для этого я бы создал специальный класс для хранения одного рекорда:
public class Record
{
//пользователь, установивший рекорд
public string Username {get; set;}
//время в секундах
public int TimeInSeconds {get; set;}
}
Теперь можно хранить список рекордов и в методе SaveRecord
создать новый рекорд и добавить его в список:
private List<Record> records = new List<Record>();
public void SaveRecord()
{
var record = new Record();
record.TimeInSeconds = 180 - i;
records.Add(record);
}
Примерно такое начало. Для наглядности можете выводить сообщение о времени в MessageBox
. Далее осталось добавить остальные части условия:
Попробуйте выполнять эти пункты по одному. Если что-то не получится, то Вы сможете задать более точные вопросы. В вопросы обязательно включайте свою попытку решения, подробно описывайте ее, расскажите что именно пошло не так. Так Вы быстрее получите ответ.
З.Ы. Вопросы вида «вот мой код допишите в него штуку» очень плохо подходят для обучения, т.к. отвечающие не понимают с чем именно у Вас возникают сложности и не знают что нужно объяснять. В результате в качестве ответа Вы можете получить код, который до конца не понимаете, и ничему при этом не научитесь.
О том, как облегчить задачу себе и окружающим: Если не знаете как написать/исправить код, то лучше не пишите его сразу в большом проекте. Вместо этого создайте новый проект, который будет выполнять только проблемную часть, и сконцентрируйтесь на ней. Если все получится, то у Вас будет код, который можно вставить в Вашу игру. Если не получится, то получится короткий пример, который можно будет опубликовать здесь как вопрос.
Например:
Не знаете как посчитать время потраченное на игру? Напишите новый проект единственный смысл которого: посчитать время. В нем будет таймер, счетчик и кнопка, которая останавливает таймер.
Не знаете как вставить новый рекорд в список? Напишите проект, который только и делает, что добавляет один готовый рекорд в один готовый список.
Не знаете как спросить у пользователя имя? Напишите проект, который ничего не делает кроме как запрашивает имя пользователя.
Не знаете как показать список рекордов в форме? Напишите проект, который показывает готовый список в форме.
Не знаете как сохранять рекорды в файл? Напишите проект, который только и делает, что берет готовый список рекордов и записывает их в файл.
Так Вам легче будет разобраться в проблеме. Если в проекте 10 строк, то каждую из них можно разобрать досконально. Если в проекте нет лишнего кода, то меньше вероятность того что несколько разных ошибок «наложатся» друг на друга.
Если не разберетесь сами и захотите задать вопрос здесь, то с маленьким проектом это будет сделать гораздо легче. Не нужно будет рассказывать заново всю логику игры. Вопрос получится короче, будет лучше принят и получит больше ответов за более короткое время. Большинству отвечающих здесь не захотят дописывать за Вас игру, но при этом смогут быстро ответить на простой вопрос о стандартных классах.
Разумеется то, что эти проблемы маленькие по масштабу не означает что к ним нужно относится несерьезно. По каждому из этих вопросов нужно будет предварительно поискать информацию в интернете, попробовать несколько вариантов. При публикации вопроса обязательно нужно будет указать свою попытку.
В общем, разбивайте задачи на части и работайте с ними по одной.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Работаю с Excel на c#Задаю имена столбцов, вывожу данные
есть textbox в него вводится имя нужно сделать несколько условий :
Не могу понять в чем проблемаЧерез 25 минут, если ПО в бездействии выбрасывает следующую ошибку в методе get()
есть небольшой код в результате которого показывается messagebox,а как сделать чтобы какая то часть текста показывалась с новой строки?например...