AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Sammlung von Problemen

Ein Thema von Sertrain · begonnen am 13. Dez 2010 · letzter Beitrag vom 13. Dez 2010
Thema geschlossen
Sertrain

Registriert seit: 25. Mär 2009
18 Beiträge
 
#1

Sammlung von Problemen

  Alt 13. Dez 2010, 17:12
Delphi-Version: 5
So, ich habe schon einige Zeit nach einem passenden Thema gesucht, aber keins gefunden.
Ich habe in Delphi ein kleines Projekt vor. Dabei sind aber einige Probleme Aufgetreten.

1) Ich habe rechts ein Highscore laufen, der sich während des Spiels immer wieder aktualisiert, ich will jedoch verhinden, dass wärend das Programm läuft und auch danach jemand etwas so eintippen kann. Gibt es dafür ein Befehl, oder eine Variante?

2) Ich brauche eine Art Stoppuhr. Hierbei will ich die Windows-Zeit auslesen lassen, beim Start und beim Ende und daraus die Differenz bilden. Jetzt weiß ich nicht, ob ich die Zeiten 2 mal auslesen kann und ein " - " dazwischen schreibe und die Differenz habe oder ob es doch anders und einfacher geht.

3) Der Highscore soll von einer Klasse insgesamt gebildet werden, also muss ich eine externe "Highscore-Datei" machen und dort immer wieder die Ergebnisse "hinschicken" und diese dann ordnen. Ist die Idee richtig und sinnvoll oder lieber doch anders?


Ich bin ganz ehrlich. Ich habe noch keinen großen Schimmer wie ich es letztendlich aufbaue. Aber ich hoffe ihr helft mir ein wenig.

Grüße Sertrain
 
Darkface

Registriert seit: 18. Apr 2008
89 Beiträge
 
Delphi XE Professional
 
#2

AW: Sammlung von Problemen

  Alt 13. Dez 2010, 17:52
1) Ich habe rechts ein Highscore laufen, der sich während des Spiels immer wieder aktualisiert, ich will jedoch verhinden, dass wärend das Programm läuft und auch danach jemand etwas so eintippen kann. Gibt es dafür ein Befehl, oder eine Variante?
Ich nehme mal an du willst dafür ein Edit Feld verwenden (erschließt sich mir so aus deiner Angst jemand könnte was ändern. Entweder nimmst du stattdessen ein Label Feld (auf den Text greifst du per Label.Caption zu) oder du setzt in den Eigenschaften des Edit Feldes die Eigenschaft Enabled auf False.

2) Ich brauche eine Art Stoppuhr. Hierbei will ich die Windows-Zeit auslesen lassen, beim Start und beim Ende und daraus die Differenz bilden. Jetzt weiß ich nicht, ob ich die Zeiten 2 mal auslesen kann und ein " - " dazwischen schreibe und die Differenz habe oder ob es doch anders und einfacher geht.
Klar kannst du jetzt die Uhrzeit zweimal auslesen und die vergangene Zeit berechnen, musst da jedoch auf Stundenumbrüche/Tagesumbrüche achten. Einfacher wenn auch unsauberer wäre einen Timer auf die Form zu schmeißen, das Intervall auf 1000ms (jede Sekunde) zu setzen, und innen eine Variable von 0 an hochzählen lassen. Mit Timer.Enabled True/False startest/stoppst du dann den Timer und der Inhalt der Variable sagt die wieviele Sekunden der Timer gelaufen ist.

3) Der Highscore soll von einer Klasse insgesamt gebildet werden, also muss ich eine externe "Highscore-Datei" machen und dort immer wieder die Ergebnisse "hinschicken" und diese dann ordnen. Ist die Idee richtig und sinnvoll oder lieber doch anders?
Zum speichern von Daten eignen sich Dateien ganz gut. Die sind recht einfach zu nutzen. Du kannst auch für jede Klasse eine eigene Datei anlegen und so noch die einzelnen Highscores abspeichern. Am Ende öffnest du dann Datei für Datei und berechnest die Summe der gespeicherten Highscores. Wenn du Namen dazuspeicherst kannst du dann auch den/die besten Spieler der jeweiligen Klassen mit ausgeben. Ordnen würde ich nicht unbedingt innerhalb der Datei, da ich die Rohdaten beim auslesen ordnen könnte und im Programm dann eine ordentliche Highscore Liste ausgeben könnte.
Alexander
Ich halte Ordnung.
Zum Beispiel mein Schreibtisch: Hier ist alles zeitlich geordnet - was zuletzt kam, liegt oben. (Frank Erhoff)
 
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Sammlung von Problemen

  Alt 13. Dez 2010, 18:41
Hallo und schönen guten Abend,

vieleicht hilft Dir das weiter...

http://www.delphipraxis.net/549628-post2.html

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
 
Sertrain

Registriert seit: 25. Mär 2009
18 Beiträge
 
#4

AW: Sammlung von Problemen

  Alt 13. Dez 2010, 19:21
Ich nehme mal an du willst dafür ein Edit Feld verwenden (erschließt sich mir so aus deiner Angst jemand könnte was ändern. Entweder nimmst du stattdessen ein Label Feld (auf den Text greifst du per Label.Caption zu) oder du setzt in den Eigenschaften des Edit Feldes die Eigenschaft Enabled auf False.
Nein eigentlich will ich den Highscore im Memo anzeigen. Also die 10 Besten oder so, sieht schöner aus.

Danke Jens für den Link, ich probiere ihn später.

Ich habe im Moment nur ein Problem ... also zumindest komme ich nicht weiter.

Code:
{---------------------------------------- Prozeduren ----------------------------------------}
function Kontrolle(loesung,ergebnis:integer):boolean;
var richtig: boolean;
  begin
    If Loesung = Ergebnis then richtig:= true
                            else richtig:= false;
  end;

function KontrolleAddition(zahl1, zahl2: integer):boolean;
  var zahlgesadd: integer;
  begin
    zahlgesadd:= zahl1+zahl2;
    if zahlgesadd > 99 then loesbar:= false
                    else loesbar:= true;
  end;

procedure KontrolleSubtraktion;
var zahlgessub: integer;
  begin
    zahlgessub:= zahl1 - zahl2;
    if zahlgessub < 0 then loesbar:= false
                      else if zahlgessub > 99 then loesbar:= false
                                              else loesbar:= true;
  end;

procedure KontrolleDivision;
var zahlgesdiv: integer;
  begin
    zahlgesdiv:= zahl2*zahl1;
    if zahlgesdiv >15 then loesbar:= false
                      else if zahlgesdiv < 0 then loesbar:= false
                                              else loesbar:= true;
  end;

procedure KontrolleMultiplikation;
var zahlgesmult: integer;
  begin
  zahlgesmult:= Zahl1* zahl2;
  if zahlgesmult > 99 then loesbar:= false
                      else loesbar:= true;
  end;
{--------------------------------------- Aufgaben ---------------------------------------}
Procedure Aufgabe1;
var a:integer;
  begin
  randomize;
  a:= random(4)+1;
  case a of
  1: begin
        repeat
          begin
            zahl1:= random(99);
            zahl2:= random(99);
          end;
        until KontrolleAddition(zahl1, zahl2) = true;
      end;


  end;
  end;
Also zur Erklärung. Oben sind meine Kontrollen, ob es lösbar ist. Da weiß ich noch nicht ob sich ne Funktion oder ne Prozedur besser eignet. Deshalb nicht so genau drauf achten, was da steht, da sie nur kontrollieren ob die Lösung zwischen 0-99 liegt, da es nur die Buttons zur auswahl gibt.

Wie auch immer. Meine erste Aufgabe, soll Ausgang für alle sein, also:

zufallszahl von 1-4 ...
1= +
2= -
3= /
4= *

damit ich eine zufällige rechenoperation habe.

Danach will ich mit einer case of variante überprüfen, ob die ausgewürfelten zahlen für die operation lösbar sind, sonst nochmal neu würfeln bis es passt und dann die aufgabe in nem editfenster anzeigen.

Ist es einigermaßen verständlich was ich vor habe? ^^
 
Sertrain

Registriert seit: 25. Mär 2009
18 Beiträge
 
#5

AW: Sammlung von Problemen

  Alt 13. Dez 2010, 19:43
Code:
{---------------------------------------- Prozeduren ----------------------------------------}
function Kontrolle(loesung,ergebnis:integer):boolean;
  begin
    If Loesung = Ergebnis then richtig:= true
                            else richtig:= false;
  end;

function KontrolleAddition(zahl1, zahl2: integer):boolean;
var zahlgesadd: integer;
  begin
    zahlgesadd:= zahl1+zahl2;
    if zahlgesadd > 99 then loesbar:= false
                    else loesbar:= true;
  end;

function KontrolleSubtraktion(zahl1, zahl2: integer):boolean;
var zahlgessub: integer;
  begin
    zahlgessub:= zahl1 - zahl2;
    if zahlgessub < 0 then loesbar:= false
                      else if zahlgessub > 99 then loesbar:= false
                                              else loesbar:= true;
  end;

function KontrolleDivision(zahl1, zahl2: integer):boolean;
var zahlgesdiv: integer;
  begin
    zahlgesdiv:= Zahl1 mod zahl2;
    if zahlgesdiv = 0 then loesbar:= true
                      else loesbar:= false;
  end;

function KontrolleMultiplikation(zahl1, zahl2: integer):boolean;
var zahlgesmult: integer;
  begin
  zahlgesmult:= Zahl1* zahl2;
  if zahlgesmult > 99 then loesbar:= false
                      else loesbar:= true;
  end;
{--------------------------------------- Aufgaben ---------------------------------------}
Procedure Aufgabe1;
var a:integer;
  begin
  randomize;
  a:= random(4)+1;
  case a of
  1: begin
        repeat
          begin
            zahl1:= random(100);
            zahl2:= random(100);
          end;
        until KontrolleAddition(zahl1, zahl2) = true;
      end;
  2: begin
       repeat
          begin
            zahl1:= random(100);
            zahl2:= random(100);
          end;
        until KontrolleSubtraktion(zahl1, zahl2) = true;
      end;
  3: begin
       repeat
          begin
            zahl1:= random(15);
            zahl2:= random(15);
          end;
        until Kontrollemultiplikation(zahl1, zahl2) = true;
      end;
  4: begin
       repeat
          begin
            zahl1:= random(100);
            zahl2:= random(100);
          end;
        until KontrolleDivision(zahl1, zahl2) = true;
      end;


  end;
  end;
Wenn ich den Code aufrufe kommts zum Absturz ... also des Programms.

Wo liegt der Fehler?
 
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Sammlung von Problemen

  Alt 13. Dez 2010, 19:47
In deinen Funktionen fehlt der Rückgabetyp. Diesen kannst du mit

result := WasAuchImmer; setzen (eigentlich sollte der Compiler das melden ).

mfg
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
 
Sertrain

Registriert seit: 25. Mär 2009
18 Beiträge
 
#7

AW: Sammlung von Problemen

  Alt 13. Dez 2010, 20:26
Och ... na gucke mal einer schau Es funktioniert

Also der Anfang zumindest. ^^ Danke Patti.

Delphi-Quellcode:
    
function Kontrolle(loesung,ergebnis:integer):boolean;
  begin
    If Loesung = Ergebnis then richtig:= true
                            else richtig:= false;
    result:= richtig;
  end;

function KontrolleAddition(zahl1, zahl2: integer):boolean;
var zahlgesadd: integer;
  begin
    zahlgesadd:= zahl1+zahl2;
    if zahlgesadd > 99 then loesbar:= false
                    else loesbar:= true;
    result:= loesbar;
  end;

function KontrolleSubtraktion(zahl1, zahl2: integer):boolean;
var zahlgessub: integer;
  begin
    zahlgessub:= zahl1 - zahl2;
    if zahlgessub < 0 then loesbar:= false
                      else if zahlgessub > 99 then loesbar:= false
                                              else loesbar:= true;
    result:= loesbar;
  end;

function KontrolleDivision(zahl1, zahl2: integer):boolean;
var zahlgesdiv: integer;
  begin
    zahlgesdiv:= Zahl1 mod zahl2;
    if zahlgesdiv = 0 then loesbar:= true
                      else loesbar:= false;
    result:= loesbar;
  end;

function KontrolleMultiplikation(zahl1, zahl2: integer):boolean;
var zahlgesmult: integer;
  begin
  zahlgesmult:= Zahl1* zahl2;
  if zahlgesmult > 99 then loesbar:= false
                      else loesbar:= true;
  result := loesbar;
  end;
Die Kontrollen klappen nicht. Die zu errechnende Zahl darf nie größer 99 oder kleiner 0 sein ... das sollen sie absichern, hab ich was vergessen?

Geändert von Luckie (14. Dez 2010 um 03:13 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt.
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Sammlung von Problemen

  Alt 13. Dez 2010, 20:47
Nicht umsonst steht in den Forenrichtlinien, die du auch gelesen haben solltest, dass man nur ein Thema pro Thread eröffnen soll. Dann kann man auch einen sinnvollen Beitragstitel erstellen und es geht auch nicht alles durcheinander im Thread. Deswegen mache ich hier zu und du erstellst bitte für jede Frage einen neuen Thread.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
Thema geschlossen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz