Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Змейка, Игра 
V
    Опции темы
SoWa
Дата 16.4.2006, 05:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Как это появление квадратиков еды в змее? Типа змейка толще в этои месте становится, пока хвост не пройдет точку? Убери это совсем. Это лишнее. 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Сый
Дата 16.4.2006, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Нет, толще она не становится. Есть еду может всё тело (Задача Съели()). А координаты еды генерируются случайно, причём они могут совпасть с координатами какой-либо клетки змеи, она её, естественно, съедает (игрок при этом ничего не делает, змея растёт, стоя на месте). А вопрос в том, должно ли так быть по правилам игры? 

Это сообщение отредактировал(а) Сый - 16.6.2006, 14:14
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Сый
Дата 16.4.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Немного неправильно написал насчёт первой проблемы - врезается в тело не хвост, а голова. 
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
SoWa
Дата 16.4.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Ох. Я так и не смог настрить Глагол, поэтому не могу с головой нырнуть в проблемму. П овопросу появления еды- ты её генерируй, потом проверяй, лежит ли эта точка в змее. Если да- генерируй снова. Иначе- оставляй. 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Сый
Дата 16.4.2006, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



> Ох. Я так и не смог настрить Глагол
Попробуй обратиться на форум rus.jino-net.ru или ICQ 316350000, постараюсь помочь настроить. Можешь также у Издателя Глагола попробовать разобраться с проблемой. Да и тема про Глагол открыта, опиши подробнее ситуацию.

Насчёт еды - хорошая идея, можно осуществить. 
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Сый
Дата 16.6.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Наконец-то взялся за эту программу и дописал её. Оцените:
Код

ОТДЕЛ Змейка+;

ИСПОЛЬЗУЕТ
  ОС     ИЗ "...\Отделы\Обмен\",
  Матем  ИЗ "...\Отделы\Числа\",
  Ввод   ИЗ "...\Отделы\Обмен\",
  Вывод  ИЗ "...\Отделы\Обмен\",
  Поле   ИЗ "...\Отделы\Поле\",
  Надел  ИЗ "...\Отделы\Поле\",
  Метка  ИЗ "...\Отделы\Поле\",
  Кнопка ИЗ "...\Отделы\Поле\";

ПОСТ
  МаксДлина = 21;
  НачДлина = 3;
  Выход  = 1;
  Начали = 2;

ПЕР
  Напр:ЦЕЛ;
  Змея:РЯД МаксДлина ИЗ КЛЮЧ;
  КоордЗмеи:РЯД МаксДлина ИЗ РЯД 2 ИЗ ЦЕЛ;
  НачВремя:ЦЕЛ;
  Метка1,Метка2:Метка.Доступ;
  Играем:КЛЮЧ;
  КоордЕды:РЯД 2 ИЗ ЦЕЛ;
  Уровень,Ждём:ЦЕЛ;
  Пошли:КЛЮЧ;

ЗАДАЧА НаЗмее(ху+,ух+:ЦЕЛ);
ПЕР
  ч:ЦЕЛ;
  Попали:КЛЮЧ;
УКАЗ
  КОЛЬЦО
    ху:=УЗК(ВШИРЦЕЛ(Матем.случ()*9))+1;
    ух:=УЗК(ВШИРЦЕЛ(Матем.случ()*9))+1;
    Попали:=ОТКЛ;
    ОТ ч:=0 ДО МаксДлина-1 ВЫП
      ЕСЛИ (ху=КоордЗмеи[ч,0]) И (ух=КоордЗмеи[ч,1]) ТО Попали:=ВКЛ КОН
    КОН;
    ЕСЛИ НЕ Попали ТО ВОЗВРАТ КОН
  КОН
КОН НаЗмее;

ЗАДАЧА РисоватьЕду(ху,ух:ЦЕЛ);
УКАЗ
  Вывод.Рамка(ху*3-2,ух*2-1,ху*3,ух*2);
  Вывод.Цвет(ху*3-2,ух*2-1,ху*3,ух*2,0FH)
КОН РисоватьЕду;

ЗАДАЧА РазместитьЕду();
ПЕР
  ху,ух:ЦЕЛ;
УКАЗ
  НаЗмее(ху,ух);
  КоордЕды[0]:=ху; КоордЕды[1]:=ух;
  РисоватьЕду(КоордЕды[0],КоордЕды[1])
КОН РазместитьЕду;

ЗАДАЧА ЦветнойКвадрат(ху,ух:ЦЕЛ);
УКАЗ
(*  Вывод.Цвет(ху,ух,ху+2,ух+1,УЗК(ВШИРЦЕЛ((Матем.случ()*14)+1))*16); Вывод.Рамка(ху,ух,ху+2,ух+1)*)
  Вывод.Цвет(ху,ух,ху+2,ух+1,244); Вывод.Рамка(ху,ух,ху+2,ух+1)
КОН ЦветнойКвадрат;

ЗАДАЧА Голова(ху,ух:ЦЕЛ; Мёртвая:КЛЮЧ);
УКАЗ
  ЕСЛИ НЕ Мёртвая ТО
    Вывод.Цвет(ху,ух,ху+2,ух+1,207); Вывод.Рамка(ху,ух,ху+2,ух+1)
  ИНАЧЕ
    Вывод.Цвет(ху,ух,ху+2,ух+1,79); Вывод.Рамка(ху,ух,ху+2,ух+1)
  КОН
КОН Голова;

ЗАДАЧА ЧёрныйКвадрат(ху,ух:ЦЕЛ);
УКАЗ
  Вывод.Цвет(ху,ух,ху+2,ух+1,0); Вывод.Пробел(ху,ух,ху+2,ух+1)
КОН ЧёрныйКвадрат;

ЗАДАЧА Вывести();
ПЕР
  ч:ЦЕЛ;
  Занято:КЛЮЧ;
УКАЗ
  ЕСЛИ Змея[0] ТО Голова(КоордЗмеи[0,0]*3-2,КоордЗмеи[0,1]*2-1,ОТКЛ) КОН;
  ОТ ч:=1 ДО МаксДлина-1 ВЫП
    ЕСЛИ Змея[ч] ТО ЦветнойКвадрат(КоордЗмеи[ч,0]*3-2,КоордЗмеи[ч,1]*2-1) КОН
  КОН
КОН Вывести;

ЗАДАЧА Поражение();
УКАЗ
  Метка.Изменить(Метка1,"Врезались!");
  Голова(КоордЗмеи[1,0]*3-2,КоордЗмеи[1,1]*2-1,ВКЛ);
  Играем:=ОТКЛ
КОН Поражение;

ЗАДАЧА Хвост():ЦЕЛ;
ПЕР
  ч:ЦЕЛ;
УКАЗ
  ОТ ч:=0 ДО МаксДлина-1 ВЫП
    ЕСЛИ НЕ Змея[ч] ТО ВОЗВРАТ ч-1 КОН
  КОН;
  ВОЗВРАТ МаксДлина-1
КОН Хвост;

ЗАДАЧА НапрХвоста():ЦЕЛ;
УКАЗ
  ЕСЛИ (КоордЗмеи[Хвост(),0] > КоордЗмеи[Хвост()-1,0]) И (КоордЗмеи[Хвост(),1] = КоордЗмеи[Хвост()-1,1]) ТО
    ВОЗВРАТ 3
  АЕСЛИ (КоордЗмеи[Хвост(),0] < КоордЗмеи[Хвост()-1,0]) И (КоордЗмеи[Хвост(),1] = КоордЗмеи[Хвост()-1,1]) ТО
    ВОЗВРАТ 2
  АЕСЛИ (КоордЗмеи[Хвост(),1] < КоордЗмеи[Хвост()-1,1]) И (КоордЗмеи[Хвост(),0] = КоордЗмеи[Хвост()-1,0]) ТО
    ВОЗВРАТ 1
  АЕСЛИ (КоордЗмеи[Хвост(),1] > КоордЗмеи[Хвост()-1,1]) И (КоордЗмеи[Хвост(),0] = КоордЗмеи[Хвост()-1,0]) ТО
    ВОЗВРАТ 0
  ИНАЧЕ Вывод.Цепь("^Ошибка.^"); СТОП(0) КОН
КОН НапрХвоста;

ЗАДАЧА Съели():КЛЮЧ;
ПЕР
  ч:ЦЕЛ;
УКАЗ
  ОТ ч:=0 ДО Хвост() ВЫП
    ЕСЛИ (КоордЕды[0] = КоордЗмеи[ч,0]) И (КоордЕды[1] = КоордЗмеи[ч,1]) ТО ВОЗВРАТ ВКЛ КОН
  КОН;
  ВОЗВРАТ ОТКЛ
КОН Съели;

ЗАДАЧА СамаВСебя():КЛЮЧ;
ПЕР
  ч:ЦЕЛ;
УКАЗ
  ОТ ч:=1 ДО МаксДлина-1 ВЫП
    ЕСЛИ ((КоордЗмеи[0,0]=КоордЗмеи[ч,0]) И ((КоордЗмеи[0,1]=КоордЗмеи[ч,1]))) И Змея[ч] ТО ВОЗВРАТ ВКЛ КОН
  КОН;
  ВОЗВРАТ ОТКЛ
КОН СамаВСебя;

ЗАДАЧА Врезались():КЛЮЧ;
УКАЗ
  ЕСЛИ СамаВСебя() ТО ВОЗВРАТ ВКЛ ИНАЧЕ
    ВОЗВРАТ ((КоордЗмеи[0,0]>10) ИЛИ (КоордЗмеи[0,0]<1)) ИЛИ ((КоордЗмеи[0,1]>10) ИЛИ (КоордЗмеи[0,1]<1))
  КОН
КОН Врезались;

ЗАДАЧА Отключить();
ПЕР
  ч:ЦЕЛ;
УКАЗ
  ОТ ч:=НачДлина ДО МаксДлина-1 ВЫП
    Змея[ч]:=ОТКЛ
  КОН
КОН Отключить;

ЗАДАЧА СменитьНаправление(Направление:ЦЕЛ);
ПЕР
  ч, б0, б1: ЦЕЛ;
УКАЗ
  ЕСЛИ Пошли ТО
    ЕСЛИ ((Напр = 1) И (Направление = 0)) ИЛИ ((Напр = 0) И (Направление = 1))
     ИЛИ ((Напр = 2) И (Направление = 3)) ИЛИ ((Напр = 3) И (Направление = 2)) ТО
      Напр:=НапрХвоста();
      ОТ ч:=0 ДО Хвост() ДЕЛИТЬ 2 ВЫП
        б0:=КоордЗмеи[ч,0]; б1:=КоордЗмеи[ч,1];
        КоордЗмеи[ч,0]:=КоордЗмеи[Хвост()-ч,0]; КоордЗмеи[ч,1]:=КоордЗмеи[Хвост()-ч,1];
        КоордЗмеи[Хвост()-ч,0]:=б0; КоордЗмеи[Хвост()-ч,1]:=б1;
      КОН;
    ИНАЧЕ Напр:=Направление КОН;
    Пошли:=ОТКЛ;
  КОН
КОН СменитьНаправление;

ЗАДАЧА Начать();
ПЕР
  ч:ЦЕЛ;
УКАЗ
  ОТ ч:=0 ДО НачДлина-1 ВЫП
    КоордЗмеи[ч,0]:=НачДлина-ч; КоордЗмеи[ч,1]:=1;
    Змея[ч]:=ВКЛ
  КОН;
  Отключить;
  Вывод.Цвет(1,1,30,20,0);
  Метка.Изменить(Метка1,"Поехали!");
  Напр:=3;
  Играем:=ВКЛ;
  НачВремя:=ОС.Время();
  Вывести;
  РазместитьЕду
КОН Начать;

ЗАДАЧА ИзмУровень();
ПЕР
  ч:ЦЕЛ;
УКАЗ
  ЕСЛИ Уровень < 3 ТО
    УВЕЛИЧИТЬ(Уровень); Метка.ИзЧЦел(Метка2,"Уровень: %d",Уровень,0,0,0);
    Начать; ОС.Спать(1500)
  ИНАЧЕ
    Играем:=ОТКЛ; Метка.Изменить(Метка1,"Победа!")
  КОН;
  ВЫБРАТЬ Уровень ИЗ
    1: Ждём:=400
  | 2: Ждём:=200
  | 3: Ждём:=100
  ИНАЧЕ КОН
КОН ИзмУровень;

ЗАДАЧА Сдвинуть();
ПЕР
  ч:ЦЕЛ;
  хвост1,хвост2:ЦЕЛ;
