Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2013, 16:13   #1
ololoshkaa
Новичок
Джуниор
 
Регистрация: 23.11.2013
Сообщений: 5
По умолчанию Делфи в Паскаль!

Всем доброго времени суток!
Столкнулся с такой проблемой:
есть программа в Delphi, которая рисует ночной городской пейзаж
вот она:
Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
{Событие на нажатие кнопки нарисовать }
procedure TForm1.Button1Click(Sender: TObject);
begin
 
with form1.Canvas do
begin
 // земля
 brush.color:=RGB(8,16,48);
rectangle(0,350,1000,710);
//небо
 brush.color:=RGB(4,3,35);
rectangle(0,0,1000,350);
// дома слева
  brush.color:=RGB(30,30,22);
  rectangle(0,125,150,550);
  brush.Color:=clGray;
  rectangle(200,200,350,500);
  brush.color:=RGB(200,195,138);
    brush.color:=RGB(25,19,16);
  rectangle(150,250,250,500);
   brush.color:=RGB(88,81,56);
 rectangle(200,425,375,536);
    // дома справа
       brush.color:=RGB(25,19,16);
       rectangle(725,100,875,400);
       brush.color:=RGB(94,91,65);
       rectangle(600,300,675,450);
        brush.color:=RGB(57,31,15);
       rectangle(650,350,750,550);
 
         brush.color:=RGB(64,75,99);
       rectangle(850,50,1000,575);
          brush.color:=RGB(53,54,54);
       rectangle(725,450,825,560);
 
// Луна
brush.Color:=clyellow;
Ellipse(250,25,350,125);
brush.Color:=RGB(4,3,35);
Ellipse(245,20,345,120);
// Звездочки
   brush.color:=RGB(254,255,211);
   Ellipse(475,90,478,93);
   Ellipse(500,100,503,103);
   Ellipse(525,125,528,128);
   Ellipse(550,163,553,166);
   Ellipse(625,163,628,166);
   Ellipse(634,125,637,128);
 
   //дорога
   brush.color:=RGB(85,84,86);
   rectangle(0,650,1000,700);
 
moveTo(375,650);
LineTo(525,350);
LineTo(550,350);
LineTo(440,650);
LineTo(375,650);
brush.Color:=RGB(85,84,86);
floodFill(425,600,clblack,fsBorder);
 
 
end;
end;
 
end.
Но для сдачи курсовой мне нужно переделать ее в Turbo Pascal! Когда я начал переделывать программу, возникло много ошибок, которых я не смог исправить. Прошу помочь мне в этом деле, буду очень-очень признателен! Заранее большое спасибо!!!
Вот, собственно, что у меня получилось:
Код:
program gorod;
uses graph, crt;
var gd, gr, err:integer;
begin
gd:=detect;
gr:=VGAHi;
InitGraph(gd,gr,' ');
err:=GraphResult;
if err=grOk then
begin
{Zemlya}
 brush.color:=RGB(8,16,48);
rectangle(0,350,1000,710);
{ Nebo}
 brush.color:=RGB(4,3,35);
rectangle(0,0,1000,350);
{ Bydunku zliva}
  brush.color:=RGB(30,30,22);
  rectangle(0,125,150,550);
  brush.Color:=clGray;
  rectangle(200,200,350,500);
  brush.color:=RGB(200,195,138);
    brush.color:=RGB(25,19,16);
  rectangle(150,250,250,500);
   brush.color:=RGB(88,81,56);
 rectangle(200,425,375,536);
    { Bydunku sprava }
       brush.color:=RGB(25,19,16);
       rectangle(725,100,875,400);
       brush.color:=RGB(94,91,65);
       rectangle(600,300,675,450);
        brush.color:=RGB(57,31,15);
       rectangle(650,350,750,550);
 
         brush.color:=RGB(64,75,99);
       rectangle(850,50,1000,575);
          brush.color:=RGB(53,54,54);
       rectangle(725,450,825,560);
 
{ Misyac   }
brush.Color:=clyellow;
Ellipse(250,25,350,125);
brush.Color:=RGB(4,3,35);
Ellipse(245,20,345,120);
{Zirku}
   brush.color:=RGB(254,255,211);
   Ellipse(475,90,478,93);
   Ellipse(500,100,503,103);
   Ellipse(525,125,528,128);
   Ellipse(550,163,553,166);
   Ellipse(625,163,628,166);
   Ellipse(634,125,637,128);
 
   {Doroga}
   brush.color:=RGB(85,84,86);
   rectangle(0,650,1000,700);
 
moveTo(375,650);
LineTo(525,350);
LineTo(550,350);
LineTo(440,650);
LineTo(375,650);
brush.Color:=RGB(85,84,86);
floodFill(425,600,clblack,fsBorder);
readkey;
closegraph;
end;
end.
ololoshkaa вне форума Ответить с цитированием
Старый 23.11.2013, 16:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
возникло много ошибок
Что-ж. Бывает. Выкладывай сюда тексты ошибок - посмотрим )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2013, 16:28   #3
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Размер экрана для vgahi - 640х480. Нужно исправлять координаты.
Максимальное количество цветов - 16.
Установка rgb палитры setrgbpalette
Выбор цвета setcolor
Код:
SetFillStyle(solidfill, цвет..); // установка сплошного стиля и цвета закраски
Bar(x1,y1,x2,y2); // рисуем закрашенный прчмоугольник
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 23.11.2013, 16:38   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

То есть, вам сначала нужно масштабировать координаты. Вместо brush.color setfillstyle , вместо rectangle - bar
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 23.11.2013, 16:43   #5
ololoshkaa
Новичок
Джуниор
 
Регистрация: 23.11.2013
Сообщений: 5
По умолчанию

сначала все ошибки были связаны с *brush.Color*
я почитал что это инструмент - кисть в делфи, и его нету в паскале
я просто поудалял все строки с ним
потом:
{ Misyac }
brush.Color:=clyellow;
Ellipse(250,25,350,125); <- и тут, после 125 требовало записать еще 2 числа через запятую
и когда я написал любые 2 числа, результат был очень плохой(
ololoshkaa вне форума Ответить с цитированием
Старый 23.11.2013, 16:57   #6
ololoshkaa
Новичок
Джуниор
 
Регистрация: 23.11.2013
Сообщений: 5
По умолчанию

Вот такой город получился в делфи:
Изображения
Тип файла: jpg Безымянный.JPG (58.8 Кб, 127 просмотров)
ololoshkaa вне форума Ответить с цитированием
Старый 23.11.2013, 17:10   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
когда я написал любые 2 числа, результат был очень плохой(
Это типо метод "авось проканает"?
Нужно не тупо вписывать а вдумчиво
Ellipse(250,25,350,125); заменяется на Circle(300,75,100);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2013, 17:53   #8
ololoshkaa
Новичок
Джуниор
 
Регистрация: 23.11.2013
Сообщений: 5
По умолчанию

О, спасибо большое
еще 1 вопрос
вот мне в дома нужно дорисовать окна, добавить еще светильник
вот как точно записать координаты, чтобы не гадать по пол часа, а сразу там где надо нарисовать?

Вот, переделал основные моменты
но не получается подобрать правильные координаты согласно рисунку в делфи(цвет, в принципе, не важен). Помогите пожалуйста, или поясните как правильно писать верные координати объектов

Код:
program gorod;
uses graph, crt;
var gd, gr, err:integer;
begin
gd:=detect;
gr:=vgahi;
initgraph(gd,gr,' ');
err:=graphresult;
if err=grOk then
begin
{Zemlya}
setfillstyle(solidfill, yellow);
bar(0,350,1000,710);
{Nebo}
setfillstyle(solidfill, blue);
bar(0,0,1000,350);
{Bydunku zliva}
setfillstyle(solidfill, red);
bar(0,125,150,550);
setfillstyle(solidfill, red);
bar(200,200,350,500);
setfillstyle(solidfill, green);
setfillstyle(solidfill, black);
bar(150,250,250,500);
setfillstyle(solidfill, yellow);
bar(200,425,375,536);
{Bydunku sprava}
setfillstyle(solidfill, brown);
bar(725,100,875,400);
setfillstyle(solidfill, red);
bar(600,300,675,450);
setfillstyle(solidfill, green);
bar(650,350,750,550);
setfillstyle(solidfill, yellow);
bar(850,50,1000,575);
setfillstyle(solidfill, white);
bar(725,450,825,560);
{Misyac}
setfillstyle(solidfill, yellow);
circle(300,75,100);
setfillstyle(solidfill, blue);
circle(295,70,95);
{Zirku}
setfillstyle(solidfill, yellow);
circle(475,90,478);
circle(500,100,503);
circle(525,125,528);
circle(550,163,553);
circle(625,163,628);
circle(634,125,637);
{Doroga}
setfillstyle(solidfill, black);
bar(0,650,1000,700);
moveTo(375,650);
LineTo(525,350);
LineTo(550,350);
LineTo(440,650);
LineTo(375,650);
setfillstyle(solidfill, brown);
floodFill(425,600,black);
readkey;
closegraph;
end;
end.

Последний раз редактировалось Stilet; 23.11.2013 в 18:51.
ololoshkaa вне форума Ответить с цитированием
Старый 23.11.2013, 18:56   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как точно записать координаты, чтобы не гадать по пол часа, а сразу там где надо нарисовать?
Нужно выбрать опорную точку. От нее построить фундамент (квадрат), потом зная высоту и ширину высчитать на сколько отвести перо для окна и рамок. Короче так как это делают архитекторы, зная габариты и координаты объекта вычерчивают от этих данных остальное, это называется "привязка". На словах так не расскажешь, ну к примеру:
Код:
x:=100;
y:=100;
Здание
bar(x,y,x+100,y+200);

Окна
bar(x+25,y+10,x+10,y+20);
bar(x+50,y+10,x+60,y+20);
А опорная точка - (x,y). Все элементы строятся относительно нее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2013, 15:06   #10
ololoshkaa
Новичок
Джуниор
 
Регистрация: 23.11.2013
Сообщений: 5
По умолчанию

Уже почти переработал)
Только у меня почему-то не закрашиваются звезды, луна и сама дорога, пробовал разные цвета, не помогает. Подскажите пожалуйста, в чем проблема?
Код:
program gorod;
uses graph, crt;
var gd, gr, err:integer;
begin
gd:=detect;
gr:=vgahi;
initgraph(gd,gr,' ');
err:=graphresult;
if err=grOk then
begin
{Zemlya}
setfillstyle(solidfill, blue);
bar(0,175,640,500);
{Nebo}
setfillstyle(4, blue);
bar(0,0,650,175);
{Bydunku zliva}
setfillstyle(solidfill, lightgray);
bar(0,60,100,400);
setfillstyle(solidfill, brown);
bar(250,75,175,350);
setfillstyle(solidfill, darkgray);
bar(100,200,200,370);
setfillstyle(solidfill, lightgray);
bar(300,300,170,380);
{Bydunku sprava}
setfillstyle(solidfill, brown);
bar(450,75,550,250);
setfillstyle(solidfill, darkgray);
bar(360,100,445,250);
setfillstyle(solidfill, lightgray);
bar(400,175,500,350);
setfillstyle(solidfill, darkgray);
bar(525,25,650,420);
setfillstyle(solidfill, brown);
bar(425,300,520,400);
{Misyac}
setfillstyle(solidfill, yellow);
circle(140,35,25);
setfillstyle(solidfill, black);
circle(135,30,20);
{Zirku}
setfillstyle(solidfill, yellow);
circle(300,110,1);
circle(250,80,1);
circle(200,150,1);
circle(350,90,1);
circle(100,90,1);
circle(50,30,1);
{Doroga}
setfillstyle(solidfill, black);
bar(0,440,700,470);
moveTo(400,440);
LineTo(260,175);
LineTo(300,175);
LineTo(440,440);
LineTo(400,440);
readkey;
closegraph;
end;
end.
ololoshkaa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бросок к горизонту(паскаль+-делфи.(может ли кто помочь сделать с Паскаля АВС на Делфи?) extrimal Помощь студентам 8 24.03.2013 23:51
из делфи в паскаль muslimka Помощь студентам 16 21.03.2013 16:28
Паскаль и делфи dpmkh Общие вопросы Delphi 5 30.10.2012 14:26
Паскаль и Делфи laluna Помощь студентам 1 08.09.2010 16:32