Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 20.04.2011
Сообщений: 6
1

Глюк с игрой

20.04.2011, 03:51. Просмотров 655. Ответов 4
Метки нет (Все метки)


привет всем, честно говоря не смотрел есть ли похожие темы поэтому решил написать тут. Я написал одну игрушку, но в ней есть один глюк, который я никак не могу исправить. там есть процедуры КОРАБЛЬ и АТАКА, в первый раз все идет норм но во второй раз процедура КОРАБЛЬ не срабатывает почему то, может ошибка в цикле не пойму и надеюсь на вашу помощь и буду очень признателен. Внизу сам код игры.
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
USES Graph,CRT;
VAR s_tor,s_pod_kor,x_kor,y_kor,x_tor,y_tor, Device,Mode :Integer;
    imya,otvet,vibor :String;
    klavisha,a :Char;
 
   {operegayushie opisaniya procedur}
PROCEDURE MENU; forward;
PROCEDURE RISUNOK; forward;
PROCEDURE NACHALO; forward;
 
PROCEDURE ZAVERSHENIE_IGRI;
   BEGIN
      if s_pod_kor=0 then begin
       GotoXY(36,5); WriteLn('MAZILA')
      end;
      if s_pod_kor>=8 then begin
       GotoXY(36,5); WriteLn('Professional');
      end;
      if (s_pod_kor>=1) AND (s_pod_kor<=7) then begin
       GotoXY(36,5); WriteLn('Serednyak');
      end;
      GotoXY(30,7);
      WriteLn('Hotite sigrat eshe raz?');
      GotoXY(38,9);
      ReadLn(vibor);
      if vibor='da' then NACHALO else Halt
   END;
 
PROCEDURE SCHETCHIK;
   BEGIN
      s_tor:=s_tor+1;
      if s_tor>1 then ZAVERSHENIE_IGRI else RISUNOK
   END;
 
PROCEDURE NEPOPAL;
VAR hz :Integer;
   BEGIN
       hz:=100;
       repeat
        Sound(hz); Delay(3000);
        hz:=hz+20;
       until hz>400;
       repeat
        Sound(hz); Delay(3000);
        hz:=hz-20;
       until hz<10;
       NoSound;
    SCHETCHIK;
   END;
 
PROCEDURE POPAL;
VAR hz :Integer;
   BEGIN
    {sdelat vzriv}
    s_pod_kor:=s_pod_kor+1;
    hz:=100;
    repeat
     Sound(hz); Delay(3000);
     hz:=hz+20;
    until hz>1000;
    NoSound;
    SCHETCHIK;
   END;
 
PROCEDURE ATAKA;
   BEGIN
    y_tor:=420;
    repeat
     SetColor(White);
     Ellipse(x_kor,y_kor,0,360,20,7);
     Ellipse(x_tor,y_tor,0,360,3,15);
     Delay(2000);
     SetColor(Black);
     Ellipse(x_kor,y_kor,0,360,20,7);
     Ellipse(x_tor,y_tor,0,360,3,15);
     x_kor:=x_kor+1;  y_tor:=y_tor-1;
    until y_tor<y_kor;
    if (x_tor<=x_kor+20) AND (x_tor>=x_kor)
      OR (x_tor>=x_kor-20) AND (x_tor<=x_kor) then POPAL else NEPOPAL;
   END;
 
PROCEDURE KORABL;
   BEGIN
    x_kor:=40;
    repeat
     SetColor(White);
     Ellipse(x_kor,y_kor,0,360,20,7);
     Delay(2000);
     SetColor(Black);
     Ellipse(x_kor,y_kor,0,360,20,7);
     x_kor:=x_kor+1;
     if x_kor>620 then x_kor:=40;
     if KeyPressed then klavisha:=ReadKey;
    until klavisha=#32;
    ATAKA;
   END;
 
PROCEDURE RISUNOK;
VAR y_line,x_line :Integer;
   BEGIN
    ClearDevice;
    SetColor(Cyan);
    Line(0,35,640,35);  Line(0,455,640,455);
    SetColor(Magenta);
    y_line:=458;
    repeat
     Line(0,y_line,640,y_line);
     y_line:=y_line+3
    until y_line>480;
    x_line:=0;
    repeat
     Line(x_line,458,x_line,480);
     x_line:=x_line+5
    until x_line>640;
    GotoXY(1,2);
    WriteLn(imya,'  ', 'TopIIeDo=',s_tor, '  ', 'y6uTue KopaBJIu=',s_pod_kor);
    KORABL;
   END;
 
PROCEDURE NACHALO;
   BEGIN
     ClearDevice;
     s_tor:=0; s_pod_kor:=0;
     Write('Vvedite vashe imya  ');
     ReadLn(imya);
     RISUNOK;
   END;
 
PROCEDURE Developer;
  BEGIN
    ClearDevice;
    SetTextStyle(0,0,1);
    OutTextXY(10,20,'Developer Ahbulatov Alidibir');
    OutTextXY(90,40,'student of group P-23');
    SetTextStyle(3,0,1);
    OutTextXY(250,400,'Copyright @ Ahbulatov Alidibir. 2011 year');
    ReadKey;
    if ReadKey=#13 then MENU;
  END;
 
PROCEDURE Help;
  BEGIN
    ClearDevice;
    SetTextStyle(1,0,4);
    OutTextXY(160,20,'TORPEDNAYA ATAKA');
    SetTextStyle(2,0,8);
    OutTextXY(220,60,'POMOSH B UGPE');
    SetTextStyle(0,0,1);
    OutTextXY(1,120,'CmucJl ugpu zakluchaetca B Tom shTo6u cTpeJlaT TopIIeDamu B JleTaushue kopa6Jlu');
    OutTextXY(1,140,'Ugpa 3akaN4uBaeTca kogDa noD6utux kopa6Jlei cTaNoBuTca 10.');
    OutTextXY(1,160,'U pocJle eTogo kompytep aNaJlu3upyeT Bashu ycpexu.');
    ReadKey;
    if ReadKey=#13 then MENU;
  END;
 
PROCEDURE MENU;
   BEGIN
    ClearDevice;
    SetTextStyle(4,0,4);
    OutTextXY(250,50, '1. Play');
    OutTextXY(250,90,'2. Help');
    OutTextXY(250,130,'3. Developer');
    OutTextXY(250,170,'4. Exit');
    a:=ReadKey;
   END;
 
BEGIN
    Device:=0;
    InitGraph(Device,Mode, 'C:/PROGRA~1/BP/BGI');
    DirectVideo:=false;
    x_kor:=40; y_kor:=80;
    x_tor:=450; y_tor:=420;
    MENU;
    CASE a OF
     '1': NACHALO;
     '2': Help;
     '3': Developer;
     '4': Halt;
    END;
    CloseGraph
END.
Добавлено через 21 минуту
извиняюсь первый код неправильный там с меню экспериментировал и все такое. Вот нормальный код этой игры без лишнего.
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
USES Graph,CRT;
VAR s_tor,s_pod_kor,x_kor,y_kor,x_tor,y_tor, Device,Mode :Integer;
    imya,otvet,vibor :String;
    klavisha :Char;
 
   {operegayushie opisaniya procedur}
PROCEDURE RISUNOK; forward;
PROCEDURE NACHALO; forward;
 
PROCEDURE ZAVERSHENIE_IGRI;
   BEGIN
      if s_pod_kor=0 then begin
       GotoXY(36,5); WriteLn('MAZILA')
      end;
      if s_pod_kor>=8 then begin
       GotoXY(36,5); WriteLn('Professional');
      end;
      if (s_pod_kor>=1) AND (s_pod_kor<=7) then begin
       GotoXY(36,5); WriteLn('Serednyak');
      end;
      GotoXY(30,7);
      WriteLn('Hotite sigrat eshe raz?');
      GotoXY(38,9);
      ReadLn(vibor);
      if vibor='da' then NACHALO else Halt
   END;
 
PROCEDURE SCHETCHIK;
   BEGIN
      s_tor:=s_tor+1;
      if s_tor>10 then ZAVERSHENIE_IGRI else RISUNOK
   END;
 
PROCEDURE NEPOPAL;
VAR hz :Integer;
   BEGIN
       hz:=100;
       repeat
        Sound(hz); Delay(3000);
        hz:=hz+20;
       until hz>400;
       repeat
        Sound(hz); Delay(3000);
        hz:=hz-20;
       until hz<10;
       NoSound;
    SCHETCHIK;
   END;
 
PROCEDURE POPAL;
VAR hz :Integer;
   BEGIN
    {sdelat vzriv}
    s_pod_kor:=s_pod_kor+1;
    hz:=100;
    repeat
     Sound(hz); Delay(3000);
     hz:=hz+20;
    until hz>1000;
    NoSound;
    SCHETCHIK;
   END;
 
PROCEDURE ATAKA;
   BEGIN
    y_tor:=420;
    repeat
     SetColor(White);
     Ellipse(x_kor,y_kor,0,360,20,7);
     Ellipse(x_tor,y_tor,0,360,3,15);
     Delay(2000);
     SetColor(Black);
     Ellipse(x_kor,y_kor,0,360,20,7);
     Ellipse(x_tor,y_tor,0,360,3,15);
     x_kor:=x_kor+1;  y_tor:=y_tor-1;
    until y_tor<y_kor;
    if (x_tor<=x_kor+20) AND (x_tor>=x_kor)
      OR (x_tor>=x_kor-20) AND (x_tor<=x_kor) then POPAL else NEPOPAL;
   END;
 
PROCEDURE KORABL;
   BEGIN
    x_kor:=40;
    repeat
     SetColor(White);
     Ellipse(x_kor,y_kor,0,360,20,7);
     Delay(2000);
     SetColor(Black);
     Ellipse(x_kor,y_kor,0,360,20,7);
     x_kor:=x_kor+1;
     if x_kor>620 then x_kor:=40;
     if KeyPressed then klavisha:=ReadKey;
    until klavisha=#32;
    ATAKA;
   END;
 
PROCEDURE RISUNOK;
VAR y_line,x_line :Integer;
   BEGIN
    ClearDevice;
    SetColor(Cyan);
    Line(0,35,640,35);  Line(0,455,640,455);
    SetColor(Magenta);
    y_line:=458;
    repeat
     Line(0,y_line,640,y_line);
     y_line:=y_line+3
    until y_line>480;
    x_line:=0;
    repeat
     Line(x_line,458,x_line,480);
     x_line:=x_line+5
    until x_line>640;
    GotoXY(1,2);
    WriteLn(imya,'  ', 'TopIIeDo=',s_tor, '  ', 'y6uTue KopaBJIu=',s_pod_kor);
    KORABL;
   END;
 
PROCEDURE NACHALO;
   BEGIN
     s_tor:=0; s_pod_kor:=0;
     Write('Vvedite vashe imya  ');
     ReadLn(imya);
     RISUNOK;
   END;
 
BEGIN
    Device:=0;
    InitGraph(Device,Mode, 'C:/PROGRA~1/TURBOP~1.1/BGI');
    DirectVideo:=false;
    x_kor:=40; y_kor:=80;
    x_tor:=450; y_tor:=420;
    NACHALO;
    ReadLn;
    CloseGraph
END.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2011, 03:51
Ответы с готовыми решениями:

Вывести тех, кто занимался игрой на скрипке
Program name; type spisok = record fio: string; inst: string; gody: integer; mer: string;...

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

глюк с процедурой
Здравствуйте! С процедурой у меня что-то неладное: без процедуры всё нормально работает, как только...

Глюк Паскаля?
Посмотрите или я чего-то не догоняю или паскаль действительно глючит. В коде прописано максимально...

4
Заблокирован
20.04.2011, 04:36 2
Нужно после строки 30 прописать:
Pascal
1
klavisha:=ReadKey;
Добавлено через 7 минут
Спасибо - прикольно )).
Можно еще менять скорости корабля или торпеды - для развития сюжета.
1
0 / 0 / 0
Регистрация: 20.04.2011
Сообщений: 6
20.04.2011, 04:53  [ТС] 3
Irinek, эт конечно останавливает выполнение процедуры КОРАБЛЬ но эт не совсем то что я хотел, мне нужно чтоб после первого цикла программы Корабль плыл снова слева направо как и впервый раз а у меня он во второй раз уже плывет вместе с торпедой снизу которую вызываю по нажатию пробела. Впервый раз все это работает только во втором цикле проги уже они вместе идут и КОРАБЛЬ и АТАКА. а если вставить реадкей как вы написали то он во второй раз просто останавливает игру и приходится нажимать какую нибудь кнопку чтобы плыл корабль, а мне нужно чтоб и во второй раз корабль плыл только без нажатия какой либо кнопки. Это возможно?

Добавлено через 10 минут
IrineK, на счет скорости можно конечно поменять но хотелось бы чтоб сначала игра работала без глюков, а потом уже можно и меню добавить и все остальное.
0
Заблокирован
20.04.2011, 04:54 4
Так нормально - вызываете корабль (ANY KEY) и торпеду (SPACE).

По-другому как-то в той логике вызовов, которая реализована у вас, пока не видится.
Может, утро вечера мудреней? )
1
0 / 0 / 0
Регистрация: 20.04.2011
Сообщений: 6
20.04.2011, 04:59  [ТС] 5
IrineK, я тоже об этом думал, сколько бился над этим и никак не получалось, ну ладно вы еще подумайте может еще какой нибудь способ вспомните.)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2011, 04:59

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

Интересный глюк. Или не глюк? Смена дефолтного пути
Вкратце объясняю: Есть приложение, которое подключается к БД Access. Путь к файлу БД в строке...

Глюк или не глюк в Siglent SDS 1192CML..?
Всем привет! У меня тоже имеется Siglent SDS 1192CML, пора создавать клуб любителей ентого девайса...

Глюк печатания и глюк порчи константы
Дамы и господа! Я столкнулся с двумя глюками, которые не нашёл в списке распространённых ошибок....

Неполадки с игрой
Ошибки при запуске


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

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

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