Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> getpixel не работает так, как надо, Borland C++ 3.1 
:(
    Опции темы
Мозгвыиграл
Дата 1.5.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2009

Репутация: нет
Всего: нет



Пишу в Borland C++ 3.1

Рисую на экране поле для игры в морской бой с помощью функции. Получаются 2 квадрата цвета 1, разлинованные линиями цвета 3 на клетки 10х10. 

Далее пытаюсь получить цвет с помощью getpixel, где х,у - координаты курсора мыши, которые я запросил ранее. Проблема в том, что col постоянно принимает значение 0
Код

  col=getpixel(х,у);
 


если сделать так: 
Код
  col=getpixel(у,х);
, то иногда получается значение 1

при таком действии:
Код

 putpixel(x,y,4);
 col=getpixel(x,y);

цвет считывается именно такой,какой задан в putpixel
PM MAIL   Вверх
mes
Дата 1.5.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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

Добавлено через 4 минуты и 21 секунду
Ну а вобще такой подход  (узнавать цвет с помощью getpixel) не очень красивый.
Размер Вашего поля  Вам известен, начальные его координаты тоже (иначе как бы смогли нарисовать smile),
 так что на какую клетку поля указывает мышь, можно легко расчитать и будет намного удобнее, чем зависить от возможностей системы вывода smile


--------------------
PM MAIL WWW   Вверх
Мозгвыиграл
Дата 1.5.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2009

Репутация: нет
Всего: нет



координаты я сравнивал - они верные.

я думал о таком способе, его я тоже буду использовать но для некоторых задач getpixel все же попроще. да и хочется разобраться, почему работает не так, как надо.
PM MAIL   Вверх
Мозгвыиграл
Дата 1.5.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2009

Репутация: нет
Всего: нет



значение getpixel не зависит от того, каким образом закрашена область экрана?
PM MAIL   Вверх
mes
Дата 1.5.2009, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Мозгвыиграл @  1.5.2009,  16:52 Найти цитируемый пост)
значение getpixel не зависит от того, каким образом закрашена область экрана? 

Попробуйте в других графических режимах.
Из любопытства, а на каком режиме (его разрешение на кол-во цветов) экспериментируете ?

Это сообщение отредактировал(а) mes - 1.5.2009, 17:57


--------------------
PM MAIL WWW   Вверх
bsa
Дата 1.5.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Мозгвыиграл, скорее всего, проблема не getpixel, а в координатах, как сказал mes. Поставь перед getpixel функцию putpixel и увидишь, где на самом деле находится курсор.
PM   Вверх
math64
Дата 1.5.2009, 18:28 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Если во время вызова getpixel() курсор мыши находится на экране, Вы получаете цвет чёрного кончика указателя мыши.
PM   Вверх
mes
Дата 1.5.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(math64 @  1.5.2009,  17:28 Найти цитируемый пост)
Если во время вызова getpixel() курсор мыши находится на экране, Вы получаете цвет чёрного кончика указателя мыши. 

"А слона-то и не заметили" © чья то
т.е про мышь то и не подумал !! smile

Добавлено через 3 минуты и 21 секунду
если причина именно в этом, то вот еще один небезосновательный повод сделать по человечески, расчитывать, основываясь на коордиатах, а не на цвете. smile


Это сообщение отредактировал(а) mes - 1.5.2009, 18:32


--------------------
PM MAIL WWW   Вверх
Мозгвыиграл
Дата 1.5.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2009

Репутация: нет
Всего: нет



Цитата

Из любопытства, а на каком режиме (его разрешение на кол-во цветов) экспериментируете ?

640*480*16 цветов

Цитата

Если во время вызова getpixel() курсор мыши находится на экране, Вы получаете цвет чёрного кончика указателя мыши. 

вот блин... спасибо, попробую! 

Цитата

если причина именно в этом, то вот еще один небезосновательный повод сделать по человечески, расчитывать, основываясь на коордиатах, а не на цвете. 

вообще, думаю, что куда человечнее было бы делать не в boland c 3.1 smile но таковы уж требования к проге)
PM MAIL   Вверх
math64
Дата 1.5.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Цитата(Мозгвыиграл @  1.5.2009,  20:16 Найти цитируемый пост)
вообще, думаю, что куда человечнее было бы делать не в boland c 3.1  но таковы уж требования к проге)

Borland C++ 3.1 здесь не помеха:
Код

enum Cell {
  SEA, SHIP, FIRE
};
class Player {
int x, y, cw, ch;
Cell desk[10][10];
void MousePressed(int x, int y);
void DrawDesk();
void DrawSea(int x, int y);
void DrawShip(int x, int y);
void DrawFire(int x, int y);
void HideMouse();
void ShowMouse();
};
void Player::MousePressed(int mx, int my) {
  for(int i = 0; i < 10; i++)
    for(int j = 0; j < 10; j++) {
      if (x + i*cw <= mx && mx < x + (i+1)*cw &&
         y + j*cw <= my && my < y + (i+1)*ch) {
         if (desk[i][j] == SHIP) {
           desk[i][j] = FIRE;
           DrawDesk();
         }
      }
  }
}
void Player::DrawDesk() {
  HideMouse();
  for(int i = 0; i < 10; i++)
    for(int j = 0; j < 10; j++)
      swicth(desk[i]) {
         case SEA:
            DrawSea(x+i*cw,y+j*ch); break;
         case SHIP:
            DrawShip(x+i*cw,y+j*ch); break;
         case FIRE:
            DrawFire(x+i*cw,y+j*ch); break;
      }
  ShowMouse();
}


PM   Вверх
Мозгвыиграл
Дата 1.5.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.4.2009

Репутация: нет
Всего: нет



в принципе да, но тем не менее)

Цитата

enum Cell {
  SEA, SHIP, FIRE
};
class Player {
int x, y, cw, ch;
Cell desk[10][10];

а вот такого нам нельзя делать, ибо не проходили, а если не проходили, значит нельзя использовать. но за код спасибо, интересно)
PM MAIL   Вверх
math64
Дата 1.5.2009, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Вместо enum можно использовать константы, вместо класса - структуру.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1236 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.