AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Projektarbeit

Ein Thema von Felix Stein · begonnen am 12. Nov 2014 · letzter Beitrag vom 16. Mär 2015
Antwort Antwort
Seite 5 von 7   « Erste     345 67      
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Eine Projektarbeit

  Alt 17. Dez 2014, 15:31
Spätestens jetzt solltest du gemerkt haben, dass ein Konzept (was soll wie wo warum angezeigt werden) sehr hilfreich bei der Umsetzung in den echten Code ist.

Und dafür sind zunächst Papier und Bleistift (+ frisches Radiergummi) gefragt.

Einfach planlos drauflosklappern bringt nichts - oder eben ein Snake wofür es nur 6 Punkte gibt.
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
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#42

AW: Eine Projektarbeit

  Alt 17. Dez 2014, 21:11
Soll Joshua auch Spieler Anzahl 0 können damit er lernt das der beste Spielzug - nicht zu spielen ist...?
Zu oft Wargames im Kino geschaut???


Sorry für OT, konnt ich mir nicht verkneifen, denn der Film ist irgendwie doch gut.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Eine Projektarbeit

  Alt 18. Dez 2014, 14:55
Zu oft Wargames im Kino geschaut???
War mir nicht sicher, ob "alle" alt genug sind für die Anspielung...

@Felix Stein...
hmm ob "mein Snakeland 3d" auch nur 6 Punkte bringen würde?
oder "Schiffe versenken"? Sind auch "nur" entstanden weil hier einer ne Frage hatte...

[OT]Das konnte ich mir jetzt nicht nehmen lassen[/OT]
  Mit Zitat antworten Zitat
Felix Stein

Registriert seit: 12. Nov 2014
21 Beiträge
 
#44

AW: Eine Projektarbeit

  Alt 19. Jan 2015, 10:13
Morgen, wir melden uns mal wieder und sind jetzt schon ein ganzes stück weiter. Bis lang steht Tic Tac Toe und jetzt sitzen wir am Memory. Leider sitzen wir was das angeht aber in einer kleinen Misere wir wissen einfach nicht weiter. Ich werde das Programm unten anheften, vielleicht wisst ihr Rat wir haben keinen Plan wie wir folgendes Problem lösen sollen:

Feld mit Bild wird ausgewählt.
Zweites Feld mit Bild wird ausgewählt, keine Übereinstimmung.
Felder sollen zugedeckt werden.
Wir würden gerne vermeiden das der User das ganze manuell machen muss das verleitet ja zum Selbstbetrug (einfach die Felder offen lassen und hups ich bin der meister des Memory). wie immer ist uns Literatur lieber als eine Lösung wir wollen dieses Thema ja mit in das Literaturverzeichnis pack. Ich habe den Ordner als Zip verpackt hoffe das so alles funktioniert und danke schon mal im voraus für die Hilfe

MFG Felix

Ach ja Datei anhängen hat nicht funktioniert habe es als Zip verpackt aber da kommt leider eine Fehlermeldung (vermutlich ist die Datei zu groß)

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls;

type

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Image10: TImage;
Image12: TImage;
Image13: TImage;
Image14: TImage;
Image16: TImage;
Image18: TImage;
Image19: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
Image6: TImage;
Image7: TImage;
Image8: TImage;
Image9: TImage;
procedure Button1Click(Sender: TObject);
procedure Image10Click(Sender: TObject);
procedure Image12Click(Sender: TObject);
procedure Image13Click(Sender: TObject);
procedure Image14Click(Sender: TObject);
procedure Image16Click(Sender: TObject);
procedure Image18Click(Sender: TObject);
procedure Image19Click(Sender: TObject);
procedure Image1Click(Sender: TObject);
procedure Image2Click(Sender: TObject);
procedure Image3Click(Sender: TObject);
procedure Image4Click(Sender: TObject);
procedure Image5Click(Sender: TObject);
procedure Image6Click(Sender: TObject);
procedure Image7Click(Sender: TObject);
procedure Image8Click(Sender: TObject);
procedure Image9Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;
neuesBild:Integer=0;
listevonbildern:Array[0..7]of string =
('tulips.jpg',
'test.jpg',
'tulips.jpg',
'test.jpg',
'tulips.jpg',
'test.jpg',
'tulips.jpg',
'test.jpg');


implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Visible:=True;
image2.Visible:=True;
image2.Visible:=True;
image4.Visible:=True;
image5.Visible:=True;
image6.Visible:=True;
image7.Visible:=True;
image8.Visible:=True;
image9.Visible:=True;
image10.Visible:=True;
image12.Visible:=True;
image13.Visible:=True;
image14.Visible:=True;
image16.Visible:=True;
image18.Visible:=True;
image19.Visible:=True;


end;

procedure TForm1.Image10Click(Sender: TObject);
begin
Image10.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);



end;

procedure TForm1.Image12Click(Sender: TObject);
begin
Image12.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image13Click(Sender: TObject);
begin
Image13.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image14Click(Sender: TObject);
begin
Image14.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image16Click(Sender: TObject);
begin
Image16.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image18Click(Sender: TObject);
begin
Image18.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image19Click(Sender: TObject);
begin
Image19.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image2Click(Sender: TObject);
begin
Image2.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image3Click(Sender: TObject);
begin
Image3.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image4Click(Sender: TObject);
begin
Image4.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image5Click(Sender: TObject);
begin
Image5.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);

end;

procedure TForm1.Image6Click(Sender: TObject);
begin
Image6.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image7Click(Sender: TObject);
begin
Image7.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image8Click(Sender: TObject);
begin
Image8.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

procedure TForm1.Image9Click(Sender: TObject);
begin
Image9.Picture.LoadFromFile(ListevonBildern[neuesBild]);
inc(neuesBild);
if neuesBild> High(ListevonBildern)
then neuesBild :=Low(ListevonBildern);
end;

end.
ich hoffe es geht auch so ansonsten muss ich es von zu Hause probieren.
  Mit Zitat antworten Zitat
Felix Stein

Registriert seit: 12. Nov 2014
21 Beiträge
 
#45

AW: Eine Projektarbeit

  Alt 19. Jan 2015, 11:07
Ok, ok vergesst den letzten Beitrag.
Wir haben gerade mit unserem Lehrer geredet und haben einige neue Ideen bekommen um das ganze einfacher zu gestalten.

Grundsätzlich sollen wir für Tic Tac Toe und Memory das selber System benutzen.

Schritt eins: "Bilder im Hintergrund" deren Eigenschaften dann verändert werden. Funktioniert ja im Grunde genommen mit beiden Spielsystemen. Wie richten wir also am besten diese Bilder ein?

Schritt zwei: Eigenschaften verändern.

Unterteilt in Memory und Tic Tac Toe:

Memory: Wir haben zwei formen die das Bild annehmen kann Deckseite (bei allen 18 Bildern gleich) und Frontseite die eben aus 9 Paaren besteht. Wie wir die Bilder platzieren wissen wir ist nun auch keine mentale Höchstleistung doch wir wissen nicht mit welchem Befehl wir klar machen, das zwei Bilder zu einem Paar gehören oder eben nicht.

Tic Tac Toe:
Wir haben 3 Grundformen leeres Feld, Bild das X anzeigt und Bild das O anzeigt. Bei dem anderen Programm sind wir am Schluss hängen geblieben wo es dann hieß welche Kombinationen jetzt Sieg, Niederlage oder Unentschieden waren und dann wurde uns eben ans Herz gelegt mit den Bildern im Hintergrund zu arbeiten.

Schritt drei: der Feinschliff.

Memory: Uns fehlt die Funktion das wenn zwei Bilder nun aufgedeckt werden, aber kein paar sind und nun automatisch wieder verdeckt werden. Daran hapert es wir finden keine Befehlskette und raten hat noch keinem Programm geholfen (Literatur könnte schon helfen).

Tic Tac Toe: Wir müssen die Siegesbedingungen Festlegen sprich
-3 Hochkant, Seitlich oder Schräg
Wir haben uns darauf geeinigt "nur" ein manuell bedientes Tic Tac Toe zu erstellen sprich keine KI, man könnte also in der Theorie auch gegen sich selbst spielen. Unser einziges Problem ist nun also die Siegesbedingung.

Wir würden uns über baldige Antwort freuen und bedanken uns schon im Voraus
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#46

AW: Eine Projektarbeit

  Alt 19. Jan 2015, 11:59
Tic Tac Toe:
Wir haben 3 Grundformen leeres Feld, Bild das X anzeigt und Bild das O anzeigt. Bei dem anderen Programm sind wir am Schluss hängen geblieben wo es dann hieß welche Kombinationen jetzt Sieg, Niederlage oder Unentschieden waren und dann wurde uns eben ans Herz gelegt mit den Bildern im Hintergrund zu arbeiten.
U.U. hast Du Dich ungeschickt ausgedrückt, aber die "Drei Bilder" haben mit dem eigentlichen Spiel nichts zu tun. Die Bilder werden nur für die Darstellung des Spielstandes genutzt. der Spielstand sollte in einem Array oder ähnlichem verwaltet werden.

Und das gilt auch für das Memoryspiel. Hier sind zwei Arrayfelder gleich egal welche Darstellung für die beiden Felder genutzt wird!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#47

AW: Eine Projektarbeit

  Alt 20. Jan 2015, 20:42
Das Problem ist, dass ihr das Pferd von hinten aufzäumt. Wie p80286 richtigerweise anmerkt sollte man sich beim Austüfteln des Programms zuerst auf die Programmlogik und erst später auf die Darstellung konzentrieren.

Beispiel1:
Ich habe ein Programm das schöne Bilder anzeigt. Wenn ich draufklicke passiert entweder nix oder etwas zufälliges.
Beispiel2:
Ich habe ein Programm das mir nur 14 mal ein "X" als Text hinschreibt. Wenn ich per Tastatur ein X aufmache erscheint eine Zahl. Decke ich zwei gleiche Zahlen hintereinander auf bleiben sie offen. Sind alle "X" offen habe ich gewonnen.
Welches Programm ist "mehr" Memory?


Ok, also was braucht ihr noch? Richtig, die gesamte Spiellogik.

Wie kann ich die einbauen?

Man braucht eine Funktion die immer aufgerufen wird, egal auf welche Karte man geklickt hat. Und die weiß auf welche Karte man klickte und die sich ein paar Sachen "merkt" (zB in globalen Variablen).

Dazu muss man aber etwas abstrahieren. Ihr habt 14 Karten(Bilder) und ihr schreibt 14x den "fast" selben Code hin. Erstens kannn man das bei 100 Bildern nicht mehr machen, und zweitens müsstet ihr jede kleine Änderung der Logik immer 14x ändern.

Ich würde das beispielsweise so angehen:

1) Ihr müsst allen Bildern das selbe Klickevent zuweisen. Es soll die selbe Funktion aufgerufen werden. Dies macht ihr in dem ihr bei allen Bildern im Objektinspektor bei OnClick die selbe Funktion angebt.

2) Natürlich muss man aber wissen auf WELCHES Bild geklickt wurde.
Das geht über Auswerten des Senders:
wird zb hier erklärt: http://www.festra.com/wwwboard/messages/2235.html

2b) Als mögliche Alternative fällt mir gerade ein: alle Klick-Events rufen danach eine einheitliche Funktion auf und schicken als Parameter mit auf welche Karte geklickt wurde.

3) Jetzt haben wir einen Eventhandler der von allen Karten ausgelöst wird und der weiß auf welche Karte geklickt wurde. Dann können wir mit der Logik beginnen.

4) Diese braucht ein paar globale Variablen. Sie muss wissen:
ob wir gerade auf die "erste" oder die "zweite" Karte geklickt haben
wieviele Karten schon aufgedeckt sind
evtl. welche Karten aufgedeckt und verdeckt sind (Array/Liste)

5) Ich würde zB. eine Integer Variable "Status" nehmen
zu Beginn ist status := 0
klicke ich auf die erste Karte:
status := 1
decke diese karte auf
merke dir diese karte (in einer variablen)

klicke ich auf die nächste (zweite) Karte:
status := 2
decke diese karte auf
if diese karte = die erste karte then:
speichere irgendwie (variable, array, liste, whatever) dass diese beiden karten nach dem nächsten klick offen bleiben
Speichere auch wieviele Karten offen sind. Sind alle offen ist das Spiel gewonnen.

klicke ich wieder auf eine Karte:
decke die 2 vorigen Karten wieder zu (außer es waren 2 gleiche)
status := 1
und mache es wie oben bei status 1


Die Spiellogik von Memory ist gar nicht so trivial zu implementieren wie man meinen möchte, jedoch ist es gut mit Standardmethoden möglich.

Ich würde mir zu beginn die Arbeit vereinfachen und nur mal:
- ich klicke auf eine Karte
- es wird immer der gleiche Eventhandler (Funktion) aufgerufen.
- ein Memo schreibt mir hin auf welche Karte geklickt wurde (zur Kontrolle. Debugging) Wird über "Sender" rausgefunden - siehe oben.
- ich kann erstmal einfach alle Karten aufmachen
- wenn alle Karten offen sind erkennt das Programm das

später:
- das Memo schreibt auch den Status hin. (siehe oben)
- wenn der status von 2 auf 1 geht könnte mich - erstmal zur Vereinfachung - auch eine Messagebox fragen ob die letzten 2 Karten identisch waren. Als braver Bürger beantworte ich die Frage natürlich wahrheitsgemäss und kann spielen
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.

Geändert von isilive (20. Jan 2015 um 20:43 Uhr) Grund: Typo
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Eine Projektarbeit

  Alt 23. Jan 2015, 20:14
hmm, konnte es mal wieder nicht lassen...

Anbei mein Umsetzung vom Memory!

"Firemerk in Version 0.9" als POC

Augenmerk habe ich auch eher auf die Animation gelegt...

Anbei ist auch ein Bildeditor.
Hier kann man fertige Bilder aus dem Internet benutzen..

Einfach mal "memory bilder zum ausdrucken" googlen...

Wenn die Vorlage alle Bilder schon doppelt hat, gibt es einen entsprechenden Hacken...

Ansonsten kann man auch sein Lieblingsbild nehmen...

Grüsse Mavark

[EDIT] Bild für Doppelbilder mit rotem Pfeil für den Hacken!
Miniaturansicht angehängter Grafiken
bilder.jpg   bilder3.png  
Angehängte Dateien
Dateityp: zip Firemerk 0.9.zip (2,36 MB, 47x aufgerufen)

Geändert von Mavarik (24. Jan 2015 um 11:23 Uhr)
  Mit Zitat antworten Zitat
kinza

Registriert seit: 5. Mär 2015
1 Beiträge
 
#49

AW: Eine Projektarbeit

  Alt 5. Mär 2015, 07:35
Ist es möglich mehrere Label per Schleife zu benennen?
So funktioniert es nicht:
Our excellent online Testking security certifications training programs will lead you to success in the gmat test We also offer latest sckans and examsheets.com with 100% success Palm Beach Atlantic University Our selftestengine is rare in IT world.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#50

AW: Eine Projektarbeit

  Alt 5. Mär 2015, 07:50
Ist es möglich mehrere Label per Schleife zu benennen?
FindComponent

So funktioniert es nicht:
Wie?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 7   « Erste     345 67      


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 17:47 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