Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Программа на Паскале (http://www.tehnari.ru/f41/t255451/)

Live4Fun 02.09.2017 15:21

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


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.

Vladimir_S 02.09.2017 19:08

Цитата:

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

Сдается мне, не то Вы сделали, сударь. Вы нарисовали фигуру (прямоугольник) в ТЕКСТОВОМ режиме. Можно, в принципе, заставить двигаться такие фигуры с помощью команд модуля CRT, но трудновато. Мне кажется, это задача на графику. Освоить графику в Паскале, конечно, дело муторное и долгое, но зато программировать движение фигур много проще, чем в текстовой моде.
И в том, и в другом (текстовом и графическом) случаях программирование "движения" сводится к следующему алгоритму:
1. Считывание нажатой клавиши (команда ReadKey модуля CRT);
2. Смена цвета на цвет фона (черный или белый);
3. Повторное рисование фигуры в текущих координатах. При этом она (фигура), естественно, исчезнет, слившись с фоном.
4. Восстановление исходного цвета.
5. Повторное рисование фигуры относительно новой точки привязки, определяемой считанной буквой.
Всё это, естественно, должно быть зациклено, причем нужно предусмотреть выход из цикла (например, путём связывания его с какой-нибудь пятой буквой).
И да, укажите, о каком Паскале идёт речь. Turbo? Free? ABC?

derba 02.09.2017 22:20

Тут модуль 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 03.09.2017 19:07

Вложений: 1
А лучше использовать команду 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.

Live4Fun 03.09.2017 23:07

Спасибо Большое!)


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.