УКАЗ
  хвост1:=КоордЗмеи[Хвост(),0]; хвост2:=КоордЗмеи[Хвост(),1];
  ЧёрныйКвадрат(КоордЗмеи[Хвост(),0]*3-2,КоордЗмеи[Хвост(),1]*2-1);
  ОТ ч:=МаксДлина-1 ДО 1 ПО -1 ВЫП КоордЗмеи[ч,0]:=КоордЗмеи[ч-1,0]; КоордЗмеи[ч,1]:=КоордЗмеи[ч-1,1] КОН;
  ВЫБРАТЬ Напр ИЗ
    0: УВЕЛИЧИТЬ(КоордЗмеи[0,1])
  | 1: УМЕНЬШИТЬ(КоордЗмеи[0,1])
  | 2: УМЕНЬШИТЬ(КоордЗмеи[0,0])
  | 3: УВЕЛИЧИТЬ(КоордЗмеи[0,0])
  ИНАЧЕ КОН;
  ЕСЛИ Врезались() ТО Поражение ИНАЧЕ Вывести КОН;
  ЕСЛИ Съели() ТО Змея[Хвост()+1]:=ВКЛ; КоордЗмеи[Хвост()+1,0]:=хвост1; КоордЗмеи[Хвост()+1,1]:=хвост2;
  РазместитьЕду; ЕСЛИ Хвост()+1 = МаксДлина-1 ТО ИзмУровень КОН ИНАЧЕ РисоватьЕду(КоордЕды[0],КоордЕды[1]) КОН;
  Пошли:=ВКЛ;
КОН Сдвинуть;

ЗАДАЧА Перехват(поле:Поле.Доступ; посылка+:Ввод.Посылка);
УКАЗ
  ДЛЯ посылка ВИДА
    Кнопка.Посылка:
      ВЫБРАТЬ посылка.действие ИЗ
        Выход: поле.состояние:=Поле.выход
      | Начали: Начать
      ИНАЧЕ
      КОН;
  | Ввод.ОтКлавиш:
      ВЫБРАТЬ посылка.код ИЗ 
        28H: СменитьНаправление(0)
      | 26H: СменитьНаправление(1)
      | 25H: СменитьНаправление(2)
      | 27H: СменитьНаправление(3)
      ИНАЧЕ КОН;
  ИНАЧЕ
  КОН
КОН Перехват;

ЗАДАЧА СоздатьПоле():Поле.Доступ;
ПЕР
  поле:Поле.Доступ;
  Кнопка1,Кнопка2:Кнопка.Доступ;
  наделы:Надел.Доступ;
УКАЗ
  Метка1:=Метка.Создать(33,3,""); 
  Метка2:=Метка.Создать(33,5,"Уровень: 1"); 
  Кнопка1:=Кнопка.Создать(33,20,"[ Выход ]",Выход); 
  Кнопка2:=Кнопка.Создать(33,18,"[ Начать ]",Начали); 
  Надел.Добавить(наделы,Метка1);
  Надел.Добавить(наделы,Метка2);
  Надел.Добавить(наделы,Кнопка1);
  Надел.Добавить(наделы,Кнопка2);
  поле:=Поле.Создать(" Змейка ",наделы,0,0,45,21,Перехват);
  ВОЗВРАТ поле
КОН СоздатьПоле;

ЗАДАЧА Поехали;
ПЕР
  поле:Поле.Доступ;
УКАЗ
  поле:=СоздатьПоле();
  Поле.Рисовать(поле);
  Вывод.Цвет(1,1,30,20,0);
  ПОВТОРЯТЬ
    ЕСЛИ (ОС.Время() >= НачВремя+Ждём) И Играем ТО
      НачВремя:=ОС.Время();
      Сдвинуть;
    КОН;
    Поле.Выполнить(поле)
  ДО поле.состояние = Поле.выход
КОН Поехали;

УКАЗ
  Играем:=ОТКЛ; Пошли:=ВКЛ;
  Уровень:=1; Ждём:=400;
  Поехали
КОН Змейка.
  

Это сообщение отредактировал(а) Сый - 16.6.2006, 22:27
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
ivashkanet
Дата 19.6.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: нет
Всего: 149



Код не смотрел, но по самой игре: Змейка не может менять направление движения на противопроложное (во всяком случае в классической игре не могла  smile ) 
PM MAIL WWW ICQ   Вверх
Сый
Дата 21.6.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 23.1.2006

Репутация: 2
Всего: 3



Ну эту возможность убрать не сложно. В представленной мной программе змейка при смене направления на обратное меняет порядок элементов на обратный и получает направление своего хвоста (который после переворота становится головой). 
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.