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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
Closed Topic Открыть новую тему 
> Игра виселица, Помогите с двумя условиями!!!Спасибо!!!!
сообщение
Сообщение #1


Новичок
*

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

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


Ребят подгоните пожайлуста исходник под 3 условия:
1)Буквы не могут повторятся
2)Клавиши должны фильтроваться только буквенные клавиши и клавиша ESC
Вот исходник:
Код
uses crt;
type
tWiselicaSymbol=record
  x,y:byte; {Координаты символа}
  s:char;   {Номер символа}
  c:byte;   {Цвет символа}
end;
tWiselica=array[1..13] of tWiselicaSymbol;
tSetOfChar=set of char;
const
wiselica:tWiselica=((x:0;y:4;s:'¦';c:15),(x:0;y:3;s:'¦';c:15),(x:0;y:2;s :'¦';c:15),(x:0;y:1;s:'¦';c:15),
                    (x:0;y:0;s:'г';c:15),(x:1;y:0;s:'=';c:15),(x:2;y:0;s:'=';c:15),(x:3;y:0; s:'¬';c:15),
                    (x:3;y:1;s:'o';c:14), (x:3;y:2;s:'O';c:9), (x:2;y:2;s:'/';c:6), (x:4;y:2;s:'\';c:6),
                    (x:3;y:3;s:'П';c:6));
var
ourword:string;
WordCharSet:tSetOfChar;
quit:boolean;
popitka:byte;
c:string[1];

function GetRandomWordFromFile(FileName:string):string;
var {Возвращает случайным образом слово из файла FileName}
f:text;
p,o:word;
s:string;
begin
assign(f,filename);
reset(f);
p:=0;
while not eof(f) do
begin
  readln(f);
  inc(p);
end;
close(f);
reset(f);
o:=random(p)+1;
p:=0;
while not eof(f) do
begin
  readln(f,s);
  inc(p);
  if p=o then break;
end;
close(f);
GetRandomWordFromFile:=s;
end;

procedure ShowPartOfWiselica(x,y,PartNumber:byte);
begin {Изображает на экране в заданном месте определённую часть виселицы}
if PartNumber=0 then exit;
gotoxy(x+wiselica[PartNumber].x,y+wiselica[PartNumber].y);
textcolor(wiselica[PartNumber].c);
write(wiselica[PartNumber].s);
textcolor(7);
gotoxy(1,1);
end;

procedure ShowWord(x,y:byte);
var p:byte; {Показывает слово, учитывая известные буквы}
begin
gotoxy(x,y);
textcolor(15);
for p:=1 to length(ourword) do
if ourword[p] in WordCharSet then write(ourword[p]) else write('.');
gotoxy(1,1);
textcolor(7);
end;

function CheckForAllLetters:boolean;
var p:byte; {Проверяет, все ли буквы уже отгаданы}
begin
checkforallLetters:=true;
for p:=1 to length(ourword) do if not (ourword[p] in WordCharSet) then checkforallLetters:=false;
end;

function CheckForLetterInWord(c:string):boolean;
begin {Проверяет, есть ли буква С в слове}
if(pos(c,OurWord)<>0)and not (c[1] in WordCharSet) then CheckForLetterInWord:=true else CheckForLetterInWord:=false;
end;

function up(s:string):string;
var p:byte; {Поднимает символ в верхний регистр}
begin
up[0]:=s[0];
for p:=1 to length(s) do
  up[p]:=char(byte(s[p])-$20*byte(s[p]>#96)-$30*byte(s[p]>#$DF));
end;

begin
randomize;
ourword:=up(GetRandomWordFromFile('word.txt'));
wordcharset:=[ourword[1]];
wordcharset:=wordcharset+[ourword[length(ourword)]];
clrscr;
writeln(' ':31,'ИГРА "ВИСЕЛИЦА"');
writeln;
write('Слово:',' ':50,' Попыток осталось:');
popitka:=0;
repeat
  ShowWord(8,3);
  ShowPartOfWiselica(60,5,popitka);
  gotoxy(75,3);
  textcolor(15);
  write((13-popitka):2);
  textcolor(7);
  gotoxy(1,5+popitka);
  if popitka=13 then
  begin
    writeln;
    writeln('ВЫ ПРОИГРАЛИ !!!!');
    halt;
  end else
  if CheckForAllLetters then
  begin
    writeln;
    writeln('ВЫ ВЫИГРАЛИ !!!!');
    halt;
  end;
  write('Введите букву (ESC - выход): ');
  c:=up(readkey);
  if c=#27 then halt;
  gotoxy(29,5+popitka);
  textcolor(15);
  write©;
  textcolor(7);
  if CheckForLetterInWord© then WordCharSet:=WordCharSet+[c[1]] else
  begin
    write(' - НЕПРАВИЛЬНО !');
    inc(popitka);
  end;
until false;
end.

Ребята все кто может наложите на исходник эти два условия это очень нужно!!!Очень срочно!!!Заранее ОГРОМНОЕ СПАСИБО всем кто откликнулся!!!!! smile.gif

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


Гость






dct
Ну а в чем проблема? Просто напиши свою функцию вместо ReadKey...
Например, так:
const
  charSet: set of char = [#27, 'A' .. 'Z'];
{сюда поставь все символы, которые должны обрабатываться программой (в верхнем регистре)}

function myReadKey: Char;

    function upchar(ch:char):char;
    {Поднимает символ в верхний регистр}
    begin
      upchar:=char(byte(ch)-$20*byte(ch>#96)-$30*byte(ch>#$DF));
    end; 

  var ch: char;
  begin
    repeat
      ch := upchar(readkey);
    until ch in charSet;
    exclude(charset, ch);
    myReadKey := ch
  end;


А в основной программе вместо
c:=up(readkey);

используй
c:=myreadkey;


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


он пишет что:Unknow identetifer ch:!!!!!!!!!!!!!!!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






dct
Исправлено.
Добавить переменную большая проблема?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Ищущий истину
******

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

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


volvo, если не знать какого она типа, то да smile.gif
(вспомни меня вчра с этим thandle smile.gif - самому стыдно smile.gif )


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


ourword:=upchar(GetRandomWordFromFile('er.txt'));теперь здесь тоже самое
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






offtop
А какого типа она может быть, если возвращается из функции UpChar? blink.gif
/offtop
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


эту ф-цию надо было занести в Const
function myReadKey: Char;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






dct
Цитата
ourword:=upchar(GetRandomWordFromFile('er.txt'));теперь здесь тоже самое

А вот это уже Ваша проблема... Я в программу не лез - исходя из принципа "не навреди"... Если она не работает, значит и не работала...

P.S.
Цитата
эту ф-цию надо было занести в Const
function myReadKey: Char;

Функцию в Const? Это что-то новое...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Цитата(volvo @ 3.01.05 14:31)
offtop
А какого типа она может быть, если возвращается из функции UpChar?  blink.gif
/offtop

Ну так что сделать вот что объясни лучше!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


она работала это 100%
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
Ну так что сделать вот что объясни лучше!!!

Думать начинай... angry.gif Что, разжевать и в рот положить?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


ourword:=upchar(GetRandomWordFromFile('word.txt'));-теперь пишет TYpe mistmash blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Знаток
****

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

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


dct, тебе уже ответили в Помогите пожайлуста с игрой Виселица что надо делать. Пораскинь немного мозгами.


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






uses crt;

const
 charSet: set of char = [#27, 'A' .. 'Z'];
{сюда поставь все символы, которые должны обрабатываться программой (в верхнем регистре)}

function myReadKey: Char;

   function upchar(ch:char):char;
   {Поднимает символ в верхний регистр}
   begin
     upchar:=char(byte(ch)-$20*byte(ch>#96)-$30*byte(ch>#$DF));
   end;

 var ch: char;
 begin
   repeat
     ch := upchar(readkey);
   until ch in charSet;
   exclude(charset, ch);
   myReadKey := ch
 end;

type
tWiselicaSymbol=record
  x,y:byte; {Координаты символа}
  s:char;   {Номер символа}
  c:byte;   {Цвет символа}
end;
tWiselica=array[1..13] of tWiselicaSymbol;
tSetOfChar=set of char;
const
wiselica:tWiselica=((x:0;y:4;s:'¦';c:15),(x:0;y:3;s:'¦';c:15),(x:0;y:2;s :'¦';c:15),(x:0;y:1;s:'¦';c:15),
                    (x:0;y:0;s:'г';c:15),(x:1;y:0;s:'=';c:15),(x:2;y:0;s:'=';c:15),(x:3;y:0; s:'¬';c:15),
                    (x:3;y:1;s:'o';c:14), (x:3;y:2;s:'O';c:9), (x:2;y:2;s:'/';c:6), (x:4;y:2;s:'\';c:6),
                    (x:3;y:3;s:'П';c:6));
var
ourword:string;
WordCharSet:tSetOfChar;
quit:boolean;
popitka:byte;
c:string[1];

function GetRandomWordFromFile(FileName:string):string;
var {Возвращает случайным образом слово из файла FileName}
f:text;
p,o:word;
s:string;
begin
assign(f,filename);
reset(f);
p:=0;
while not eof(f) do
begin
  readln(f);
  inc(p);
end;
close(f);
reset(f);
o:=random(p)+1;
p:=0;
while not eof(f) do
begin
  readln(f,s);
  inc(p);
  if p=o then break;
end;
close(f);
GetRandomWordFromFile:=s;
end;

procedure ShowPartOfWiselica(x,y,PartNumber:byte);
begin {Изображает на экране в заданном месте определённую часть виселицы}
if PartNumber=0 then exit;
gotoxy(x+wiselica[PartNumber].x,y+wiselica[PartNumber].y);
textcolor(wiselica[PartNumber].c);
write(wiselica[PartNumber].s);
textcolor(7);
gotoxy(1,1);
end;

procedure ShowWord(x,y:byte);
var p:byte; {Показывает слово, учитывая известные буквы}
begin
gotoxy(x,y);
textcolor(15);
for p:=1 to length(ourword) do
if ourword[p] in WordCharSet then write(ourword[p]) else write('.');
gotoxy(1,1);
textcolor(7);
end;

function CheckForAllLetters:boolean;
var p:byte; {Проверяет, все ли буквы уже отгаданы}
begin
checkforallLetters:=true;
for p:=1 to length(ourword) do if not (ourword[p] in WordCharSet) then checkforallLetters:=false;
end;

function CheckForLetterInWord(c:string):boolean;
begin {Проверяет, есть ли буква С в слове}
if(pos(c,OurWord)<>0)and not (c[1] in WordCharSet) then CheckForLetterInWord:=true
else CheckForLetterInWord:=false;
end;

function up(s:string):string;
var p:byte; {Поднимает символ в верхний регистр}
begin
up[0]:=s[0];
for p:=1 to length(s) do
  up[p]:=char(byte(s[p])-$20*byte(s[p]>#96)-$30*byte(s[p]>#$DF));
end;

begin
randomize;
ourword:=up(GetRandomWordFromFile('word.txt'));
wordcharset:=[ourword[1]];
wordcharset:=wordcharset+[ourword[length(ourword)]];
clrscr;
writeln(' ':31,'ИГРА "ВИСЕЛИЦА"');
writeln;
write('Слово:',' ':50,' Попыток осталось:');
popitka:=0;
repeat
  ShowWord(8,3);
  ShowPartOfWiselica(60,5,popitka);
  gotoxy(75,3);
  textcolor(15);
  write((13-popitka):2);
  textcolor(7);
  gotoxy(1,5+popitka);
  if popitka=13 then
  begin
    writeln;
    writeln('ВЫ ПРОИГРАЛИ !!!!');
    halt;
  end else
  if CheckForAllLetters then
  begin
    writeln;
    writeln('ВЫ ВЫИГРАЛИ !!!!');
    halt;
  end;
  write('Введите букву (ESC - выход): ');
  c:=myreadkey;
  if c=#27 then halt;
  gotoxy(29,5+popitka);
  textcolor(15);
  write(c);
  textcolor(7);
  if CheckForLetterInWord(c) then WordCharSet:=WordCharSet+[c[1]] else
  begin
    write(' - НЕПРАВИЛЬНО !');
    inc(popitka);
  end;
until false;
end.
Вот так...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

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

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


Спасибо вот другой вопрос эта игра реализованна за 13 попыток а мне надо за 7 как увеличить переменную а главное какую?????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






dct
Вот в этом куске кода:
Цитата
write((7-popitka):2); (** Здесь **)
textcolor(7);
gotoxy(1,5+popitka);
if popitka=7 then (** Здесь **)
begin
writeln;
writeln('ВЫ ПРОИГРАЛИ !!!!');
halt;
end else
if CheckForAllLetters then
begin
writeln;
writeln('ВЫ ВЫИГРАЛИ !!!!');
halt;
end;


Там, где стоят комментарии, я изменил "13" на "7"... Попробуй...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Новичок
*

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

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


я понимаю !!!(не совсем дерево!!!) smile.gif но виселица будет не дорисовываться !!!! и обрываться на 7 куске !!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






Тогда тебе всю логику менять придется... как ты хочешь 13 элементов отрисовать за 7 ходов? blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Новичок
*

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

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


Увеличивая переменную попытку чтобы за одну ошибку вырисовывалось две части виселицы!!Но вот как это сделать??? blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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