Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Игра "Угадай число" 
V
    Опции темы
Phenom
Дата 2.6.2008, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Игра "Угадай число". Программа "загадывает" двузначное целое число, а пользователь пытается его угадать. Число попыток не ограничено. После очередной попытки программа сообщает результат сравнения (больше - меньше) "задуманного" числа с ответом пользователя. Игра прекращается, если число угадано, либо "зажато" между двумя ответами пользователя. В главном меню программы предусмотреть возможность просмотра числа, задуманного программой, в любой момент игры; просмотр защитить паролем.

Нужно написать такую прогу на дельфи. Помогите пожалуйста.
PM MAIL   Вверх
THandle
Дата 2.6.2008, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Phenom, и в чем проблема?

"Загадываешь" число random'ом. Сохраняешь его в какой - нибудь глобальной переменной.
Если надо хранить все введенные ответы, то создаешь динамический массив. Каждый раз по нему при ответе проходишься - проверяешь не отвечали ли так. Ответ вводишь в TEdit. Если не надо массива, то все еще проще. Прото сравниваешь введенное число с "загаданным" и все.
Пароль хранишь допустим в реестре, вызываешь InputBox по клику в меню, вводишь пароль, если верно - показываешь число тем же ShowMessage, иначе что хочешь.
PM   Вверх
Phenom
Дата 2.6.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan;

type
  TMainForm = class(TForm)
    ResultLabel: TLabel;
    TryButton: TButton;
    TryEdit: TEdit;
    XPStyle: TXPManifest;
    AgainButton: TButton;
    Button1: TButton;
    procedure TryEditKeyPress(Sender: TObject; var Key: Char);
    procedure TryButtonClick(Sender: TObject);
    procedure AgainButtonClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;
  RealNum:Integer;
  min, max: boolean;
implementation

uses Unit2;

{$R *.dfm}

procedure TMainForm.TryEditKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9':;
#8:
else
Key:=Chr(0);
end;

end;
procedure TMainForm.TryButtonClick(Sender: TObject);

begin
if TryEdit.Text='' then begin
ResultLabel.Caption:='Введите число!';
end
else
if StrToInt(TryEdit.Text)=RealNum then begin
ResultLabel.Caption:='Вы угадали!';
TryButton.Enabled:=False;
end;
if StrToInt(TryEdit.Text)>RealNum then begin
ResultLabel.Caption:='Загаданное число меньше введённого!'
end;
if StrToInt(TryEdit.Text)<RealNum then begin
ResultLabel.Caption:='Загаданное число больше введённого!'
end;
if strtoint(TryEdit.text)+1=RealNum then min:=true;
if strtoint(TryEdit.text)-1=RealNum then max:=true;   
if min and max then application.messagebox('зажато','',0)
end;


procedure TMainForm.AgainButtonClick(Sender: TObject);
begin
Randomize;
RealNum:=Random(98);
TryButton.Enabled:=True;
Button1.Enabled:=True;
ResultLabel.Caption:='-';
TryEdit.Text:='0';
min:=false;   
max:=false;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
SecretForm.Label1.Caption:=IntToStr(RealNum);
SecretForm.ShowModal;
end;

end.


Можешь как раз создать динамический массив для хранения ответов?

Это сообщение отредактировал(а) Phenom - 2.6.2008, 21:14
PM MAIL   Вверх
THandle
Дата 2.6.2008, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Phenom, выложи архивом проект. Подправлю.

Добавлено через 2 минуты и 14 секунд
Хотя... давай ка я тебе сейчас сам все напишу...
PM   Вверх
THandle
Дата 2.6.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Ну что то такое вот.

Присоединённый файл ( Кол-во скачиваний: 59 )
Присоединённый файл  uc.rar 198,44 Kb
PM   Вверх
Phenom
Дата 3.6.2008, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Лучше здесь поменяй. Кстати там что-то не видно никаких массивов или я туплю. А можно как-нибудь страницу статистики замутить с профилями? Ну типа кто угадывал и с какой поытки ему это удалось.

Присоединённый файл ( Кол-во скачиваний: 39 )
Присоединённый файл  _______1.rar 178,75 Kb
PM MAIL   Вверх
THandle
Дата 3.6.2008, 11:42 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Цитата(Phenom @  3.6.2008,  08:51 Найти цитируемый пост)
Лучше здесь поменяй.


чем то не устроило?

Цитата(Phenom @  3.6.2008,  08:51 Найти цитируемый пост)
Кстати там что-то не видно никаких массивов или я туплю.


Есть там массив.

Код

answers : array of integer;


У тебя слишком много лишних преобразований + еще какая то странная обработка клавиш, когда можно просто пробовать преобразовывать TryStrToInt. И не понятное второе окошко.

Цитата(Phenom @  3.6.2008,  08:51 Найти цитируемый пост)
А можно как-нибудь страницу статистики замутить с профилями? Ну типа кто угадывал и с какой поытки ему это удалось.


Можно.

Каждый раз когда закончено выбрасываешь окошко - "Хотите сохранить результат" MessageBox'ом с кнопками "да" и "нет". 
Если да то, дописываешь в каокй нибудь файл, где у тебя результаты хранятся, имя(дашь возможность ввести с клавы) и результат((Length(answers) - 1). Потом по нажатию пункта меню/кнопки показываешь таблицу в том же StringGrid'е с двумя столбиками - "имя", "результат". Можно вс это отсортировывать. В общем давай, пытайся сделать smile 

PM   Вверх
Phenom
Дата 3.6.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Если есть массив, то почему я не вижу, какие числа ввожу.
PM MAIL   Вверх
THandle
Дата 3.6.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Цитата(Phenom @  3.6.2008,  14:29 Найти цитируемый пост)
Если есть массив, то почему я не вижу, какие числа ввожу. 


Такого задания не было smile 

Кстати проверка на зажатость должна быть только с последним ответом или со всем массивом?

ЗЫ: в архиве вариант с оформлением ХП и выводом массива в Мемо.



Присоединённый файл ( Кол-во скачиваний: 33 )
Присоединённый файл  uc.rar 200,88 Kb
PM   Вверх
Phenom
Дата 3.6.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



А можно, чтобы пользователь видел не все числа, которые вводил, а только два, которые наиболее приближены сверху и снизу, сможешь сделать, в варианте с тем кодом, который я написал? Можешь ещё статистику сделать, помоги пожалуйста.

Это сообщение отредактировал(а) Phenom - 3.6.2008, 19:05
PM MAIL   Вверх
THandle
Дата 4.6.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Phenom, на самом деле все очень просто делается. Находишь приближенные значения вот таким например функциями:

Код

function MinP : integer;
var
  i : integer;
begin
  result := -1;
  for i := 0 to High(answers) do
    if ((answers[i] > result) and (answers[i] < zch)) then
      result := answers[i];
end;


Код

function MaxP : integer;
var
  i : integer;
begin
  result := MaxInt;
  for i := 0 to High(answers) do
    if ((answers[i] < result) and (answers[i] > zch)) then
      result := answers[i];
end;


Ну и просто добавляешь эти значения в записи нового значения в массив. Не самый оптимальный, конечно, вариант, но все же...

Код

procedure WriteAnswer(ans : integer);
begin
  SetLength(answers, length(answers) + 1);
  answers[High(answers)] := ans;
  Form1.Memo1.Lines.Add('Min :' + IntToStr(MinP));
  Form1.Memo1.Lines.Add('Max :' + IntToStr(MaxP));
end;


В архиве в общем все переделано. Статистика добавлена. Хранится в папке с программой в файле stat.txt.(Можно изменить. Просто нужно поменять значение константы STAT_FILE_NAME.



Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  uc.rar 205,99 Kb
PM   Вверх
Phenom
Дата 4.6.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



THandle, Спасибо. У меня осталось только два вопроса. Чтобы посмотреть пароль, что надо ввести и нужно бы ещё сбщ о неправильном пароле вставить? И почему, когда скажем я ввожу скажем 24, оно оказывается приближённым снизу а в приближённом сверху(MAX) в это время записана какое-то большое число?

Это сообщение отредактировал(а) Phenom - 4.6.2008, 14:17
PM MAIL   Вверх
THandle
Дата 4.6.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



За пароль у тебя отвечает переменная Password. Для примеру она сейчас равна abcd.(Кто читает - это секретный пароль, просьба не разглашать за пределами вселенной).

Цитата(Phenom @  4.6.2008,  15:12 Найти цитируемый пост)
И почему, когда скажем я ввожу скажем 24, оно оказывается приближённым снизу а в приближённом сверху(MAX) в это время записана какое-то большое число? 


Потому что в массиве нет значений которые больше загаданного числа. Туда пишется значение MaxInt. Могу изменить если так не подходит.

Добавлено @ 14:17
стати нашел одну опечатку в проге... сча исправлю...

Добавлено через 4 минуты и 42 секунды
Ну вот собственно. Все изменил.

Это сообщение отредактировал(а) THandle - 4.6.2008, 14:18

Присоединённый файл ( Кол-во скачиваний: 34 )
Присоединённый файл  uc.rar 207,25 Kb
PM   Вверх
Phenom
Дата 4.6.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 10.3.2008

Репутация: нет
Всего: нет



Ага, лучше изменить.  Ещё лучше, чтобы просмотр приближенных ответов был опционален. Т.е его можно было отключить. И ещё, нужно, чтобы лучшый результат отдельно показывался.

Это сообщение отредактировал(а) Phenom - 4.6.2008, 14:25
PM MAIL   Вверх
THandle
Дата 4.6.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Цитата(Phenom @  4.6.2008,  15:22 Найти цитируемый пост)
Ага, лучше изменить.


Изменил.


Цитата(Phenom @  4.6.2008,  15:22 Найти цитируемый пост)
 Ещё лучше, чтобы просмотр приближенных ответов был опционален. Т.е его можно было отключить. 


Вашей "любознательности" нет предела smile 

Добавь пункт в меню. С Caption = Показать/скрыть приближенные ответы.  
В OnClick его пропиши:

Код

Memo1.Visible := not Memo1.Visible;


Добавлено через 2 минуты и 29 секунд
Цитата(Phenom @  4.6.2008,  15:22 Найти цитируемый пост)
И ещё, нужно, чтобы лучшый результат отдельно показывался.


А может вам и ключи от квартиры где деньги лежат? ©

Пиши значения через StringList как Names/Values.

Потом ищи максимальное Value  и показывай эту строку.

Добавлено через 3 минуты и 13 секунд
Вот. Моя маленькая статейка на эту тему: 
http://forum.vingrad.ru/articles/topic-208756.html

Это сообщение отредактировал(а) THandle - 4.6.2008, 14:26
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1029 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.