Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 02.09.2017, 15:21   #1 (permalink)
Live4Fun
Новичок
 
Регистрация: 04.02.2017
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Unhappy Программа на Паскале

Задача звучала так. Сделать фигуру. и потом с помощью клавиш WASD ee сдвигать. Фигуру сделал , а вот как сделать передвижение с помощью клавиш без понятия(
Помогите пожалуйста


const
N=5;
var
b,c,i,j,s,k:integer;
A:array[1..N,1..N] of integer;
begin
writeln;
for i:=1 to N do
begin
for j:=1 to N do
begin
if(j>1) and (i>1) and (i<N)and (j<N) then
A[i,j]:=0
else
A[i,j]:=1;
if A[i,j]=1 then write ('*')
else write (' ');
end;
writeln;
end;
end.
Live4Fun вне форума   Ответить с цитированием

Старый 02.09.2017, 15:21
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Давайте не будем терять время зря, а обратим внимание на сходные темы

Программа в Паскале
Программа на паскале
Программа на Паскале
Программа на Паскале

Старый 02.09.2017, 19:08   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,304
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Цитата:
Сообщение от Live4Fun Посмотреть сообщение
Задача звучала так. Сделать фигуру. и потом с помощью клавиш WASD ee сдвигать. Фигуру сделал , а вот как сделать передвижение с помощью клавиш без понятия( Помогите пожалуйста
Сдается мне, не то Вы сделали, сударь. Вы нарисовали фигуру (прямоугольник) в ТЕКСТОВОМ режиме. Можно, в принципе, заставить двигаться такие фигуры с помощью команд модуля CRT, но трудновато. Мне кажется, это задача на графику. Освоить графику в Паскале, конечно, дело муторное и долгое, но зато программировать движение фигур много проще, чем в текстовой моде.
И в том, и в другом (текстовом и графическом) случаях программирование "движения" сводится к следующему алгоритму:
1. Считывание нажатой клавиши (команда ReadKey модуля CRT);
2. Смена цвета на цвет фона (черный или белый);
3. Повторное рисование фигуры в текущих координатах. При этом она (фигура), естественно, исчезнет, слившись с фоном.
4. Восстановление исходного цвета.
5. Повторное рисование фигуры относительно новой точки привязки, определяемой считанной буквой.
Всё это, естественно, должно быть зациклено, причем нужно предусмотреть выход из цикла (например, путём связывания его с какой-нибудь пятой буквой).
И да, укажите, о каком Паскале идёт речь. Turbo? Free? ABC?
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 02.09.2017, 22:20   #3 (permalink)
derba
Member
 
Регистрация: 19.07.2017
Адрес: Украина Черкасская обл.
Сообщений: 2,254
Сказал(а) спасибо: 35
Поблагодарили 5 раз(а) в 3 сообщениях
Репутация: 7259
По умолчанию

Тут модуль CRT нужен в обязательном порядке, и легко сделать передвижение, я сделал при помощи клавиш 1, 2, 3 и 4. На нужные клавиши - переделай сам. Расширение txt поменять на pas, там есть две лишние команды. я их использовал для настройки. На работу они не повлияют, но желательно их удалить.
Цитата:
uses crt;
const N=5;
Label 1;
var
c,i,j,k,s,x:integer;
b:string;
A:array[1..N,1..N] of string;
begin

textcolor (0);textbackground(15); clrscr;

writeln;
for i:=1 to N do
begin
for j:=1 to N do
begin
if(j=1) or (i=1) or (i=N)or (j=N) then
A[i,j]:='*'
else
A[i,j]:='+';
Write(a[i,j]);
end;
writeln;
end;
C:=0; s:=0;
1:
clrscr;
For k:=1 to c do

Writeln;
For i:=1 to N do
Begin
For x:=1 to s do
Write(' ');
For j:=1 to N do
begin

Write(a[i,j]);
end;
Writeln;


end;

b:=readkey;



If b='1' then
begin
C:=C+1;
Goto 1;
end;

If b='2' then
begin
If c>0 then
C:=C-1;
Goto 1;
end;

If b='3' then
begin
s:=s+1;
Goto 1;
end;
If b='4' then
begin
If s>0 then
s:=s-1;
Goto 1;
end;
end.
__________________
За безопасность необходимо платить, а за ее отсутствие расплачиваться.
Уинстон Черчилль

Последний раз редактировалось derba; 02.09.2017 в 22:30
derba вне форума   Ответить с цитированием
Старый 03.09.2017, 19:07   #4 (permalink)
derba
Member
 
Регистрация: 19.07.2017
Адрес: Украина Черкасская обл.
Сообщений: 2,254
Сказал(а) спасибо: 35
Поблагодарили 5 раз(а) в 3 сообщениях
Репутация: 7259
По умолчанию

А лучше использовать команду window, ее можно легко двигать, я когда то подобное делал. и под клавиши управления курсором.


вот текст под клавиши wasd.
Цитата:
{Квадрат управляется wasd клавишами}
uses crt;
const N=5; {размер квадрата}
Label 1;
var
c,i,j,k,s,x:integer;
b:string;
A:array[1..N,1..N] of string;
begin

textcolor (0);textbackground(15); clrscr;{Белый фон черные буквы очистить экран}
{символы квадрата вводим в матрицу}
for i:=1 to N do
begin
for j:=1 to N do
begin
if(j=1) or (i=1) or (i=N)or (j=N) then
A[i,j]:='*' {Символ стенки квадрата}
else
A[i,j]:='+'; { Cимвол тела квадрата}
end;
{------------}
end;
C:=0; s:=0;
1: {метка возврата после нажатия клавиши}
{-----------}
clrscr; {Очистим старую фигуру}
{------------}
For k:=1 to c do {Количество раз}
Writeln; {подвинули квадрат вниз}
For i:=1 to N do
{Рисуем фигуру на новом месте}
Begin
For x:=1 to s do {количество раз }
Write(' '); {подвинули вправо}
For j:=1 to N do
begin

Write(a[i,j]);
end;
Writeln;


end;

b:=readkey; { Нажимаем клавишу}
{-----------}
If b='s' then {Вниз}
begin
C:=C+1;
Goto 1;
end;
{------------}
If b='w' then {вверх}
begin
If c>0 then
C:=C-1;
Goto 1;
{----------}
end;

If b='d' then
begin {вправо}
s:=s+1;
Goto 1;
end;
If b='a' then {влево}
begin
If s>0 then
s:=s-1;
Goto 1;
end;
end.
Миниатюры
1.png  
__________________
За безопасность необходимо платить, а за ее отсутствие расплачиваться.
Уинстон Черчилль

Последний раз редактировалось derba; 03.09.2017 в 19:12
derba вне форума   Ответить с цитированием
Старый 03.09.2017, 23:07   #5 (permalink)
Live4Fun
Новичок
 
Регистрация: 04.02.2017
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо Большое!)
Live4Fun вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Метки
pascal abc, помощь студентам

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 20:31.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.