Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 35

Прокомментировать код игры "змейка"

19.06.2010, 22:40. Показов 5373. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте снова)
Немного непонятны некоторые моменты.... ( отметил ??? )
Помогите кто чем может
Зы: Игрушка это змейка ( что сам разобрал, то откомментировал )

Delphi
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
procedure TForm1.Insert(x, y: integer); ( ??? что делает она ??? )
begin
  new(t);
  t^.x := x;
  t^.y := y;
  t^.next := nil;
  if kon <> nil then
    kon^.next := t;
  kon := t;
  if nach = nil then
    nach := t;
 
  Image1.Canvas.Brush.Color := clRed; // Заливка змейки
  Image1.Canvas.Pen.Color := clBlack; // Обводка змейки
  Image1.Canvas.Rectangle(t^.x, t^.y, t^.x + 10, t^.y + 10);
  // ( Рисуем квадрат) верхний-левый угол в t^.x, t^.y ,
//  а правый-нижний в t^.x + 10, t^.y + 10
end;
 
procedure TForm1.Delete; ( ??? и эта (( ??? )
begin
  t := nach;
  Image1.Canvas.Brush.Color := clWhite; // Делаем заливку белым
  Image1.Canvas.Pen.Color := clWhite; // Закрашиваем белым обводку
  Image1.Canvas.Rectangle(t^.x, t^.y, t^.x + 10, t^.y + 10);
  // ( Рисуем квадрат) верхний-левый угол в t^.x, t^.y ,
  //  а правый-нижний в t^.x + 10, t^.y + 10
  nach := t^.next;
  Dispose(t); // Удаляем t
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 
  kon := 0;   ( ??? )
  nach := 0;   ( ??? )
  n := 2; // длинна змейки( начальная )
  k := 0; //удлинение змейки
  x := 50;
  y := 50; // координаты змейки ( начальные )
  a := random(Image1.Width div 10) * 10; // Координаты "яблока"
  b := random(Image1.Height div 10) * 10; // Координаты "яблока"
  dx := 10; // Движение по оси х
  dy := 0; // Движение по оси у
 
  TempKey := 39; // Предыдущая нажатая клавиша
 
end;
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 
  if (Key = 37) and (TempKey <> 39) then // Движение вправо
  begin
    dx := -10;
    dy := 0;
    TempKey := Key; // Предущая клавиша = нажатой
  end;
 
  if (Key = 39) and (TempKey <> 37) then // Движение влево
  begin
    dx := +10;
    dy := 0;
    TempKey := Key; // Предущая клавиша = нажатой
  end;
 
  if (Key = 38) and (TempKey <> 40) then // Движение вверх
  begin
    dy := -10;
    dx := 0;
    TempKey := Key; // Предущая клавиша = нажатой
  end;
 
  if (Key = 40) and (TempKey <> 38) then // Движение вниз
  begin
    dy := +10;
    dx := 0;
    TempKey := Key; // Предущая клавиша = нажатой
  end;
 
end;
 
/// Начало игры
 
procedure TForm1.Timer1Timer(Sender: TObject);   ( ??? немного тут комментариев не помешало бы, как к чему (( ??? )
begin
  Image1.Canvas.Pen.Width := 1;    //  Толщина обводки
  Image1.Canvas.Pen.Color := clBlue; // Цвет "яблока"
  Image1.Canvas.Ellipse(a, b, a + 10, b + 10);
  // ( Рисуем квадрат) верхний-левый угол в a, b ,
  //  а правый-нижний в a + 10, b + 10
 
  x := x + dx; //   Движение по оси х
  y := y + dy; //   Движение по оси у
  t := nach;
 
  // Если так, то змейка не врезается  в границы экрана
 { if x >= Image1.Width then x := 0;
  if y >= Image1.Height then y := 0;
  if x < 0 then x := (Image1.Width div 10) * 10;
  if y < 0 then y := (Image1.Height div 10) * 10; }
 
  //  Если так, то змейка  врезается в границы экрана
  if x >= Image1.Width then
    x := t^.x;
  if y >= Image1.Height then
    y := t^.y;
  if x < 0 then
    x := 0;
  if y < 0 then
    y := 0;
 
  while t <> nil do
  begin
 
    if (x = t^.x) and (y = t^.y) then
    begin
      Timer1.Enabled := False; // отключаем таймер
      Pause.Enabled := False;  //  Деактивируем кнопку
      Dalee.Enabled := False;  //   Деактивируем кнопку
      Form5.Show; // показываем форму 5
    end;
 
    t := t^.next;
  end;
 
  Insert(x, y);
 
  if (k = n) and (x = a) and (y = b) then      // Когда змейка "сьедает" яблоко
  begin
 
    if n = 5 then
    begin
      Timer1.Interval := 200;
      p := 2;
    end;
 
    if n = 14 then
    begin
      Timer1.Interval := 150;
      p := 4;
    end;
 
    if n = 29 then
    begin
      Timer1.Interval := 100;
      p := 6;
    end;
 
    if n = 50 then
    begin
      Timer1.Interval := 75;
      p := 8;
    end;
 
    if n = 77 then
    begin
      Timer1.Interval := 50;
      p := 10;
    end;
 
    if n = 110 then
    begin
      Timer1.Interval := 25;
      p := 15;
    end;
 
    if n = 158 then
    begin
      Timer1.Interval := 20;
      p := 20;
    end;
 
    n := n + p + 1; // Длинна змейки
    Label10.Caption := IntToStr(p); // Выводим бонус
    Label3.Caption := IntToStr(n - 2); //Выводим  очки
 
    a := random(Image1.Width div 10) * 10; // Координаты "яблока"
    b := random(Image1.Height div 10) * 10; // Координаты "яблока"
  end;
 
  k := k + 1; // Прибавляем элемент змейки спереди
 
  if k > n then
  begin
    Delete; // Удаляем сзади элемент змейки
    k := k - 1; // отнимаем элемент змейки сзади
  end;
end;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2010, 22:40
Ответы с готовыми решениями:

Delphi таблица рекордов для игры Змейка
Хочу в игру добавить таблицу рекордов. Чтобы 10 лучших результатов записывались в таблицу. подскажите как это сделать (нужно ли что...

Исправте код, игра змейка
Помогити исправить код, программа останавливается в начале программы.

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

33
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 35
20.06.2010, 00:09  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ZelenyiZmei Посмотреть сообщение
Какой размер в писклях имеет форма?
Ну всё действо происходит в Image) Его размеры: Height 450 , Width 700
0
11 / 10 / 3
Регистрация: 06.10.2008
Сообщений: 107
20.06.2010, 00:28
попробуй так)))) просто замени
Delphi
1
2
3
4
5
6
7
8
if x >= Image1.Width then
x := t^.x;
if y >= Image1.Height then
y := t^.y;
if x < 0 then
x := 0;
if y < 0 then
y := 0;
на
Delphi
1
2
3
4
5
6
7
8
if x >= Image1.Width then
x := 0;
if y >= Image1.Height then
y := 0;
if x < 0 then
x := 0;
if y < 0 then
y := 0;
не знаю почему но мне кажется всё получится. не вижу в этом условии ни какой взаимосвязи с концом игры...

Добавлено через 3 минуты
нет, всё же это ни то... тогда конца игры вообще не будет...
0
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 35
20.06.2010, 00:29  [ТС]
Если везде 0, то когда вниз "врезаешься" она сверху идет, тоже самое если справа "врезаешься" она справа выходит))))
0
11 / 10 / 3
Регистрация: 06.10.2008
Сообщений: 107
20.06.2010, 00:31
тогда так:
Delphi
1
2
3
4
5
6
7
8
if x >= Image1.Width then
x := t^.x;
if y >= Image1.Height then
y := t^.y;
if x < 0 then
x := t^.x;
if y < 0 then
y := t^.y;
1
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 35
20.06.2010, 00:33  [ТС]
Не, сё равно не то - выскакивает иногда змейка( когда много элементов )
0
11 / 10 / 3
Регистрация: 06.10.2008
Сообщений: 107
20.06.2010, 00:36
а если кол-во элементов ещё урезать до такого чтоб не вылазила... вообще метод работает? но с ошибками так?
Ладно я спать а то чета глаза закрываются уже...
0
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 35
20.06.2010, 10:11  [ТС]
Урезать смысла нет) Метод работает на ура, только "хрен проссышь" где и когда выскочит.... =(
0
11 / 10 / 3
Регистрация: 06.10.2008
Сообщений: 107
20.06.2010, 17:47
Получается что конец игры теперь выскакивает случайно?
0
{c0Der}
 Аватар для Markus_13
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
21.06.2010, 02:06
Unique, выкладывай всю прогу целиком - исправлю.

ZelenyiZmei, если в чем-то не разбираешься - не стоит давать советы другим, смешно тебя читать.
0
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 35
21.06.2010, 12:31  [ТС]
Маркус - вот =)
Вложения
Тип файла: rar Курсовая.rar (1.33 Мб, 21 просмотров)
0
{c0Der}
 Аватар для Markus_13
138 / 123 / 18
Регистрация: 20.02.2009
Сообщений: 434
Записей в блоге: 4
23.06.2010, 03:52

Не по теме:

Ваще жесть, аж плакать хочется от такого курсяка))
я понимаю "проба пера", но "курсяк"? =-O образование катится к чертям ;'(


вот, короче, подправил-доработал, но т.к. времени нет - пара косяков осталась, хотя конкретно функция проигрыша срабатывает по моим тестам 100%но!
Вложения
Тип файла: rar Курсовая_1.3.rar (1.27 Мб, 24 просмотров)
0
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 35
23.06.2010, 16:57  [ТС]
Ну а что ты хотел за пол года проги увидеть?) Всё что было в силах сделал
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
23.06.2010, 17:08
что-то эта змейка не ест а надкусывает )))
0
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 35
23.06.2010, 17:31  [ТС]
Цитата Сообщение от anonimus Посмотреть сообщение
что-то эта змейка не ест а надкусывает )))
Там что то не так, только влевом верхнем углу кушает....
А так , змейка маленькая - вот и не попадает по координатам "яблока"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.06.2010, 17:31

Прокомментировать код
Привет, всем знатокам программирования! Хочу задать простой вопрос. Напишите пожалуйста комментарий каждой строчке p.s.: я еще...

Прокомментировать код
это мне задали сделать курсовую на делфи мозайка я нашла код Листинг модуля Unit1 unit Unit1; interface uses

Прокомментировать код
Кто сможет перевести этот код? Комментарий так сказать оставить напротив каждой строки кода procedure TForm1.Button1Click(Sender:...

Прокомментировать код
Доброе время суток, помогите пожалуйста, прокомментировать код кусочка программы unit Example12; interface uses Windows,...

Прокомментировать код
Объясните пожалуйста как тут что работает. Какие функции и процедуры что делают? unit Recognition; interface uses ...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru