我目前正在开发一个简单的应用程序来计算10秒内的点击次数,从两个不同的文件中读取名称和分数,然后以另一种形式显示各种名称和分数。然而,在游戏结束后,游戏结束了!'消息出现,Leaderboard表单出现,但没有按钮,看起来奇怪平坦,似乎使程序崩溃。
这是表单的外观: Leaderboard Form
这就是它的实际外观:Leaderboard Error in Form
显示表格的代码如下:
if TimeLeft=0 then
begin
Form2.Timer1.Enabled:=False;{Disable timer}
ShowMessage('Game Over!');{Message to show upon termination condtion being met}
Leaderboard.Show;{Show Leaderboard Form}
Form2.Hide;{Hide game}
Reset(LeaderboardNamesFile);{Open file}
while not EOF(LeaderboardNamesFile) do
LineCount:=LineCount+1;{Increment to allow for EOF marking of the score}
LeaderboardScoresArray[LineCount]:=Score;{Add score to array of scores}
end;
排行榜表单上的分数显示按钮中包含的代码:
var Counter : Integer;
begin
Counter:=1;
Memo1.Lines.add(LeaderboardNamesArray[Counter]+' - '+IntToStr(LeaderboardScoresArray[Counter]));
end;
我发现这一切都非常奇怪,因为在显示表单时实际上没有运行,因此它应该在此之前崩溃,并且不会出现崩溃消息。有任何想法吗?如果需要更多信息,请询问。这个网站上的新内容!
答案 0 :(得分:3)
while循环是无限的,循环只包含一个命令:
while not EOF(LeaderboardNamesFile) do
LineCount:=LineCount+1;{Increment to allow for EOF marking of the score}
因此,您的程序会计算LineCount,但不要从文件中读取任何数据。所以文件永远不会成为EOF(“文件结束”)。你需要做这样的事情:
Reset(LeaderboardNamesFile);{Open file}
while not EOF(LeaderboardNamesFile) do
begin
LineCount:=LineCount+1;{Increment to allow for EOF marking of the score}
readln(LeaderboardNamesFile, Score);
LeaderboardScoresArray[LineCount]:=Score;{Add score to array of scores}
end;
CloseFile(LeaderboardNamesFile);