Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
1

Написание игры.

07.11.2009, 16:26. Показов 3019. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте! Нужна помощь в написании игры на ТурбоПаскале. В игруху нужно вписать пушку, которая будет двигатся по окружности, но у меня что-то не получается. Пожалуйста, помогите!
Файлы прилагаются. Я, конечно, понимаю, что это муторно, но если сложно показать - то хотябы расскажите, как сделать.
Вложения
Тип файла: rar Puha.rar (1.1 Кб, 68 просмотров)
Тип файла: rar game.rar (4.1 Кб, 91 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2009, 16:26
Ответы с готовыми решениями:

Написание программы игры "Угадай число"
Написать программу игры "Угадай число". Правила игры следующие: Играют двое, один задумывает число,...

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

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

Написание игры "Lines"
помогите написать игру lines :(

14
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
08.11.2009, 06:57  [ТС] 2
Видимо, никто помогать не хочет(((
0
Эксперт по компьютерным сетямЭксперт Pascal/Delphi
4190 / 1291 / 237
Регистрация: 27.07.2009
Сообщений: 3,962
08.11.2009, 09:32 3
Цитата Сообщение от Oboldui Посмотреть сообщение
Видимо, никто помогать не хочет(((
во фрилансе охотно помогут. Такие громоздкие задачи там любят.
0
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
08.11.2009, 11:53  [ТС] 4
Ну, на то он и фриланс. А ведь темка-то не во фрилансе Буду ждать благодетеля, пока подумаю сам. Или ещё куда-нибудь напишу
0
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
09.11.2009, 12:57  [ТС] 5
Хорошо. Помогите тогда хотя бы с пушкой. Вот есть такая вот программа:
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
uses crt,graph;
var a,b,gd,gm: integer;
     x0,x1,x2,x3,x4,y0,y1,y2,y3,y4: integer;
     alpha, beta, koef: real;
     ch: char;
 
begin
 clrscr;
 initgraph(gd, gm, ' ');
 alpha:= 0;
 koef:= 1;
 x0:= 300;
 y0:= 300;
 a:= 100;
 b:= 20;
 beta:= arctan(b/a);
 setcolor (15);
 
  repeat
   line (x1, y2, x2, y2);
   line (x2, y2, x3, y3);
   line (x3, y3, x4, y4);
   line (x4, y4, x1, y1);
   x1:= x0;
   y1:= y0;
   x2:= x0+round(a*cos(alpha));
   y2:= y0+round(a*sin(alpha));
   x3:= x0+round(sqrt(sqr(a)+sqr(b))*cos(alpha-beta));
   y3:= y0+round(sqrt(sqr(a)+sqr(b))*sin(alpha-beta));
   x4:= x0+round(b*cos(alpha-pi/2));
   y4:= y0+round(b*sin(alpha-pi/2));
    ch:= readkey;
    cleardevice;
 
     case ch of
      #77: begin
               koef:= 1;
               alpha:= alpha+koef*0.1:
              end;
      #75: begin
               koef:= -1;
               alpha:= alpha+koef*0.1;
              end;
      #27: break;
     end;
 
   if alpha>=2*pi then alpha :=0;
    delay(10);
 
  until ch= #27;
 
closegraph;
end.
Представьте, что это - пушка Нужно ограничить сектор движения до 180 градусов. Надеюсь, понятно обьяснил, а то я не очень говорить умею Короче, нужно чтобы прямоугольник не полный круг путешествовал, а только половину
З.Ы.: Надеюсь, хоть с этим тут помогут.
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
09.11.2009, 13:59 6
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
uses crt,graph;
var a,b,gd,gm: integer;
     x0,x1,x2,x3,x4,y0,y1,y2,y3,y4: integer;
     alpha, beta, koef: real;
     ch: char;
 
begin
 clrscr;
 initgraph(gd, gm, ' ');
 alpha:= 0;
 koef:= 1;
 x0:= 300;
 y0:= 300;
 a:= 100;
 b:= 20;
 beta:= arctan(b/a);
 setcolor (15);
  repeat
   x1:= x0;
   y1:= y0;
   x2:= x0+round(a*cos(alpha));
   y2:= y0-round(a*sin(alpha));
   x3:= x0+round(sqrt(sqr(a)+sqr(b))*cos(alpha-beta));
   y3:= y0-round(sqrt(sqr(a)+sqr(b))*sin(alpha-beta));
   x4:= x0+round(b*cos(alpha-pi/2));
   y4:= y0-round(b*sin(alpha-pi/2));
   line (x1, y1, x2, y2);
   line (x2, y2, x3, y3);
   line (x3, y3, x4, y4);
   line (x4, y4, x1, y1);
    ch:= readkey;
    cleardevice;
      case ch of
      #75: begin
            koef:= 1;
            alpha:= alpha+0.1;
            if abs(alpha)>=pi then alpha :=pi;
            delay(10);
           end;
      #77: begin
            koef:= -1;
            alpha:= alpha+koef*0.1;
            if alpha<=0 then alpha :=0;
            delay(10);
           end;
      #27: break;
     end;
  until ch= #27;
closegraph;
end.
Добавлено через 1 минуту
Oboldui, Кстати твой код вообще не рабочий. Сначала линии рисуешь, потом координаты определяешь, да и стрелки наоборот нужно, левая влево, правая вправо.
1
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
09.11.2009, 15:00  [ТС] 7
О_о У меня он работает о_О Странно...
З.Ы.: Спасибо за код.

Добавлено через 14 минут
Цитата Сообщение от Puporev Посмотреть сообщение
Oboldui, Кстати твой код вообще не рабочий. Сначала линии рисуешь, потом координаты определяешь, да и стрелки наоборот нужно, левая влево, правая вправо.
Понял в чём дело) Я-дурак, ошибок наделал) Там у первой линии координаты неправильные, стоят (x1, y2, x2, y2), а нужно (x1, y1, x2, y2), и вместо точки с запятой двоеточие кое-где поставил. Да и я ещё не волшебник - только учусь)
0
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
10.11.2009, 06:53  [ТС] 8
Теперь осталось только вписать всё это дело в игру... Как вы думаете, лучше оформить через процедуру, или в тупую переписать всё где-нибудь в теле программы?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
10.11.2009, 07:09 9
Oboldui, Если это выполняется однократно, то без разницы. Если же это действие может вызываться несколько раз в разных местах программы, то только процедура.
0
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
12.11.2009, 11:33  [ТС] 10
Сведущие в этих делах люди посоветовали переписать программу, чтобы процедуры выводились не через putpixel, а рисовались в указанных координатах. Говорят так легче. Теперь вот незнаю, что делать
0
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
12.11.2009, 15:17  [ТС] 11
Тьфу ты, putpixel... Putimage, воть Только счас заметил
0
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
14.11.2009, 12:03  [ТС] 12
Решил игрушку переписать, постепенно добавляя новые элементы. Вот нарисовал землю и пушку. Помогите теперь самолётики запустить) Которые в NLO прописаны.
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
 uses crt, graph;
 var gd, gm: integer;
     a,b: integer;
     x0,x1,x2,x3,x4,y0,y1,y2,y3,y4: integer;
     alpha, beta, koef: real;
     ch: char;
 
  procedure NLO;
    var l:integer;
    begin randomize;l:=random(256);
        setcolor(l);
        line(9,8,7,8);line(7,9,5,9);
        line(5,10,3,10);line(3,11,1,11);
        line(1,11,1,13);line(2,14,4,14);
        line(3,15,5,15); line(5,16,8,16);
        line(7,17,10,17);line(10,18,16,18);
        line(16,19,35,19);line(35,18,41,18);
        line(41,17,44,17);line(44,16,46,16);
        line(46,15,48,15);line(48,14,49,14);
        line(49,14,49,11);line(49,11,48,11);
        line(48,10,46,10);line(46,9,44,9);
        line(44,8,41,8);line(41,7,41,9);
        line(41,9,40,9);line(40,10,37,10);
        line(37,11,33,11);line(33,12,17,12);
        line(17,11,13,11);line(1223,10,10,10);
        line(10,9,9,8);
        setfillstyle(1,l);floodfill(24,15,l);
        putpixel(31,16,0);putpixel(42,12,0);
        putpixel(18,16,0);putpixel(7,13,0);
        setcolor(11);
        line(18,11,32,11);line(32,10,36,10);
        line(36,9,39,9);line(40,8,40,5);
        line(39,4,36,4);line(36,3,32,3);
        line(32,2,18,2);line(18,3,14,3);
        line(14,4,11,4);line(10,5,10,8);
        line(11,9,14,9);line(14,10,18,10);
        setfillstyle(1,11);floodfill(25,7,11);
     end;
 
      procedure pulka;
               begin
               setcolor(5);
               line(2,6,2,3);line(3,6,3,0);line(4,6,4,3);
               setcolor(13);
               line(3,8,3,7);
               setcolor(14);
               line(1,5,1,7);line(2,7,2,9);
               putpixel(3,9,14);line(4,7,4,9);line(5,5,5,7);
               end;
 
    procedure gameover(b,v:integer);
      var u,o:integer;
          i:^integer;
          siz:word;
     begin
      siz:=imagesize(0,100,1,100);
      getmem(i,siz);
      getimage(0,100,1,100,i^);
      if v>500 then begin
      outtextxy(300,240,'Y');
      outtextxy(308,240,'o');
      outtextxy(316,240,'u');
      outtextxy(324,240,' ');
      outtextxy(332,240,'W');
      outtextxy(340,240,'I');
      outtextxy(348,240,'N');
                    end;
      if b>500 then begin
                       outtextxy(300,240,'G');
                       outtextxy(308,240,'a');
                       outtextxy(316,240,'m');
                       outtextxy(324,240,'e');
                       outtextxy(332,240,'_');
                       outtextxy(340,240,'O');
                       outtextxy(348,240,'v');
                       outtextxy(356,240,'e');
                       outtextxy(364,240,'r');
                       delay(450);outtextxy(330,260,':');
                                    outtextxy(338,260,'-');
                                    outtextxy(346,260,'>');
                    end;
      delay(64);delay(64);
      delay(64);
      for u:=0 to 640 do
      for o:=0 to 480 do begin
                           putimage(u,o,i^,copyput);
                         end;
     end;
 
     procedure pvo;
     var a,b,gd,gm: integer;
     x0,x1,x2,x3,x4,y0,y1,y2,y3,y4: integer;
     beta, koef: real;
     ch: char;
begin
 x0:= 300;
 y0:= 410;
 a:= 70;
 b:= 10;
 beta:= arctan(b/a);
 setcolor (12);
   x1:= x0;
   y1:= y0;
   x2:= x0+round(a*cos(alpha));
   y2:= y0-round(a*sin(alpha));
   x3:= x0+round(sqrt(sqr(a)+sqr(b))*cos(alpha-beta));
   y3:= y0-round(sqrt(sqr(a)+sqr(b))*sin(alpha-beta));
   x4:= x0+round(b*cos(alpha-pi/2));
   y4:= y0-round(b*sin(alpha-pi/2));
   line (x1, y1, x2, y2);
   line (x2, y2, x3, y3);
   line (x3, y3, x4, y4);
   line (x4, y4, x1, y1);
   end;
 
begin
initgraph(gd, gm,' ');
 setcolor(4);
     line(0,55,640,55);
     line(0,479,0,430);
     line(0,430,639,430);
     line(639,430,639,479);
     line(639,479,0,479);
     setfillstyle(6,1);
     floodfill(10,470,4);
 alpha:= 0;
 koef:= 1;
 
repeat
     SetViewPort(200, 300, 400, 420, ClipOn);
     ClearViewPort;
     SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);
 
     pvo;
  ch:= readkey;
  if ch=#0 then ch:=readkey;
      case ch of
      #75: begin
            koef:= 1;
            alpha:= alpha+0.1;
            if abs(alpha)>=pi then alpha :=pi;
            delay(1);
           end;
      #77: begin
            koef:= -1;
            alpha:= alpha+koef*0.1;
            if alpha<=0 then alpha :=0;
            delay(1);
           end;
     end;
until ch=#27;
 
closegraph;
end.
0
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
17.11.2009, 09:15  [ТС] 13
Тогда подскажите, пожалуйста, как сделать стрельбу. Очень прошу.
0
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
17.11.2009, 14:28  [ТС] 14
Вот, самолёт вписал. Помогите, очень прошу. Нужно, чтобы пушка пульками стреляла. Буду очень благодарен тем, кто поможет. Вот код без стрельбы:
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
 uses crt, graph;
 var gd, gm: integer;
     a,b: integer;
     x0,x1,x2,x3,x4,y0,y1,y2,y3,y4, xt,yt: integer;
     alpha, beta, koef: real;
     ch: char;
 
    procedure NLO; 
    var l:integer;
    begin randomize;l:=random(256);
        setcolor(l);
        line(9,8,7,8);line(7,9,5,9);
        line(5,10,3,10);line(3,11,1,11);
        line(1,11,1,13);line(2,14,4,14);
        line(3,15,5,15); line(5,16,8,16);
        line(7,17,10,17);line(10,18,16,18);
        line(16,19,35,19);line(35,18,41,18);
        line(41,17,44,17);line(44,16,46,16);
        line(46,15,48,15);line(48,14,49,14);
        line(49,14,49,11);line(49,11,48,11);
        line(48,10,46,10);line(46,9,44,9);
        line(44,8,41,8);line(41,7,41,9);
        line(41,9,40,9);line(40,10,37,10);
        line(37,11,33,11);line(33,12,17,12);
        line(17,11,13,11);line(1223,10,10,10);
        line(10,9,9,8);
        setfillstyle(1,l);floodfill(24,15,l);
        putpixel(31,16,0);putpixel(42,12,0);
        putpixel(18,16,0);putpixel(7,13,0);
        setcolor(1);
        line(18,11,32,11);line(32,10,36,10);
        line(36,9,39,9);line(40,8,40,5);
        line(39,4,36,4);line(36,3,32,3);
        line(32,2,18,2);line(18,3,14,3);
        line(14,4,11,4);line(10,5,10,8);
        line(11,9,14,9);line(14,10,18,10);
        setfillstyle(1,1);floodfill(25,7,1);
     end;
      procedure pulka;
               begin
               setcolor(5);
               line(2,6,2,3);line(3,6,3,0);line(4,6,4,3);
               setcolor(13);
               line(3,8,3,7);
               setcolor(14);
               line(1,5,1,7);line(2,7,2,9);
               putpixel(3,9,14);line(4,7,4,9);line(5,5,5,7);
               end;
 
     procedure pvo;
     var a,b,gd,gm: integer;
     x0,x1,x2,x3,x4,y0,y1,y2,y3,y4: integer;
     beta, koef: real;
     ch: char;
begin
 x0:= 300;
 y0:= 410;
 a:= 70;
 b:= 10;
 beta:= arctan(b/a);
 setcolor (12);
   x1:= x0;
   y1:= y0;
   x2:= x0+round(a*cos(alpha));
   y2:= y0-round(a*sin(alpha));
   x3:= x0+round(sqrt(sqr(a)+sqr(b))*cos(alpha-beta));
   y3:= y0-round(sqrt(sqr(a)+sqr(b))*sin(alpha-beta));
   x4:= x0+round(b*cos(alpha-pi/2));
   y4:= y0-round(b*sin(alpha-pi/2));
   line (x1, y1, x2, y2);
   line (x2, y2, x3, y3);
   line (x3, y3, x4, y4);
   line (x4, y4, x1, y1);
   end;
 
begin
initgraph(gd, gm,' ');
 setcolor(4);
     line(0,55,640,55);
     line(0,479,0,430);
     line(0,430,639,430);
     line(639,430,639,479);
     line(639,479,0,479);
     setfillstyle(11,1);
     floodfill(10,470,4);
 alpha:= 0;
 koef:= 1;
  pvo;
{repeat}
  xt:=getmaxx;
  ch:=#1;
  while  (ch<>#27) do begin
  if keypressed then
  begin
    SetViewPort(200, 300, 400, 420, ClipOn);
    ClearViewPort;
    SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);
    ch:= readkey;
    if ch=#0 then ch:=readkey;
       {cleardevice;}
        case ch of
        #75: begin
              koef:= 1;
              alpha:= alpha+0.1;
              if abs(alpha)>=pi then alpha :=pi;
              delay(1);
             end;
        #77: begin
              koef:= -1;
              alpha:= alpha+koef*0.1;
              if alpha<=0 then alpha :=0;
              delay(1);
             end;
       end;
       PVO;
   end;
       {until ch=#27; }
{repeat}
setfillstyle(1,blue); bar(xt,yt+100,xt-100,yt+75);
setcolor(1);
circle(xt-100,yt+87,12);
floodfill(xt-101,yt+87,1);
line(xt,yt+100,xt+20,yt+70);
line(xt+20,yt+70,xt+3,yt+70);
line(xt+3,yt+70,xt-50,yt+100);
floodfill(xt+5,yt+90,1);
setcolor(red);
circle(xt-90,yt+87,7);
setfillstyle(1,red);
floodfill(xt-90,yt+87,red);
circle(xt-60,yt+87,7);
floodfill(xt-60,yt+87,red);
circle(xt-30,yt+87,7);
floodfill(xt-30,yt+87,red);
delay(7000);
setfillstyle(solidfill,black); bar(xt-115,yt+70,xt+20,yt+100);
xt:=xt-2;
if xt<=0 then xt:=getmaxx;
end;
{until ch=#27;}
readkey;
closegraph;
end.
Извините за лишние закоментированные строки в коде. Просто это рабочий вариант, так сказать. Возможно, дэлэй больше чем нужно, у меня crt в паскале кривой. Стрельба должна вестись по нажатии пробела. Хотя бы посоветуйте что-нибудь, а?
0
1 / 1 / 0
Регистрация: 07.11.2009
Сообщений: 15
19.11.2009, 11:32  [ТС] 15
Всем, по всей видимости, лень. Тему можно закрыть.
0
19.11.2009, 11:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2009, 11:32
Помогаю со студенческими работами здесь

Написание игры "Кто хочет стать миллиардером"
Надо сформировать игру &quot;Кто хочет стать миллиардером&quot; нужно 5 тем и 15 вопросов для каждой темы.

Для каждой игры определить словесный результат игры
В одном массиве записано количество мячей, заброшеных баскетбольной командой в каждой из 15-ти...

Написание игры Рулетка
Пользователь «играет в рулетку». Он вводит целое число от 0 до 36. Компьютер запускает рулетку -...

Написание игры "виселица" или любой другой не сложной игры
нужна помощь в написании игры &quot;виселица&quot; или любой другой не сложной игры на с# по сети


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru