Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/68: Рейтинг темы: голосов - 68, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 01.04.2012
Сообщений: 8

игра "БАШЕ" на паскале АБС

11.06.2013, 12:29. Показов 12914. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, это программа для курсовой)) мне нужно добавить выход(начать заново) из программы, но что-то я не могу понять как. помогите(((

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Program Bashe;
 
Uses CRT;
 
Function YouWinLose(Stick, Clear: Integer): Integer;
 Begin
   if (Stick = 0) or (Stick < 1) then
     Begin
       WriteLn;
       WriteLn('Вы проиграли!');
       WriteLn('Замечание: Вам необходимо убрать предметы так, чтобы ваш противник остался с последним предметом!');
       WriteLn('Вы сделали немного наоборот, убрав последние количество предметов, в результате чего и проиграли...');
       Halt;
   End
   else
   if (Stick = 1) or (Stick < 1) then
    Begin
      WriteLn;
      WriteLn('Вы выиграли, поздравляю!');
      Halt;
    End
   else
 End;
 
Function ComputerWinLose(Stick, RandomClear: Integer): Integer;
 Begin
   if (Stick = 0) or (Stick < 1) then
    Begin
      WriteLn('Компьютер проиграл!');
      Halt;
    End
    else
    if (Stick = 1) or (Stick < 1) then
     Begin
       WriteLn('Компьютер выиграл!');
       Halt;
     End
   else
 End;
 
Function Steps(Stick, Clear, RandomClear: Integer): Integer;
 Begin
   Stick:= 15;
   Repeat
    WriteLn;
    ReadLn(Clear);
    if Clear > 3 then
       Begin
         WriteLn;
         WriteLn('Больше 3 предметов брать запрещено!');
         WriteLn;
         WriteLn('Попробуйте начать заного...');
         Halt;
       End
   else
   Stick:= Stick - Clear;
   WriteLn;
   if Clear = 0 then
      Begin
        WriteLn('Вы должны выбрать хоть 1 предмет!');
        WriteLn;
        WriteLn('Попробуйте начать заного...');
        Halt;
      End
     else
   if Clear = 1 then
      WriteLn('Вы убрали ' , Clear, ' предмет.', ' - В наличие ещё ', '[', Stick, '] -')
   else
      WriteLn('Вы убрали ' , Clear, ' предмета.', ' - В наличие ещё ', '[', Stick, '] -');
      YouWinLose(Stick, Clear);
      WriteLn;
      Sleep(1000);
      WriteLn('Теперь ходит комьютер...');
      Repeat
       Randomize;
       RandomClear:= Random(4);
       if RandomClear = 0 then
        RandomClear:= Random(4);
      Until RandomClear <> 0;
      Stick:= Stick - RandomClear;
      WriteLn;
      if RandomClear = 1 then
       WriteLn('Компьютер убрал ' , RandomClear, ' предмет.', ' - В наличие ещё ', '[', Stick, '] -')
      else
       WriteLn('Компьютер убрал ' , RandomClear, ' предмета.', ' - В наличие ещё ', '[', Stick, '] -');
       WriteLn;
       ComputerWinLose(Stick, RandomClear);
       WriteLn('Ваш ход!');
    Until Stick = 1;
 End;
 
Procedure AboutGame(Information: String);
 Begin
   ClrScr;
   WriteLn;
   WriteLn('(Игра Баше на 15 предметах)');
   WriteLn;
   WriteLn('Правила игры Баше таковы. Имеется 15 одинаковых предметов(обычно это деревянные палочки).');
   WriteLn('В игре участвуют двое. Соперники ходят по очереди, за каждый ход играющий может взять 1, 2 или 3 предмета.');
   WriteLn('Проигрывает тот, кто вынужден взять последний предмет.');
   WriteLn(' # Примечание - пропускать ход нельзя.');
   WriteLn;
   ReadKey;
 End;
 
Var
  Stick, Clear, RandomClear: Integer;
  Information: String;
 
Begin
  WriteLn('Добро пожаловать!');
  WriteLn;
  WriteLn('Для того чтобы начать играть в "Баше", необходимо ознакомится с правилами игры.');
  WriteLn;
  ReadKey;
  AboutGame(Information);
  ClrScr;
  WriteLn;
  WriteLn('Если вы ознакомились с правилами, тогда вперед.');
  WriteLn;
  WriteLn('Перед вами 15 предметов');
  WriteLn;
  WriteLn('[ ||||| ||||| ||||| ]');
  WriteLn;
  WriteLn('Сколько предметов вы хотите убрать? :');
  Steps(Stick, Clear, RandomClear);
End.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.06.2013, 12:29
Ответы с готовыми решениями:

Ку всем , очень нужно в паскале абс
Спасибо большое

Построить графики функций в паскале абс
Помогите построить графики функций

Ку всем , кто шарит в этом ? нужно в паскале абс
спасибо большое

5
561 / 484 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
11.06.2013, 13:29
Вы слишком закрутили с программой, много повторений кода. Попробуйте код из главного begin..end переместить в процедуру, которая будет запускать игру. Но тогда сразу надо убирать Halt, так как это рушит всю идею. И тут уже проблема в архитектуре.
В общем
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function IsExit: boolean;
var
 userSelectedCommand: byte;
begin
 write('1 - заново, 2 - выход :');
 readLn(userSelectedCommand);
 
 if userSelectedCommand = 1 then
  IsExit := False
 else if userSelectedCommand = 2 then
  IsExit := True;
end;
 
Begin
 repeat
  Game; // Замена главного begin..end
 until IsExit;
End.
P.S. Работает не всегда, и то если Halt заменить на exit. Я бы делал программу в форме ООП, тогда было бы проще изменять структуру. Но самое главное - разделить все эти подпрограммы на меньшие.

Не по теме:

Pascal
1
WriteLn('Попробуйте начать заного...');
Дишаа, заново. Опечатка у вас.

1
0 / 0 / 0
Регистрация: 01.04.2012
Сообщений: 8
11.06.2013, 17:32  [ТС]
главный begin это steps. что то не могу соеденить((( а переделывать программу сейчас не вариант, в пятницу защита и я ее уже описала по функциям(((
0
561 / 484 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
11.06.2013, 17:46
Цитата Сообщение от Дишаа Посмотреть сообщение
главный begin это steps.
Я имел ввиду
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Begin
  WriteLn('Добро пожаловать!');
  WriteLn;
  WriteLn('Для того чтобы начать играть в "Баше", необходимо ознакомится с правилами игры.');
  WriteLn;
  ReadKey;
  AboutGame(Information);
  ClrScr;
  WriteLn;
  WriteLn('Если вы ознакомились с правилами, тогда вперед.');
  WriteLn;
  WriteLn('Перед вами 15 предметов');
  WriteLn;
  WriteLn('[ ||||| ||||| ||||| ]');
  WriteLn;
  WriteLn('Сколько предметов вы хотите убрать? :');
  Steps(Stick, Clear, RandomClear);
End.
Цитата Сообщение от Дишаа Посмотреть сообщение
переделывать программу сейчас не вариант
Изменение программы всегда вариант, на то он и рефакторинг. Жаль, у меня кодировка портится при копировании текста, а так бы покопался. Может бы и что-то с этого получилось бы....
0
0 / 0 / 0
Регистрация: 01.04.2012
Сообщений: 8
12.06.2013, 18:28  [ТС]
я вас замучаю((( можете полностью соединить как надо, пожалууууйста(((
0
561 / 484 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
12.06.2013, 19:51
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Program Bashe;
 
Uses CRT;
 
Var
  Stick, Clear, RandomClear: Integer;
  
Procedure StartGame;forward;
 
Procedure RestartGame;
 Begin
   ClrScr;
   StartGame;
 End;
 
Procedure AskUserToRestartGame;
 Var
  UserCommand: integer;
 Begin
   Repeat 
      WriteLn('Выбирите команду(1 - играть заново, 2 - выход)');
      ReadLn(UserCommand);
   Until UserCommand in [1, 2]; 
   Case UserCommand of
       1: RestartGame;
       2: Halt;
    End;
 End;
 
Procedure CheckState;
 Begin
   if (Stick = 0) or (Stick < 1) then
     Begin
       WriteLn;
       WriteLn('Вы проиграли!');
       WriteLn('Замечание: Вам необходимо убрать предметы так, чтобы ваш противник остался с последним предметом!');
       WriteLn('Вы сделали немного наоборот, убрав последние количество предметов, в результате чего и проиграли...');
       AskUserToRestartGame;
   End
   else
   if (Stick = 1) or (Stick < 1) then
    Begin
      WriteLn;
      WriteLn('Вы выиграли, поздравляю!');
      AskUserToRestartGame;
    End
 End;
 
 
Procedure Steps;
 Begin
   Stick:= 15;
   Repeat
    WriteLn;
    ReadLn(Clear);
    if Clear > 3 then
       Begin
         WriteLn;
         WriteLn('Больше 3 предметов брать запрещено!');
         AskUserToRestartGame;
       End
   else
   Stick:= Stick - Clear;
   WriteLn;
   if Clear = 0 then
      Begin
        WriteLn('Вы должны выбрать хоть 1 предмет!');
        AskUserToRestartGame;
      End
     else
      WriteLn('Вы убрали ' , Clear, ' предмета.', ' - В наличие ещё ', '[', Stick, '] -');
      CheckState;
      WriteLn;
      Sleep(1000);
      WriteLn('Теперь ходит комьютер...');
      Repeat
       Randomize;
       RandomClear:= Random(4);
       if RandomClear = 0 then
        RandomClear:= Random(4);
      Until RandomClear <> 0;
      Stick:= Stick - RandomClear;
      WriteLn;
       WriteLn('Компьютер убрал ' , RandomClear, ' предмета.', ' - В наличие ещё ', '[', Stick, '] -');
       WriteLn;
       CheckState;
       WriteLn('Ваш ход!');
    Until Stick = 1;
 End;
 
Procedure AboutGame;
 Begin
   ClrScr;
   WriteLn;
   WriteLn('(Игра Баше на 15 предметах)');
   WriteLn;
   WriteLn('Правила игры Баше таковы. Имеется 15 одинаковых предметов(обычно это деревянные палочки).');
   WriteLn('В игре участвуют двое. Соперники ходят по очереди, за каждый ход играющий может взять 1, 2 или 3 предмета.');
   WriteLn('Проигрывает тот, кто вынужден взять последний предмет.');
   WriteLn(' # Примечание - пропускать ход нельзя.');
   WriteLn;
   ReadLn;
 End;
 
Procedure StartGame;
Begin
  WriteLn('Добро пожаловать!');
  WriteLn;
  WriteLn('Для того чтобы начать играть в "Баше", необходимо ознакомится с правилами игры.');
  WriteLn;
  ReadLn;
  AboutGame;
  ClrScr;
  WriteLn;
  WriteLn('Если вы ознакомились с правилами, тогда вперед.');
  WriteLn;
  WriteLn('Перед вами 15 предметов');
  WriteLn;
  WriteLn('[ ||||| ||||| ||||| ]');
  WriteLn;
  WriteLn('Сколько предметов вы хотите убрать? :');
  Steps;
End;
 
Begin
  StartGame;
End.

Вот так я малость попрактиковался в рефакторинге, старался сильно не повлиять на программу(пытался стиль сохранить). Немного убрал повторения(они мешали добавить функционал), ReadKey заменил на ReadLn, а то Readkey глючит. В общем пробовал, у меня работает.

P.S. Если игрок выиграл, то, соответственно, ПК проиграл. По-этому я сделал уведомление, что пользователь выиграл/проиграл и убрал уведомление о ПК.

P.P.S. Но я всё ровно считаю, что такую программу надо делать в стиле ООП.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2013, 19:51
Помогаю со студенческими работами здесь

Как в Паскале АБС сделать окно подтверждения выхода из программы?
Подскажите, пожалуйста, как в старом Паскале АБС сделать окно подтверждения выхода из программы

Игра в «Одиннадцать предметов», игра Баше.
прошу помощи в создании программы! Разработать программную модель следующей игры двух игроков(пользователь-компьютер),реализовав...

Игра Баше.
Игра Баше. Имеется 15 одинаковых предметов. В играют двое. Сопреники ходят по очереди, за каждый ход играющий может взять 1,2 или 3...

Как в паскале абс
У меня в паскале абс есть некое подобие игры. Есть огромная карта и крошечный человек. Нужно чтобы при перемещении человека на 10 пикселей...

Можно ли скомпилировать код на паскале абс, если он написан на дельфи 2009?
Можно скомпилоровать код на паскале абс, если он написан на дельфи 2009?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru