Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2011, 15:41   #1
CrimsonAndRed
 
Регистрация: 31.12.2011
Сообщений: 4
По умолчанию Игра lines на паскале

Здравcтвуйте. От изобилия свободного времени решил написать игру на паскале - lines, исключительно для себя, заодно и попрактиковаться;]
(Модуля graph не знаю, все оформление в символьном варианте)
(Программа находится в зачаточном варианте, умеет только заполнять поле шариками(звездочками))
Наткнулся на некоторые проблемы:
1) Помогите наставить пропусков, как на вложенном скриншоте (предыдущая версия программы, отказавшаяся работать)
2) От предыдущей программы осталась строчка 'x[koef7]:=4*random(8)+3;',т.е вероятно наличие звездочки в координате x 27, а рисовать звездочку программа будет все-равно левее, в пределах 16 символов.(как оно работает?)
3) Помогите решить проблему с тем, что между двумя || может поместиться много звездочек(по задумке должна быть одна). (Решено: надо писать until untilovaya<>1)
Код:
 program wariki;
 uses crt;
 var i,untilovaya,koef7,koef3,koef4,koef6,k,n,m,d,cvet:integer;
 x:array[1..68] of integer; // В этот массив записываются координаты  x всех шариков(звездочек)
 y:array[1..68] of integer; // В этот массив записываются координаты y всех звездочек
 cv:array[1..68] of integer;  // В этот массив сохраняется цвет звездочек
 function clrw(p:integer):integer;// Функция задает цвет звездочке по известному рандомному числу
 begin
 if p=0 then textcolor(blue);
 if p=1 then textcolor(green);
 if p=2 then textcolor(yellow);
 if p=3 then textcolor(red);
 if p=4 then textcolor(white);
 end;
 begin
 textcolor(white);
 m:=1; // m - счетчик шариков
 while true do
 begin
 randomize;
 repeat // Этот цикл задает x,y и цвет 3x шариков и записывает это все в массив
 for koef7:=m to m+2 do
 begin
 untilovaya:=0;
 x[koef7]:=4*random(8)+3;
 y[koef7]:=4*random(8)+3;
 cv[koef7]:=random(5);
 for koef4:=1 to m+2 do
  for koef3:=koef4+1 to m+2 do
  if (x[koef3] = x[koef4]) and (y[koef3]=y[koef4]) then untilovaya:=1 // Если появилось повторение положения хоть одного шарика - задать заного 3 новых
 end;
 until untilovaya=1;
 for d:=m+3 to 68 do // Остальным шарикам записываем отрицательную координату
 x[d]:=-1;
 clrscr;
 Writeln('  ');
 for k:=1 to 32 do // Рисуем табличку из символов '-' и '|', и заполняем ее звездочками из массива
 write('-');
 writeln('-');
 for i:=1 to 32 do
 begin
 for n:=0 to 32 do
 begin
 if (i mod 4=0) then write('-')
 else if (n mod 4 = 0) then write('|')
 else for koef6:=1 to m+2 do
         if ((x[koef6]=n) and (y[koef6]=i)) then
  begin
  clrw(cv[koef6]);
  write('*');
  textcolor(white);
  end
  end;
 writeln(' ');
 end;
 m:=m+3; // Прибавляем 3 новых звездочки, чтобы они не перезаписали уже существующие звездочки
 readkey;
 if readkey='x' then exit;
 end;
 end.
P.s. Всех с наступающим ;]
Изображения
Тип файла: jpg warik.jpg (38.9 Кб, 144 просмотров)

Последний раз редактировалось CrimsonAndRed; 31.12.2011 в 17:36. Причина: -_-
CrimsonAndRed вне форума Ответить с цитированием
Старый 02.01.2012, 22:36   #2
CrimsonAndRed
 
Регистрация: 31.12.2011
Сообщений: 4
По умолчанию

Up! Up! Up!
CrimsonAndRed вне форума Ответить с цитированием
Старый 03.01.2012, 23:05   #3
CrimsonAndRed
 
Регистрация: 31.12.2011
Сообщений: 4
По умолчанию

Всем большое спасибо за ответы, вы мне очень помогли. Рабочий вариант:
Код:
 program wariki;
 uses crt;
 var i,untilovaya,koef7,koef3,koef4,tak,koef6,k,n,m,d,tra,a,koef5:integer;
 x:array[1..68] of integer;
 y:array[1..68] of integer;
 cv:array[1..68] of integer;
 function clrw(p:integer):integer;
 begin
 if p=0 then textcolor(lightblue);
 if p=1 then textcolor(green);
 if p=2 then textcolor(yellow);
 if p=3 then textcolor(red);
 if p=4 then textcolor(white);
 end;
 begin
 textcolor(white);
 m:=1;
 while true do
 begin
 randomize;
 repeat
 for koef7:=m to m+2 do
 begin
 untilovaya:=0;
 x[koef7]:=4*random(8)+3;
 y[koef7]:=4*random(8)+3;
 cv[koef7]:=random(5);
 end;
 for koef4:=1 to m+2 do
  for koef3:=koef4+1 to m+2 do
  if (x[koef3] = x[koef4]) and (y[koef3]=y[koef4]) then untilovaya:=1
 until untilovaya<>1;
 clrscr;
 Writeln('  ');
 for k:=1 to 40 do
 write('-');
 writeln('-');
 for i:=1 to 32 do
 begin

 if (i mod 4 = 0) then begin for tak:=1 to 40 do write('-'); writeln('-'); continue; end;
 for n:=0 to 32 do
 begin
 koef5:=0;
 if (n mod 4 = 0) then write('|') else
 for koef6:=1 to m+2 do
         if ((x[koef6]=n) and (y[koef6]=i)) then begin koef5:=1; tra:=koef6
  end;
  if koef5<>1 then write(' ') else begin clrw(cv[tra]); write('*'); textcolor(white); end;
  end;
 writeln(' ');
 end;
 a:=1;
 m:=m+3;
 if m=64 then
 begin
 writeln('You lose');
 readkey;
 if readkey='m' then m:=1 else exit;
 end;
 readkey;
 if (readkey='x') or (readkey='X') then exit;
 end;
 end.
CrimsonAndRed вне форума Ответить с цитированием
Старый 04.01.2012, 08:56   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
function clrw(p:integer):integer;
бессмыслено. Это у Вас не функция, а процедура.
Измените описание на
Код:
procedure clrw(p:integer);
Цитата:
Код:
while true do
 begin
 randomize;
неправильно Вы используете генератор случайных чисел. Иницилизировать его надо ОДИН раз. Вынесите randomize; выше, до цикла..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.01.2012, 16:37   #5
CrimsonAndRed
 
Регистрация: 31.12.2011
Сообщений: 4
По умолчанию

Хорошо, но тем не менее все работает правильно;]
------------------------------------------------------
Теперь столкнулся с другой проблемой, окно ввода/вывода, возникающее при запуске программы(не знаю как оно зовется,то, которое 80 на 25 позиций) необходимо расширить до 80 на 80. Если это возможно - напишите как, будте добры.
p.s. При указании window(1,1,80,80) ничего не меняется.;[

Последний раз редактировалось CrimsonAndRed; 04.01.2012 в 18:21. Причина: -_-
CrimsonAndRed вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра "Lines" Picnic Помощь студентам 6 05.12.2011 17:10
Игра Lines ( C++ ) Проблема с рекурсией tov-solntsev Помощь студентам 0 29.08.2010 15:32
написать игру LINES в паскале Настёна Фриланс 7 23.06.2008 23:40
Игра Lines на паскале Nikska Помощь студентам 1 28.05.2008 19:38