Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.248.159] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Всем привет! Есть код:
Program Space; Uses Graph, Crt,Dos; const centrx=300; centry=160; procedure vretrace; begin repeat until port[$3da] and 8=0; repeat until port[$3da] and 8>0; end; procedure game; var ZemX, ZemY,MercX,MercY,MarsX,MarsY,VenerX,VenerY,UpiterX,UpiterY,SatX,SatY:integer; VisualPage,i:Integer; begin repeat SetVisualPage(1-VisualPage); VisualPage := VisualPage+1; SetActivePage(1 -VisualPage); vretrace; ClearDevice; For i := 1 to 100 do PutPixel(centrx+Round(70*cos((i+VisualPage/9)*Pi/50+0.7)), centry+Round(60*sin((i+VisualPage/9)*Pi/50-Pi/500)),1); For i := 1 to 100 do PutPixel(centrx+Round(90*cos((i+visualpage/7)*Pi/50+0.7)), centry+Round(83*sin((i+visualpage/7)*Pi/50-Pi/500)),2); For i := 1 to 100 do PutPixel(centrx+Round(110*cos((i+VisualPage/7)*Pi/50+0.65)), centry+Round(100*sin((i+VisualPage/7)*Pi/50-Pi/500)),3); For i := 1 to 100 do PutPixel(centrx+Round(131*cos((i+VisualPage/7)*Pi/50+0.65)), centry+Round(120*sin((i+VisualPage/7)*Pi/50-Pi/500)),4); For i := 1 to 100 do PutPixel(centrx+Round(173*cos((i+VisualPage/5)*Pi/50+0.70)), centry+Round(155*sin((i+VisualPage/5)*Pi/50-Pi/500)),5); For i := 1 to 100 do PutPixel(centrx+Round(212*cos((i+VisualPage/5)*Pi/50+0.65)), centry+Round(195*sin((i+VisualPage/5)*Pi/50-Pi/500)),6); {--------------------------------------------------------------} {mercury} MercX :=centrx-Round(70*cos((i-VisualPage/5)*Pi/50+0.7)); MercY:=centry-Round(60*sin((i-VisualPage/5)*Pi/50-Pi/500)); setcolor(lightgray); circle(MercX,MercY,4); SetFillStyle(1,LightGray); floodfill(MercX,MercY,lightgray); outtextxy(MercX-13,MercY-8,'1'); {---------------------------------------------------------------} {venera} VenerX :=centrx-Round(90*cos((i-VisualPage/4)*Pi/50+0.7)); VenerY:=centry-Round(83*sin((i-VisualPage/4)*Pi/50-Pi/500)); setcolor(lightred); circle(VenerX,VenerY,7); SetFillStyle(1,Lightred); floodfill(VenerX,VenerY,lightred); outtextxy(VenerX-13,VenerY-10,'2'); {-----------------------------------------------------------------} {zemlia} ZemX:=centrX+Round(110*cos((i-VisualPage/3)*Pi/50+0.65)); ZemY:=centrY+Round(100*sin((i-1-VisualPage/3)*Pi/50-Pi/500)); setcolor(lightblue); circle(ZemX,ZemY,7); SetFillStyle(1,Lightblue); setcolor(2); circle(ZemX,ZemY,7); SetFillStyle(1,2); floodfill(ZemX,ZemY,2); setcolor(blue); circle(zemx+1,zemy+1,3); SetFillStyle(1,blue); floodfill(ZemX,ZemY,blue); circle(zemx+3,zemy-3,2); SetFillStyle(1,blue); floodfill(ZemX+3,ZemY-3,blue); circle(zemx-4,zemy-4,2); SetFillStyle(1,blue); floodfill(ZemX-4,ZemY-4,blue); setcolor(2); outtextxy(ZemX-13,ZemY-10,'3'); {-----------------------------------------------------------------} MarsX:=Centrx+Round(131*cos((i-VisualPage/2)*Pi/50+0.65)); MarsY:=Centry+Round(120*sin((i-VisualPage/2)*Pi/50-Pi/500)); setcolor(6); circle(MarsX,MarsY,4); SetFillStyle(1, 6); floodfill(MarsX,MarsY,6); outtextxy(Marsx-11,MarsY-1,'4'); {---------------------------------------------------------------------} {Upiter} UpiterX:=Centrx+Round(173*cos((i-VisualPage/1)*Pi/50+0.7)); UpiterY:=Centry+Round(155*sin((i-VisualPage/1)*Pi/50-Pi/500)); setcolor(6); circle(UpiterX,UpiterY,12); SetFillStyle(1, 6); floodfill(UpiterX,UpiterY,6); outtextxy(Upiterx-15,UpiterY+10,'5'); {---------------------------------------------------------------------} {Saturn} SatX:=Centrx+Round(212*cos((i-VisualPage/5)*Pi/50+0.65)); SatY:=Centry+Round(195*sin((i-VisualPage/5)*Pi/50-Pi/500)); setcolor(9); circle(SatX,SatY,12); setfillstyle(1,9); floodfill(SatX,SatY,9); setcolor(13); ellipse(Satx,Saty-1,29,20,28,5); outtextxy(Satx-22,SatY+10,'6'); setcolor(9); line(satx-10,saty-6,satx+10,saty-6); {---------------------------------------------------------------------} {solnce} setcolor(yellow); circle(300,160,30); SetFillStyle(1, yellow); floodfill(300,160,yellow); For i := 1 to 100 do line(300,160,centrx+Round(31*cos((i+VisualPage/2)*Pi/50)),centry+Round(25*sin((i+VisualPage/2)*Pi/50-Pi/500))); {----------------------------------------------------------------} OutTextXY(centrx+215,centry+20,'Planets'); OutTextXY(centrx+200,centry+35,'1 - Mercury'); OutTextXY(centrx+200,centry+50,'2 - Venera'); OutTextXY(centrx+200,centry+65,'3 - Earth'); OutTextXY(centrx+200,centry+80,'4 - Mars'); OutTextXY(centrx+200,centry+95,'5 - Upiter'); OutTextXY(centrx+200,centry+110,'6 - Saturn'); until keyPressed end; Procedure MainMenu; Const menu:array[1..2] of string[20]=('New game!','Exit'); Var i,y1: integer; pos:byte; kb:char; Begin kb:=#1; SetTextStyle(4,0,2); pos:=1; y1:=centry-30; for i:=1 to 2 do begin if i=pos then begin setcolor(1); OutTextXY(230,y1,'New game!'); end else begin setcolor(15); OutTextXY(230,y1,'Exit'); end; y1:=y1+30; end; repeat y1:=centry-30; kb:=readkey; case kb of #72:if pos>1 then Dec(pos) else pos:=3; #80:if pos<2 then Inc(pos) else pos:=1; end; for i:=1 to 2 do begin if i=pos then begin setcolor(1); OutTextXY(230,y1,menu[i]); end else begin setcolor(15); OutTextXY(230,y1,menu[i]); end; y1:=y1+30; end; until kb=#13; begin if pos=1 then begin game; cleardevice; end; if pos=2 then halt; end; end; procedure grinit; var GrMode, GrError,GrDriver:Integer; begin GrDriver := EGA; GrMode := EGAHi; InitGraph(GrDriver, GrMode, 'C:\TP\BGI'); GrError := GraphResult; end; Var ch:char; { k:integer;} BEGIN Grinit; MainMenu; END. Теоретически должна создаваться модель солнечной системы, но что то нет. Пишу на PascalABC, выдает ошибку "Модуль Dos не найден". Судя по всему, я его не подключил? Вопрос - как это сделать, если это так? Во избежании дальнейших вопросов, прошу запустить, у кого запуститься, вдруг еще какие то ошибки будут. Заранее спасибо! |
Сообщ.
#2
,
|
|
|
Цитата Prapor48 @ я его не подключил? Сначала убедись, что он у тебя есть. |
Сообщ.
#3
,
|
|
|
Цитата min@y™ @ Сначала убедись, что он у тебя есть. Ну так, а как это сделать? Он качается и устанавливается, или как? Извините за такие вопросы. Исправил ошибку, ответ нашел на просторах паутины, код теперь выглядит так: Program Space; Uses GraphABC; const centrx=300; centry=160; procedure vretrace; begin repeat until port [$3da] and 8=0; repeat until port [$3da] and 8>0; end; procedure game; var ZemX, ZemY,MercX,MercY,MarsX,MarsY,VenerX,VenerY,UpiterX,UpiterY,SatX,SatY:integer; VisualPage,i:Integer; begin repeat SetVisualPage(1-VisualPage); VisualPage := VisualPage+1; SetActivePage(1 -VisualPage); vretrace; ClearDevice; For i := 1 to 100 do PutPixel(centrx+Round(70*cos((i+VisualPage/9)*Pi/50+0.7)), centry+Round(60*sin((i+VisualPage/9)*Pi/50-Pi/500)),1); For i := 1 to 100 do PutPixel(centrx+Round(90*cos((i+visualpage/7)*Pi/50+0.7)), centry+Round(83*sin((i+visualpage/7)*Pi/50-Pi/500)),2); For i := 1 to 100 do PutPixel(centrx+Round(110*cos((i+VisualPage/7)*Pi/50+0.65)), centry+Round(100*sin((i+VisualPage/7)*Pi/50-Pi/500)),3); For i := 1 to 100 do PutPixel(centrx+Round(131*cos((i+VisualPage/7)*Pi/50+0.65)), centry+Round(120*sin((i+VisualPage/7)*Pi/50-Pi/500)),4); For i := 1 to 100 do PutPixel(centrx+Round(173*cos((i+VisualPage/5)*Pi/50+0.70)), centry+Round(155*sin((i+VisualPage/5)*Pi/50-Pi/500)),5); For i := 1 to 100 do PutPixel(centrx+Round(212*cos((i+VisualPage/5)*Pi/50+0.65)), centry+Round(195*sin((i+VisualPage/5)*Pi/50-Pi/500)),6); {--------------------------------------------------------------} {mercury} MercX :=centrx-Round(70*cos((i-VisualPage/5)*Pi/50+0.7)); MercY:=centry-Round(60*sin((i-VisualPage/5)*Pi/50-Pi/500)); setcolor(lightgray); circle(MercX,MercY,4); SetFillStyle(1,LightGray); floodfill(MercX,MercY,lightgray); outtextxy(MercX-13,MercY-8,'1'); {---------------------------------------------------------------} {venera} VenerX :=centrx-Round(90*cos((i-VisualPage/4)*Pi/50+0.7)); VenerY:=centry-Round(83*sin((i-VisualPage/4)*Pi/50-Pi/500)); setcolor(lightred); circle(VenerX,VenerY,7); SetFillStyle(1,Lightred); floodfill(VenerX,VenerY,lightred); outtextxy(VenerX-13,VenerY-10,'2'); {-----------------------------------------------------------------} {zemlia} ZemX:=centrX+Round(110*cos((i-VisualPage/3)*Pi/50+0.65)); ZemY:=centrY+Round(100*sin((i-1-VisualPage/3)*Pi/50-Pi/500)); setcolor(lightblue); circle(ZemX,ZemY,7); SetFillStyle(1,Lightblue); setcolor(2); circle(ZemX,ZemY,7); SetFillStyle(1,2); floodfill(ZemX,ZemY,2); setcolor(blue); circle(zemx+1,zemy+1,3); SetFillStyle(1,blue); floodfill(ZemX,ZemY,blue); circle(zemx+3,zemy-3,2); SetFillStyle(1,blue); floodfill(ZemX+3,ZemY-3,blue); circle(zemx-4,zemy-4,2); SetFillStyle(1,blue); floodfill(ZemX-4,ZemY-4,blue); setcolor(2); outtextxy(ZemX-13,ZemY-10,'3'); {-----------------------------------------------------------------} MarsX:=Centrx+Round(131*cos((i-VisualPage/2)*Pi/50+0.65)); MarsY:=Centry+Round(120*sin((i-VisualPage/2)*Pi/50-Pi/500)); setcolor(6); circle(MarsX,MarsY,4); SetFillStyle(1, 6); floodfill(MarsX,MarsY,6); outtextxy(Marsx-11,MarsY-1,'4'); {---------------------------------------------------------------------} {Upiter} UpiterX:=Centrx+Round(173*cos((i-VisualPage/1)*Pi/50+0.7)); UpiterY:=Centry+Round(155*sin((i-VisualPage/1)*Pi/50-Pi/500)); setcolor(6); circle(UpiterX,UpiterY,12); SetFillStyle(1, 6); floodfill(UpiterX,UpiterY,6); outtextxy(Upiterx-15,UpiterY+10,'5'); {---------------------------------------------------------------------} {Saturn} SatX:=Centrx+Round(212*cos((i-VisualPage/5)*Pi/50+0.65)); SatY:=Centry+Round(195*sin((i-VisualPage/5)*Pi/50-Pi/500)); setcolor(9); circle(SatX,SatY,12); setfillstyle(1,9); floodfill(SatX,SatY,9); setcolor(13); ellipse(Satx,Saty-1,29,20,28,5); outtextxy(Satx-22,SatY+10,'6'); setcolor(9); line(satx-10,saty-6,satx+10,saty-6); {---------------------------------------------------------------------} {solnce} setcolor(yellow); circle(300,160,30); SetFillStyle(1, yellow); floodfill(300,160,yellow); For i := 1 to 100 do line(300,160,centrx+Round(31*cos((i+VisualPage/2)*Pi/50)),centry+Round(25*sin((i+VisualPage/2)*Pi/50-Pi/500))); {----------------------------------------------------------------} OutTextXY(centrx+215,centry+20,'Planets'); OutTextXY(centrx+200,centry+35,'1 - Mercury'); OutTextXY(centrx+200,centry+50,'2 - Venera'); OutTextXY(centrx+200,centry+65,'3 - Earth'); OutTextXY(centrx+200,centry+80,'4 - Mars'); OutTextXY(centrx+200,centry+95,'5 - Upiter'); OutTextXY(centrx+200,centry+110,'6 - Saturn'); until keyPressed end; Procedure MainMenu; Const menu:array[1..2] of string[20]=('New game!','Exit'); Var i,y1: integer; pos:byte; kb:char; Begin kb:=#1; SetTextStyle(4,0,2); pos:=1; y1:=centry-30; for i:=1 to 2 do begin if i=pos then begin setcolor(1); OutTextXY(230,y1,'New game!'); end else begin setcolor(15); OutTextXY(230,y1,'Exit'); end; y1:=y1+30; end; repeat y1:=centry-30; kb:=readkey; case kb of #72:if pos>1 then Dec(pos) else pos:=3; #80:if pos<2 then Inc(pos) else pos:=1; end; for i:=1 to 2 do begin if i=pos then begin setcolor(1); OutTextXY(230,y1,menu[i]); end else begin setcolor(15); OutTextXY(230,y1,menu[i]); end; y1:=y1+30; end; until kb=#13; begin if pos=1 then begin game; cleardevice; end; if pos=2 then halt; end; end; procedure grinit; var GrMode, GrError,GrDriver:Integer; begin GrDriver := EGA; GrMode := EGAHi; InitGraph(GrDriver, GrMode, 'C:\TP\BGI'); GrError := GraphResult; end; Var ch:char; { k:integer;} BEGIN Grinit; MainMenu; END. И ругается так: неизвестное имя "port". Почему так? |
Сообщ.
#4
,
|
|
|
Язык один паскаль, а диалекты разные. Ваш код написан для Turbo Pascal. А компилируете вы в Паскаль ABC.
Turbo Pascal - это устаревшая технология 80-90 тых годов. Паскаль ABC это выкидыш нашей "науки". В попытке возродить о что ушло в прошлое. Слово port служит для доступа к аппаратуре в Turbo Pascal(TP). В паскале ABC его нету. Не сделали. Так как с целью увеличения безопасности, прямой доступ к аппаратуре начали запрещать ещё с конца 80-тых. Начиная с Win 2000 такой способ окончательно закрыт. procedure vretrace; begin repeat until port[$3da] and 8=0; repeat until port[$3da] and 8>0; end; Этот код остался на задворках истории и заменить его нечем. Но просто так его выкинуть нельзя. Я рекомендую вместо этих строчек кода сделать паузу командой sleep(10); |
Сообщ.
#5
,
|
|
|
Цитата Pavia @ Язык один паскаль, а диалекты разные. Ваш код написан для Turbo Pascal. А компилируете вы в Паскаль ABC. Turbo Pascal - это устаревшая технология 80-90 тых годов. Паскаль ABC это выкидыш нашей "науки". В попытке возродить о что ушло в прошлое. Слово port служит для доступа к аппаратуре в Turbo Pascal(TP). В паскале ABC его нету. Не сделали. Так как с целью увеличения безопасности, прямой доступ к аппаратуре начали запрещать ещё с конца 80-тых. Начиная с Win 2000 такой способ окончательно закрыт. Всё сделал как высказали, скачал Turbo Pascal School Pak, там вроде бы уже все настроено и подключено. Прогресс, запускается, даже если не меняю код, то есть что со старым, что со sleep(10), появляется exe файл, запускаю его, и всё. Он открывается и тут же закрывается. Сижу на XP. Где я опять накосячил? |
Сообщ.
#6
,
|
|
|
Prapor48
Цитата Prapor48 @ Всё сделал как высказали, скачал Turbo Pascal School Pak, Я такого не говорил. Тем более School Pak, я бы не брал. Это неофициальная сборка и с такими я не работал. Цитата Prapor48 @ Сижу на XP. Где я опять накосячил? В 90-тых XP не было. Для Turbo Pascal нужен DOS или его эмулятор. И не забываем, что в строчке с InitGraph надо указать правильный путь к драйверу. InitGraph(GrDriver, GrMode, 'C:\TP\BGI'); |
Сообщ.
#7
,
|
|
|
Цитата Prapor48 @ Он открывается и тут же закрывается. У программы код дурацкий. Может вылетать при запуске. Если при запуске сработает тройное нажатие Enter, то выйдет из программы. Хотя такое событие маловероятное один раз на милион если не больше. В эмуляторе запустил картинка красивая. Прикреплённый файл_________________________________.png (13,22 Кбайт, скачиваний: 1195) ] |
Сообщ.
#8
,
|
|
|
Да я скачал то скул пак, потому что там уже все подключено, а сейчас попробовал в простом турбо паскале забить код. Жалуется что нету graph. Скачал его, закинул в папку, прописал путь, не получается. Прописал и создал путь как у вас, в C:\TP\BGI, опять жалуется. Хорошо, что хоть заработала. Можете рассказать поподробнее как запустили то?
|
Сообщ.
#10
,
|
|
|
Цитата Pavia @ Установка и настройка BP7.0 для WindowsXP Видео сборки Space.pas Ух ты, ну прям мини квест! Спасибо большое! Сделал все один в один, небольшие различия только когда путь прописываешь в свойствах компьютера, но это из за пути наверное. У меня вот так выглядит: C:\Program Files\NVIDIA Corporation\PhysX\Common;C:\Documents and Settings\All Users\Application Data\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\BP7.0\BIN. Тут просто надо стереть и написать C:\ как я понял. Дальше совсем интересно, микропроцессорными кодами был удивлён, у меня такой предмет в вузе, так что было прям знакомо. Но после того как makefile прописал все равно в консоли ошибка появляется, такая же как и до этого была. Я уже обрадовался прям, думаю все, сейчас заработает, ага. Не получилось блин. Свой код собирать не пробовал, не получится, я так думаю. |
Сообщ.
#11
,
|
|
|
В path надо добавить ";C:\BP7.0\BIN". Если он есть то добавлять не надо.
Это нужно для автоматизации. Что-бы при вызове в командной строке make, bp, tasm ОС могла сразу найти нужные утилиты. Иначе придётся везде прописывать полные пути к ним. С ассемблером можете не возится. Для тех у кого BP версии 7.1 или 7.01 это не нужно. Для тех у кого 7.0 могут взять файл во вложении и просто замените им свой. Это нужно для устроения ошибки runtime 200: Division by zero. Прикреплённый файлTURBO.zip (28,52 Кбайт, скачиваний: 238) |
Сообщ.
#12
,
|
|
|
Pavia, спасибо Вам огромное! Просто большое, простое человеческое спасибо! Вы мне очень помогли! Все заработало! Спасибо!
|
Сообщ.
#13
,
|
|
|
Pavia написал в личку. Может кто то еще подсказать, как запустить сие на Win7? Скачал вот XP Mode, но там какая то беда с путями указания файла, не пойму как указать нормально.
|
Сообщ.
#14
,
|
|
|
Prapor48
Для Windows Vista, Windows 7, Winoes8. Windows 10 нужен эмулятор доса. К примеру DosBox. И да DosBox надо настроить. А то по умолчанию по нажатию клавиши F9 досбокс закрывается. |
Сообщ.
#15
,
|
|
|
PaviaОкей, DosBox есть, когда то программировали в нем на ассемблере, но паскаль я там никогда не запускал. Сейчас попробовал покопаться - безрезультатно. Можете помочь настроить его или показать как там запустить мою программу.
|