Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 25

Игра "Филлер"

20.05.2015, 00:31. Показов 2256. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно сделать игру на курсовой проект.

Начал писать игру, но возникли вопросы:

1) Разметил поле цветными квадратами с помощью
C++
1
2
3
4
5
6
7
8
9
// zapolnenie cvetom zelenum
Canvas->Brush->Color=clGreen;
Canvas->FillRect(Rect(200,100,250,150)); 
Canvas->FillRect(Rect(250,100,300,150));
Canvas->FillRect(Rect(400,100,450,150));
 
// zapolnenie cvetom sinii
Canvas->Brush->Color=clBlue;
Canvas->FillRect(Rect(350,100,400,150));
Очень много однообразного кода, можно ли заполнить все рандомом?

2) После разметки поля, какой код нужно написать для того что бы применить какие-то действия к этому полю?

В программирование дуб-дубом, если кто-то скинет написанные примеры этой игры, буду благодарен.

П,С: заранее спасибо.

Добавлено через 1 час 10 минут
https://www.cyberforum.ru/grap... 93716.html

Я находил примеры других игр, но примера как сделать игру "филлер" не нашёл. Просто может кто-то делал.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.05.2015, 00:31
Ответы с готовыми решениями:

Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново?
Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново? unit1.cpp void __fastcall TForm1::N1Click(TObject...

Игра слов, игра Scrabble
Задание: Создать программу для решения задачи построения слова из некоторого множества букв (игра Scrabble) используя алгоритмы поиска в...

Игра Кости, игра с компьютером
Всем привет! Делаю консольную игру Кости. Условия такие: 1) Перед игрой все игроки бросают кость, первым начинает тот, у кого выпало...

9
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
20.05.2015, 13:19
Сначала заполняем поле нажатием на кнопку, потом кликаем левой кнопкой мыши по клетке и ее цвет меняется на следующий из списка (красный, желтый, зеленый, синий, коричневый, черный, потом снова красный и т. д.).
Например, был зеленый цвет, станет синий. Черный поменяется на красный и т. п.

cpp:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
const color_count = 6;
TColor color[color_count] = {clRed, clYellow, clGreen, clBlue, clMaroon, clBlack};
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  const step = 50, max_size_x = 600, max_size_y = 600;
  int i, j;
 
// рисуем сетку
  Canvas->Pen->Color = clWhite;
  for (i = 0; i <= max_size_x; i += step)
  {
    Canvas->MoveTo(i, 0);
    Canvas->LineTo(i, max_size_y);
  }
  for (i = 0; i <= max_size_y; i += step)
  {
    Canvas->MoveTo(0, i);
    Canvas->LineTo(max_size_x, i);
  }
 
// закрашиваем клетки "случайными" цветами
  randomize();
  for (i = step/2; i <= max_size_x-step/2; i += step)
    for (j = step/2; j <= max_size_y-step/2; j += step)
    {
      Canvas->Brush->Color = color[random(6)];
      Canvas->FloodFill(i, j, Canvas->Pixels[i][j], fsSurface);
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
  if (Button == mbLeft)  // если нажата левая кнопка мыши
    for (int i = 0; i < color_count; i++)  // в цикле проверяем
      if (Canvas->Pixels[X][Y] == color[i])  // если клетка имеет цвет из списка
      {
        // то заменяем цвет клетки на следующий из списка
        Canvas->Brush->Color = color[(i+1)%color_count];
        Canvas->FloodFill(X, Y, color[i], fsSurface);
        break;
      }
}
//---------------------------------------------------------------------------
h:
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Миниатюры
Игра "Филлер"  
1
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 25
20.05.2015, 17:23  [ТС]
Спасибо огромное. Еще такой вопрос , а откуда вытащить кнопку для записи этой строки:

"void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
int X, int Y)"
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
20.05.2015, 19:29
Это не кнопка, это обработчик события формы.
0
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 25
20.05.2015, 22:55  [ТС]
Но какой елемент мне нужно добавить в "Form1" что бы я смог прописать код для этого обработчика события формы. Ибо выдает что такого обьекта нету на форме.

"[C++ Error] Unit1.cpp(50): E2316 '_fastcall TForm1::FormMouseDown(TObject *,TMouseButton,TShiftState,int,int)' is not a member of 'TForm1'"
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33411 / 21521 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
20.05.2015, 22:58
Не нужно было копировать реализацию обработчика. Теперь иди в h-файл, в класс формы вставляй
C++
1
void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
, и в Инспекторе Объектов связывай событие с обработчиком...

Сделал бы как положено (зайти в Инспектор Объектов, на вкладку Events, даблклик напротив нужного события) - осталось бы просто скопировать и вставить тело обработчика...
0
0 / 0 / 1
Регистрация: 19.05.2015
Сообщений: 25
21.05.2015, 00:08  [ТС]
Спасибо большое.
Только получается так, что при нажатие левой клавиши меняет цвет только 1 квадрат самый первый. Но продолжения закрашивания остальных квадратов не происходит.
Может кто поможет как сделать так:
К примеру есть 6 кнопок с разными цветами и при нажатие на кнопку закрашивались все квадраты с таким цветом стоящие возле первого квадрата?
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
21.05.2015, 01:03
Не за что.
Ты просил пример кода - тебе его привели.
Я понимаю, куда ты клонишь ("сделайте за меня весь код по частям"). "Нубство" в программировании тебе здесь вряд ли исправят, если ты сам этого не захочешь. В понимании логики задачи помочь можно, но что там разбираться?
Здесь http://www.logozavr.ru/1075/ алгоритм можно понять за 5 минут.
Ответ на вопрос: предлагаю пока "забить" на кнопки с цветами. Мне такой вариант кажется немного сложнее для новичка.
Лучше делать так (обобщенно) - твои клетки нужно как-то "пометить", например, сделать структуру, в которой будет булево значение со значением 1 для твоих клеток. Ты кликаешь по свободной клетке. Если она рядом с твоей клеткой, то все клетки такого же цвета (рядом с твоими), как и "клинутая", становятся твоими.
Вот и весь алгоритм в общем смысле. Доработка нужна, но без представления (в голове) конечной или промежуточной цели выполнять задачу будет трудно на каждом шаге.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
21.05.2015, 09:25
А вот интересный момент. Если клетка поля окружается со всех сторон захваченными клетками, то она тоже считается захваченной, или так и останется, пока не выберешь соответствующий цвет?
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
21.05.2015, 20:26
Второе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2015, 20:26
Помогаю со студенческими работами здесь

Игра +1 - это современная, набирающая популярность игра на просторах интернета
Игра +1 - это современная, набирающая популярность игра на просторах интернета. Она завлекает всех своей простотой и желанием добиваться...

Создать иерархию классов игра – спортивная игра – волейбол
Создать иерархию классов игра – спортивная игра – волейбол. Определить конструкторы, деструктор, оператор присваивания и другие необходимые...

Создать иерархию классов игра – спортивная игра – волейбол
Создать иерархию классов игра – спортивная игра – волейбол.Определить конструкторы, деструктор, оператор присваивания и другие необходимые...

Бюджет 4500 гр. Конфигурация работа в Office, AutoCAD, игра Assassin, онлайн игра World of Tanks
Собираю компьютер для сестры. Основные требования: работа в Microsoft Office, AutoCAD, игра Assassin, онлайн игра World of Tanks ...

Игра в загадки. Загадать загадку. Если ответ верен – поздравить пользователя. Затем сообщить, что игра окончена.
Всем привет! Меня зовут VitoScaletta, совсем недавно начал обучаться JS, но очень тяжело в голову заходит информация, но я не сдаюсь! В...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
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