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

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

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

2 страниц V  1 2 >  
Closed Topic Открыть новую тему 
> Игра виселица, Помогите с двумя условиями!!!Спасибо!!!!
dct
сообщение 3.01.2005 4:44
Сообщение #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 - 3.01.2005 10:07
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.01.2005 11:13
Сообщение #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 - 4.11.2010 12:35
 К началу страницы 
+ Ответить 
dct
сообщение 3.01.2005 14:03
Сообщение #3


Новичок
*

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

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


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


Гость






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


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

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

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


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


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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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


Гость






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

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

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

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

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


Новичок
*

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

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


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

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


Новичок
*

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

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


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


Гость






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

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


Новичок
*

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

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


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


Знаток
****

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

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


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


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.01.2005 14:45
Сообщение #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©;
 textcolor(7);
 if CheckForLetterInWord© then WordCharSet:=WordCharSet+[c[1]] else
 begin
   write(' - НЕПРАВИЛЬНО !');
   inc(popitka);
 end;
until false;
end.
Вот так...

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


Новичок
*

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

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


Спасибо вот другой вопрос эта игра реализованна за 13 попыток а мне надо за 7 как увеличить переменную а главное какую?????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.01.2005 15:10
Сообщение #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"... Попробуй...
 К началу страницы 
+ Ответить 
dct
сообщение 3.01.2005 15:13
Сообщение #18


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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

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

 



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