Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Ferby-Fall II (https://www.delphipraxis.net/59221-ferby-fall-ii.html)

ferby 19. Dez 2005 17:06


Ferby-Fall II
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

Ich habe vor längeren schon ein Spiel progammiert,
dass ich Ferby-Fall nannte (zu finden unter www.Ferby.at).

Jetzt habe ich Ferby-Fall II fertig bekommen.
Das Spielprinzip ist zimlich gleich geblieben:
Ein Raumschiff muss Steine abschiessen, bevor diese hinter das Raumschiff gelangen.
Steuerung: Pfeiltasten und Leertaste.

Ich bitte um Testen des Programmes und Verbesserungsvorschläge.

Danke,
Ferby

Luckie 19. Dez 2005 17:12

Re: Ferby-Fall II
 
Muss dass denn unbedingt ein Setup sein?

Nikolas 19. Dez 2005 17:17

Re: Ferby-Fall II
 
Warum läuft das so wahnsinnig langsam?

ferby 19. Dez 2005 17:19

Re: Ferby-Fall II
 
Hi,

was ausser ein Setup soll ich sonst machen um alles als eine Datei anzubieten?
Wo ist der Unterschied wenn ich es als ZIP Datei berreitstelle?



An der Geschwindigkeit arbeite ich noch,
das liegt daran, dass alle Spielfeldelemente aus Images bestehen und die sind leider nicht dazu geeignet..

Airblader 19. Dez 2005 17:20

Re: Ferby-Fall II
 
Bei einer Zip kann man kontrollieren, ob und was in die Registry geschrieben wird ;)

air

ManuMF 19. Dez 2005 17:20

Re: Ferby-Fall II
 
Zitat:

Zitat von Toxman
Warum läuft das so wahnsinnig langsam?

Zitat:

Zitat von Luckie
Muss dass denn unbedingt ein Setup sein?

dito.

Und bei mir stand die Bildschirmfrequenz nach Beenden des Spiels bei 60Hz (sonst 75Hz).

Gruß,
ManuMF

Luckie 19. Dez 2005 17:23

Re: Ferby-Fall II
 
Zum Installieren braucht man Adminrechte und die hat nicht jeder, zum Beispiel ich nicht ohne mich umzumelden. Desweiteren arum ein großes Setup, wenn es nicht nötig ist um vor dem ersten Start iurgendwelche Eintragungen in der Registry vor zu nehmen oder benötigte Dateien ins Systemverzeichnis zu kopieren? Auf Downloadportalen kannst du es ja gerne mit einem Kundenfreundlichen Setup anbieten, aber hier muss das nun wirklich nicht sein. Zu dem bin ich bei Setups immer vorsichtig, da ich nicht weiß, ob sie mir nicht den Rechner zu Müllen. Nimm ein Zip-archiv und schreibndazu, ob irgendetwas im System geändert wiord oder wo anders als im Programmverzeichnis gespeichert wird.

ferby 19. Dez 2005 17:29

Re: Ferby-Fall II
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

also ich versteh euch nicht:

1) Meine Setup Datei mach nichts anderes als Dateien aus der Resource in ein Verzeichniss zu kopieren.
2) Die Registry bleibt unberührt
3) für sowas braucht man meines wissens keine Admin Rechte
4) Wenn ich wirklich böses mit euren Computer vorhaben würde, dann könnte ich einen Virus auch in der exe Datei des Spieles einbauen?

Aber für alle die es als Zip datei haben möchten, können das natürlich auch haben.

Die Muhkuh 19. Dez 2005 17:31

Re: Ferby-Fall II
 
Hi,

die Registry bleibt nicht unberüht. Du kannst nachher per Systemsteuerung -> Software das Programm entfernen. Also wurde was in die Registry geschrieben.

Neotracer64 19. Dez 2005 17:35

Re: Ferby-Fall II
 
Ich starte gerne das Spiel zum testen aus der ZIP heraus. Wenn es mir gefällt entzippe ich es in einen Ordner, wenn nicht versinkt der ZIP Ordner halt im TEMP-Ordner der periodisch gelöscht wird.

Also ist das viel einfacher. Kein Aufwand extra etwas zu löschen. :zwinker:

ferby 19. Dez 2005 17:37

Re: Ferby-Fall II
 
Hallo,

also bei mir kann mann das nicht ????

