AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Memory-Spiel: Ideen

Ein Thema von XardasLP · begonnen am 14. Jan 2016 · letzter Beitrag vom 6. Apr 2016
Antwort Antwort
Seite 3 von 13     123 45     Letzte » 
XardasLP
(Gast)

n/a Beiträge
 
#21

AW: Memory-Spiel: Ideen

  Alt 27. Jan 2016, 15:32
Ok so sieht es jetzt schon mal gut aus... jeder neue Nutzer bekommt eine eigene Datei.

Code:
procedure TFormReg.Button_LoginClick(Sender: TObject);
begin
 if (Edit_Benutzername.Text = '') or (Edit_PW.Text = '') or (Edit_PW_1.Text = '') then
      {1}begin
          showmessage('Bitte überprüfen Sie Ihre Eingaben!');
          Edit_Benutzername.Text := '';
          Edit_PW.Text := '';
          Edit_PW_1.Text := '';
      {1}end
            else
         {2}begin
              if Edit_PW.Text <> Edit_PW_1.Text then
             {3}begin
                showmessage('Ihr gewählten Passwörter stimmen nicht überein!');
                Edit_Pw.Text := '';
                Edit_PW_1.Text := '';
               {3}end
                  else
                    if Edit_PW.Text = Edit_PW_1.Text then
                   {4}begin
                        Benutzername := Edit_Benutzername.Text;
                        Memo_Login.Lines.Add(Benutzername);
                        Memo_Login.Lines.SaveToFile(Benutzername+'.txt');
                   {4}end;
         {2}end;
      {1}end;
Ich kann natürlich später dann "append" verwenden, damit es nur eine einzige Datei ist.
Nun muss noch das Passwort angefügt werden für jeden Nutzer einzeln. Halt auch so eine Ascii Verschlüsselung. Das Programm gibt dann einen Schlüssel vor für jeden Account: z.B. 40
also wird aus A --> 51 --> + 40 = 91 (nicht nachvollziehbar ohne den Schlüssel)
der Schlüssel wird vom Benutzer selbst nicht gesehen.


Beim Login muss ich natürlich dann die entsprechende Xardas.txt Datei suchen lassen.
Code:
assignfile(tf,Benutzername + '.txt')
reset(tf)
usw.
  Mit Zitat antworten Zitat
XardasLP
(Gast)

n/a Beiträge
 
#22

AW: Memory-Spiel: Ideen

  Alt 27. Jan 2016, 15:35
Zitat:
Schau dir mal die Klasse TStringlist an. Das mach mehr Sinn als ein unsichtbares Memo.
Die Funktion FileExists(Dateiname) kann dir sagen, ob eine Datei mit dem Namen des Benutzers schon existiert.
Statt AssignFile usw. kannst du dann diese Datei in eine StringList laden und damit arbeiten, oder falls die Datei bisher nicht existierte, die entsprechenden Infos in die StringList schreiben und dann unter dem gewünschten Namen abspeichern.
Okey, das hört sich gut an

Nachlesen kann ich selbst. Das größte Problem ist einfach das wir kaum Klassen kennen und nur wenig gemacht haben was dem hier jetzt annähernd entpricht. Komme schon gut voran wenn mir nur mal wer sagt wie man was machen kann.

Ist wie wenn man den Datentyp "record" nicht kennt und versucht mit den anderen krampfhaft was hinzubekommen. So ungefähr ist das bei uns. Lehrer die gammeln.

Geändert von XardasLP (27. Jan 2016 um 15:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
3.863 Beiträge
 
Delphi 10.3 Rio
 
#23

AW: Memory-Spiel: Ideen

  Alt 27. Jan 2016, 15:59
also wird aus A --> 51 --> + 40 = 91 (nicht nachvollziehbar ohne den Schlüssel)
Wenn man dafür einen Blick hat... Erkennt man sofort den "Chiffree"... und mit in bisschen testen hat man das raus...

Dann schon lieber eine Tabelle Result := chr(Table[ord(A)])...
oder einen XOR String zur Verknüpfung...

BTW.: Was hat das mit Memory zu tun?

Abgesehen davon gibt es hier extra einen Delphi-Tag - also nicht Code verwenden...

Geändert von Mavarik (27. Jan 2016 um 16:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#24

AW: Memory-Spiel: Ideen

  Alt 27. Jan 2016, 17:22
Wenn man selber das Password validiert, dann speichert man das nicht verschlüsselt sondern als Hash mit (einer Prise) Salz.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.076 Beiträge
 
Delphi 2006 Professional
 
#25

AW: Memory-Spiel: Ideen

  Alt 27. Jan 2016, 18:01
Um was geht es hier jetzt eigentlich? Um ein Memory Spiel oder wie man Benutzer und Passwort (sicher) in einer Datei speichert und wieder validiert? Das ein hat mit dem anderen nichts zu tun. So ein "Login" für ein Memory Spiel ist ja ganz nett. Aber hat mit dem Problem "Memory Spiel unter Nutzung von Klassen" nichts zu tun. Davon abgesehen, hätte man schon das Login in einer Klasse packen können.

In diesem Thread geht es um das Memory Spiel und nicht um das Speichern von Benutzername und Passwort.

@XardasLP: Mach bitte für ein neues Thema einen neuen Thread auf. Wobei das Thema Benutzer und Passwort abspeichern schon oft genug hier diskutiert wurde.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
XardasLP
(Gast)

n/a Beiträge
 
#26

AW: Memory-Spiel: Ideen

  Alt 27. Jan 2016, 18:01
Zitat:
BTW.: Was hat das mit Memory zu tun?
Das Memory kommt ja erst noch.

Login, Registrierung (Benutzer)
Highscore-Liste
Einspieler (alleine und gegen Computer) / Mehrspieler
mehrere Schwierigkeitsgrade



Zitat:
Wenn man selber das Password validiert, dann speichert man das nicht verschlüsselt sondern als Hash mit (einer Prise) Salz.
Wenn das für uns aber als "verschlüsseln" reicht ist das doch ok. geht nur darum das niemand die Testdatei aufmacht und seine Punktzahl so mega easy einsehen und verändern kann.
  Mit Zitat antworten Zitat
XardasLP
(Gast)

n/a Beiträge
 
#27

AW: Memory-Spiel: Ideen

  Alt 27. Jan 2016, 18:06
Zitat:
In diesem Thread geht es um das Memory Spiel und nicht um das Speichern von Benutzername und Passwort.
Ich mache doch nicht mehrere Threads für ein Komplexprogramm, am Ende muss das ja alles eine Verbindung haben.


Das einzige was wir mal mit Klassen ("komplex") gemacht haben ist das hier:

Unit1:
Delphi-Quellcode:
unit Umain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    EditID: TEdit;
    ButtonND: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    RG: TRadioGroup;
    ButtonBA: TButton;
    ButtonSAVE: TButton;
    ButtonCLOSE: TButton;
    EditDS: TEdit;
    EditB: TEdit;
    EditLZ: TEdit;
    CB: TComboBox;
    EditmZ: TEdit;
    EditmR: TEdit;
    EditGz: TEdit;
    EditGza: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    procedure ButtonBAClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ButtonNDClick(Sender: TObject);
    procedure RGClick(Sender: TObject);
    procedure ButtonSAVEClick(Sender: TObject);
    procedure ButtonCLOSEClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  liste: TStrings;
  anz: integer;

implementation

uses UDarlehen;

{$R *.dfm}

procedure TForm1.ButtonBAClick(Sender: TObject);
begin
 EditDS.Enabled := False;
  EditB.Enabled := False;
  EditLZ.Enabled := False;
  CB.Enabled := False;
  Label3.Enabled := False;
  Label4.Enabled := False;
  Label5.Enabled := False;
  Label6.Enabled := False;
  Label7.Enabled := True;
  Label8.Enabled := True;
  Label9.Enabled := True;
  Label10.Enabled := True;
  EditGZ.Enabled := True;
  EditGza.Enabled := True;
  EditmR.Enabled := True;
if (EditDS.Text = '') or (EditB.Text = '') or (EditLZ.Text = '') or (CB.Text = '')
    then begin
    EditDS.SetFocus;
         end
    else begin
        darlehen.set_DS(strtofloat(Editds.Text));
        darlehen.set_BE(strtodate(EditB.Text));
        darlehen.set_LZ(strtoint(EditLZ.Text));
        darlehen.set_JZ(strtofloat(CB.Text));
        case RG.ItemIndex of
          0: begin
                EditMR.Text := formatfloat('0.00',darlehen.get_mon_Raten);
                EditMZ.Clear;
                EditGZ.Text := formatfloat('0.00',darlehen.get_ges_zinsen);
                EditGza.Text := formatfloat('0.00',darlehen.get_ges_zahlung);
             end;
          1: begin
                EditMZ.Text := formatfloat('0.00',darlehen.get_mon_Zinsen);
                EditMR.Text := '';
             end;
    end;
     EditGz.Text := formatfloat('0.00', darlehen.get_ges_zinsen);
     EditGza.Text := formatfloat('0.00', darlehen.get_ges_zahlung);
end;
ButtonSave.Enabled := True;
ButtonClose.Enabled := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  liste := TStringList.Create;
end;

procedure TForm1.ButtonNDClick(Sender: TObject);
begin
  ButtonND.Enabled := False;
  EditID.Enabled := False;
  Label2.Enabled := False;
  EditDS.Enabled := True;
  EditB.Enabled := True;
  EditLZ.Enabled := True;
  CB.Enabled := True;
  Label3.Enabled := True;
  Label4.Enabled := True;
  Label5.Enabled := True;
  Label6.Enabled := True;
  if RG.ItemIndex = -1
  then begin
          showmessage('Bitte Darlehensart auswählen! ');
       end
  else begin
          liste.LoadFromFile('darlehen.txt');
          anz := + liste.Count + 1000;
          //showmessage(inttostr(anz));
          EditID.Text := upcase(RG.Items[RG.ItemIndex][1]) + inttostr(anz);
          case RG.ItemIndex of
          0: darlehen := TAnnuitaetendarlehen.create(Editid.Text);
          1: darlehen := TEndfaelliges_Darlehen.create(Editid.Text);
          end;
          ButtonBA.Enabled := True;
       end;
end;

procedure TForm1.RGClick(Sender: TObject);
begin
ButtonND.Enabled := True;
Label2.Enabled := True;
end;

procedure TForm1.ButtonSAVEClick(Sender: TObject);
begin
  liste.Add(darlehen.speichern);
  liste.SaveToFile('darlehen.txt');
  showmessage('Daten erfolgreich gespeichert!');
  liste.Free;
  darlehen.Free;
end;

procedure TForm1.ButtonCLOSEClick(Sender: TObject);
begin
close;
end;

end.
Unit2:
Delphi-Quellcode:
unit UDarlehen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Math;

type
 TDarlehen = class
  protected
    Ident: string;
    Darlehensschuld: real;
    Beginn: TDateTime;
    Laufzeit: integer;
    Jahreszins: real;
    A: real;
  public
    constructor create;
    procedure set_DS (Wert: real);
    procedure set_BE (Wert: TDateTime);
    procedure set_LZ (Wert: integer);
    procedure set_JZ (Wert: real);
    function get_mon_Zinsen(): real; virtual;
    function get_mon_Raten(): real; virtual;
    function get_ges_zinsen(): real; virtual;
    function get_ges_zahlung(): real;
    function speichern(): string;
 end;

 TAnnuitaetendarlehen = class(TDarlehen)
   private
   public
    constructor create(id: string);
    function get_mon_Raten(): real; override;
    function get_ges_Zinsen(): real; override;
 end;

 TEndfaelliges_Darlehen = class(TDarlehen)
    public
      constructor create(id: string);
      function get_mon_Zinsen(): real; override;
      function get_ges_Zinsen(): real; override;
 end;

var
darlehen: TDarlehen;


implementation


//*-----*//TDarlehen//*-----*//

constructor TDarlehen.create;
begin
//
end;


procedure TDarlehen.set_DS (Wert: real);
begin
  Darlehensschuld := wert;
end;


procedure TDarlehen.set_BE (Wert: TDateTime);
begin
  Beginn := wert;
end;


procedure TDarlehen.set_LZ (Wert: integer);
begin
  Laufzeit := wert;
end;


procedure TDarlehen.set_JZ (Wert: real);
begin
  Jahreszins := wert;
end;


function TDarlehen.get_mon_Zinsen(): real;
begin
//
end;


function TDarlehen.get_mon_Raten(): real;
begin
//
end;


function TDarlehen.get_ges_zinsen(): real;
begin
//
end;


function TDarlehen.get_ges_zahlung(): real;
begin
  result := Darlehensschuld + get_ges_zinsen;
end;


function TDarlehen.speichern(): string;
begin
  result := Ident + '#' + formatfloat('0.00',darlehensschuld)
                  + '#' + datetostr(Beginn)
                  + '#' + inttostr(Laufzeit)
                  + '#' + formatfloat('0.00',jahreszins)
                  + '#' + formatfloat('0.00',get_mon_zinsen)
                  + '#' + formatfloat('0.00',get_mon_raten)
                  + '#' + formatfloat('0.00',get_ges_zinsen)
                  + '#' + formatfloat('0.00',get_ges_zahlung);
end;


//*-----*//TAnnuitaetendarlehen//*-----*//

constructor TAnnuitaetendarlehen.create(id: string);
begin
  Ident := id;
end;


function TAnnuitaetendarlehen.get_mon_Raten(): real;
begin
  result := Darlehensschuld * power(1 + Jahreszins/1200, Laufzeit)
            *(Jahreszins/1200) /(power(1 + Jahreszins/1200, Laufzeit) -1);
  //Power errechnet aus Base und einen beliebigen Wert die Potenz. Wird als
  //Exponent ein Bruchwert oder ein Wert größer MaxInt angegeben,
  //muss Base größer als 0 sein.
end;


function TAnnuitaetendarlehen.get_ges_Zinsen(): real;
begin
  result := get_mon_Raten * laufzeit - Darlehensschuld;
end;


//*-----*//TEndfaelliges_Darlehen//*-----*//


constructor TEndfaelliges_Darlehen.create(id: string);
begin
  Ident := id;
end;


function TEndfaelliges_Darlehen.get_mon_Zinsen(): real;
begin
  result := get_ges_Zinsen
end;


function TEndfaelliges_Darlehen.get_ges_Zinsen(): real;
begin
  result := Darlehensschuld * power(1 + Jahreszins/100 {wegen Prozent},
            Laufzeit/12) - Darlehensschuld
end;


end.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.776 Beiträge
 
Delphi 10.3 Rio
 
#28

AW: Memory-Spiel: Ideen

  Alt 27. Jan 2016, 18:09
Zitat:
BTW.: Was hat das mit Memory zu tun?
Das Memory kommt ja erst noch.
Achso, dann stehst Du auch stundenlang im Baumarkt, weil Du Dich nicht für das richtige Türschloss für Dein neues Haus entscheiden kannst, bevor morgen früh der Bagger kommt, um die Grube auszuheben?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
70 Beiträge
 
FreePascal / Lazarus
 
#29

AW: Memory-Spiel: Ideen

  Alt 27. Jan 2016, 18:29
In einem Projekt immer das wichtigste zuerst. Gut, du hast schon viele Ideen gesammelt. Aber das Hauptprogramm ist das Spiel selbst. Deshalb mach zuerst das Memory. Die zwölf Kärtchen, anklicken, umdrehen, vergleichen, zählen und zwar als Einzelspieler. Damit bist du schon genug beschäftigt. (Wenn das nicht funktioniert, ist alles andere sowieso umsonst gewesen.) Mach die Kärtchen ruhig erstmal an einer fixen Position, der Zufall kann später auch noch kommen. Das ist einfacher.

Danach könntest du über Mehrspieler, gegen Computer usw. nachdenken (Das funktioniert nur wenn der Einzelspieler schon läuft, und ist auch noch schwierig genug!).

Menüführung, Login usw. ist hier das unwichtigste (und behandelt einen ganz anderen Teilaspekt). Man braucht es gar nicht, und falls man es wirklich will, kann man es am Schluss noch dazu machen. Auch wenn man im Programm zuerst in das Menü gehen würde, als zweites Einstellungen machen würde usw. ist das beim Programmieren andersrum. Das wichtigste zuerst. Deine Gesamtvorstellungen sind gut, aber über das Ziel hinausgeschossen.

LG
  Mit Zitat antworten Zitat
XardasLP
(Gast)

n/a Beiträge
 
#30

AW: Memory-Spiel: Ideen

  Alt 27. Jan 2016, 18:43
Tja, das da oben ist eine so genannte KOMPLEXAUFGABE bei uns.
Und das was wir jetzt aufgelegt bekommen haben steht in keiner Weise mit dem was wir können in Relation. 85% Unbekannte Sachen herausfinden erscheint mir schon ziemlich krass.

Delphi-Quellcode:
Mach die Kärtchen ruhig erstmal an einer fixen Position, der Zufall kann später auch noch kommen. Das ist einfacher.

Danach könntest du über Mehrspieler, gegen Computer usw. nachdenken (Das funktioniert nur wenn der Einzelspieler schon läuft, und ist auch noch schwierig genug!).
Werde ich denke sowieso machen, denn nur die angebliche Vollversion umfasst zufällige Spielfelder.
Ich muss das ja alles machen, kann mich nicht beschrenken. Das ist gefordert und wie ich das mache interessiert den Typ nicht.

Der meint statt Listbox.Items.Add ist Listbox.Lines.Add richtig... also richtige Gammellehrer wo wir Schüler so krass viel kernen - NICHT!
  Mit Zitat antworten Zitat
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 09:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf