Форум: "Потрепаться";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизПомогите дописать игру! Найти похожие ветки
← →
Keasha (2005-06-02 12:22) [0]Сдрасте!У меня проблема, я сам в Делфи новичёк та кчто самому не разобраться.Решил написать простенькую игру игру написал но возникли проблемы с таблицей рекордов, еод вроде правельный но делфи ругается.Вот код моеё игры(жирным шрифтом отметил на что ругается)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Button4: TButton;
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
n:integer;
c:integer;
maxc:integer;
implementation
uses Unit2, Unit3;
procedure ChangeCaption;
begin
case random(5) of
0:Form1.Button4.Caption:="??... ????? ????, ????";
1:Form1.Button4.Caption:="? ????, ???? ????? — ??? ???!";
2:Form1.Button4.Caption:="? ???????? ????";
3:Form1.Button4.Caption:="?? ??????, ?? ? ??????";
4:Form1.Button4.Caption:="????????? ??? ???...";
end;
end;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
f:textfile;
nm:string;
begin
Randomize;
ChangeCaption;
assignfile(f,extractfilepath(application.exename)+"record.rcd");
reset(f);
readln(f,nm);
Form3.Label2.Caption:=nm;
readln(f,maxc);
Form3.label4.caption:=inttostr(maxc);
closefile(f);
end;
procedure Say(text:integer);
begin
Form1.Image2.Visible:=false;
Form1.Image3.Visible:=false;
Form1.Image4.Visible:=false;
Form1.Image5.Visible:=false;
case text of
0:Form1.Image2.Visible:=true;
1:Form1.Image3.Visible:=true;
2:Form1.Image4.Visible:=true;
3:Form1.Image5.Visible:=true;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
Const maxc=15;
begin
ChangeCaption;
if strtoint(edit1.text)>n then begin
say(3);
c:=c+1;
end;
if strtoint(edit1.text)<n then begin
say(2);
c:=c+1;
end;
if strtoint(edit1.text)=n then begin
say(1);
if c<maxc then form2.showmodal;
end;
Edit1.Text:="";
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
say(0);
n:=random(100);
c:=0;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
f:textfile;
nm:string;
begin
assignfile(f,extractfilepath(application.exename)+"record.rcd");
reset(f);
readln(f,nm);
readln(f,maxc);
closefile(f);
form3.showmodal;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
f:textfile;
begin
hide;
modalresult:=1;
assignfile(f,extractfilepath(application.exename)+"record.rcd");
rewrite(f);
writeln(f,Edit1.text);
maxc:=c;
writeln(f,maxc);
closefile(f);
form1.Button2Click(nil);
end;
end.
← →
Ega23 © (2005-06-02 12:26) [1]А где создана Form3?
← →
Keasha (2005-06-02 12:27) [2]В смысле где?
← →
Ega23 © (2005-06-02 12:32) [3]В прямом. Открой dpr файл, там, скорее всего ты увидишь
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form1);
Application.CreateForm(TForm3, Form1);
Application.Run
На тот момент, когда у тебя работает обработчик TForm1.FormCreate
объект Form3 ЕЩЁ НЕ СОЗДАН. А ты пытаешься к нему обратиться.
Немудрено, что получаешь Accsess Violation
← →
Keasha (2005-06-02 12:33) [4]А как можно исправить
← →
Ega23 © (2005-06-02 12:38) [5]Вариантов - масса.
Например, всё, что касается инициализации контролов на конкретной форме - выносить в обработчик конкретной формы, а не какой-то другой.
Можно Form3 создавать руками.
Но лучше всего - подумать и переписать всё заново. И не писать Form1, Button18, Label33 - сам ведь потом не поймёшь, что к чему.
← →
ЮЮ © (2005-06-02 12:49) [6]перенеси код из TForm1.FormCreate в TForm1.FormShow - к этому моиенту Form3 уже будет создана, а ещё лучше поставь перед
Form3.Show
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c