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

 
 Ответить  Открыть новую тему 
> игра "Кости", Зацените
yazer
сообщение 18.11.2006 18:42
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской

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


Сделал свою первую игру на Паскале. Зацените.
Прикрепленный файл  BONES.PAS ( 1.15 килобайт ) Кол-во скачиваний: 588
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 2.12.2006 21:27
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


goto сразу портит впечатление...
лучше сразу добавлять к случайному значению 1, чтобы 0 никогда не получался


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
yazer
сообщение 9.12.2006 17:30
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской

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


Зделал через процедуры без goto.
Дабавил к случайному значению 1, а всё равно иногда ноль випадает sad.gif
Прикрепленный файл  BONES2.PAS ( 1.18 килобайт ) Кол-во скачиваний: 425
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 9.12.2006 18:25
Сообщение #4


Гость






a:=random(6+1);
замени на
a:=random(6) + 1;
 К началу страницы 
+ Ответить 
yazer
сообщение 10.12.2006 17:02
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской

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


Спасибо
Прикрепленный файл  BONES.PAS ( 1.17 килобайт ) Кол-во скачиваний: 408
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 11.12.2006 13:53
Сообщение #6


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Хорошо бы все же сделать какую-то возможность выхода из игры (например, ввод нулевой ставки).
Темно-красный на черном фоне очень плохо различим..
Мне кажется, лучше не стирать, а сохранять предыдущие ходы как протокол игры, но это дело вкуса.
Минутная задержка в конце игры - очень неудачное решение. Сделай ReadKey.
Кости по-английски называются Dice smile.gif
Забавно было бы рисовать выпвшие кости типа так:
  -----
 |0   0|
 |  0  |
 |0   0|
  -----

При написании соблюдай отступы внутри блоков - увидишь, как это помогает.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
yazer
сообщение 11.12.2006 18:50
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской

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


Доделал. Только вопрос: как использовать readkey?
Прикрепленный файл  Dice.PAS ( 3.15 килобайт ) Кол-во скачиваний: 420
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mamont001
сообщение 12.12.2006 0:11
Сообщение #8


Вожак стада
***

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

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


Цитата(yazer @ 11.12.2006 17:50) *

Только вопрос: как использовать readkey?


делаеш еще одну переменную типа char, например

 symbol:char;



и в програме дописываеш вместо задержки


 symbol:=readkey;




--------------------
Админ наш,
Иже еси на серверах!
Да святится имя Твое,
Да приидет Unix Твой,
Да будет воля Твоя,
Как на земле , так и на небе.
Пинг наш насущный дай нам на сей день;
И прости нам счета наши, как и мы оставляем их должникам нашим;
И не введи нас во искушение виндовое,
Но избавь нас от лукавого Билли.
И да пребудет с нами сила твоя великая,
Во имя Отца-админа, Сына-Пингвина, и духа мастдайного. Админь!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2006 0:16
Сообщение #9


Гость






Совершенно не обязательно вводить лишнюю переменную. ReadKey даже без присваивания (вызванный, как процедура) остановит работу программы до нажатия любой клавиши ...

А вот потом желательно очистить буфер, чтобы (если нажата клавиша с расширенным кодом) второй код не вывалился в командную строку или IDE после завершения программы...
 К началу страницы 
+ Ответить 
Bokul
сообщение 12.12.2006 0:32
Сообщение #10


Гуру
*****

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

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


Цитата
А вот потом желательно очистить буфер

Как?


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2006 0:43
Сообщение #11


Гость






while keypressed do readkey;

или
repeat
  readkey
until not keypressed;
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.12.2006 5:38
Сообщение #12


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(yazer @ 11.12.2006 19:50) *

Доделал.

Ты пошто из шестерки девятку сделал? Думаешь, так главнее?.. lol.gif

yazer, настоятельно тебе советую: поинтересуйся отступами.
В маленьких программах еще ничего, но потом запутаешься напрочь..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.12.2006 6:55
Сообщение #13


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Способ рисования костей у тебя чересчур банальный.. Посмотри вот на эту процедурку.
uses crt;

procedure Picture(n:integer);
var
  x,y,i,j:integer;
  c:char;

  procedure Put(i,j:integer);
  begin
    GotoXY(x+i,y+j);Write(с )
  end;

begin
  x:=WhereX;
  y:=WhereY;
  c:='|';
  for i:=1 to 5 do begin
    Put(0,i);Put(8,i)
  end;
  c:='-';
  for i:=1 to 7 do begin
    Put(i,0);Put(i,6)
  end;
  c:='0';
  repeat
    case n of
      1: begin Put(4,3); n:=0 end;
      2: begin Put(2,1); Put(6,5); n:=0 end;
      3: begin Put(4,3); n:=2 end;
      4: begin Put(6,1); Put(2,5); n:=2 end;
      5: begin Put(4,3); n:=4 end;
      6: begin Put(6,3); Put(2,3); n:=4 end;
    end
  until n=0
end;

var
  i:integer;

begin
  ClrScr;
  for i:=1 to 6 do begin
    GoToXY(i*12-10,i*3);
    Picture(i)
  end;
  readKey
end.

Наверняка, можно еще гораздо компактнее сделать.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.12.2006 9:47
Сообщение #14


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Ага, можно yes2.gif
Что-то меня пробило на это дело.. smile.gif Вот еще один вариант. Он не только компактнее, но еще и масштабируется при необходимости в некоторых пределах.
Попробуй! smile.gif
uses crt;

var
  Lx,Ly:integer;

procedure Picture(n:integer);
const
  Dice:array[1..6,1..6,1..2]of integer=
    (((45,45),(0,0),(0,0),(0,0),(0,0),(0,0)),
    ((10,15),(75,65),(0,0),(0,0),(0,0),(0,0)),
    ((45,45),(10,15),(75,65),(0,0),(0,0),(0,0)),
    ((10,15),(75,65),(10,65),(75,15),(0,0),(0,0)),
    ((10,15),(75,65),(10,65),(75,15),(45,45),(0,0)),
    ((10,15),(75,65),(10,65),(75,15),(10,45),(75,45)));

var
  x,y,i,j,k:integer;

  procedure Put(c:char);
  begin
    GotoXY(x+i,y+j);Write(c)
  end;

begin
  x:=WhereX;
  y:=WhereY;
  for j:=2 to Ly-1 do begin i:=1;Put('|');i:=Lx;Put('|') end;
  for i:=2 to Lx-1 do begin j:=1;Put('-');j:=Ly;Put('-') end;
  x:=x+1;
  y:=y+1;
  for j:=1 to Ly do for i:=1 to Lx do for k:=1 to 6 do
    if (Round((Lx-2)*Dice[n,k,1]/100)=i-1)and(Round((Ly)*Dice[n,k,2]/100)=j) then Put('0')
end;

var
  i:integer;

begin
  ClrScr;
  Lx:=5;
  Ly:=5;
  for i:=1 to 6 do begin
    GoToXY(i*12-10,i);
    Picture(i)
  end;
  Lx:=7;
  Ly:=5;
  for i:=1 to 6 do begin
    GoToXY(i*12-10,i+5);
    Picture(i)
  end;
  Lx:=9;
  Ly:=7;
  for i:=1 to 6 do begin
    GoToXY(i*12-10,i+10);
    Picture(i)
  end;
  Lx:=11;
  Ly:=7;
  for i:=1 to 6 do begin
    GoToXY(i*12-10,i+17);
    Picture(i)
  end;
  readKey
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.12.2006 9:51
Сообщение #15


Гость






blink.gif
Я бы дальше вот такого, скажем, не пошел... Ухудшается читабельность, потом разбираться придется, КАК оно работало...

uses crt;

procedure Picture(n:integer);
var
  c: char;

  procedure Put(i,j:integer);
  var x, y: integer;
  begin
    X := whereX; Y := wherey;

    GotoXY(x+i,y+j);Write( c );

    GotoXY(X, Y);
  end;

var
  i: integer;
const
  coord: array[1 .. 3] of integer = (1, 5, 3);

begin
  c:='|';
  for i:=1 to 5 do begin
    Put(0,i);Put(8,i)
  end;
  c:='-';
  for i:=1 to 7 do begin
    Put(i,0);Put(i,6)
  end;
  c:='0';
  repeat

    if odd(n) then Put(4, 3)
    else begin
      Put(2, coord[n div 2]); Put(6, 6 - coord[n div 2]);
    end;
    n := 2 * (pred(n) div 2);

  until n=0
end;

var
  i:integer;

begin
  ClrScr;
  for i:=1 to 6 do begin
    GoToXY(i*12-10,i*3);
    Picture(i)
  end;
  readKey
end.
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.12.2006 9:58
Сообщение #16


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(volvo @ 12.12.2006 10:51) *

Я бы дальше вот такого, скажем, не пошел... Ухудшается читабельность, потом разбираться придется, КАК оно работало...

Абсолютно согласен, и тут два вывода: либо снабдить подробнейшими комментариями, либо уже ничего не менять, а пользоваться так smile.gif))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

- Текстовая версия 31.07.2025 5:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"