IPB
ЛогинПароль:

> Игра "кости"
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Надежда

Репутация: -  0  +


Здравствуй, помогите, пожалуйста. пишу игру кости подскажите где ошибка, начала с программы полегче, в итоге (в законченной программе) на экране должно появиться три кубика и их сумма внизу, нажатие клавиши "пробел" - означает повтор игры, "delete"- завершение игры.



Uses CRT, GraphABC;
var i:integer;
c: char;
t: byte;
label m1,loop;
procedure kyb1;
begin
floodfill(1,1,clgreen);
setwindowsize(800,800);
//квадрат
setpencolor(clblack);
setbrushcolor(clblack);
RoundRect(100,100,700,700,50,50);
//круг
setpencolor(clred);
setbrushcolor(clred);
circle(400,400,80);
end;

procedure kyb2;
begin
floodfill(1,1,clgreen);
setwindowsize(800,800);
//квадрат
setpencolor(clblack);
setbrushcolor(clblack);
RoundRect(100,100,700,700,50,50);
//круг
setpencolor(clred);
setbrushcolor(clred);
circle(250,250,60);
circle(550,550,60);
end;

procedure kyb3;
begin
floodfill(1,1,clgreen);
setwindowsize(800,800);
//квадрат
setpencolor(clblack);
setbrushcolor(clblack);
RoundRect(100,100,700,700,50,50);
//круг
setpencolor(clred);
setbrushcolor(clred);
circle(250,250,60);
circle(550,550,60);
circle(400,400,60);
end;

procedure kyb4;
begin
floodfill(1,1,clgreen);
setwindowsize(800,800);
//квадрат
setpencolor(clblack);
setbrushcolor(clblack);
RoundRect(100,100,700,700,50,50);
//круг
setpencolor(clred);
setbrushcolor(clred);
circle(250,250,60);
circle(550,550,60);
circle(250,550,60);
circle(550,250,60);
end;

procedure kyb5;
begin
floodfill(1,1,clgreen);
setwindowsize(800,800);
//квадрат
setpencolor(clblack);
setbrushcolor(clblack);
RoundRect(100,100,700,700,50,50);
//круг
setpencolor(clred);
setbrushcolor(clred);
circle(250,250,60);
circle(550,550,60);
circle(250,550,60);
circle(550,250,60);
circle(400,400,60);
end;

procedure kyb6;
begin
floodfill(1,1,clgreen);
setwindowsize(800,800);
//квадрат
setpencolor(clblack);
setbrushcolor(clblack);
RoundRect(100,100,700,700,50,50);
//круг
setpencolor(clred);
setbrushcolor(clred);
circle(250,250,50);
circle(550,550,50);
circle(250,550,50);
circle(550,250,50);
circle(250,400,50);
circle(550,400,50);
end;


begin
m1:
rectangle(0,0,800,800);
setbrushcolor(clgreen);
setpencolor(clgreen);
textout(200,10,'Программа эмитирует бросиние игральной кости');

randomize;
i:=random (7) ;
if i=0 then goto m1;
if i=1 then kyb1;
if i=2 then kyb2;
if i=3 then kyb3;
if i=4 then kyb4;
if i=5 then kyb5;
if i=6 then kyb6;
begin
clrscr;
t := 0;
repeat
textout(250,750,'Нажмите `пробел` для повторного броска');
textout(300,780,'Нажмите `delete` для выхода');
loop:
c := readkey;
if not (c in [#32, #46]) then goto loop;
if c = #32 then goto m1
else
until (c = #46) or (t=2);

hidecursor;
end;
end.

Добавлено через 9 мин.
Помогите, пожалуйста, очень нужно!!! sad.gif

Сообщение отредактировано: Vikki -


Прикрепленные файлы
Прикрепленный файл  _______________2.pas ( 3.36 килобайт ) Кол-во скачиваний: 404
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Я теряюсь. Ведь в этой программе только один цикл обработки команд (нажатий на кнопки) совмещённый с циклом ожидания. И там выход однозначный.

Если таких циклов обработки будет несколько (например, один в экране/ах справки, другой в экране меню, третий в игровом экране), то можно сделать глобальную переменную активности программы Active, в начале программы сделать Active:=true, а в случае нажатия кнопки выхода, присвоить Active:=false. И на каждом уровне проверять состояние этой переменной.
Это пример, с кучей ошибок, только для иллюстрации идеи

var
Active: boolean;
.........................

procedure ShowHelpScreen;
begin
repeat
{ввод команды}
repeat
c := readkey;
until c in [#32, #33, #46];
{обработка команд}
case c of
#32: {следующая подсказка}
begin
.............
end;
#33: {предыдущая подсказка}
begin
............
end;
#34: {завершение подсказки}
begin
............
break; {выход из командного цикла - завершение подсказки}
end;
#46: Active:=false; {завершение программы}
end;
until not Active;
end;
.........................
begin
Active:=true;
...........
repeat
{ввод команды}
repeat
c := readkey;
until c in [#32, #33, #46];
{обработка команд}
case c of
#32: {новый бросок}
begin
............. игровое действие
end;
#33:
begin
ShowHelpScreen; {вызов экрана справки со своим обработчиком команд}
end;
#46: Active:=false;
end;
until not Active;
...........
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Надежда

Репутация: -  0  +


Павел, простите за мою наглость(просто я совсем новичок в этом), но вы не поможете сделать так чтобы было три кубика на экране разные(рандомно), и внизу выводилась их сумма unsure.gif

Сообщение отредактировано: Vikki -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 23:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name