2017-03-28 8 views
1

私は現在、10秒以内にクリック数をカウントし、2つの異なるファイルから名前とスコアを読み込み、別のフォームでさまざまな種類の名前とスコアを表示する簡単なアプリケーションを開発中です。しかし、ゲームが終了した後、 'ゲームオーバー!'メッセージが表示され、リーダーボードフォームが表示されますが、ボタンがなく、不思議そうに見えて、プログラムがクラッシュするようです。Pascal - プログラムがフォーム切り替え時にハングする

これは、フォームがどのように見えるべきかです: 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; 

フォームが表示されても実際には何も実行されないので、これはすべて非常に奇妙です。この前にクラッシュする必要があります。クラッシュメッセージは表示されません。何か案は?必要に応じて詳細情報が必要な場合は、お尋ねください。このサイトの新機能!

答えて

3

whileループは、ループが一つだけのコマンドが含まれ、無限大です:

while not EOF(LeaderboardNamesFile) do 
      LineCount:=LineCount+1;{Increment to allow for EOF marking of the score} 

だから、あなたのプログラムのカウントラインカウントアップが、aktuallyファイルからデータを読み取ることはありません。したがって、ファイルは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); 
+0

名前をScore変数に読み込まないのですか?私はこれがどのように役立つのか混乱しています。私は実際にはまだパスカルのコードを書いている人がいるともっと混乱しています! – Syla

+0

@Syla:多くの人がパスカルでコードを書いています。それらのほとんどはDelphiやFreePascalだけでなく、他のPascalのバージョンもあります。答えをもう一度読んでください:何も読まないと、EOFは決して真にならないので、ループは決して止まらない。 'EOF'は「ファイルの終わり」に対応しています。実際にファイルから読み込んだ場合にのみ到達できます。したがって、ループを停止するために別の基準を使用するか、ループを完全に削除するか、答えが示すように、ファイルの最後に到達するまでファイルから実際に何かを読み取ってください。 –

+0

@RudyVelthuisありがとう、私は正しくそれを読んでいない。 – Syla

関連する問題