Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
adelgrazy
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 2
#1

Работа с bitmap и Graphics, нарисовать фигуры и движущиеся части для мини-игры

14.03.2016, 16:24. Просмотров 457. Ответов 2
Метки нет (Все метки)

Суть игры: на нижней части поля квадратик(2х2), сверху идут полосы, с дырой под квадрат, нужно проходить в эти "проемы". На форуме нашел пример "тетриса", но не особо шарю в рисовании, так что оттуда смог выудить только как нарисать поле.
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
 Bitmap POLE = new Bitmap(212, 422);
        Graphics c;
        Brush[] COLR = { Brushes.Aqua, Brushes.Orange, Brushes.Blue, Brushes.Red, Brushes.Green, Brushes.Azure, Brushes.Violet, Brushes.Tomato, Brushes.SteelBlue, Brushes.PapayaWhip };//цветы фигур
        Bitmap[] Cirpich;//кубики, из которых строится фигура
        private void Form2_Load(object sender, EventArgs e)
        {
            c = Graphics.FromImage(POLE);
            c.FillRectangle(new SolidBrush(Color.FromArgb(0, 45, 45)), 0, 0, 214, 424);//рисуем поле игры
            //рисуем сетку
            for (int x = 0; x < 11; x++) { c.DrawLine(new Pen(Color.FromArgb(0, 70, 70)), x * 21 + 1, 1, x * 21, 423); } //чертим горизантальные линии
            for (int x = 0; x < 21; x++) { c.DrawLine(new Pen(Color.FromArgb(0, 70, 70)), 1, x * 21 + 1, 213, x * 21); } //чертим вертикальные линии
            ////////////
            /*Cirpich = new Bitmap[COLR.Length];
            for (int i = 0; i < COLR.Length; i++)
            {
                Cirpich[i] = new Bitmap(21, 21);
                c = Graphics.FromImage(Cirpich[i]);
                c.FillRectangle(COLR[i], 0, 0, 21, 21);
                c.DrawLine(new Pen(Color.FromArgb(70, Color.Black), 2), new Point(1, 20), new Point(20, 20));
                c.DrawLine(new Pen(Color.FromArgb(70, Color.Black), 2), new Point(20, 20), new Point(20, 1));
            }*/
        }
 
        private void Form2_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage(POLE, 0, 0);
 
            
        }
Обязательное условие: нужен класс фигур. Из идей: создать класс этих самых линий с проёмами во всех возможных местах(поле условно по горизонтале разбито на 10 кубиков, т.е. вариантов 9), и с промежутком, рандомные фигуры, пускать сверху вниз. В принципе вопрос пока в следующем: что должно быть в классе, как реализовать, и как нарисовать квадрат внизу, который должен двигаться.

Добавлено через 17 часов 31 минуту
Тема актуальна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2016, 16:24
Ответы с готовыми решениями:

Нарисовать прошлый Bitmap на новом так, чтобы небыл растянут рисунок, если новый Bitmap больше размером
Короче пытался сделать такое дело: Рисую фигуры на форме, когда отпускаю левую...

Как определить относится ли объект Graphics к данному Bitmap
Привет все! Например есть вот такой код: void Main() { Bitmap b1 = new...

Как через равные промежутки времени нарисовать одинаковые движущиеся объекты?
Здравствуйте. Нужно, чтобы через определённый промежуток времени появлялись...

Графика: в заданной части графического экрана нарисовать вложенные фигуры
В заданной части графического экрана нарисовать фигуру 1 , в середине фигуры 1...

Мини загрузчик для игры на С++
Здравствуйте. Я начал писать лаунчер для игры со следующими возможностями на...

2
Рядовой
198 / 196 / 124
Регистрация: 17.05.2015
Сообщений: 754
Завершенные тесты: 1
14.03.2016, 22:40 #2
так? После работы лень продумывать, надо добавлять адекватные прходы между стенами, иногда стены на одной высоте генерируются и прочее, но направление такое..
Кликните здесь для просмотра всего текста
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
namespace WindowsFormsApplication1
{
//на форме таймер и 2 кнопки
    public partial class Form1 : Form
    {
        Random d = new Random();
        List<Wall> allWalls = new List<Wall>();
        public Form1()
        {
            InitializeComponent();
            this.DoubleBuffered = true;
            timer1.Enabled = true;
            timer1.Interval = 1000;
            Block.X = 0;
            for (int i = 1; i < 4; i++)
                allWalls.Add(new Wall { passageX = d.Next(0, 4) * 20, Y = d.Next(0, 4) * i * 20 });
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.FillRectangle(Brushes.White, 0, 0, 100, 500);
            e.Graphics.DrawLine(Pens.Black, 100, 0, 100, 500);
            allWalls.ForEach(i => i.Paint(e.Graphics));
            Block.Paint(e.Graphics);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Block.X -= 20;
            Invalidate();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Block.X += 20;
            Invalidate();
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            allWalls.ForEach(i => i.Y += 20);
            foreach (Wall i in allWalls)
                if (i.passageX != Block.X && i.Y == 200) 
                    EndGame();
            Invalidate();
        }
        public void EndGame()
        {
            timer1.Enabled = false;
            MessageBox.Show("Game Over");
        }
    }
    public static class Block
    {
        private static int _x;
        public static int X { get { return _x; } set { _x = value; if (_x > 80)_x = 0; if (_x < 0)_x = 80; } }
        public static void Paint(Graphics e)
        {
            e.FillRectangle(Brushes.Green, X, 200, 20, 20);
        }
    }
    public class Wall
    {
        public int Y { get; set; }
        public int passageX { get; set; }
        public void Paint(Graphics e)
        {
            e.FillRectangle(Brushes.Gray, 0, Y, 100, 20);
            e.FillRectangle(Brushes.White, passageX, Y, 20, 20);
        }
 
    }
}
1
Миниатюры
Работа с bitmap и Graphics, нарисовать фигуры и движущиеся части для мини-игры  
adelgrazy
0 / 0 / 0
Регистрация: 11.02.2016
Сообщений: 2
15.03.2016, 19:48  [ТС] #3
да,общая идея такая, немного подкорректирую под свою нужды, и должно быть как надо. Спасибо)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2016, 19:48

Как написать бот для мини игры?
Всем привет! У меня такая ситуация, Я уезжаю на некоторое время из города, но...

Нарисовать движущиеся волны на море
Здравствуйте, помогите пожалуйста нарисовать движущиеся волны море. Спасибо...

Простенькие мини игры для stm32+несколько кнопок+Nokia LCD
Может есть у кого готовое, типа flappy bird чего-нить?...


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

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

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