Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
1

Мини-игра: поймать button

29.06.2012, 15:52. Показов 1898. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Вот решил сделать такую мини игру, идея не нова, конечно же: пользователь должен нажать на кнопку, она от него убегает с приращением d ( т.к. приращения dx,dy, и чтобы не вводить новую переменную - просто d); Но возникает 2 проблемы: во-первых 1мс слишком большой интервал опроса, за это время не трудно нажать клавишу. Если же забить в код самой кнопки - то тогда нажать вообще невозможно. Вопрос: как можно в этом случае поступить? Вот собственно сам код ниже.

Что собственно в нем происходит: загружаем координаты в структуру, чтобы постоянно не дергать форму и кнопку из-за констант, после этого смотрим: если кнопка находится на краю мы её кидаем по рандомным координатам, если же где-то в центре она, то смотрим, с какой стороны подведен курсор и тогда увеличиваем координату в направлении от курсора. И так пока не нажмем кнопку.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.Windows.Forms;
 
namespace CatchMe
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public static int d = 5;
        public struct Coords
        {
            public int formWidth;
            public int formHeight;
            public int Width;
            public int Height;
            public int MiddleX;
            public int MiddleY;
            public Coords(int formWidth, int formHeight, int Width, int Height)
            {
                this.formWidth = formWidth - 9 - d;
                this.formHeight = formHeight - 38 - d;
                this.Width = Width;
                this.Height = Height;
                MiddleX = Width / 2;
                MiddleY = Height / 2;
            }
        }
        System.Drawing.Point p = new System.Drawing.Point();
        Coords coords;
 
 
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("you win!");
        }
 
        private void button1_MouseMove(object sender, MouseEventArgs e)
        {
            if (button1.Left < d || button1.Right + d > coords.formWidth || button1.Top < d || button1.Bottom + d > coords.formHeight)
            {
                Random rd = new Random();
                button1.Left = rd.Next(0, coords.formWidth - coords.Width);
                button1.Top = rd.Next(0, coords.formHeight - coords.Height);
                return;
            }
            if (button1.Left > 0 && button1.Right < coords.formWidth)
                p.X = e.X < coords.MiddleX ? d : e.X == coords.MiddleX ? 0 : -d;
            if (button1.Top > 0 && button1.Bottom < coords.formHeight)
                p.Y = e.Y < coords.MiddleY ? d : e.Y == coords.MiddleY ? 0 : -d;
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (p.X != 0 || p.Y != 0)
            {
                button1.Left += p.X;
                button1.Top += p.Y;
                p.X = 0;
                p.Y = 0;
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Interval = 1;
            timer1.Enabled = true;
            coords = new Coords(Width, Height, button1.Width,button1.Height);
        }
    }
}
Добавлено через 2 часа 36 минут
Да, забыл осветить вторую проблему: очень моргает при перерисовке кнопка. Можно как-то двойную буферизацию включить или еще что, и если да, то как именно это сделать. Буду очень признателен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2012, 15:52
Ответы с готовыми решениями:

мини-игра C#
Требуется создать игру, основным смыслом которой является то, что в одной части экрана перемещаются...

Мини-игра: нажать 7 разных кнопок и не попасть на мину
нужно в windows form создать мини игру . 15 кнопок . нужно нажать 7 разных кнопок и не попасть на...

Мини-игра Танки на Win Form. Зависание проекта
Доброго времени суток. Есть вот такая мини-игрушка (ТАНКИ...

Мини-игра - иногда очки прибавляются сами по себе
Здравствуйте, у меня в игре иногда прибавляются очки просто так, помогите пожалуйста, как это...

0
29.06.2012, 15:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2012, 15:52
Помогаю со студенческими работами здесь

Мини-игра "Поле чудес"
Доброго времени суток!Нужна помощь,создать мини-игру в которой будет вопрос и по буквам надо...

Создание button без заднего фона, и подключение коротких звуков при нажатии button
Т.к. я только начинающий юзер C#, хотел бы спросить, если кто сможет подсказать, как убрать задний...

При нажатии на Button каждый раз создается новый компонент (button/label/textbox)
Как реализовать?

Блокировка Button без Button.Enabled = false
Задача: Заблокировать кнопку с именем MyBtn без использования: MyBtn.Enabled = false; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru