Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 2

Как сравнить два bitmap?

12.01.2018, 10:23. Показов 1756. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый. Пишу игру "Сбей самолет", снаряды летают, самолеты тоже, а вот как сделать что при их столкновении происходил взрыв? Как понимаю их нужно сравнивать их координаты или когда спрайты заходят друг на друга. Заранее спасибо.
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp4
{
    public partial class FrmMain : Form
    {
        private System.Drawing.Bitmap sky, mine, rocket,fire;
        private Graphics g;
        private int dx;
        private Rectangle rct;
        private System.Random r;
        private List<Enemy> lstEnemies;
        private List<Rocket> lstRockets;
        private int siloPositionX = 0;
        private int siloPositionY = 550;
        private int siloPositionRocketY = 550;
        public FrmMain()
        {
            InitializeComponent();
            this.Text = "Сбей самолет";
            siloPositionX = this.ClientSize.Width / 2;
        }
 
        private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            switch (e.KeyChar)
            {
                case (char)Keys.A:
                case (char)97:
                    siloPositionX -= 5;
                    break;
                case (char)Keys.D:
                case (char)100:
                    siloPositionX += 5;
                    break;
                case (char)Keys.Space:
                    lstRockets.Add(new Rocket(rocket, siloPositionX +30, siloPositionRocketY +40, 15)); //ракета полет
                    break;
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Bitmap plane;
            Bitmap rocket;
            lstEnemies = new List<Enemy>();
            lstRockets = new List<Rocket>();
            try
            {   // небо:
                sky = new Bitmap(@"C:\Users\oki\Desktop\WindowsFormsApp4\sky.jpg");
                // самолет:
                plane = new Bitmap(@"C:\Users\oki\Desktop\WindowsFormsApp4\plane.png");
                // шахта
                mine = new Bitmap(@"C:\Users\oki\Desktop\WindowsFormsApp4\mine.png");
                //ракета
                rocket = new Bitmap(@"C:\Users\oki\Desktop\WindowsFormsApp4\rocket.png");
                //взрыв
                fire = new Bitmap(@"C:\Users\oki\Desktop\WindowsFormsApp4\fire.png");
            }
            catch (Exception exc)
            {
                MessageBox.Show("Ошибка загрузки битовых образов \n" + exc.ToString(), "Сбей самолет", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
                return;
            }
            // фоновый рисунок формы:
            BackgroundImage = new Bitmap(@"C:\Users\oki\Desktop\WindowsFormsApp4\sky.jpg");
            /* задаем размер формы, соответствующий фоновому рисунку: */
            this.ClientSize = new System.Drawing.Size(BackgroundImage.Width, BackgroundImage.Height);
            //Количество врагов
            lstEnemies.Add(new Enemy(plane, Direction.Right, this.ClientRectangle, 20, 10)); //враг 1
            lstEnemies.Add(new Enemy(plane, Direction.Left, this.ClientRectangle, 60, 10));  // враг 2
            lstEnemies.Add(new Enemy(plane, Direction.Right, this.ClientRectangle, 100, 10)); // враг 3
 
            // делаем границу окна фиксированной
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
            // блокируем кнопку "развернуть"
            this.MaximizeBox = false;
            /* g - графическая поверхность, на которой будем формировать рисунок */
            g = Graphics.FromImage(BackgroundImage);
            timer1.Interval = 20;
            timer1.Enabled = true;
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            // стираем изображение самолета путем заполнения всей области фоном: 
            g.DrawImage(sky, 0, 0);
            g.DrawImage(rocket, siloPositionX + 30, siloPositionRocketY);
            g.DrawImage(mine, siloPositionX, siloPositionY);
            g.DrawImage(fire, 400, 400);
            // Задаем скрытие самолета в облаках:
            for (int i = 0; i < lstEnemies.Count; i++)
            {
                lstEnemies[i].processFrame(g, this.ClientRectangle);
            }
            for (int i = 0; i < lstRockets.Count; i++)
            {
                lstRockets[i].processFrame(g);
            }
            // Рисуем прямоугоьную рамку
            Rectangle rct2 = new Rectangle(20, 20, sky.Width - 40, sky.Height - 40);
            g.DrawRectangle(Pens.Black, rct2.X, rct2.Y, rct2.Width - 1, rct2.Height - 1);
            // обновляем область
            this.Invalidate(rct2);
            }
        }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.01.2018, 10:23
Ответы с готовыми решениями:

Как объединить два bitmap'a?
у меня есть несколько bitmap размером например 100 на 100 в одном закрашен квадрат 0-&gt;10 по X и 0-&gt;10 по Y в другом 10-&gt;20...

Как сравнить два времени, введённых в текстовом виде?
Вводится первое время(название,час,минута, секунда отдельно в текстбоксы и заносится в dataGridView),затем вводится второе время по такому...

Есть два текста без пробелов. Как их сравнить?
Есть два текста без пробелов. Как их сравнить и написать процентное соотношение совпадений? Помогите, пожалуйста. В С++ написал бы, а в c#...

3
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
12.01.2018, 11:19
Цитата Сообщение от Genius59rus Посмотреть сообщение
Как понимаю их нужно сравнивать их координаты
Верно понимаете.
0
0 / 0 / 0
Регистрация: 06.04.2016
Сообщений: 2
12.01.2018, 11:33  [ТС]
А вот как это реализовать, не понятно)
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,450
12.01.2018, 12:09
Genius59rus, вам не понятно, как сравнить две пары чисел (координат)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2018, 12:09
Помогаю со студенческими работами здесь

Как создать bitmap из области (по координатам пикселей) другого bitmap
Здравствуйте. Подскажите пожалуйста как создать bitmap из области(по координатам пикселей) другого bitmap. Вообщем обрезать.

Как сравнить два объекта по типу, если не знаешь их тип?
Добрый день! Собственно есть mdiParent, создаются разные формы, разных типов. Нужно предотвратить повторное создание уже созданной...

Как сравнить два csv файла по определенной колонке?
Есть два файла var csv1 = File.ReadAllLines(&quot;1.csv&quot;); var csv2 = File.ReadAllLines(&quot;2.csv&quot;); Я сперва использовал стандартное...

Сравнить два Bitmap
Нужно сравнить между собой два bitmap, размер которых одинаковый. По-пиксельно слишком долго получается. For x:=0 to...

Как сравнить 2 bitmap
Как можно сравнить 2 изображения bmp? перебрал кучу примеров, кругом какая-то ерунда.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru