Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 03.03.2015
Сообщений: 13
1

Битва танков

07.04.2015, 10:04. Просмотров 1896. Ответов 1
Метки нет (Все метки)

Здравствуйте. Есть вот такая задача: мы видим поле боя сбоку, на нем есть два танка. Один танк управляется игроком другой ботом. Задача каждого из них уничтожить противника. Они стреляют по очереди.
Игрок вводит угол наклона орудия и скорость снаряда. На месте падения снаряда должен отрисовываться кратер. Танк считается уничтоженным если радиус взрыва больше чем расстояние от центра танка до центра взрыва.

Есть некоторые соображения по алгоритму.
1. Знаю скорость полета можно посчитать дальность полета снаряда по формуле: L=(V^2*sin2a)/g.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2015, 10:04
Ответы с готовыми решениями:

Битва начинается
ограничение по времени на тест: 2 seconds ограничение по памяти на тест: 64 megabytes Наконец...

Битва между офисами в морской бой
Само условие Битва между офисами Время: 1000ms, Память: 128MB, Сложность: 30%; Попытка: 11,...

Реализация примитивных танков
У меня есть много танков вражеских и один мой. Я сам задаю их координаты. Мне нужно узнать какой...

Игры на подобие танков онлайн
Ищу браузерную игру на подобие танков онлайн главное чтоб игра была динамичной и интересной и...

1
Эксперт Pascal/Delphi
2357 / 1277 / 1483
Регистрация: 29.08.2014
Сообщений: 4,600
08.04.2015, 11:39 2
Лучший ответ Сообщение было отмечено Gomagaba как решение

Решение

Если есть желание можете и дуло дорисовать. Проверял на PascalABC.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
uses GraphABC;
var
  p,a,cp,ca,x1,y1,x2,y2:integer;
  ok:boolean;
procedure drawtank(x,y,n:integer);
begin
if not ok then begin
  LockDrawing;
   SetPenColor(clwhite);
   SetBrushColor(clwhite);
   FillRectangle(10,10,WindowWidth,40);
   SetPenColor(clBlack);
   SetBrushColor(clwhite);
  TextOut(10,10,'Юзер: Power:'+inttostr(p)+' Angle:'+inttostr(a)); 
  TextOut(WindowWidth div 2,10,'Тупой бот: Power:'+inttostr(cp)+' Angle:'+inttostr(ca)); 
  if n=1 then begin Setpencolor(clBlue);SetBrushColor(clBlue);end
  else begin setpencolor(clRed);SetBrushColor(clred);end;
  fillpie(x,y,20,0,180);
  UnlockDrawing;
end;  
end;  
 
procedure drawshoot(x0,y0,aa,pp,n:integer);
var
  i:integer;
  Vx0,Vy0,t,x,y,tc:real;
begin
  Vx0:=pp*cos(aa*pi/180);
  Vy0:=pp*sin(aa*pi/180);
  t:=2*Vy0/9.81/50;
  tc:=0;
  for i:=1 to 50 do begin
     x:=x0+vx0*tc;
     y:=y0+vy0*tc-9.81*tc*tc/2;
  if n=1 then begin Setpencolor(clBlue);SetBrushColor(clBlue);end
  else begin setpencolor(clRed);SetBrushColor(clred);end;
     circle(round(x),2*y0-round(y),1);
     tc:=tc+t;
   end;
   SetBrushColor(clwhite);
   SetPenColor(clwhite);
   circle(round(x),round(y),20);
   if ((x-10<x1+10) and (x+10>x1+10)) or ((x-10<x1-10) and (x+10>x1-10)) or (x=x1) then begin 
     textout(100,100,'Тупой бот победил');
     SetBrushColor(clyellow);
     SetPenColor(clred);
     for i:=1 to 40 do begin circle(x1,y1,i);Sleep(100);end;
ok:=true;
   end;  
   if ((x-10<x2+10) and (x+10>x2+10)) or ((x-10<x2-10) and (x+10>x2-10))or (x=x2) then begin 
     textout(100,100,'Юзер победил');
     SetBrushColor(clyellow);
     SetPenColor(clred);
     for i:=1 to 40 do begin circle(x2,y2,i);Sleep(100);end;
ok:=true;
   end;  
end;  
 
procedure MoveT(Key:Integer);
begin
  if Key=VK_Escape then halt; 
  if not ok then 
 case Key of
    VK_Down: if p>0 then p:=p-1;
    VK_Up: if p<100 then p:=p+1;
    VK_Left: if a>0 then a:=a-1;
    VK_Right: if a<180 then a:=a+1;
    VK_Space: begin
      drawshoot(x1,y1,a,p,1);
      ca:=random(180+1);
      cp:=random(100+40);
      if not ok then drawshoot(x2,y2,ca,cp,0);
    end;
 end; 
 drawtank(x1,y1,1);
 drawtank(x2,y2,0);
end;
 
begin
  randomize;
  SetWindowWidth(640);
  SetWindowHeight(480);
  a:=0;p:=0;ca:=0;cp:=0;
  x1:=50;y1:=WindowHeight-5;
  x2:=WindowWidth-40;y2:=WindowHeight-5;
  setpencolor(clgreen);
  SetBrushColor(clgreen);
  FillRectangle(0,WindowHeight-5,WindowWidth,WindowHeight);
  drawtank(x1,y1,1);
  drawtank(x2,y2,0);
  OnKeyDown:=MoveT; 
  repeat
  until ok;
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2015, 11:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Комп для кодинга и танков
Посоветуйте конфигурацию чтобы покодить и в танки поиграть. Добавлено через 16 секунд PS:...

игровой компьютер для мир танков
В районе 50т.р Сейчас Intel core i5-760(2.8mhz..Lga1156.L3 8192kb.) ASUS P7P55D P55. kingston DDR3...

Сборка за 66к для ПАБГ и Танков
Нашел сборку за 66000 на этом сайте pkf1, что скажете нормальная? Мне нужно для ПАБГ и ТАНКОВ

Ошибка библиотек С++ при запуске танков
Вообщем перепробовал уже все, что только можно, эффекта нет, при запуске танков выдает ошибку....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.