Понедельник, 12 Апреля 2021, 07:41

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » AKukuruz [20]
Результаты поиска
AKukuruzДата: Суббота, 06 Августа 2016, 18:33 | Сообщение # 1 | Тема: Остановить процедуру через break
был не раз
Сейчас нет на сайте
Вроде понятно... Но не до конца)).
Мне надо через вводимый параметр f ограничить число рисуемых фигур...
То есть нажал f раз и операция описываемая в событии не происходит.

Код
procedure draw_r(f: integer);
begin
var i: integer;//хранение числа фигур
i:=i+1; //при клике увеличивается на 1
for i := 1 to f do
begin
onmousedown:=MouseDown;
if i > f then
break;
end;


В главном цикле число фигур передается через параметр в процедуру... но программа не работает так как мне нужно...
сижу думаю почему...

пробовал repeat ... until f=3, тоже самое - не работает как хочу.
кстати про табуляцию это да) ну просто сейчас это не так важно... мне щас важн понять в чем я ошибку постоянно делаю))
систематически причем...


Сообщение отредактировал AKukuruz - Суббота, 06 Августа 2016, 18:34
AKukuruzДата: Воскресенье, 31 Июля 2016, 18:27 | Сообщение # 2 | Тема: Остановить процедуру через break
был не раз
Сейчас нет на сайте
Если в конце процедуры стоит break то прекращается выполнение цикла...
А у меня вроде и условие выполняется но при клике все равно рисуются фигуры. Кароч или я что-то не понимаю или что-то делаю не так...

Добавлено (31 июля 2016, 18:27)
---------------------------------------------
Цитата Lertmind ()
твой код очень странный и неверный, перепишу немного по-другому чтобы показать:

не спорю, пока делаю очень много ошибок... учусь по урокам на сайтах...

да спасибо) процедуры с параметрами я еще не писал.

Код
procedure draw_r(nr: integer); //рисуем
begin
begin
onmousedown:=MouseDown;
end;
nr:=+1;
if nr :=3 then
break;
end;


на предпоследней строчке ожидается оператор... я все не могу понять какой там оператор должен быть и зачем он нужен?...

есть действие после него счетчик... есть условие, все вроде нормально...
я понимаю что есть ошибка, я ее не вижу!

можно еще счетчик сунуть в обработчик... правда скорее всего запутаюсь в переменных...
чето так туплю непонятно где... вроде все просто.


Сообщение отредактировал AKukuruz - Воскресенье, 31 Июля 2016, 18:29
AKukuruzДата: Пятница, 29 Июля 2016, 05:38 | Сообщение # 3 | Тема: Остановить процедуру через break
был не раз
Сейчас нет на сайте
Код
procedure draw_r(); //рисуем
begin
var nr: integer;
nr:=+1;
for nr := 0 to 3 do
onmousedown:=MouseDown;
if nr > 3 then
break;
end;


говорит break вне цикла
AKukuruzДата: Четверг, 28 Июля 2016, 17:48 | Сообщение # 4 | Тема: Остановить процедуру через break
был не раз
Сейчас нет на сайте
Что надо сделать чтобы после трех раз процедура прекращала действие? То есть фигура не рисовалась.
Вводим переменную равную числу фигур при ее значении равное трем надо что-то делать...

после redraw ставил
Код
nr:=+1;
if nr :=>3 then break;

ругается на отсутствие оператора...
Не совсем понятно что там должен быть за оператор...

Код
uses graphABC;
var  nr,px1,py1:integer;

    

procedure MouseDown(x,y,mb:integer);
begin
px1:=x; //начальная позиция фигурs равна центру экрана
py1:=y;
drawrectangle(px1-25,py1-50,px1+25,py1+50);
lockdrawing;
redraw;
end;

procedure draw_r(); //рисуем
begin
onmousedown:=MouseDown;
end;


begin//основной цикл
SetWindowTitle('Графическое окно');
Setwindowsize(800,600); //размер окна
CenterWindow;//центр монитора

draw_r();

end.
AKukuruzДата: Четверг, 28 Июля 2016, 16:22 | Сообщение # 5 | Тема: Полет фантазии...
был не раз
Сейчас нет на сайте
Недавно начал изучать паскаль, недели 2...
Есть такая проблемка - в голову уже лезут всякие панели и бары с игровыми данными.