Ich weiß nicht einmal wie mann auf die Registry mit Delphi zugreift, da ich das noch nie gebraucht habe.
Und ich weiß was in meiner Programmierung steht, und da ist 100% nichts was in irgendeiner weiße die Registry verändert!



Wegen der Bildschirmfrequenz:

Ich verwende diese Procedure um die auflösung zu ändern, wiederherzustellen und um die Symbole am Desktop wieder zu richten.

function changescreen(Width, Height: Word; pfad: string): Boolean;
var
lpDevMode: TDeviceMode;
saveiconherstellen: boolean;
begin
saveiconherstellen:=false;

if width<>0 then
begin
ScreenAlt.x:=(screen.width);
ScreenAlt.y:=(screen.height);
ShellExecute(0,'open', PChar(pfad + 'saveicon.exe'),'"\s"', nil, SW_Show);
sleep(1000);
end
else
begin
saveiconherstellen:=true;
width:=ScreenAlt.X;
height:=ScreenAlt.Y;
end;

Result := EnumDisplaySettings(nil, 0, lpDevMode);
if Result then
begin
lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := Width;
lpDevMode.dmPelsHeight := Height;
Result := ChangeDisplaySettings(lpDevMode,
CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL;
if saveiconherstellen then ShellExecute(0,'open', PChar(pfad + 'saveicon.exe'),'"\r"', nil, SW_Show);
end;

if not Result then
begin
MessageBeep(MB_ICONERROR);
MessageDlg('Fehler1' +#10#10+ 'Das Programm konnte die Auflösung nicht auf '+inttostr(width)+'x'+inttostr(height)+ ' umstellen.' +#10+ 'Es könnte sein das der Computer diese Auflösung nicht unterstützt' +#10+ 'Sollte der Computer diese Auflösung doch unterstüzen,' +#10+ 'dann stelle bitte die Auflösung manuel ein und starte das Spiel erneut.', mtError, [mbOK], 0);
Application.Terminate;
end;

end;



Ich habe diese Procedure nicht ganz alleine geschrieben, wo wird hier die Bildschirmfrequent verändert? Wie kann ich das verhindern, bzw wie kann ich die alte Bildschirmfrequenz wieder herstellen???


Danke für jede Hilfe,

Ferby



PS

Zitat:

Ich starte gerne das Spiel zum testen aus der ZIP heraus. Wenn es mir gefällt entzippe ich es in einen Ordner, wenn nicht versinkt der ZIP Ordner halt im TEMP-Ordner der periodisch gelöscht wird.
Ok, dass ergibt für mich Sinn, sorry, werde das nächste mal gleich eine ZIP bereitstellen,

mfg,
Ferby

ichbins 19. Dez 2005 17:41

Re: Ferby-Fall II
 
Wie schon gesagt, du solltest das Problem mit den 60 Hz noch lösen. Du könntest z.B. vor dem Start die Frequenz auslesen und beim beenden wieder setzen. Ich halte dieses 60-Hz-Geflimmere nicht aus... :?

Und mach UM GOTTES WILLEN den Timer etwas schneller...
Damit richtige Reaktionsgeschwindigkeit gefragt ist.

Ein Setup schreibt IMMER was in die Registry, selbst wenn du ihm ausdrücklich befiehlst, es nicht zu tun.
Ich denke, du verwendest Inno Setup. Wenn du dein eigenes Setup schreibst, könntest du dich drumherummanövrieren.

ferby 19. Dez 2005 17:49

Re: Ferby-Fall II
 
Hallo,

ich habe mein Setup Programm (falls es ein Setup ist, ich weiß nicht wie Setup definiert ist) selbst mit Delphi geschrieben,
der hauptteil dieses Programmes besteht daraus:

Delphi-Quellcode:
procedure Tform1.daten;
var
i: byte;
Datei:TResourceStream;
begin

  for i:=1 to 2 do
  begin
    Datei:=TResourceStream.Create(hInstance,'wav' + inttostr(i),'EXEDATA');
    Datei.SaveToFile(pfadtmp + inttostr(i) + '.wav');
  end;

  progress.position:=50;
  progress.Refresh;

  for i:=1 to 8 do
  begin
    Datei:=TResourceStream.Create(hInstance,'mid' + inttostr(i),'EXEDATA');
    Datei.SaveToFile(pfadtmp + inttostr(i) + '.mid');
  end;

  progress.position:=70;
  progress.Refresh;

  Datei:=TResourceStream.Create(hInstance,'optionen','EXEDATA');
  Datei.SaveToFile(pfadtmp + 'optionen.ini');

  progress.position:=80;
  progress.Refresh;

  Datei:=TResourceStream.Create(hInstance,'score','EXEDATA');
  Datei.SaveToFile(pfadtmp + 'score.ini');



end;
Mein Installationsprogramm schreibt NICHTS in die Registry!


Und sonst steht darin nichts mehr was mit den Dateientpacken (Installation) zu tun hat.




Zitat:

Du könntest z.B. vor dem Start die Frequenz auslesen
Wie lese ich die Frequenz ab und stelle sie wieder her?
Ferby

Nils_13 19. Dez 2005 18:02

Re: Ferby-Fall II
 
Also du hast noch viel zu tun ...

Zur Frequenz: Verurasacht das, so dass man sich total besoffen fühlt und man, egal ob zurück geändert immer noch was nicht ganz stimmr ?

ichbins 19. Dez 2005 18:14

Re: Ferby-Fall II
 
Hier eine Funktion zum Verändern der Bildschirmauflösung (auch nicht ganz selber geschrieben ;) (bzw. garnicht)):

Delphi-Quellcode:
function ChangeResolution(XResolution, YResolution, Depth: DWORD): BOOL;
var
  DevMode: TDeviceMode;
  i: Integer;
begin
  Result := False;
  i     := 0;
  while EnumDisplaySettings(nil, i, DevMode) do
    with DevMode do
    begin
      if (dmPelsWidth = XResolution) and
        (dmPelsHeight = YResolution) and
        (dmBitsPerPel = Depth) then        
        if ChangeDisplaySettings(DevMode, [CDS_FULLSCREEN]) =
          DISP_CHANGE_SUCCESSFUL then
        begin
          Result := True;
          SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, SPI_SETNONCLIENTMETRICS, 0);
          Break;
        end;
      Inc(i);
    end;
end;
vllt geht es ja damit

Luckie 19. Dez 2005 18:18

Re: Ferby-Fall II
 
Zitat:

Zitat von Luckie
Nimm ein Zip-archiv und schreibndazu, ob irgendetwas im System geändert wiord oder wo anders als im Programmverzeichnis gespeichert wird.

Wenn du schon mein Programm umbenennst und so dessen Herkunft etwas verschleierst, dann sag wemfalls, wo mein Programm die Einstellungen speichert oder wird das von deinem Setup auch wieder gelöscht?

ferby 20. Dez 2005 06:12

Re: Ferby-Fall II
 
Hallo,

ich habe das Programm umbennant damit ich sofort weiß was dieses Programm tut,
warum soll ich die Herkunft verschleiern???
Mann braucht ja nur dein Programm zu öffnen und schon weiß mann wo es her kommt.
Nachdem du es Openscource gemacht hast würde ich, wenn ich es verschleiern würde,
einfach alles auf der Form löschen und neu compilen......

Nein der Ordner wird nicht gelöscht,
weil mein "Setup Programm" keine "Reinstallt" hat,
ich werde sobald ich Zeit habe ein Reinstallt Programm schreiben,

mfg,
Ferby

alzaimar 20. Dez 2005 07:56

Re: Ferby-Fall II
 
Zitat:

Zitat von ferby
...
Ich bitte um Testen des Programmes und Verbesserungsvorschläge.

@ferby: Deinen Umgang erwünschter Kritik, die freundlich und sachlich vorgetragen wurde, solltest Du überdenken. Durch Kritik wird immer Dein Horizont erweitert. Es gibt Leute, die zahlen dafür (Schulungen, Training, Lehrgänge, etc.) und Du bekommst das hier umsonst. Anstatt einfach 'Danke' zu sagen, lamentierst Du hier rum.

Denk nächstes Mal daran, wenn Dir jemand auf Dein Bitten hin was erzählt.

Ich persönlich teste übrigens keine EXEn ohne Source, denn es sind in Foren wie Diesem auch schon Trojaner als vermeidlich zu testende Tools gepostet worden. Zumindest der Source sollte mitgeliefert werden. Deinem Tool nach zu urteilen stecken sowieso keine Geheimnisse drin.

Muetze1 20. Dez 2005 08:40

Re: Ferby-Fall II
 
Delphi-Quellcode:
Uses
  ShellAPI,
  registry;         // auch wenn du es nicht wolltest, nun hast doch ein wenig Registry mit drinne - aber nur lesen...

....

Var
  ScreenAlt: TPoint;             // diese solltest du schon haben
  ScreenAltFrequenz : Integer;   // diese kommt neu hinzu

Function ChangeScreen(AWidth, AHeight: Word; AFrequenz: Integer; Const APfad: string): Boolean;
  // modified by Muetze1
Const
  ENUM_CURRENT_SETTINGS : Cardinal = Cardinal(-1);//$ffffffff; // = -1
Var
  lpDevMode: TDeviceMode;
  saveiconherstellen: boolean;
  lRegInfo : TRegistry;
Begin
  saveiconherstellen := false;

  If ( AWidth <> 0 ) Then
  Begin
    ScreenAlt.x := Screen.Width;
    ScreenAlt.y := Screen.Height;
    ScreenAltFrequenz := 0;            // diese Variable noch definieren

    If ( EnumDisplaySettings(Nil, ENUM_CURRENT_SETTINGS, lpDevMode) ) Then
    Begin
      If ( ( lpDevMode.dmFields And DM_PELSWIDTH ) > 0 ) Then
        ScreenAlt.x := lpDevMode.dmPelsWidth;
      If ( ( lpDevMode.dmFields And DM_PELSHEIGHT ) > 0 ) Then
        ScreenAlt.y := lpDevMode.dmPelsHeight;
      If ( ( lpDevMode.dmFields And DM_DISPLAYFREQUENCY ) > 0 ) Then
        ScreenAltFrequenz := lpDevMode.dmDisplayFrequency
      Else If ( Win32Platform = VER_PLATFORM_WIN32_WINDOWS ) Then // Win9x/ME
      Begin
        lRegInfo := TRegistry.Create(KEY_READ);
        lRegInfo.RootKey := HKEY_CURRENT_CONFIG;
        Try
          If lRegInfo.OpenKey('\Display\Settings', False) Then
          Begin
            ScreenAltFrequenz := StrToIntDef(lRegInfo.ReadString('RefreshRate'), 0);
          End;
        Finally
          lRegInfo.CloseKey;
          lRegInfo.Free;
        End;
      End;
    End;

    ShellExecute(0, 'open', PChar(APfad + 'saveicon.exe'),'"\s"', nil, SW_Show);
    Sleep(1000);
  End
  Else
  Begin
    saveiconherstellen:=true;
    AWidth   := ScreenAlt.X;
    AHeight  := ScreenAlt.Y;
    AFrequenz := ScreenAltFrequenz;
  End;

  lpDevMode.dmFields    := DM_PELSWIDTH Or DM_PELSHEIGHT;
  lpDevMode.dmPelsWidth := AWidth;
  lpDevMode.dmPelsHeight := AHeight;
  If ( AFrequenz > 20 ) Then // valid?
  Begin
    lpDevMode.dmDisplayFrequency := AFrequenz;
    lpDevMode.dmFields          := lpDevMode.dmFields Or DM_DISPLAYFREQUENCY;
  End;
  Result := ChangeDisplaySettings(lpDevMode, CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL;

  If saveiconherstellen Then
    ShellExecute(0,'open', PChar(APfad + 'saveicon.exe'),'"\r"', nil, SW_Show);

  If Not Result Then
  Begin
    MessageBeep(MB_ICONERROR);
    MessageDlg('Fehler1' +#10#10+ 'Das Programm konnte die Auflösung nicht auf '+inttostr(AWidth)+'x'+inttostr(AHeight)+ ' umstellen.' +#10+ 'Es könnte sein das der Computer diese Auflösung nicht unterstützt' +#10+ 'Sollte der Computer diese Auflösung doch unterstüzen,' +#10+ 'dann stelle bitte die Auflösung manuel ein und starte das Spiel erneut.', mtError, [mbOK], 0);
    Application.Terminate;
  End;
End;
So, damit sollte es klappen mit der Frequenz. MultiMon unter 98 und ME werden dabei nciht sauber unterstützt - diese Leutchen werden dann auch weiterhin die falsche Frequenz haben. Grundsätzlich könnte man da noch mit dem CDS_UPDATEREGISTRY rumspielen und deine Spieleauflösung nicht gleich fest abspeichern und dadurch die Wiederholfrequenz behalten.
Ansonsten kannst du nun auch eine Wiederholfrequenz für deine Spielauflösung angeben - da ist wieder die Frage, ob es der Monitor unterstützt. Die nicht vom Monitor unterstützten Auflösungen werden zwar beim EnumDisplaySettings() ausgeblendet (ab NT), aber beim setzen kann man auch nicht unterstützte setzen. Wenn die 60 Hz auf deiner Spielauflösung bisher nicht störten, dann gebe bei dem Frequenzparameter eine 0 an beim Aufruf.
Die Registry wird nun doch gebraucht für die Wiederholfrequenz unter 9x/ME - aber es wird nur gelesen...

Und grundsätzlich gilt meine Signatur!

Daniel G 20. Dez 2005 11:00

Re: Ferby-Fall II
 
Zitat:

Zitat von alzaimar
Ich persönlich teste übrigens keine EXEn ohne Source, denn es sind in Foren wie Diesem auch schon Trojaner als vermeidlich zu testende Tools gepostet worden.

Da sehe ich eigentlich kein Problem, denn wenn ein Programm ins Netz will meckert meine Firewall eigentlich regelmäßig. Und nebenbei läuft NetworkActiv. Man kann ja schließlich nicht von jedem verlangen, dass er sein komplettes Programm offenlegt.

alzaimar 20. Dez 2005 11:24

Re: Ferby-Fall II
 
Wo war das neulich mit einem selbstgeschriebenen FTP- und EMail-Passwortklauprogramm? Hier oder in der DF? Da hat kein einziges AV-Programm gemeckert, weil es ja kein Virus/Trojaner etc. war, sondern nur ein Programm, das etwas anderes machte, als es vorgab, zu tun.

Aus diesem Grund kommt mir keine EXE mehr auf die Festpladde.

Neotracer64 20. Dez 2005 15:58

Re: Ferby-Fall II
 
OffTopic:
Ich kenne jemanden, der könnte ad hoc einen Trojaner(Rootkit) schreiben (Er hat es mir auch schon eindrucksvoll an meinem Rechner vorgeführt), den hier veröffentlichen und der würde fürs erste von keinen Anti-Viren Prog erkannt werden. (Ist ja noch gänzlich unbekannt) Es gibt auch Möglichkeiten, Personal Firewalls zu umgehen.
Sollte jetzt keine Diskussion anfeuern, wollte nur sagen, dass man etwas vorsichtiger sein sollte. Programme im User-Kontext zu testen, ist um längen sicherer als unter dem Admin Account mit Antiviren-Dingens.
So jetzt halte ich die Klappe, sry :wink:

ferby 20. Dez 2005 18:55

Re: Ferby-Fall II
 
Hallo,

Danke an alle die sich mit meinen Programm beschäftigt haben und mir verbesserungsvorschläge gegeben haben,
ich werde mich sobald es geht damit auseinander setzten.

Schöne Weihnachten,
Ferby

mimi 25. Dez 2005 09:33

Re: Ferby-Fall II
 
ich habes es auch getestet:
das menu ist wirklich toll gemacht grafik und sound auch.
Aber ich wollte "schießen" und da konnte ich das raumschiff nicht mehr steuern. beenden konnte ich das spiel noch.

Vader 26. Dez 2005 15:40

Re: Ferby-Fall II
 
hallo,

ich hab den code von muetze1 ausprobiert, das funzt,die auflösung und frequenz wird
umgestellt, aber wie bekomme ich die alten wieder zurück wenn ich mein programm schließe


1. ist mein funktionsaufruf so richtig ?

Delphi-Quellcode:
ChangeScreen(800,600,85,'c:\saveicon.exe')
2.welchen code muß ich in das ereigniss "onclose" schreiben, das meine alten einstellungen
wiederhergestellt werden ?

mfg vader

Vader 26. Dez 2005 17:04

Re: Ferby-Fall II
 
kann mir keiner weiter helfen ?
mfg vader

ManuMF 26. Dez 2005 17:57

Re: Ferby-Fall II
 
-> Eigenes Thema

Gruß,
ManuMF

P.S.: Es gibt Leute, die an Weihnachten auch nicht am PC sitzen... ;-)

ferby 9. Jan 2006 19:40

Re: Ferby-Fall II
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

Ich habe jetzt glaub ich alle eure Vorschläge eingebaut:

.) Die Bildschirmfrequenz sollte wieder zurück gestellt werden
.) Es ist möglich zu schießen ohne das das Raumschiff stehen bleibt
.) Unter Optionen kann man das Spiel schneller stellen falls es einen zu langsam ist.
( Wenn es noch immer wem zu langsam ist soll er mal das Spiel durchspielen und dann sagen ob es noch immer zu langsam ist)

Habt ihr noch Vorschläge?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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