Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
1

Программка для игры(проект)

30.05.2019, 20:34. Показов 1395. Ответов 17
Метки нет (Все метки)

Короче, делаю игру про машину, которая перемещается влево и вправо (кнопки A и D). Не могу додумать код для генерации препятствий. это такие блоки 10 на 10 в элементе Panel. Вобщем они должны рандомно генерироваться с интервалом в 5 секунд сверху поля(координаты от 1 до 500 по x), а после генерации должны ползти вниз по Y от 1 до 900 и исчезать. Я не понимаю как сделать так, чтобы они рандомно генерировались и оставались, генерировались новые. Жду поддержки. Кстати мне сказали это как-то можно решить через подпрограммы)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2019, 20:34
Ответы с готовыми решениями:

Нужна программка (Курсовой проект)
Привет всем! Нужна помощь в создании программы в билдер си ++. Для курсовой. Тема в принципе мне...

Набор людей в проект для создание игры)
Команда разработчиков набирает в команду: 1. 3D моделеров; 2. Аниматоров 3D моделей; 3....

Набор людей в проект для создание игры)
3d моделлер\художник ZBrush В общем любому будем рады и кодировщику) Пишите в личку, все...

Сборка ПК "для себя" - игры, игры, игры! Киев, бюджет 8300 грн с монитором.
Всем доброго времени суток. 1. Бюджет примерно 8300 грн (с монитором) 2. Украина, г. Киев,...

17
Фрилансер
798 / 305 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
31.05.2019, 07:10 2
Цитата Сообщение от AXLroad Посмотреть сообщение
как сделать так, чтобы они рандомно генерировались и оставались, генерировались новые
Создайте список этих препятствий. После генерации добавляйте в список, когда нужно удалить, удаляете из списка.
1
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
31.05.2019, 12:21  [ТС] 3
Так я и спрашиваю как делать такие списки
0
Фрилансер
798 / 305 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
31.05.2019, 12:24 4
Цитата Сообщение от AXLroad Посмотреть сообщение
как делать такие списки
List<T> Class
0
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
31.05.2019, 13:26  [ТС] 5
Цитата Сообщение от asn31337 Посмотреть сообщение
Создайте список этих препятствий. После генерации добавляйте в список, когда нужно удалить, удаляете из списка.
Так я и спрашиваю как создавать, хотя бы пример для понимания.
0
Фрилансер
798 / 305 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
31.05.2019, 13:28 6
Цитата Сообщение от AXLroad Посмотреть сообщение
хотя бы пример для понимания
Вы ссылку то открывали? Там и пример есть и описание класса.
1
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
31.05.2019, 14:00  [ТС] 7
Да но визуальные объекты и элементы типа string это разные вещи.
0
Фрилансер
798 / 305 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
31.05.2019, 14:11 8
Цитата Сообщение от AXLroad Посмотреть сообщение
но визуальные объекты и элементы типа string это разные вещи
И что? В чем отличие использования List<string> от List<SomeVisualGameObject>?

Добавлено через 1 минуту
Намекну... Разницы никакой нет! Список - он список и есть! Абсолютно неважно чем он наполнен!
1
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
31.05.2019, 14:23  [ТС] 9
private void timer2_Tick(object sender, EventArgs e)
{
Random rnd = new Random();
List<int> dinosaurs = new List<int>();
dinosaurs.Add(v = rnd.Next(1, 450));

panel2.Invalidate();


}
я на правильном пути? спасибо заранее вот только начал изучать LIST)
0
Фрилансер
798 / 305 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
31.05.2019, 14:33 10
Цитата Сообщение от AXLroad Посмотреть сообщение
я на правильном пути?
Ну, тут все зависит от того, что Вы хотите получить... Если Вы хотите получить список случайных чисел, то на правильном. Только уберите из метода объявление и инициализацию рандома. Вынесите его в класс.
1
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
31.05.2019, 14:44  [ТС] 11
Цитата Сообщение от asn31337 Посмотреть сообщение
Ну, тут все зависит от того, что Вы хотите получить... Если Вы хотите получить список случайных чисел, то на правильном. Только уберите из метода объявление и инициализацию рандома. Вынесите его в класс.
Нет я хочу, чтобы с интервалом генерировались рандомно объекты ввиде кубиков, чтобы потом их вниз двигать. Чтобы объект появился, а затем второй, не удаляя первый.
0
Фрилансер
798 / 305 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
31.05.2019, 15:03 12
Лучший ответ Сообщение было отмечено AXLroad как решение

Решение

Цитата Сообщение от AXLroad Посмотреть сообщение
я хочу, чтобы с интервалом генерировались рандомно объекты ввиде кубиков
Ну, тогда, очевидно и генерировать нужно не int а кубики (не знаю чем они там у Вас представлены).
Цитата Сообщение от AXLroad Посмотреть сообщение
Чтобы объект появился, а затем второй, не удаляя первый
Ну так для этого Вам список и нужен. Пока объект в списке он должен быть на экране. Как только удалили из списка, он и с экрана исчезает.

Добавлено через 13 минут
AXLroad, смотрите... Логика примерно такая. У Вас должен быть класс кубика (пусть будет Brick). У кубика должны быть как минимум определены следующие свойства - положение, длина, ширина. В игре, Вы создаете список элементов типа Brick. В методе OnPaint отрисовываете все элементы из списка. Т.е. как только элемент в список попал, он появляется на экране, как только из списка удалили, он и с экрана исчезает. Так же в игре должен быть таймер, который пересчитывает координаты объектов на экране и вызывает перерисовку экрана. Все просто!
1
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
31.05.2019, 15:41  [ТС] 13
Цитата Сообщение от asn31337 Посмотреть сообщение
Ну, тогда, очевидно и генерировать нужно не int а кубики (не знаю чем они там у Вас представлены).

Ну так для этого Вам список и нужен. Пока объект в списке он должен быть на экране. Как только удалили из списка, он и с экрана исчезает.

Добавлено через 13 минут
AXLroad, смотрите... Логика примерно такая. У Вас должен быть класс кубика (пусть будет Brick). У кубика должны быть как минимум определены следующие свойства - положение, длина, ширина. В игре, Вы создаете список элементов типа Brick. В методе OnPaint отрисовываете все элементы из списка. Т.е. как только элемент в список попал, он появляется на экране, как только из списка удалили, он и с экрана исчезает. Так же в игре должен быть таймер, который пересчитывает координаты объектов на экране и вызывает перерисовку экрана. Все просто!
public class Brick {
int v = 0;
Random rnd = new Random();
v = rnd.Next(1, 450);
}
Вот я создал класс, в самом Panel я нарисовал кубик а в классе указываю рандом для того чтобы созданный кубик появился в рандомном х. И тут в классе не работает рандом
0
Фрилансер
798 / 305 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
31.05.2019, 15:53 14
Цитата Сообщение от AXLroad Посмотреть сообщение
Вот я создал класс
Начнем с того, что такой код даже не скомпилируется... Кроме того, я в предыдущем посте указал свойства, которые обязательно должны присутствовать. У Вас же их нет...
Цитата Сообщение от AXLroad Посмотреть сообщение
в самом Panel я нарисовал кубик
Покажите код, как и что Вы там рисуете.
0
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
31.05.2019, 16:00  [ТС] 15
private void panel2_Paint(object sender, PaintEventArgs e)
{

Graphics g = e.Graphics;
Pen pen = new Pen(Color.Black, 2);
SolidBrush brush = new SolidBrush(Color.Black);
g.DrawRectangle(pen, 1+v, 70+z, 30, 30);
g.FillRectangle(brush, 1+v , 70+z, 30, 30);

}
0
Фрилансер
798 / 305 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
31.05.2019, 16:42 16
AXLroad, ну так и что Вы хотите, чтобы у Вас работало? Вы рисуете какой то абстрактный прямоугольник в вакууме, а не объект Brick...

Добавлено через 32 минуты
AXLroad, в общем, смотрите... Должно быть примерно так:
Кликните здесь для просмотра всего текста
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
    /// <summary>
    /// Класс кубика
    /// </summary>
    public class Brick
    {
        /// <summary>
        /// Ширина
        /// </summary>
        public int Width { get; set; }
        /// <summary>
        /// Высота
        /// </summary>
        public int Height { get; set; }
        /// <summary>
        /// Положение
        /// </summary>
        public Point Location { get; set; }
        /// <summary>
        /// Границы
        /// </summary>
        public Rectangle Bounds { get
            {
                return new Rectangle(Location, new Size(Width, Height));
            } }
        /// <summary>
        /// Метод рисования объекта
        /// </summary>
        public override void Draw(Graphics g)
        {
            g.DrawRectangle(Pens.Black, Bounds);
        }
    }
 
 
 
        // в коде игры:
        private static Random _rnd = new Random();
        private Timer _timer = new Timer(); // Не забываем настроить таймер и запустить его!!!
        private List<Brick> _bricks = new List<Brick>();
        
        /// <summary>
        /// Обработчик основного таймера игры
        /// </summary>
        private void _timer_Tick(object sender, EventArgs e)
        {
                var _brick = new Brick();
                _brick.Width = 10;
                _brick.Height = 10;
                _brick.Location = new Point(_rnd.Next(450), 0);
                _bricks.Add(_brick);
 
            //Перерисовываем игровое поле
            panel2.Invalidate();
        }
 
        private void panel2_Paint(object sender, PaintEventArgs e)
        {
                foreach(var b in _bricks)
                        b.Draw(e.Graphics);
        }
0
0 / 0 / 0
Регистрация: 24.01.2018
Сообщений: 12
31.05.2019, 17:51  [ТС] 17
А как тогда рисовать его в классе?

Добавлено через 8 минут
Аааа вижу, спасибо Вам огромное!

Добавлено через 51 минуту
А где описано значение по Y?
0
Фрилансер
798 / 305 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
01.06.2019, 09:18 18
Цитата Сообщение от AXLroad Посмотреть сообщение
А где описано значение по Y?
Свойство Location имеет тип Point, в котором описаны координаты по X и Y.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2019, 09:18

Дан проект игры
В проекте игры нужно 1)В 2 раза увеличить поле в ширину 2)Создать 5 уровей игры 3)Сделать...

Программка для скриншотов
Предлагаю вашему вниманию &quot;программку&quot; для скриншотов. Программой ее назвать трудно. Итак, что же...

Программка для 8051
Здравствуйте. Нужна помощь. я не совсем понимаю как организовать отнимание 1 и отображение. вот...

Программка для ATtiny45
Начал недавно изучать программирование микроконтроллеров, но еще есть несколько вопросов. Вот...

программка для дипломной
помогите доделать программу для дипломной, а я заплачу денежку))) вообщем мне нужно по открытии...

Проект 2D игры - стратегия. Нужны единомышленники
Нужны люди, кто хорошо владеет XNA , хочу совместно работать...у меня есть проект, могу скинуть все...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.