Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 31

Мячик

01.05.2016, 09:34. Показов 2349. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать так что бы при прикосновении мяча(игрока) и еды(тоже шарика) шарик исчезал?
Мой маленький проект по информатике
Pascal
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
Program game;
uses
  graphabc,ABCObjects;
var
  x, y: integer; //Координаты моего мяча - переменные
  f: boolean; //Логическая переменная
  Up:= false; // Логические переменные определяющие нажатие кнопки
  Right:= false;
  Left:= false;
  a,b:integer;
  //Score:integer;
procedure KeyDown(key: integer); //процедура KeyDown производит какое либо действие во время нажатия кнопки
begin
  case key of
    VK_Up: Up := true;
    VK_Right: Right := true; // Присваивает ИСТИНУ переменным во время нажатия стрелок
    VK_Left: Left :=true;
  end;
end; 
procedure KeyUp(key: integer);//процедура KeyUp производит какое либо действие во время отжатия кнопки
begin
  case key of
    VK_Up: Up := false;
    VK_Right: Right := false;//Присвоение ЛЖИ переменым во время отжатия стрелок
    VK_Left: Left :=false;
  end;
end; 
begin //Начало тела программы
  x := 50;//Начальные координаты мяча
  y := 400;
  a := 350;
  b := 350;
  f := true; //Присваивание истины для выполнения цикла
  onkeydown := KeyDown; //Присвоение оригин/ой процедуре более простое название
  OnKeyUp := KeyUp;
  lockdrawing; //Оператор анимации
  repeat  //Цикличная анимация
    Window.Clear;
    SetBrushColor(clyellow); //Цвет мяча
    Circle(x,y,25); //Сам мяч
    Rectangle(400,325,500,350);
    Rectangle(200,360,300,385);
    Line(1,425,900,425); //Линия "земли"
    if y<=396 then    //Аналог гравитации
    y:=y+4;
    if (x<512) and (x>412) and (y=304)
    then y:=y-4;
    if (x<312) and (x>212) and (y=340)
    then y:=y-4;
    setbrushcolor(clred);
    circle(a,b,10);
    //if x=a-10 and x=a+10 and y=b-10 and y=b+10 then
    //SetpenColor(clWhite) and setbrushcolor(clwhite);
    sleep(40);
    if Up then y := y-8; //Если UP/Right/Left - ИСТИНА то изменяет координаты мячика
    if Right then x := x+4;
    if Left then x:=x-4;
    redraw; // Оператор анимации
  until not f; //Окончание цикла
end.//конец
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.05.2016, 09:34
Ответы с готовыми решениями:

Мячик
Как можно создать программу выводящую графическую модель мяча??? Т.Е. Взяли мячь, подкинули вверх, он падает на землю, деформируется,...

мячик
сделать разноцветный мячик!

Скачущий мячик
Опущенный с некоторой высоты мяч, отталкиваясь от нижней границы формы (от &quot;пола&quot;), скачет в форме (вниз - вверх - вниз - вверх и...

7
44 / 44 / 66
Регистрация: 22.07.2015
Сообщений: 191
01.05.2016, 09:48
Добавил булевскую переменную f2, которая будет истиной, пока игрок не коснется шарика.
Pascal
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
program game;
 
uses
  graphabc,ABCObjects;
var
  x, y: integer; //Координаты моего мяча - переменные
  f: boolean; //Логическая переменная
  Up := false; // Логические переменные определяющие нажатие кнопки
  Right := false;
  Left := false;
  a, b: integer;
  f2: boolean; // Если собрали мяч
  //Score:integer;
procedure KeyDown(key: integer);//процедура KeyDown производит какое либо действие во время нажатия кнопки
begin
  case key of
    VK_Up: Up := true;
    VK_Right: Right := true; // Присваивает ИСТИНУ переменным во время нажатия стрелок
    VK_Left: Left := true;
  end;
end;
 
procedure KeyUp(key: integer);//процедура KeyUp производит какое либо действие во время отжатия кнопки
begin
  case key of
    VK_Up: Up := false;
    VK_Right: Right := false;//Присвоение ЛЖИ переменым во время отжатия стрелок
    VK_Left: Left := false;
  end;
end;
 
begin//Начало тела программы
  x := 50;//Начальные координаты мяча
  y := 400;
  a := 350;
  b := 350;
  f := true; //Присваивание истины для выполнения цикла
  f2 := true; //Игрок не коснулся шарика
  onkeydown := KeyDown; //Присвоение оригин/ой процедуре более простое название
  OnKeyUp := KeyUp;
  lockdrawing; //Оператор анимации
  repeat//Цикличная анимация
    Window.Clear;
    SetBrushColor(clyellow); //Цвет мяча
    Circle(x, y, 25); //Сам мяч
    Rectangle(400, 325, 500, 350);
    Rectangle(200, 360, 300, 385);
    Line(1, 425, 900, 425); //Линия "земли"
    if y <= 396 then    //Аналог гравитации
      y := y + 4;
    if (x < 512) and (x > 412) and (y = 304)
      then y := y - 4;
    if (x < 312) and (x > 212) and (y = 340)
      then y := y - 4;
    if (sqr(x - a) + sqr(y - b) > 35 * 35) and f2 then //Если игрок не коснулся шарика
    begin
      setbrushcolor(clred);
      circle(a, b, 10);
    end
    else f2 := false;
    //if x=a-10 and x=a+10 and y=b-10 and y=b+10 then
    //SetpenColor(clWhite) and setbrushcolor(clwhite);
    sleep(40);
    if Up then y := y - 8; //Если UP/Right/Left - ИСТИНА то изменяет координаты мячика
    if Right then x := x + 4;
    if Left then x := x - 4;
    redraw; // Оператор анимации
  until not f; //Окончание цикла
end.
1
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 31
01.05.2016, 10:35  [ТС]
Спасибо вам огромное)

Добавлено через 17 минут
А не знаете ли как вывести табло с очками?
0
44 / 44 / 66
Регистрация: 22.07.2015
Сообщений: 191
01.05.2016, 11:09
Лучший ответ Сообщение было отмечено Amirsultan как решение

Решение

Добавил вывод счета в левом верхнем углу и появление еды как в змейки. Также немного исправил платформы.
Pascal
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
73
74
75
program game;
 
uses
  graphabc,ABCObjects;
  
var
  x := 50; //Координаты моего мяча - переменные
  y := 400;
  f := true; //Логическая переменная
  Up := false; // Логические переменные определяющие нажатие кнопки
  Right := false;
  Left := false;
  a := 350;
  b := 350;
  Score := 0;
procedure KeyDown(key: integer);//процедура KeyDown производит какое либо действие во время нажатия кнопки
begin
  case key of
    VK_Up: Up := true;
    VK_Right: Right := true; // Присваивает ИСТИНУ переменным во время нажатия стрелок
    VK_Left: Left := true;
  end;
end;
 
procedure KeyUp(key: integer);//процедура KeyUp производит какое либо действие во время отжатия кнопки
begin
  case key of
    VK_Up: Up := false;
    VK_Right: Right := false;//Присвоение ЛЖИ переменым во время отжатия стрелок
    VK_Left: Left := false;
  end;
end;
 
begin//Начало тела программы
  f := true; //Присваивание истины для выполнения цикла
  onkeydown := KeyDown; //Присвоение оригин/ой процедуре более простое название
  OnKeyUp := KeyUp;
  SetFontSize(20); //Размер шрифта
  SetFontStyle(fsItalic); //Шрифт
  lockdrawing; //Оператор анимации
  repeat//Цикличная анимация
    Window.Clear;
    SetBrushColor(clyellow); //Цвет мяча
    Circle(x, y, 25); //Сам мяч
    Rectangle(400, 325, 500, 350);
    Rectangle(200, 360, 300, 385);
    Line(0, 425, 639, 425); //Линия "земли"
    if y <= 396 then    //Аналог гравитации
      y := y + 4;
    if (x <= 500) and (x >= 400) and (y = 304)
      then y := y - 4;
    if (x <= 300) and (x >= 200) and (y = 340)
      then y := y - 4;
    if sqr(x - a) + sqr(y - b) <= 35 * 35 then //Если игрок коснулся мяча
    begin
      Score += 1;
      a := Random(619) + 10;
      b := Random(376) + 10;
    end
    else
    begin
      setbrushcolor(clred);
      circle(a, b, 10);
    end;
    //if x=a-10 and x=a+10 and y=b-10 and y=b+10 then
    //SetpenColor(clWhite) and setbrushcolor(clwhite);
    sleep(40);
    if Up then y := y - 8; //Если UP/Right/Left - ИСТИНА то изменяет координаты мячика
    if Right then x := x + 4;
    if Left then x := x - 4;
    SetBrushColor(clWhite);
    TextOut(10, 10, 'Счёт: ' + Score.ToString); //Выводим счет
    redraw; // Оператор анимации
  until not f; //Окончание цикла
end.
1
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 31
01.05.2016, 11:25  [ТС]
Я то блин туплю, сижу экспериментирую с Int to str и DrawTextCentered(x,y,x1,y1: integer; s: string);
а тут оказывается проще чем я думал
0
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 31
02.05.2016, 14:38  [ТС]
А не знаете ли как сделать ограниченное время зажатия клавиш?
Такое вообще возможно
0
44 / 44 / 66
Регистрация: 22.07.2015
Сообщений: 191
02.05.2016, 15:16
Amirsultan, Если для прыжка, то можно так:
Pascal
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
program game;
 
uses
  graphabc, ABCObjects;
 
const
  MAX_TIME = 1000; //Время прыжка в миллисекундах
 
var
  x := 50; //Координаты моего мяча - переменные
  y := 400;
  f := true; //Логическая переменная
  Up := false; // Логические переменные определяющие нажатие кнопки
  Right := false;
  Left := false;
  a := 350;
  b := 350;
  Score := 0;
  time := 0; //Время во время начала прыжка
  jump := false; //Был ли сделан прыжок 
 
procedure KeyDown(key: integer);//процедура KeyDown производит какое либо действие во время нажатия кнопки
begin
  case key of
    VK_Up: begin 
      Up := true;
      if not jump then time := Milliseconds; //Если не было прыжка, то засекаем время
      jump := true; //Прыжок был совершен
    end;
    VK_Right: Right := true; // Присваивает ИСТИНУ переменным во время нажатия стрелок
    VK_Left: Left := true;
  end;
end;
 
procedure KeyUp(key: integer);//процедура KeyUp производит какое либо действие во время отжатия кнопки
begin
  case key of
    VK_Up: Up := false;
    VK_Right: Right := false;//Присвоение ЛЖИ переменым во время отжатия стрелок
    VK_Left: Left := false;
  end;
end;
 
begin//Начало тела программы
  f := true; //Присваивание истины для выполнения цикла
  onkeydown := KeyDown; //Присвоение оригин/ой процедуре более простое название
  OnKeyUp := KeyUp;
  SetFontSize(20); //Размер шрифта
  SetFontStyle(fsItalic); //Шрифт
  lockdrawing; //Оператор анимации
  repeat//Цикличная анимация
    Window.Clear;
    SetBrushColor(clyellow); //Цвет мяча
    Circle(x, y, 25); //Сам мяч
    Rectangle(400, 325, 500, 350);
    Rectangle(200, 360, 300, 385);
    Line(0, 425, 639, 425); //Линия "земли"
    y := y + 4;
    if (y > 396) or (x <= 500) and (x >= 400) and (y = 304) or (x <= 300) and (x >= 200) and (y = 340)then 
    begin
      y := y - 4;
      jump := false; //Когда приземлились прыжок завершен
    end;
    if sqr(x - a) + sqr(y - b) <= 35 * 35 then //Если игрок коснулся мяча
    begin
      Score += 1; //Увеличиваем счет
      a := Random(619) + 10;
      b := Random(376) + 10;
    end
    else
    begin
      setbrushcolor(clred);
      circle(a, b, 10);
    end;
    //if x=a-10 and x=a+10 and y=b-10 and y=b+10 then
    //SetpenColor(clWhite) and setbrushcolor(clwhite);
    sleep(40);
    if Up and (Milliseconds - time <= MAX_TIME) then y := y - 8; //Если UP/Right/Left - ИСТИНА то изменяет координаты мячика
    if Right then x := x + 4;
    if Left then x := x - 4;
    SetBrushColor(clWhite);
    TextOut(10, 10, 'Счёт: ' + Score.ToString); //Выводим счет
    redraw; // Оператор анимации
  until not f; //Окончание цикла
end.
1
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 31
08.05.2016, 16:36  [ТС]
А не знаете ли как на это дело блок - схему нарисовать?

Добавлено через 8 минут
Pascal
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
program game;
 
uses
  graphabc;
 
const
  MAX_TIME = 1150; //Время прыжка в миллисекундах
 
var
  x := 250; //Координаты моего мяча - переменные
  y := 316;
  f := true; //Логическая переменная
  Up := false; // Логические переменные определяющие нажатие кнопки
  Right := false;
  Left := false;
  a := 350;
  b := 350;
  Score := 0;
  time := 0; //Время во время начала прыжка
  jump := false; //Был ли сделан прыжок 
 
procedure KeyDown(key: integer);//процедура KeyDown производит какое либо действие во время нажатия кнопки
begin
  case key of
    VK_Up: begin 
      Up := true;
      if not jump then time := Milliseconds; //Если не было прыжка, то засекаем время
      jump := true; //Прыжок был совершен
    end;
    VK_Right: Right := true; // Присваивает ИСТИНУ переменным во время нажатия стрелок
    VK_Left: Left := true;
  end;
end;
 
procedure KeyUp(key: integer);//процедура KeyUp производит какое либо действие во время отжатия кнопки
begin
  case key of
    VK_Up: Up := false;
    VK_Right: Right := false;//Присвоение ЛЖИ переменым во время отжатия стрелок
    VK_Left: Left := false;
  end;
end;
 
begin//Начало тела программы
  f := true; //Присваивание истины для выполнения цикла
  onkeydown := KeyDown; //Присвоение оригин/ой процедуре более простое название
  OnKeyUp := KeyUp;
  SetFontSize(20); //Размер шрифта
  SetFontStyle(fsItalic); //Шрифт
  lockdrawing; //Оператор анимации
  repeat//Цикличная анимация
    Window.Clear;
    FloodFill(0,0,clskyblue);
    SetBrushColor(clred);
    rectangle(0,425,1700,500);
    SetBrushColor(clyellow); //Цвет мяча
    Circle(x, y, 25); //Сам мяч
    SetBrushColor(clgreen);
    Rectangle(400, 325, 500, 350);
    Rectangle(200, 373, 300, 398);
    Rectangle(200, 273 ,300, 298);
    Rectangle(400, 225, 500, 250);
    Rectangle(200, 173, 300, 198);
    Rectangle(400, 125, 500, 150);
    Line(0, 425, 639, 425); //Линия "земли"
    y := y + 4;
    if (y > 400) or (x <= 500) and (x >= 380) and (y = 304) or (x <= 300) and (x >= 200) and (y = 352)  or (x <= 300) and (x >= 200) and (y=252) or (x <= 500) and (x >= 400) and (y=204)or (x <= 300) and (x >= 200) and (y=152) or (x <= 500) and (x >= 400) and (y=104)   then //Твердость платформ
    begin
      y := y - 4;
      jump := false; //Когда приземлились прыжок завершен
    end;
    if sqr(x - a) + sqr(y - b) <= 35 * 35 then //Если игрок коснулся мяча
    begin
      Score += 1; //Увеличиваем счет
      a := Random(619) + 10;
      b := Random(376) + 10;
    end
    else
    begin
      setbrushcolor(clred);
      circle(a, b, 10);
    end;
    sleep(40);
    if Up and (Milliseconds - time <= MAX_TIME) then y := y - 8; //Если UP/Right/Left - ИСТИНА то изменяет координаты мячика
    if Right then x := x + 4;
    if Left then x := x - 4;
    if y=400 then
    exit;
    SetBrushColor(clWhite);
    TextOut(10, 10, 'Счёт: ' + Score.ToString); //Выводим счет
    redraw; // Оператор анимации
  until not f; //Окончание цикла
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.05.2016, 16:36
Помогаю со студенческими работами здесь

мячик в vba
Изобразить движение мяча после удара (задается начальное положение мяча и вектор скорости). В процессе полёта мяч ударяется о пол, потолок...

мячик по стенке =)
По стенкам PaintBox не слишком быстро (заметно для пользователя) катится круг. В круге случайным образом выбирается точка. Рисовать...

Летающий мячик
Хочу сделать что бы pictureBox летал, и при касании с формой pictureBox отталкивался. Вот что я только сделал: for (int...

Мячик на лесенке
На вершине лесенки, содержащей N ступенек, находится мячик, который начинает прыгать по ним вниз, к основанию. Мячик может прыгнуть на...

Движущий мячик
Всем привет! Нужна помочь, а именно создать мячик(эллипс) и заставить его двигаться под действием гравитации. Другими словами,Падает...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru