Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
1 / 1 / 1
Регистрация: 27.11.2015
Сообщений: 21
.NET 4.x

Игра типа Pong

13.05.2016, 22:44. Показов 8634. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Короче заступорился на этапе отбиве ракетками мячика.
Ввиду моего плохого умения оперировать графикой,я использовал неактивные текстбоксы в качестве объектов.
Проблема состоит в том,что сторона делиться на два и одна из них отбивает мяч полностью,а вторая работает правильно.Пока про траэкторию не думал,мяч просто двигаеться влево-вправо по прямой линии.
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
  private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            string K = e.KeyChar.ToString();
            if (K == "W")
            {
                player1.Top = player1.Top - 10;
            }
            if (K == "S")
            {
                player1.Top = player1.Top + 10;
            }
            if (K == "I")
            {
                player2.Top = player2.Top - 10;
            }
            if (K == "K")
            {
                player2.Top = player2.Top + 10;
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
       
 
        private void dot_TextChanged(object sender, EventArgs e)
        {
            
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
                int score11 = 0;
                dot.Left = dot.Left - 10;
                if (dot.Left == 0)
                {
                   score11 = score11 + 1;
                   score1.Text = score11.ToString();
                }
                if ((dot.Left <= 20) && (dot.Top >= player1.Top))
                {
                    timer1.Enabled = false; ;
                }
        }
        private void dott_Tick(object sender, EventArgs e)
        {
            int score12 = 0;
            if (dot.Left == 0)
            {
                score12 = score12 + 1;
                score2.Text = score12.ToString();
            }
            if (timer1.Enabled == false)
            {
                dot.Left = dot.Left + 10;
                if ((dot.Left >= 465) && (dot.Top >= player2.Top))
                {
                    timer1.Enabled = true;
                    dott.Enabled = false;
                }
 
            }
 
        }
Я специально не добавил "||",так как при проверке оно использует именно первое написанное,а при "&&" не работает правильно.
Помогите определить границы текстбокса так,чтобы весь текстбокс отбивал мяч,а не один верх и конец.
Скрин с расстановкой:


Добавлено через 29 минут
о! починил
Как лучше сделать траэкторию движения шарика? Через if и random? Или можно как-то менее по-индусски?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2016, 22:44
Ответы с готовыми решениями:

Игра Ping-Pong - сохранение и загрузка!
Здравствуйте. Необходима помощь с сохранением игры и его загрузкой в любой момент игры. Каким образом это можно реализовать ? Я понял,...

Убрать притормаживание при нажатии на кнопку в игра Pong (SFML)
#include &lt; SFML/Graphics.hpp &gt; #include &lt;cmath&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; using namespace sf; int main() { ...

Игра Ping Pong в Windows Forms (Visual Studio 2010)
Приветствую всех кто решил помочь мне с игрой по С++, я должен сделать банальный пинг понг. :-| Суть в том, что макет я сделал как он...

9
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
13.05.2016, 23:11
Цитата Сообщение от masyanolchik Посмотреть сообщение
чтобы весь текстбокс отбивал мяч

Не по теме:

Никогда не думал что текстбокс такой многофункциональный:)



Цитата Сообщение от masyanolchik Посмотреть сообщение
Как лучше сделать траэкторию движения шарика? Через if и random? Или можно как-то менее по-индусски?
Через вектор скорости движения.

Добавлено через 18 минут
Цитата Сообщение от golubyatnikovtv Посмотреть сообщение
Через вектор скорости движения.
Нет, я не прав, играл лет 15 назад в понг, там вектор отражения рассчитывался в зависимости от точки соприкосновения мяча с ракеткой так, что по центру ракетки вектор отражения перпендикулярен ракетки, а чем дальше от центра, вектор отражения смещался в соответствующую сторону ракетки. Т.е. там рандомов не было, простая геометрия.
0
1 / 1 / 1
Регистрация: 27.11.2015
Сообщений: 21
14.05.2016, 17:04  [ТС]
Reflect() подойдет?

Добавлено через 1 час 6 минут
Reflect не удалось воспользоваться,нашёл формулу и вставил её в программу.
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
private void timer1_Tick(object sender, EventArgs e)
        {
 
            int score11 = 0;
            int score12 = 0;
            if (dot.Left == 500)
            {
                score11 = score11 + 1;
                score1.Text = score11.ToString();
            }
            if (dot.Left <= 0)
            {
                score12 = score12 + 1;
                score2.Text = score12.ToString();
            }
              
                if ((dot.Left <= 20) && (dot.Top <= player1.Top + 100) && (dot.Top >= player1.Top))
                {
                    double normalvetcx = player1.Left + 30 - player1.Left;
                    double normalvetcy = player1.Top;
                    double normalvetc = Math.Sqrt(normalvetcx*normalvetcx + normalvetcy*normalvetcy);
                    double dotvectx = dot.Left+30 - dot.Left;
                    double dotvecty = dot.Top - dot.Top-20;
                    double dotvect = Math.Sqrt(dotvectx * dotvectx + dotvecty * dotvecty);
                    double r;
                    r = dotvect - 2 * normalvetc * dotvect*normalvetc/normalvetc*normalvetc;
                    int rr = Convert.ToInt32(r);
                    dot.Left = rr;
                }
Ессесна,rr это просто вектор.А как из него обратно получить координаты?Оно теперь сразу мячь кидает за пределы экрана,причём меньше 0.Координаты точки теперь такие:19; 242.Координата ракетки:0; 200
Размер точки:20;20.Размер ракетки:20;100.

Добавлено через 16 минут
Сложно мне это понять,всё что я знаю из векторов по 9 классу (я еще не в 10-ом) не поможет мне решить.....
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
15.05.2016, 13:49
masyanolchik, так разбираться не удобно... Проект прикрепить возможно?

А также желательно описание поведения того, как должен выглядеть отскок мяча от ракетки.
0
1 / 1 / 1
Регистрация: 27.11.2015
Сообщений: 21
15.05.2016, 17:17  [ТС]
golubyatnikovtv,конечно можно.

Ну а как он должен себя вести? Попал в центр,значит по центру и отправился.Попал в верхний угол,от нижнего отскочил.Попал в нижний,от верхнего отскочил.
Вложения
Тип файла: rar Pong.rar (43.3 Кб, 63 просмотров)
1
1 / 1 / 1
Регистрация: 27.11.2015
Сообщений: 21
16.05.2016, 12:49  [ТС]
Попробовал сегодня сделать отражение симметричным.
Не получилось,да и решение мне не нравиться.За ним висят if'ы,а потом как оказалось еще и определения местонахождения точки.Короче подумаю сегодня как можно его с углом связать,а потом вернусь к векторам.

Добавлено через 1 минуту
А вообще как можно определить точку соприкосновения? Всмысле точку соприкосновения мячика с текстбоксом с точностью до координат.
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
21.05.2016, 18:53
Лучший ответ Сообщение было отмечено masyanolchik как решение

Решение

masyanolchik, посмотрите мою реализацию этой игры. Попробуйте в ней разобраться.

Принцип создания игр, который Вы увидите в коде, довольно распространенный. Архитектура игрового приложения подобна архитектуре предлагаемой графическим движком MonoGame (Xna).

Я определил минимальные составляющие игры так:
1) Представление игры - контрол, на котором происходит отрисовка
2) Игровой цикл (основанный на таймере)
3) Модель игры
4) Модели игровых компонентов: шар, ракетка, статистика, игровая область
5) Обработчики логики игры: обработчик перемещения, обработчик выхода шара за границу игрового поля, обработчик управления, обработчик отбивания шара ракеткой.

В коде имеются не подробные комментарии. Если у Вас возникнут вопросы пишите, постараюсь ответить.

На создание игры ушло 2.5 часа.

И для создания простеньких игр я бы все же рекомендовал использовать WPF, а не WinForms. В WPF игру можно сделать намного красивей. Но помните, ни та ни другая технологии не предназначены для создания игр!
Вложения
Тип файла: rar Pong.v2.0.rar (89.3 Кб, 125 просмотров)
1
1 / 1 / 1
Регистрация: 27.11.2015
Сообщений: 21
21.05.2016, 19:01  [ТС]
Честно,никогда до этого в дизайнере не изменял код.Буду изучать.
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
21.05.2016, 19:06
Цитата Сообщение от masyanolchik Посмотреть сообщение
Честно,никогда до этого в дизайнере не изменял код.Буду изучать.
И тоже, если честно, я не понял о чем Вы. Я в дизайнере тоже код никогда не изменял...
0
9944 / 2945 / 496
Регистрация: 05.10.2013
Сообщений: 7,999
Записей в блоге: 240
21.05.2016, 20:01
Лучше делать игры на технологии, которая предназначена для игр, например, на Unity

Пошаговая инструкция (всего 37 строк кода) Unity 2D Arkanoid Tutorial
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2016, 20:01
Помогаю со студенческими работами здесь

Си шарп типа игра
Игрок ипподрома выбирает одну из трех лошадей, которые участвует в состязание, если этот лошадь придет первым, тогда он достигает победы....

программа типа игра в слова
вот имеется программка, типа игра в слова: var a, b, name1, name2: string; begin writeln('типа словА'); writeln; ...

Игра в щелбаны (или типа того)
Не знаю, было ли такое на сайте, игра заключается в следующем: первый комментарий в этом треде получает от меня (и от других юзеров) плюс...

Класс типа игра в крестики-нолики
Создать класс типа игра в крестики-нолики. Поле класса - массив из (3х3). Ставить можно только на свободные. за ранее спасибо

Pong
здравствуйте. решил написать классический понг без наворотов, пока дошел до того, что при определенных значениях скорости шарика он...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru