Zahlenfolge

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zahlenfolge

    Hallo zusammen,

    ich hab hier so ne Aufgabe, die mir leichte Kopfscmerzen bereitet (für die Profies unter euch ist diese Aufgabe warscheinlich banal, aber ich als Anfänger......haha kp :roll: )

    Die Aufgabe:
    Der Computer schreibt eine Folge von Ziffern auf den Bildschirm, die nach 3 Seckunden gelöscht wird. Der Spieler muss sich diese Folge merken und anschließend eingeben. Wenn er richtig eingegeben hat, wird die Folge um eine Ziffer verlängert. Das Spiel läuft so lange, bis die Zifferfolge falsch eingetippt wird.

    Dazu habe ich jezt folgenden Code

    Quellcode

    1. unit ZusatzU;
    2. interface
    3. uses
    4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    5. Dialogs, ExtCtrls, StdCtrls;
    6. type
    7. TForm1 = class(TForm)
    8. Timer1: TTimer;
    9. Label1: TLabel;
    10. Edit1: TEdit;
    11. Button1: TButton;
    12. Label2: TLabel;
    13. Label3: TLabel;
    14. Label4: TLabel;
    15. Button2: TButton;
    16. procedure Timer1Timer(Sender: TObject);
    17. procedure Button1Click(Sender: TObject);
    18. procedure FormCreate(Sender: TObject);
    19. procedure Button2Click(Sender: TObject);
    20. private
    21. { Private declarations }
    22. public
    23. { Public declarations }
    24. end;
    25. var
    26. Form1: TForm1;
    27. anZ : Integer = 4;
    28. Z : Integer;
    29. implementation
    30. {$R *.dfm}
    31. Function MakeZ(anZ : Integer) : String;
    32. var str : String;
    33. i : Integer;
    34. begin
    35. str := '';
    36. if anZ = 1 then str := IntTostr(random(800)+100)
    37. else
    38. begin
    39. for i := 1 to anZ do
    40. str := str + IntTostr(random(10));
    41. delete(Str,Length(Str),1);
    42. end;
    43. result := str;
    44. end;
    45. procedure TForm1.Timer1Timer(Sender: TObject);
    46. begin
    47. Edit1.Visible:=true;
    48. Label1.Visible:=false;
    49. Timer1.Enabled:=false;
    50. Button1.Enabled:=true;
    51. end;
    52. procedure TForm1.Button1Click(Sender: TObject);
    53. begin
    54. Edit1.Visible:=false;
    55. Button1.Enabled:=false;
    56. if edit1.Text = label1.Caption then
    57. begin
    58. Showmessage('Das ist richtig!');
    59. inc(anZ);
    60. Label1.Caption := MakeZ(anZ);
    61. edit1.Text := '';
    62. label1.Visible := true;
    63. end
    64. else
    65. Showmessage('Leider Falsch! Du konntest dir '+IntToStr(anZ)+ ' Ziffern merken!');
    66. timer1.enabled:=true;
    67. end;
    68. procedure TForm1.FormCreate(Sender: TObject);
    69. begin
    70. randomize;
    71. label1.Caption := MakeZ(anZ);
    72. end;
    73. procedure TForm1.Button2Click(Sender: TObject);
    74. begin
    75. Form1.Close;
    76. end;
    77. end.
    Alles anzeigen


    Das Problem ist jezt, dass zwar immer ne zahl zu komm, aber die folge nicht weiter geführt wird, also:
    375
    8402
    23196 usw.

    anstatt:
    384
    3842
    38428 usw.

    Wie müsste das ganze richtig lauten? Würde mich über eure Hilfe freuen.

    Und danke schon mal im vorraus...
  • Du generierst ja auch jedes Mal einen komplett neuen String.
    Nimm doch einfach den vorhandenen String und füge eine Ziffer am Ende hinzu. Dann brauchst du die Anzahl auch gar nicht mehr übergeben. Den String kannst du dann ja global (also im ganzen Prog verfügbar) machen.
    Außerdem solltest du den Zufallsgenerator beim Programmstart erst noch starten, da die Zahlen sonst per random() nicht wirklich zufällig werden.
  • Also ich hab grad gesehen, dass der Fehler hierdrin liegt

    Quellcode

    1. procedure TForm1.Button1Click(Sender: TObject);
    2. begin
    3. Edit1.Visible:=false;
    4. Button1.Enabled:=false;
    5. if edit1.Text = label1.Caption then
    6. begin
    7. Showmessage('Das ist richtig!');
    8. inc(anZ);
    9. Label1.Caption := MakeZ(anZ); //hier der Fehler
    10. edit1.Text := '';
    11. label1.Visible := true;
    12. end
    13. else
    14. Showmessage('Leider Falsch! Du konntest dir '+IntToStr(anZ)+ ' Ziffern merken!');
    15. timer1.enabled:=true;
    16. end;
    Alles anzeigen


    Hier wird immer wieder eine neue zufallszahl erzeugt, aber wie bekomme ich es hin, dass die zahl in einer variable gemerkt wird und dann eine einstellige zufallszahl hinterher gehängt wird?

    Ich glau ich steh grad voll auf ner laaaaaaaaaaaangen leitung :oops:
  • Hab mal die Unit geändert.
    Hoffe, nun hast du ne Idee, hab nicht geprüft, obs so funktioniert, aber die Idee kannste sicher übernehmen:
    (alles kommentiert)

    Quellcode

    1. unit ZusatzU;
    2. interface
    3. uses
    4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    5. Dialogs, ExtCtrls, StdCtrls;
    6. type
    7. TForm1 = class(TForm)
    8. Timer1: TTimer;
    9. Label1: TLabel;
    10. Edit1: TEdit;
    11. Button1: TButton;
    12. Label2: TLabel;
    13. Label3: TLabel;
    14. Label4: TLabel;
    15. Button2: TButton;
    16. //das musste noch anpassen
    17. procedure Timer1Timer(Sender: TObject);
    18. procedure Button1Click(Sender: TObject);
    19. procedure FormCreate(Sender: TObject);
    20. procedure Button2Click(Sender: TObject);
    21. private
    22. { Private declarations }
    23. //hier fügen wir jetzt unsere Zahlenfolge hinzu, damit die jederzeit verfügbar ist
    24. Zahlenfolge:string;
    25. public
    26. { Public declarations }
    27. end;
    28. var
    29. Form1: TForm1;
    30. //überflüssig: anZ : Integer = 4;
    31. Z : Integer;
    32. implementation
    33. {$R *.dfm}
    34. //das war einmal: Function MakeZ(anZ : Integer) : String;
    35. //jetzt machen wir:
    36. procedure zahlhinzu;
    37. begin
    38. Zahlenfolge = Zahlenfolge+inttostr(random(10));
    39. //radom(10) erzeugt eine Ziffer von 0 bis 9;
    40. end;
    41. procedure TForm1.Timer1Timer(Sender: TObject);
    42. begin
    43. Edit1.Visible:=true;
    44. Label1.Visible:=false;
    45. Timer1.Enabled:=false;
    46. Button1.Enabled:=true;
    47. end;
    48. procedure TForm1.Button1Click(Sender: TObject);
    49. begin
    50. Edit1.Visible:=false;
    51. Button1.Enabled:=false;
    52. if edit1.Text = label1.Caption then
    53. begin
    54. Showmessage('Das ist richtig!');
    55. ZahlHinzu;
    56. Label1.Caption := Zahlenfolge;
    57. edit1.Text := '';
    58. label1.Visible := true;
    59. end
    60. else
    61. //Länge des Strings
    62. Showmessage('Leider Falsch! Du konntest dir '+length(Zahlenfolge)+ ' Ziffern merken!');
    63. timer1.enabled:=true;
    64. //Zahlenfolge löschen
    65. Zahlenfolge = '';
    66. end;
    67. procedure TForm1.FormCreate(Sender: TObject);
    68. begin
    69. randomize;
    70. label1.Caption := MakeZ(anZ);
    71. end;
    72. procedure TForm1.Button2Click(Sender: TObject);
    73. begin
    74. Form1.Close;
    75. end;
    76. end.
    Alles anzeigen


    Aber wie gesagt:
    Mit radomnize(); oder so erst den Zufallsgenerator starten! Schau mal ind er Delphi Hilfe!