Konami-Code angeben (brauche hilfe)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
relas
Beiträge: 5
Registriert: Mo 10. Nov 2014, 23:39

Konami-Code angeben (brauche hilfe)

Beitrag von relas »

Ich würde gerne den Konami code (hoch hoch runter runter links rechts links rechts B A) in mein Programm einbauen.

Code: Alles auswählen

 
procedure TfmTicTacToe.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 
if Key = VK_UP then
   begin
      Key := 0;
        if Key = VK_UP then
          begin
            Key := 0;
              if Key = VK_DOWN then
                begin
                  Key := 0;
                    if Key = VK_DOWN then
                      begin
                        Key := 0;
                          if Key = VK_LEFT then
                      begin
                        Key := 0;
                          if Key = VK_RIGHT then
                      begin
                        Key := 0;
                          if Key = VK_LEFT then
                      begin
                        Key := 0;
                          if Key = VK_RIGHT then
                      begin
                        Key := 0;
                          if Key = $42 then
                      begin
                        Key := 0;
                          if Key = $41 then
                      begin
                        ShowMessage ('Konamie is nicht!');
                      end;
                end;
          end;
   end;
end;
 
end;
                          end;
 
end;
              end;
        end;
 
 
end;


das geht natürlich nicht weil ich nicht in der kurzen Zeit zwischen

Code: Alles auswählen

   Key := 0;
              if Key = VK_* then
die neue Taste drücken kann,

Im Internet hab ich nur Tastenkombinationen gefunden (strg+f z.b.) aber ich suche ja etwas mit dem ich den code an sich abfragen kann

wollte es auch erst mit sleep versuchen aber das hat auch nicht geklappt.

mein nächster gedanke war: if () or () or () etc.
aber so stimmt die reihnfolge nicht..

danke im voraus :*

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Konami-Code angeben (brauche hilfe)

Beitrag von baumina »

Du kannst immer nur eine Taste im KeyDown abfragen, d.h. du solltest dir die gedrückten Tasten in einem Array oder einer Liste merken. Die Liste kannst du dann für den Vergleich benutzen. Dann brauchst du natürlich noch einen Zeitpunkt an dem deine Merkliste geleert wird.
.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Konami-Code angeben (brauche hilfe)

Beitrag von Michl »

So in der Art?!

Code: Alles auswählen

procedure TForm1.FormKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
const
  KonamiKeys: array[0..9] of Word =
    (VK_UP, VK_UP, VK_DOWN, VK_DOWN, VK_LEFT, VK_RIGHT,
     VK_LEFT, VK_RIGHT, VK_B, VK_A);
  KonamiPos: Integer = 0;
begin
  if Key = KonamiKeys[KonamiPos] then
    inc(KonamiPos)
  else
    KonamiPos:=0;
 
  if KonamiPos = 10 then begin
    ShowMessage('Geheimer Zugriff aktiviert!');
    KonamiPos:=0;
  end;
end; 
Edit: Huch, baumina hatte in der Zeit, in der ich das probiert hatte, geantwortet...

Muss man eigentlich ein großes "B" und "A" nehmen?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

relas
Beiträge: 5
Registriert: Mo 10. Nov 2014, 23:39

Re: Konami-Code angeben (brauche hilfe)

Beitrag von relas »

supi funktioniert danke!:)

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Konami-Code angeben (brauche hilfe)

Beitrag von Komoluna »

@Michl:
Muss KonamiPos nicht außerhalb der FormKeyDown Methode deklariert sein?
Sonst wird ja immer geprüft ob Key = VK_UP oder?

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Konami-Code angeben (brauche hilfe)

Beitrag von Mathias »

Muss KonamiPos nicht außerhalb der FormKeyDown Methode deklariert sein?
Nein, da es als Const deklariert ist.

Das sieht man bei diesem kleine Code gut:

Code: Alles auswählen

program Project1;
 
  procedure Ausgabe;
  const
    ic: integer = 1; // Wird im Datensegment* gespeichert.     (* War unter DOS auf jedem Fall so.
  var
    iv: integer = 1;  // Wird auf dem Stack gespeichert.
  begin
    Writeln('ic: ', ic, ' iv: ', iv);
    Inc(ic);
    Inc(iv);
  end;
 
var
  i: integer;
begin
  for i := 1 to 100 do begin
    Ausgabe;
  end;
  Readln;
end.              
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Konami-Code angeben (brauche hilfe)

Beitrag von Komoluna »

Das konstanten nicht jedes mal neu zugewiesen werden wusste ich, aber ich kam nie auf die Idee, eine Konstante "variabel" zu machen.
Man lernt halt immer was dazu.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Konami-Code angeben (brauche hilfe)

Beitrag von Mathias »

Geht natürlich nur, wen der Schalter {$j+} gesetzt ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten