Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 09.08.2017
Сообщений: 57
1

Объясните каждую букву программного кода...

15.08.2017, 18:54. Показов 862. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Объясните каждую букву -
Pascal
1
if (s[(x div 8)+1,(y div 8)]=0) then ...
s - массив
x,y - координаты (персонажа)

Pascal
1
if (key='d') and (s[(x div 8)+1,(y div 8)]=0) then ...
полная версия.)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2017, 18:54
Ответы с готовыми решениями:

Ввести строку, состоящую из латинских букв. Заменить каждую букву строки на букву, следующую за ней по алфавиту
Ввести строку, состоящую из латинских букв. Заменить каждую букву строки на букву, следующую за ней...

Ввести строку, состоящую из латинских букв. Заменить каждую букву строки на букву, следующую за ней по алфавиту (например, a-b, b-c, z – a).
Ввести строку, состоящую из латинских букв. Заменить каждую букву строки на букву, следующую за ней...

Зашифровать текст, заменив каждую его букву следующей по алфавиту (последнюю букву - первой). Все остальные символы оставить без изменения.
Дан файл, содержащий некоторый текст. Зашифровать текст, заменив каждую его букву следующей по...

Объясните каждую строчку кода
Само задание:проверить лежит ли на побочной диагонали минимальный положительный элемент матрицы...

16
2 / 2 / 0
Регистрация: 30.06.2017
Сообщений: 19
15.08.2017, 19:45 2
ЕСЛИ "клавиша" равна "d" И элемент двумерного массива s, стоящий на пересечении строки(строка равна сумме целой части от деления x на 8 и единицы((x div 8)+1) и столбца (столбец равен целой части от деления y на 8), равен нулю, ТО...

(s[...,...]=0) - сравнение какого-то элемента массива и нуля

(x div 8)+1 - x делят на 8, дробная часть отбрасывается, прибавляется 1

(y div 8) - y делят на 8, дробная часть отбрасывается
0
0 / 0 / 0
Регистрация: 09.08.2017
Сообщений: 57
15.08.2017, 21:18  [ТС] 3
Ну к примеру персонаж по координате x равна 8 тогда - 8/8=1 дальше 1+1=2 но ни как не 0

Добавлено через 5 минут
Если будет - 7/8=0 (0.875) но тогда 0+1=1 но не 0
0
2 / 2 / 0
Регистрация: 30.06.2017
Сообщений: 19
15.08.2017, 22:27 4
Допустим, у нас есть некая таблица значений.
строкастолбецзначение
1 1 0
1 2 3
Эту таблицу можно представить массивом s, тогда
s[1,1] равен 0
s[1,2] равен 3

Итого получаем s[1,1] при х равном 7 и у равном 8. Этот элемент равен 0, значит выполнится часть ТО.

А вот если х равен 7, а у 16, то будет проверено равенство элемента s[1,2] и 0. Т.к. s[1,2] равен 3, то часть ТО не выполнится.

P.s. могу написать небольшую игру для демонстрации.
0
0 / 0 / 0
Регистрация: 09.08.2017
Сообщений: 57
16.08.2017, 01:50  [ТС] 5
Ты конечно сори я тупенький с легка, но я не понял

Добавлено через 1 минуту
Напиши игрушку может пойму в коем то веке
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
16.08.2017, 04:52 6
https://vk.com/topic-63088876_29128559 - тут же разжевали...
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
uses GraphABC; 
 
var 
s : array [,] of integer; 
i,x,y,vspeed : integer; 
game_end : boolean;
//Обработка нажатий клавиш 
procedure KeyPress(key: char); begin 
 
if (key='d') and (s[(x div 8)+1,(y div 8)]=0) then //Если нажата клавиша D… 
x:=x+8; //... А также есть свободное место, то передвигаемся на… 
//… клеточку вперед (значение x увеличивается на 8) 
 
if (key='a') and (s[(x div 8)-1,(y div 8)]=0) then //см. комментарий выше 
x:=x-8; 
 
if (key='w') and (vspeed=0) and (s[(x div 8),(y div 8)+1]=1) then //Если есть «занятая клеточка»…
vspeed:=-16; //… под ногами, то совершаем прыжок. 
 
end; 
 
procedure KeyDown(key: integer); begin 
if (key=vk_enter) then game_end:=true; //При нажатии ENTER… 
//значение переменной game_end равно true 
end;
//Гравитация 
procedure Gravity(); begin 
 
if vspeed=0 then begin //Если скорость прыжка равна нулю… 
if s[(x div 8),(y div 8)+1]=0 then y+=8; //… перемещаемся на «клеточку» вниз (падаем) 
end; 
 
if s[(x div 8),(y div 8)+vspeed]=0 then y+=vspeed; //Если сверху есть свободная клеточка, то… 
//… перемещаемся на vspeed вверх. 
 
if vspeed<>0 then //Если скорость прыжка не равна нулю (в нашем случае: меньше нуля)… 
vspeed+=2; //… то помаленьку ее сбавляем. 
 
end;
procedure Draw(); begin 
 
Redraw; 
LockDrawing; 
 
//Рисуем белый прямоугольник… 
setbrushcolor(clwhite); //… размером 640 на 480 
fillrectangle(0,0,640,480); 
 
 
setbrushcolor(clblack);//Рисуем черные стены… 
fillrectangle(0,192,640,224);//… по координатам… 
//… 0 – 640 по X; 192 – 224 по Y 
//(ВНИМАНИЕ! Данные манипуляции не делают стены осязаемыми, а всего лишь… 
//… создают их графический образ. 
 
setbrushcolor(clred); //Рисуем игрока по координатам… 
fillrectangle(x,y,x+8,y+8);//… x и y 
 
end;
Begin //начало программы 
 
//Указания значений для переменных 
game_end:=false; 
x:=0; //Стартовая позиция игрока по X 
y:=0; //Стартовая позиция игрока по Y 
 
//Создание массива 
s := new integer[200,200]; 
 
//Создание платформы, нарисованной в процедуре Draw 
for i:=0 to 79 do 
s[i,24] := 1; 
 
while game_end=false do begin //Создаем цикл… 
//… который прервется, если game_end = false 
 
//Рисование экрана 
Draw(); 
 
//Гравитация для игрока 
Gravity(); 
 
OnKeyPress:=KeyPress; //Обработка нажатий… 
OnKeyDown:=KeyDown; //… клавиш 
 
sleep(30); //Ждем примерно полсекунды, чтобы игра… 
//… работала с нормальной скоростью 
 
end;//конец цикла. 
 
end. //конец программы
0
0 / 0 / 0
Регистрация: 09.08.2017
Сообщений: 57
16.08.2017, 07:57  [ТС] 7
Я уже видел такой платформер и в анотации в коде не написано как эта проверка на свободную клетку работает.
0
2 / 2 / 0
Регистрация: 30.06.2017
Сообщений: 19
16.08.2017, 08:05 8
Вам непонятна сама строка кода, либо то, каким образом она используется для проверки на свободную клетку?
0
0 / 0 / 0
Регистрация: 09.08.2017
Сообщений: 57
16.08.2017, 08:08  [ТС] 9
Я не понимаю как эта проверка работает хотелась объяснение очень просто
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
16.08.2017, 09:27 10
применительно к этому примеру:
игровое поле(платформа) записано в массиве 200 x 200(хотя используется не все). На экране квадрат перемещается на свою ширину(8 пикселей).
шагаем вправо
координаты экрана 1 8 16 24
координаты массива 0 1 2 3
т.е. каждому положению объекта на экране сопоставляется его положение в массиве и координаты на экране в 8 раз больше, поэтому X div 8.
Так доходчиво?
0
0 / 0 / 0
Регистрация: 09.08.2017
Сообщений: 57
16.08.2017, 12:49  [ТС] 11
Может я что то не знаю но разве div не разделить?
0
Модератор
9868 / 5236 / 3306
Регистрация: 17.08.2012
Сообщений: 16,006
16.08.2017, 12:59 12
SteelFlame, а что не так? Каждые 8х8 клеток на экране соответствуют 1 клетке в массиве клеток... Чтобы получить адрес в массиве клеток, нужно экранные координаты разделить на 8.

Да, ещё, если быть точным, div - это вовсе не "разделить", а "разделить нацело".
0
0 / 0 / 0
Регистрация: 09.08.2017
Сообщений: 57
16.08.2017, 13:15  [ТС] 13
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
uses graphABC;
var s: array [,] of integer;
speed,x,y: integer;
 
procedure move(key: integer);
begin
if (key = vk_d) and (s[(x div 8)+1,(y div 8)]=0) then begin x:=x+8; end;
if (key = vk_s) and (s[(x div 8),(y div 8)+1]=0) then begin y:=y+8; end;
if (key = vk_a) and (s[(x div 8)-1,(y div 8)]=0) then begin x:=x-8; end;
if (key = vk_w) and (s[(x div 8),(y div 8)-1]=0) then begin y:=y-8; end;
end;
 
procedure Draw();
begin
LockDrawing;
Redraw;
 
SetBrushColor(clBlack);
Rectangle(8,0,8+8,8);
 
SetBrushColor(clRed);
Rectangle(x,y,x+8,y+8);
end;
 
procedure update();
begin
while true do 
begin
OnKeyDown:=move;
Draw();
sleep(30);
end;
end;
begin
s:=new integer[200,200];
update();
end.
Тут не работает Redraw и Коллизия
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
16.08.2017, 13:36 14
Не работает redraw.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure Draw();
begin
SetBrushColor(clBlack);
Rectangle(8,0,8+8,8);
SetBrushColor(clRed);
Rectangle(x,y,x+8,y+8);
redraw;
end;
..............................
begin
LockDrawing;
s:=new integer[200,200];
update();
end.
0
0 / 0 / 0
Регистрация: 09.08.2017
Сообщений: 57
16.08.2017, 13:47  [ТС] 15
Я знаю что в коллизий у меня куча и один ошибок но хотелось бы услышать все
0
2 / 2 / 0
Регистрация: 30.06.2017
Сообщений: 19
16.08.2017, 18:06 16
Pascal
1
2
3
4
if (key = vk_d) and (s[(x div 8)+1,(y div 8)]=0) then begin x:=x+8; end;
if (key = vk_s) and (s[(x div 8),(y div 8)+1]=0) then begin y:=y+8; end;
if (key = vk_a) and (s[(x div 8)-1,(y div 8)]=0) then begin x:=x-8; end;
if (key = vk_w) and (s[(x div 8),(y div 8)-1]=0) then begin y:=y-8; end;
Зачем заключать один единственный оператор в блок?
0
0 / 0 / 0
Регистрация: 09.08.2017
Сообщений: 57
16.08.2017, 18:33  [ТС] 17
привычка)
0
16.08.2017, 18:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2017, 18:33
Помогаю со студенческими работами здесь

Объясните каждую строчку кода
Get-WmiObject -Class Win32_LogicalDisk | Where-Object {$_.DriveType -ne 5} | Sort-Object...

Объясните, пожалуйста, каждую строчку кода.
#include &lt;string&gt; #include &lt;cctype&gt; #include &lt;algorithm&gt; using namespace std; void...

Объясните пожалуйста каждую строчку этого кода
Объясните пожалуйста каждую строчку этого кода, что выполняет каждая строчка в этом коде. И если...

Поменять каждую согласную русскую букву на цифру «8», а каждую гласную – на символ «–»
Ввести строку с клавиатуры. Вывести средний символ строки. Поменять каждую согласную русскую букву...

Поменять каждую согласную русскую букву на цифру «8», а каждую гласную – на символ «–»
Задание: Поменять каждую согласную русскую букву на цифру «8», а каждую гласную – на символ «–»...

Зашифровать текст, заменив каждую букву на букву, отстоящую от нее на n букв
Помогите пожалуйста написать прогу в си вот код паскаля задание Зашифровать заданный текст,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru