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  +


Нет. У меня нет PascalABC. Вдобавок, вы пытаетесь работать, а я халявой всё испорчу.

Подброшу идею.
Можно сделать три переменные - состояния кубиков - Cube1, Cube2, Cube3. Ну или один массив из трёх элементов вместо этих переменных. Ну пусть будут переменные. Тогда в обработке команд
..........
#32: {новый бросок}
begin
Cube1 := random(6) + 1;
Cube2 := random(6) + 1;
Cube3 := random(6) + 1;
PaintCube(x1, y1, Cube1); {рисование 1-го кубика}
PaintCube(x2, y2, Cube2); {рисование 2-го кубика}
PaintCube(x3, y3, Cube3); {рисование 3-го кубика}
end;
.............

Само рисование кубика сделайте таким (это условно, т.к. проверить не могу)
procedure PaintCube(x,y:integer; Cube: integer);
begin
case Cube of
1: kyb1(x,y);
2: kyb2(x,y);
3: kyb3(x,y);
4: kyb4(x,y);
5: kyb5(x,y);
6: kyb6(x,y);
end;
end;

А процедуры kybX оформите с относительными координатами. Наподобие (нужно проверять, но не на чем - отладьте на одном кубике и примените к нескольким):
  procedure kyb2(x, y: integer);
begin
floodfill(1, 1, clgreen);
setwindowsize(x+800, y+800);
//квадрат
setpencolor(clblack);
setbrushcolor(clblack);
RoundRect(x+100, y+100, x+700, y+700, 50, 50);
//круг
setpencolor(clred);
setbrushcolor(clred);
circle(x+250, y+250, 60);
circle(x+550, y+550, 60);
end;

Не могу проверить рисование. В общем, должен получиться квадратик с кружочками. Причём при рисовании не должно быть очистки всего экрана - только заполнение области квадратика. А координаты должны быть связаны с x и y, чтобы одной процедурой рисовать и 1-й и 2-й и 3-й кубик.

Надеюсь, понятно объяснил. Только код не могу проверить.

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

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


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

 





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