Второй вопрос, но тоже по теме. Чтобы убить мышку, нужно направить ружьё охотника на неё и нажать клавишу "Пробел". Как это можно реализовать в моём коде?
" (Показать/Скрыть)
![]() ![]() |
![]() |
pashist |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Привет еще раз. Пишу игру Охотник на мышек=) Столкнулся с проблемой: как выполнять две процедуры одновременно? Ответ: никак =) Есть процедура, которая генерит вывод мышей на экран. Еще есть процедура, которая рисует охотника в центре экрана, которым нужно управлять. Но как управлять охотником, если уже выполняется процедура вывода мышей на экран? ReadKey не помогает, он останавливает программу в ожидании нажатия клавиши.
Второй вопрос, но тоже по теме. Чтобы убить мышку, нужно направить ружьё охотника на неё и нажать клавишу "Пробел". Как это можно реализовать в моём коде? " (Показать/Скрыть)
|
klem4 |
![]()
Сообщение
#2
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Видимо не верно ты ридкей юзать пытаешься ... Делай так :
while keypressed do ch := readkey; Паузы в ожидании нажатия не будет. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
pashist |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Это выход, но все равно скорости работы явно не хватает. Может, есть принципиально другие решения? И что с вторым вопросом?
|
Бродяжник |
![]()
Сообщение
#4
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот это
PutPixel(xT,yT,0); ЗЛО. Злое злостное зло. Рисовать ПутПикселем медленно. Лучше использовать PutImage. И вообще Unit Graph тормозной. С его помощью быструю игру не сделаешь. И прозрачность в спрайтах он не поддерживает. Конечно, если все дело в том, что нужно сделать лабораторку, тогда ничего не попишешь, а так-то лучше перейти на Delphi и использовать что-то вроде Asphyre. Для "Охотника на мышей" самое то. |
Гость |
![]()
Сообщение
#5
|
Гость ![]() |
Пишу именно лабораторку..
|
pashist |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всем доброе время суток. Переписал алгоритм, используя GetImage. Сама по себе эта функция не устранила тормоза, но с ней работать оказалось гораздо удобнее.
![]() Вот код: (Показать/Скрыть)
А теперь вопросы ![]() 1) Почему в коде For i:=1 To m Doв PutPixel i и j нужно поменять местами, чтобы мышка выводилась на экран не в перевернутом виде? То есть если я пишу PutPixel(i,j,Mouse^[i,j]);, то изображение выводится на экран, повернутое на 90 град. против часовой стрелки. 2) Так никто и не ответил на вопрос, как проверить то, что я правильно прицелился на мышь, когда выстрелил? Нужно сравнить углы положения ружья и мышки относительно центра, и если они будут равны, то я удачно прицелился? Так? Как это сделать? |
Бродяжник |
![]()
Сообщение
#7
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
2) Так, наверное, и сделать - сравнить углы. Нужно только поместить начало координат в пузо охотнику
![]() Вот функция пересчета из декартовых координат в полярный угол (перевел с сишного алгоритма с algolist.ru). function Angle(x, y: real): real; Возвращает полярный угол в радианах для точки с координатами Х,У (в нормальной декартовой системе!). Если бы еще был выложен файл Mouse.Dat, можно было бы подумать над какими-то улучшениями, а так ведь без него программу не запустить... |
pashist |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Mouse.dat-файл, содержащий матрицу 18х18=) Вот генератор:
Uses Crt; Файл Picture.txt Цитата 002220000000222000 020002000002000200 200000200020000020 200000200020000020 020002020202000200 200000002000000020 200022200022200020 200200020200020020 200202020202020020 200022200022200020 020000002000000200 020000002000000200 002000020200002000 002000000000002000 000200222220020000 000200200020020000 000020022200200000 000002222222000000 =) Вообще хотелось бы грузить мышку из стандартного bmp-шника. Сообщение отредактировано: volvo - |
Бродяжник |
![]()
Сообщение
#9
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну так вот:
в этом цикле For i:=1 To n Do индекс i отвечает за строки, а j за столбцы. То есть Mouse[строка,столбец]. А в этом цикле For i:=1 To m Do наоборот: индекс j отвечает за строки, а i за столбцы. То есть PutPixel(столбец,строка). Поэтому и приходится переставлять индексы местами. А что тормозит? Охотник медленно вертится, или мыши редко появляются? А то у меня компьютер быстрый, может я не замечаю чего... |
pashist |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Поменяй в этом цикле
For i:=1 To n Do m и n местами-и ничего не произойдет-изображение все равно придется переворачивать. Я так и не разобрался, почему. Тормозов больше в игре нет, я же писал. ![]() Сообщение отредактировано: volvo - |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата Поменяй в этом цикле <...> m и n местами-и ничего не произойдет Правильно... у тебя индексы-то по-прежнему перепутаны: I так же отвечает за строки, а J - за столбцы... Чего ты добился заменой M <-> N ???Тебе I и J менять надо... |
Бродяжник |
![]()
Сообщение
#12
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Тем более, что матрица-то квадратная, 18х18, так что m и n равны. Сколько их не меняй...
![]() |
pashist |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо!
![]() |
Бродяжник |
![]()
Сообщение
#14
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну...
Предположим, что режим 640 на 480. И начало координат вверху слева. И ось У направлена вниз. Так, как это обычно в графических режимах бывает. Пусть Xg и Yg - это координаты точки в данной системе отсчета. Переносим начало координат в центр экрана и разворачиваем ось Y. X1 := Xg - 320; Теперь у нас X1 и Y1 это координаты той же точки, но в декартовых координатах с началом отсчета в центре экрана. То есть, если экранные координаты мышонка Xm и Ym, то чтобы получить угол прицела на данную мышь, надо делать так: Ugol := Angle(Xm-320.0, 240.0-Ym); По-моему, так! |
pashist |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Опять косяк..
![]() Function Shot(xH,yH: Real): Boolean; После выстрела появляются левые убитые мышки.. =( Прикрепил доработанную полную версию. ![]() |
Бродяжник |
![]()
Сообщение
#16
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Отвечу завтра. Единственное замечание - стоит ли сравнивать углы на точное равенство? Не лучше ли вычислять их разность и сравнивать ее с некоторой дельтой? Тем более что и мышка ведь не точечная...
|
pashist |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я так и хотел сделать, но сначала я хотел разобраться с точными данными, чтобы потом можно было вносить погрешности.
|
Бродяжник |
![]()
Сообщение
#18
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Простой корявый пример, иллюстрирущий идею.
Прикрепленные файлы ![]() |
pashist |
![]()
Сообщение
#19
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Круто! Бродяжник, спасибо! Вот, что примерно получилось. Уже играть можно))
![]() Теперь нужно перевести это в объекты. |
pashist |
![]()
Сообщение
#20
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Мужики, зацените мой первый опыт в ООП =) Переписал в ООП охотника из игры. Нормально?
Program Hunt; |
![]() ![]() |
![]() |
Текстовая версия | 25.09.2023 2:42 |