Пример: жмем на квадратик (кнопку типа...) - вылазит поле (textout) выводящее количество золота или имя/уровень...
Правда я еще мышиные процедуры не доизучал и вообще не в состоянии пока сделать такие панельки...

У кого такое было на этапе обучения?))
AKukuruzДата: Четверг, 21 Июля 2016, 06:02 | Сообщение # 6 | Тема: Выключить консоль в приложении в оконном приложении.
был не раз
Сейчас нет на сайте
Когда подключены и crt и graph то вместе с графическим окном вылазит и консоль.
Если в окне у меня допустим змейка то консоль не нужна... Хотя через консоль можно менять скорость.

Разобрался вроде... Можно не подключать crt, если подключен graph то процедуры write и read работают.

Среда ABC.net.
AKukuruzДата: Четверг, 21 Июля 2016, 02:38 | Сообщение # 7 | Тема: Выключить консоль в приложении в оконном приложении.
был не раз
Сейчас нет на сайте
Как выключить консоль?)

Добавлено (21 июля 2016, 02:38)
---------------------------------------------
Чтобы не вылазило текстовое окно вместе с графическим?

AKukuruzДата: Среда, 20 Июля 2016, 10:58 | Сообщение # 8 | Тема: Процедуры для работы с мышью в PascalABC
был не раз
Сейчас нет на сайте
Цитата last2424 ()
Мне вот интересно, а почему begin пишется 2 раза за программу, он же вроде один раз только пишется?

Потому что у меня опыт работы в среде 3 недели))

Цитата Gudleifr ()
Gudleifr

А у его книг названия какие? Что гуглить то? Очень хотелось бы поглядеть...

Посмотрел некоторые книги - читать сложно. Учебник по информатике был и то понятней.
Отпугивает то что авторы пишут не столько о программировании сколько просто пишут... Пишут красиво, но не про програмирование...
AKukuruzДата: Пятница, 08 Июля 2016, 02:27 | Сообщение # 9 | Тема: Процедуры для работы с мышью в PascalABC
был не раз
Сейчас нет на сайте
Вообще ее надо бы рисовать после второго клика когда мы узнали конечные координаты... А при первом только начальные указать.

А как дать понять программе что я делаю второй клик?
Вот через moveto... Тоже не работает...

Код
uses GraphABC;

procedure mousedown(x,y,mb: integer);
begin
if mb=1 then
MoveTo(x, y);
begin
if mb=1 then
Lineto(x, y);
end;
end;

begin
SetWindowTitle('Графическое окно');
Setwindowsize(800,600); //размер окна

OnMousedown:=Mousedown;

end.
AKukuruzДата: Четверг, 07 Июля 2016, 22:41 | Сообщение # 10 | Тема: Процедуры для работы с мышью в PascalABC
был не раз
Сейчас нет на сайте
Нагуглил что-то похожее.

Рисуем линию, но начальные координаты в точке 0,0...
Буду думать как ее задать при первом клике.

Код
uses GraphABC;

procedure MouseDown(x,y,mb: integer);
begin
if mb=1 then LineTo(x,y);  
end;

begin
SetWindowTitle('Графическое окно');
Setwindowsize(800,600); //размер окна

OnMouseMove:=MouseDown;

end.

Добавлено (07 июля 2016, 22:41)
---------------------------------------------

Цитата 1nt3g3r ()
Мой основной язык сейчас - Java, синтаксис Pascal-я уже немного подзабылся...

Да) Всеравно спасибо за помощь.
AKukuruzДата: Четверг, 07 Июля 2016, 22:20 | Сообщение # 11 | Тема: Процедуры для работы с мышью в PascalABC
был не раз
Сейчас нет на сайте
Исправил. Программа запускается, но ничего не происходит... Ятп координаты или не хранятся или не передаются в переменные Line.
пробовал обьвлять x1,x2,y1,y2 - не помогает...

Наверное теперь что-то в том месте где обработчик события не правильно...
А на ваш вариант программа тоже ругается при запуске... "Операция '<>' не применима к типам boolean и integer".


Сообщение отредактировал AKukuruz - Четверг, 07 Июля 2016, 22:23
AKukuruzДата: Четверг, 07 Июля 2016, 22:02 | Сообщение # 12 | Тема: Процедуры для работы с мышью в PascalABC
был не раз
Сейчас нет на сайте
Цитата 1nt3g3r ()
Gudleifr, нет, вы понимаете неверно - при использовании модуля GraphABC автоматически будет создано графическое окно. Программа завершит работу лишь тогда, когда пользователь закроет окно. А пока оно открыто, он вполне может несколько раз щелкнуть мышкой где-то в окне, и что-то нарисуется (предполагаю, что будут точки рисоваться).


А окно разве не часть программы? В программе может быть графическое окно + консольщина для команд. Это вроде и есть программа...
Даже пустое окно - все равно программа.


Сообщение отредактировал AKukuruz - Четверг, 07 Июля 2016, 22:20
AKukuruzДата: Четверг, 07 Июля 2016, 21:18 | Сообщение # 13 | Тема: Процедуры для работы с мышью в PascalABC
был не раз
Сейчас нет на сайте
Цитата Gudleifr ()
А MouseDown так никто и не вызвал, т.к. OnMouseDown так и не случмлось.


Когда писал программу рисующую точку при MouseDown все работало. Тыкнули мышкой - нарисовали точку, тыкнули еще раз нарисовали еще раз...
Соответственно событие произошло.

Цитата 1nt3g3r ()
Gudleifr, почему это - OnMouseDown как раз и случилось (случится, вернее). То, что оно не приведет к желанному результату - это другое дело.

Да я тоже уверен что случится, но при присваивании а и б координат что-то не так...

Я даже скомпилировать не могу.
В строке a: = x; ругается что "Встречено ':', а ожидалось ';'"...
А почему я не могу понять, язык изучаю недели две, сильно путаюсь в расстановках.
Если бы кто-то обьяснил почему ругается было бы понятней что делать...
То есть я понимаю что ошибка а в чем именно не понимаю.

Команда рисующая точку обьявляется в процедуре клика мышки. Для лайна нужно 2 клика... То есть я не могу засунуть line в mousedown, что логично. События ведь два.
Код
procedure mousedown(x,y,mb: integer);
begin
if mb=1 then
PutPixel(x, y, clRed); //красим пиксель
end;


Сообщение отредактировал AKukuruz - Четверг, 07 Июля 2016, 21:27
AKukuruzДата: Четверг, 07 Июля 2016, 19:56 | Сообщение # 14 | Тема: Процедуры для работы с мышью в PascalABC
был не раз
Сейчас нет на сайте
Где взять их список? MouseMove, MouseDown и тд
Если с текстом, то есть crt многое понятно, то с мышью не так... И вообще какие есть путевые книги по АБС?

Допустим надо мышкой ввести координаты путпиксела или вывести их в поле textout.

Вроде понял что они принадлежат модулю Events, но как-то видел в яндексе что есть и модуль Mouse, хотя сейчас нагуглить его не могу...
Может это от невнимательности... С вводом-выводом текста и графики все понятно, а мышиные процедуры найти не могу...

p.s.: да я гуглил.

Добавлено (07 июля 2016, 19:56)
---------------------------------------------
там где присваиваю значение а и б в mousedown что-то не так...

Код
uses GraphABC;

var a,b: integer; //координаты мышки

procedure MouseDown(x,y,mb: integer);
begin
if mb=1 then // передаем координаты мышки в переменные а и б
a : = x;
b := y;
end;

begin
SetWindowTitle('123');
Setwindowsize(800,600); //размер окна

OnMouseDown:=MouseDown; //1 клик, передаем координаты мышки в начальные координаты лайна
x1: = a;
y1: = b;

OnMouseDown:=MouseDown; //2 клик, передаем тоже самое только в конечные
x2 : = a;
y2 : = b;

Line(x1,y1,x2,y2); //рисуем

end.


Сообщение отредактировал AKukuruz - Четверг, 07 Июля 2016, 19:58
AKukuruzДата: Среда, 29 Июня 2016, 14:24 | Сообщение # 15 | Тема: Pascal ABC. Вывод на экран случайного числа.
был не раз
Сейчас нет на сайте
Цитата Gudleifr ()

А как этот цикл может не зависнуть?


Ухх... Я даже на это внимание не обратил...

Код
uses crt;

var i: integer;
  
procedure Random_d(i: integer);
  begin
    i:=random(10);
  while(true) do
    for i := 1 to 10 do
    writeln('Случайное число ' + (i).ToString())
  end;
  
begin
  SetWindowTitle('Вывод случайного числа');
  random_d(i);

end.


Исправил, но числа выводит в порядке возрастания... А не случайно.
AKukuruzДата: Вторник, 28 Июня 2016, 19:52 | Сообщение # 16 | Тема: Pascal ABC. Вывод на экран случайного числа.
был не раз
Сейчас нет на сайте
Код
uses crt;

var i: integer;
  
procedure Random_d(i: integer);
  begin
    for i := 1 to 10 do
    writeln('Случайное число ' + (i).ToString())
  end;
  
  begin
  while(true) do
  SetWindowTitle('Вывод случайного числа');
  clrScr;
  
  randomize;
  i:=random(10);
random_d(i);

end.


Тут при запуске все зависает, я так понимаю потому что происходит какое-то переполнение?
Надо бы количество циклов ввести...


Сообщение отредактировал AKukuruz - Вторник, 28 Июня 2016, 19:53
AKukuruzДата: Воскресенье, 26 Июня 2016, 10:32 | Сообщение # 17 | Тема: Pascal ABC. Вывод на экран случайного числа.
был не раз
Сейчас нет на сайте
"Не работает? Значит, Вы что-то сделали неправильно"
Это само собой. А что именно неправильно не всегда понятно...

Огрести? Да я и так огребаю от проги уже...
При включении программы вылезают ошибки именно в том месте... Как раз где вы и сказали. Что-то про "должен быть оператор, а стоят точки". Но смысл его я не понял...

Пустой оператор он придуман вообще для каких целей? Оператор он вроде бы указывает на какое-то действие... А пустой оператор ничего не делает...
Ятп это уже особенности языка какие-то.
AKukuruzДата: Суббота, 25 Июня 2016, 19:21 | Сообщение # 18 | Тема: Pascal ABC. Вывод на экран случайного числа.
был не раз
Сейчас нет на сайте
Тут кстати сделано без рандомайзера. Взято отсюда.
http://pascalabc.net/WDE/?file=AlgBegin/01_Begin/06_Random.pas

Код
var
  r1,r2: integer; // значения на верхних гранях кубиков
begin
  r1 := Random(6)+1;
  r2 := Random(6)+1;
  writeln('Очки, выыпавшие на кубиках: ',r1,' ',r2);
  writeln('Сумма очков равна ',r1+r2);
end.


Код
uses crt;

var i:integer;

begin
  while(true) do
  begin;
  randomize;
  i:=random(10);
  writeln('Случайное число ' + (i).ToString());
  for i := 1 to 10 do
  writeln('Случайное число ' + (i).ToString());
  end;
end.


Если выведено число из диапазона товывести случайное число опять.

А еще можно через repeat, но я не могу понять в какой части кода должен быть этот оператор и где ошибка...

Исходники я и так смотрю, кстати на сайте по ссылке непрохие примеры. Но когда свой код пишу то бывают непонятки...
Еще просмотрел несколько книжек типа "песен". По моему они мало пригодны для изучения - много ненужной воды.
Вообще изучение намного лучше идет когда есть наставник или знакомый который может указать на ошибку...


Сообщение отредактировал AKukuruz - Суббота, 25 Июня 2016, 19:32
AKukuruzДата: Суббота, 25 Июня 2016, 12:01 | Сообщение # 19 | Тема: Pascal ABC. Вывод на экран случайного числа.
был не раз
Сейчас нет на сайте
Спасибо, почти понял. Read по невнимательности написал...
Randomize включает рандом. А random задает диапазон...

Добавлено (25 июня 2016, 12:01)
---------------------------------------------
А что нужно добавить в код чтобы зациклить вывод?

AKukuruzДата: Пятница, 24 Июня 2016, 09:43 | Сообщение # 20 | Тема: Pascal ABC. Вывод на экран случайного числа.
был не раз
Сейчас нет на сайте
Где-то ошибка... Синтаксис пока не усвоил так что не могу сам ее найти.

Код
uses crt;

var i: real;

begin
  random(i);
  read('i');
end.


Вместо числа выводит переменную i.
Форум игроделов » Записи участника » AKukuruz [20]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг