Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/140: Рейтинг темы: голосов - 140, средняя оценка - 4.90
0 / 0 / 4
Регистрация: 22.03.2011
Сообщений: 39

Написать программу, имитирующую игру в теннис

10.08.2012, 22:22. Показов 28077. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
«Теннис». Написать программу, имитирующую игру в теннис. Игровое поле представляет собой прямоугольник, по которому движется теннисный мячик. С правой стороны располагается «ракетка» игрока, которую можно передвигать вверх или вниз. Игра продолжается до тех пор, пока игрок не пропустит мячик 5 раз. В качестве второго игрока может выступать компьютер или другой игрок.
За ранее благодарен!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.08.2012, 22:22
Ответы с готовыми решениями:

Написать игру "теннис"
помогите сделать игру теннис в турбо паскале примерно вот так l * l чтоб две палки можно было...

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

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

29
0 / 0 / 4
Регистрация: 22.03.2011
Сообщений: 39
15.08.2012, 09:36  [ТС]
Студворк — интернет-сервис помощи студентам
ребяяяят как окончательно выглядит прога?
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
15.08.2012, 12:29
rassamaha42, что уж списать тяжко?
КонецСвета, с позволения. Tab у меня не заработал, сделал тупо влево-вправо стрелками соотвественно вверх-вниз.
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
uses crt,GraphABC,Events,Utils;                 //необходимые библиотеки подключены
var pr,px,py,kx,ky,ku,kc,pc,s: integer;          //переменные: положение ракетки, координаты мяча, коэффициенты отражения, положение ракетки компьютера
    c: char;                                //выбор пункта из меню
procedure KeyDown(Key: integer);           //процедура обработки нажтия клавиши
begin
  case Key of
VK_Up: if pr>10 then pr:=pr-10;           //если вверх, и если ракетка не достигла края экрана, сместить координаты ракетки на 10 вверх
VK_Down: if pr<490 then pr:=pr+10;        //то же, только вниз
VK_LEFT: if pc>10 then pc:=pc-10;
VK_right: if pc<490 then pc:=pc+10;
  end;
end;
 
procedure Pm;                             //процедура определения координат мячика
begin
if px<10 then                             //обработка левой стороны игрового поля
   begin
   if (py>pc-20) and (py<pc+20) then kx:=kx*(-1) else  //если координаты мяча совпадают с координатами ракетки, меняем коэффициент смешения по х на противоположный
      begin                                 //иначе
      showmessage('Вы упустили мячик!');    //выводим сообщение
      inc(kc);                              //увеличиваем счетчик упущенных мячей
      px:=485;                               //возвращаем мяч в исходную позицию у противоположной стенки
      py:=250;
      end;
   s:=random(2);
   if s=1 then ky:=ky*(-1);
   end;
if (py<10) or (py>490) then ky:=ky*(-1);  //если достиг стенки верхней или нижней - поменять коэффициент смещения на противоположный
if px>590 then                            //если достиг правой (игрока) стенки, проверяем
   if (py>pr-20) and (py<pr+20) then kx:=kx*(-1) else  //если координаты мяча совпадают с координатами ракетки, меняем коэффициент смешения по х на противоположный
   begin                                 //иначе
   showmessage('Вы упустили мячик!');    //выводим сообщение
   inc(ku);                              //увеличиваем счетчик упущенных мячей
   px:=15;                               //возвращаем мяч в исходную позицию у противоположной стенки
   py:=250;
   s:=random(2);
   if s=1 then ky:=ky*(-1);
   end;
px:=px+kx;                               //смещаем координаты на коэффициенты смещения
py:=py+ky;
end;
 
procedure Menu;
begin
textout(150,70,'Выбор режима: 1 игрок, 2 игрока');
c:=readkey;
textout(420,70,c);
readln;
end;
 
begin
hidecursor;
setwindowsize(600,500);                 //размер окна
menu;                                   //меню игры
lockdrawing;                            //запрет прорисовки в окне (мигание убираем)
kx:=5; ky:=1; px:=15; py:=250; pc:=250; pr:=250; //задаем координаты смещения и позицию мяча
repeat                                  //цикл с постусловием
  clearwindow;                          //очистить окно
  setbrushcolor(clgreen);               //цвет кисти зеленый
  rectangle(5,5,595,495);               //прямоугольник - поле
  Pm;                                   //процедура определения координат мяча
  setbrushcolor(clwhite);               //цвет кисти - белый
  circle(px,py,10);                     //мяч
  OnKeyDown:=KeyDown;                   //процедура нажатия клавиши
  if c='1' then                         // 1-1игрок, в остальных случаях 2 игрока
   pc:=py;                                //ракетка противника следует за мячом неотступно...
  setbrushcolor(clblack);               //цвет кисти - черный
  rectangle(592,pr-20,597,pr+20);       //ракетки
  rectangle(3,pc-20,8,pc+20);
  sleep(25);                             //задержка
  redraw;                               //перерисовка
until (ku=5) or (kc=5);                 //цикл повторяется до 5 пропущенных мячей
end.
1
0 / 0 / 4
Регистрация: 22.03.2011
Сообщений: 39
15.08.2012, 12:30  [ТС]
я просто непонял как собрать
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
15.08.2012, 12:30
rassamaha42, теперь все работает?
0
0 / 0 / 4
Регистрация: 22.03.2011
Сообщений: 39
15.08.2012, 12:31  [ТС]
Вы на какой версии паскаля работаете?
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
15.08.2012, 12:32
Цитата Сообщение от rassamaha42 Посмотреть сообщение
Вы на какой версии паскаля работаете?
Ну, лично этот код проверял на abc 3.0.1.35 от 2007 года.
Для abc.net желательно для корректности кое-что переделать.
Код
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
uses GraphABC,Events,Utils;                 //необходимые библиотеки подключены
var pr,px,py,kx,ky,ku,kc,pc,s: integer;          //переменные: положение ракетки, координаты мяча, коэффициенты отражения, положение ракетки компьютера
    c: char;                                //выбор пункта из меню
procedure KeyDown(Key: integer);           //процедура обработки нажтия клавиши
begin
  case Key of
VK_Up: if pr>10 then pr:=pr-10;           //если вверх, и если ракетка не достигла края экрана, сместить координаты ракетки на 10 вверх
VK_Down: if pr<490 then pr:=pr+10;        //то же, только вниз
VK_LEFT: if pc>10 then pc:=pc-10;
VK_right: if pc<490 then pc:=pc+10;
  end;
end;
 
procedure Pm;                             //процедура определения координат мячика
begin
if px<10 then                             //обработка левой стороны игрового поля
   begin
   if (py>pc-20) and (py<pc+20) then kx:=kx*(-1) else  //если координаты мяча совпадают с координатами ракетки, меняем коэффициент смешения по х на противоположный
      begin                                 //иначе
      showmessage('Вы упустили мячик!');    //выводим сообщение
      inc(kc);                              //увеличиваем счетчик упущенных мячей
      px:=485;                               //возвращаем мяч в исходную позицию у противоположной стенки
      py:=250;
      end;
   s:=random(2);
   if s=1 then ky:=ky*(-1);
   end;
if (py<10) or (py>490) then ky:=ky*(-1);  //если достиг стенки верхней или нижней - поменять коэффициент смещения на противоположный
if px>590 then                            //если достиг правой (игрока) стенки, проверяем
   if (py>pr-20) and (py<pr+20) then kx:=kx*(-1) else  //если координаты мяча совпадают с координатами ракетки, меняем коэффициент смешения по х на противоположный
   begin                                 //иначе
   showmessage('Вы упустили мячик!');    //выводим сообщение
   inc(ku);                              //увеличиваем счетчик упущенных мячей
   px:=15;                               //возвращаем мяч в исходную позицию у противоположной стенки
   py:=250;
   s:=random(2);
   if s=1 then ky:=ky*(-1);
   end;
px:=px+kx;                               //смещаем координаты на коэффициенты смещения
py:=py+ky;
end;
 
procedure Menu;
begin
textout(150,70,'Выбор режима: 1 игрок, 2 игрока');
readln(c);
textout(420,70,c);
end;
 
begin
setwindowsize(600,500);                 //размер окна
menu;                                   //меню игры
lockdrawing;                            //запрет прорисовки в окне (мигание убираем)
kx:=5; ky:=1; px:=15; py:=250; pc:=250; pr:=250; //задаем координаты смещения и позицию мяча
repeat                                  //цикл с постусловием
  clearwindow;                          //очистить окно
  setbrushcolor(clgreen);               //цвет кисти зеленый
  rectangle(5,5,595,495);               //прямоугольник - поле
  Pm;                                   //процедура определения координат мяча
  setbrushcolor(clwhite);               //цвет кисти - белый
  circle(px,py,10);                     //мяч
  OnKeyDown:=KeyDown;                   //процедура нажатия клавиши
  if c='1' then                         // 1-1игрок, в остальных случаях 2 игрока
   pc:=py;                                //ракетка противника следует за мячом неотступно...
  setbrushcolor(clblack);               //цвет кисти - черный
  rectangle(592,pr-20,597,pr+20);       //ракетки
  rectangle(3,pc-20,8,pc+20);
  sleep(25);                             //задержка
  redraw;                               //перерисовка
until (ku=5) or (kc=5);                 //цикл повторяется до 5 пропущенных мячей
end.
0
0 / 0 / 4
Регистрация: 22.03.2011
Сообщений: 39
15.08.2012, 12:38  [ТС]
Да все робит но есть вопрос вообще реально комп обыграть?
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
15.08.2012, 12:44
rassamaha42, это вряд ли. Мозгов на данный момент у компа - все одна строчка, и она означает, что ракетка всегда будет идти за мячом.
0
0 / 0 / 4
Регистрация: 22.03.2011
Сообщений: 39
15.08.2012, 12:45  [ТС]
Спасибо большое всем)
0
0 / 0 / 0
Регистрация: 31.10.2020
Сообщений: 5
31.10.2020, 17:18
Это полный код с меню и выбором между тем, играть с роботом или другом! Код работает стабильно на ABC.NET
Code
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
uses crt,GraphABC,Events,Utils;                 
var pr,px,py,kx,ky,ku,kc,pc, c, s: integer;         
 procedure Menu;
begin
textout(150,70,'Выбор режима: 1 игрок, 2 игрока');
readln(c);
textout(420,70,c);
end;
procedure KeyDown(Key: integer);           
begin
  case Key of
VK_Up: if pr>10 then pr:=pr-10;           
VK_Down: if pr<490 then pr:=pr+10;     
VK_W: if pc>10 then pc:=pc-10;
VK_S: if pc<490 then pc:=pc+10;
  end;
end;
 
procedure Pm;                             
begin
if px<10 then                             
   begin
   if (py>pc-20) and (py<pc+20) then kx:=kx*(-1) else  
      begin                                 
      px:=485;                               
      py:=250;
      end;
   s:=random(2);
   if s=1 then ky:=ky*(-1);
   end;
if (py<10) or (py>490) then ky:=ky*(-1);  
if px>590 then                           
   if (py>pr-20) and (py<pr+20) then kx:=kx*(-1) else  
   begin                                 
   px:=15;                               
   py:=250;
   s:=random(2);
   if s=1 then ky:=ky*(-1);
   end;
px:=px+kx;                               
py:=py+ky;
end;
 
begin  
hidecursor;
setwindowsize(600,500);                
Menu;
lockdrawing;                
kx:=random(1,5); ky:=random(1,5); px:=15; py:=250; pc:=250; pr:=250; 
if (c = 1) then begin
lockdrawing;                            
setwindowsize(600,500);                
kx:=5; ky:=1; px:=15; py:=250; pr:=250; 
repeat                               
  clearwindow;                        
  setbrushcolor(clgreen);            
  rectangle(5,5,595,495);             
  Pm;                               
  setbrushcolor(clwhite);              
  circle(px,py,10);                     
  OnKeyDown:=KeyDown;                  
  pc:=py;                             
  setbrushcolor(clblack);               
  rectangle(592,pr-20,597,pr+20);     
  rectangle(3,pc-20,8,pc+20);
  sleep(25);                           
  redraw;                              
until ku=5;                             
end else begin
repeat                                  
  clearwindow;                          
  setbrushcolor(clgreen);               
  rectangle(5,5,595,495);               
  Pm;                                   
  setbrushcolor(clwhite);              
  circle(px,py,10);                    
  OnKeyDown:=KeyDown;                   
  setbrushcolor(clblack);              
  rectangle(592,pr-20,597,pr+20);     
  rectangle(3,pc-20,8,pc+20);
  sleep(25);                              
  redraw;                             
until (ku=5) or (kc=5);   
end;             
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.10.2020, 17:18

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

Используя модуль CRT, написать программу имитирующую звездное небо
Всем привет. Помогите написать программу Решение задач должно быть представлено в 3 вариантах....

Написать программу, имитирующую калейдоскоп
1) Написать программу, имитирующую калейдоскоп. Экран условно делится вертикальной чертой на две...

Требуется написать программу, имитирующую работу кассового аппарата
Требуется написать программу, имитирующую работу кассового аппарата пользователь в цикле вводит...

Теннис
Коля и Вася решили поиграть теннис. Но вскоре директор увидел, что они бездельничают и прогнал их....


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru