![]() |
Problem mit "Programm" für die Schule
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo an alle, die sich die Zeit nehmen, sich das hier mal durchzulesen :)
Also, wir haben in der Schule seit kurzem Informatik (11. Klasse) und beschäftigen uns (un)glücklicherweise mit Delphi bzw. mit Pascal. Nun, nachdem unser eher weniger kompetenter Lehrer uns ein paar Grundlagen "erklärt" hat, sollten wir in kleineren Gruppen eigene Spielideen entwickeln und diese dann auch so gut es geht umsetzen. Ich habe mir mit einem Freund überlegt, eine Art Tickspiel zu basteln, nur kennen wir uns beide nur seeehr wenig mit der ganzen Materie aus und kommen nur langsam voran. In der schule kriegten wir bisher nur wenig Hilfe, deshalb wende ich mich jetzt an euch^^. Soviel erstmal zu der Situation, jetzt zum eigentlichen Programm. Wir sind so weit: Zwei Objekte (in unserem Falle Kugeln, später Images) kann man mit bestimmten Tasten in verschiedene Richtungen bewegen. Wenn diese beiden Objekte sich nun berühren, bleiben sie ineinander hängen, können also nicht mehr bewegt werden. Die nächste Idee wäre dann gewesen, eine Message zu zeigen, wenn dies passiert. Gedacht, getan...die Message, durch "showmessage" hervorgerufen und in eine if-Bedingung eingebunden kommt leider schon, wenn man das Spiel nur startet. Da liegt nun das erste Problem. Weiterhin hatten wir vor, einen Punktezähler mit einzubauen, wobei wir allerdings auch keine Vorstellung haben, wie. Dann wollten wir neben der Message noch einen Sound haben, der kommt, wenn man "getickt" wird bzw. jem. tickt, hier auch wieder die frage: Wie? Letztendlich wollte ich hier einfach mal fragen, ob nicht jemand bereit wäre, sich das ganze mal anzuschauen und ggf. weiterzuführen, evtl. auch weitere Ideen vorzuschlagen/einzubringen. Die Dateien hänge ich einfach mal als *.rar hier mit dran. Wenn also jemand Lust und Zeit hat, zwei richtig blöden Jungs zu helfen, dann kann er oder sie sich ja einfach ma an den Quelltext machen, oder aber, wenn auch nicht ganz sooo toll wegen fehlender Kenntnis über die Befehle usw., einfach irgendwie die Fragen beantworten. Ich bedanke mich bei jedem, der es überhaupt bis hierher geschafft bzw. durchgezogen hat und natürlich noch viel mehr bei jedem, der helfen kann/will :-D In diesem Sinne, einen schönen Tag euch allen und bye :hi: PS: Das ganze wurde mit Delphi 7 gemacht. PSII: Zu Hause hab ich nur delphi 2005, welches ich nicht so toll finde, Lazarus funktioniert macnhmal nicht so wie ich will. Gibt es da noch irgendwelche anderen nennenswerten (kostenlosen) Alternativen? |
Re: Problem mit "Programm" für die Schule
Wenn du das mit dem Sound rausgefunden hast schreib mir ne Mail ^.^
Also zu deinem Prob. das die Message nur erscheint wenn das Ding ausgeführt wird.. Also die steht auch nur in "FormCreate" und dieses Event wird nunmal nur einmal beim starten aktiviert also von daher kann es eh nicht nochmal erscheinen. |
Re: Problem mit "Programm" für die Schule
Zitat:
Das funktioniert schon richtig Gruss Kh |
Re: Problem mit "Programm" für die Schule
FreePascal = Delphi ?
|
Re: Problem mit "Programm" für die Schule
Na na, TDE ist ja auch nicht schlecht.
|
Re: Problem mit "Programm" für die Schule
Zitat:
;-) |
Re: Problem mit "Programm" für die Schule
Danke schonmal.
Zitat:
Zitat:
Gibt es hier nicht jemanden, der sich mal ans Spiel ransetzen und es fertigmachen will? Klingt jetzt wahrscheinlich ziemlich faul, aber wir sind echt blutige Anfänger und sind die letzten paar Unterrichtsstunden verzweifelt an dem ganzen Krams und wir wissen einfach nicht mehr so wirklich weiter :-/ |
Re: Problem mit "Programm" für die Schule
Zitat:
Zitat:
Zitat:
Wenn du dir deine Programmlogik überdenkst, wirst du wohl deine schlimmsten Fehler selber finden. Edit: Das sich beide Shapes ineinander "verhaken" und dann nicht mehr bewegt werden kann, liegt an euer Berechnung von d. Dann muss nach jedem Schnritt geprüft werden, ob beide Shapes ineinander "hängen" und dann das tagged ausgegeben werden. |
Re: Problem mit "Programm" für die Schule
Kann denn wirklich niemand Abhilfe schaffen? Ich bin noch kein Stück weitergekommen, das ganze muss aber bis Dienstag fertig sein :?
schöne Grüße! |
Re: Problem mit "Programm" für die Schule
Was erwartest Du von uns? Dass wir uns das Programm herunterladen, Deine Gedanken lesen, die Fehler beseitigen und das Ganze dann wieder als Deine Arbeit uploaden?
|
Re: Problem mit "Programm" für die Schule
Hab auf diesem Rechner hier kein Rar und kein Delphi. Kannst du den Quelltext direkt hier reinposten bitte?!
|
Re: Problem mit "Programm" für die Schule
Bei deiner Anmedlung hast dus das Bestätigt:
Zitat:
Keiner wird hier für DICH!! ein Programm OHNE Gegenleistung schreiben? Wieso auch? Aber sicherlich werden dir hier viele Helfen, wenn du die nötige eigeninitiative ergreifst, und z.B.: einfach mal in der DP nach ![]() ![]() Hast du dazu was gefunden, und kommst damit nicht klar, wird dir hier geholfen! :) Und sonnst würde ich dir (euch) raten vllt erstmal nach " ![]() mfg Caleb |
Re: Problem mit "Programm" für die Schule
Desweiteren sagt der Titel nichts über das Problem aus.
|
Re: Problem mit "Programm" für die Schule
Eigentlich wollte ich mir das verkneifen, aber da der Thread ja immer wieder hochgepushed wird, kommt es auf das eine mal auch nicht mehr an. :roll:
Zitat:
Zitat:
Zitat:
|
Re: Problem mit "Programm" für die Schule
...
Erstens: eine Meinung/Behauptung MUSS man NICHT belegen oder widerlegen, man KANN. Desweiteren muss ich das schon gar nicht in einem Forum tun, wo dies völlig irrelevant zur Klärung eines bestimmten Sachverhaltes ist, wo es keinen Nutzer interessieren sollte, wie, was und wer meine Lehrer sind. Meine Behauptung, dass der Lehrer inkompetent ist, hat schon so seine Gründe. Und um diese erkennen zu können, muss man kein Fachmann sein. Die Art des Unterrichts und der (vorhandenen?) Vermittlung des Stoffes von Lehrer an Schüler hat meiner Meinung nach in erster Linie nichts mit dem Stoff selbst zu tun. Na klar, wenn er jetzt falsche Fakten, Daten etc. vermitteln würde, würde ich das nicht mitkriegen. Genausowenig kann ich beurteilen, ob seine Herangehensweise an das ganze Thema bzw. die Abfolge seiner Unterthemen sinnvoll ist. Aber ich kann mich zu der Art äußern, wie er versucht, uns das ganze mit seinem durchdachten und guten oder auch schlechten Schema verständlich rüberzubringen. Das verlangt keine Fachkenntnisse. Und jetzt zu unserer/meiner "nicht vorhandenen" Eigeninitiative: Wir saßen mindestens schon 10 Unterrichtsstunden an dem "Spiel", haben immer wieder aus eigener Kraft Dinge versucht, bei denen wir am Ende feststellen durften, dass sie unsinnig sind bzw. nicht so funktionieren, wie wir wollen. Natürlich haben wir dann auch andere Leute gefragt, Mitschüler und Lehrer, welche uns dann mehr oder weniger bei kleineren Fehlern helfen konnten. Nur mal ein Beispiel: Wir haben unseren Lehrer zur Hilfe geholt, um zu schaffen, dass sich die beiden Shapes "berühren" können, also nich einfach durch sich durch flitzen. Er hat es auf uns so erklärt, wie es auch im Programm steht. Später durften wir dann von einem Mitschüler, der sich ganz gut mit Porammierung usw. auskennt, erfahren, dass man das schlauererweise mit dem Radius des Kreises und nach jedem Schritt hätte prüfen müssen. Schon blöd, finde ich. Und Leute, ich habe meine Probleme ausfürhlich geschildert, aber hab ich dazu schon Lösungsansätze gehört? Ich glaube nur einen. Und ohne menschliche Hilfe geht das alles leider nicht so gut, nur Theorie bringt einem Einzelnen dann doch nichts. Soll heißen, dass ich mich schon ausführlicher damit beschäftigt habe (Tuts...)! Ja ich weiß, muss blöd rüberkommen, wenn ich einfach so frage ob das nicht jemand machen kann, aber erstens ist die Jugend heutzutage faul^^ und zweitens komm ich alleine einfach nicht mehr weiter (mein "Freund" kümmert sich überhaupt nicht um die ganze Sache). Und außerdem, fragen schadet doch nichts, oder? Aber war ja irgendwie klar, dass man dann erstmal solche beiträge um die Ohren gepfeffert bekommt. Was bringts denn? Nichts! Es ist nich produktiv. Anstatt einfach auf die Fragen, Probleme einzugehen und meine Frage "macht das jemand?" zu ignorieren oder kurz und bündig zu sagen "Nein, mach ich nicht".... MfG PS: Codekrams folgt gleich! |
Re: Problem mit "Programm" für die Schule
Delphi-Quellcode:
[edit=mkinzler]Delphi-Tag ergänzt. das nächste Mal bitte selber machen. Mfg, mkinzler[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg; type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Image1: TImage; procedure keypress(Sender: TObject; var Key: Char); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.keypress(Sender: TObject; var Key: Char); var d:real; begin d:=sqrt((shape1.Left - shape2.Left)*(shape1.Left - shape2.Left)+(shape1.Top - shape2.top)*(shape1.Top - shape2.top)); if (key ='s') and (d>=shape1.width) then shape1.top:=shape1.top +10; if (key ='w') and (d>=shape1.Width) then shape1.top:=shape1.top -10; if (key ='d') and (d>=shape1.Height) then shape1.Left:=shape1.Left +10; if (key ='a') and (d>=shape1.Height) then shape1.left:=shape1.left -10; label1.Caption:=inttostr(shape1.top); label2.Caption:=inttostr(shape1.Left); if (key ='k') and (d>=shape1.width)then shape2.top:=shape2.top +10; if (key ='i') and (d>=shape1.width)then shape2.top:=shape2.top -10; if (key ='l') and (d>=shape1.Height)then shape2.Left:=shape2.Left +10; if (key ='j') and (d>=shape1.Height)then shape2.left:=shape2.left -10; label3.Caption:=inttostr(shape2.top); label4.Caption:=inttostr(shape2.Left); end; procedure TForm1.FormCreate(Sender: TObject); var d:real; begin d:=sqrt((shape1.Left - shape2.Left)*(shape1.Left - shape2.Left)+(shape1.Top - shape2.top)*(shape1.Top - shape2.top)); if (d>=shape1.width) or (d>=shape1.height) then showmessage ('tagged!'); end; end. |
Re: Problem mit "Programm" für die Schule
Zitat:
Mist zu spät. |
Re: Problem mit "Programm" für die Schule
Wir sollten mal die Schärfe rausnehmen, und uns um das Problem kümmern.
Zitat:
Das gehört woanders hin.
Delphi-Quellcode:
Ist schon sehr schön, aber ich würde das mit einer case Anweisung machen. Ist aber Geschmackssache.
procedure TForm1.keypress(Sender: TObject; var Key: Char);
var d:real; begin d:=sqrt((shape1.Left - shape2.Left)*(shape1.Left - shape2.Left)+(shape1.Top - shape2.top)*(shape1.Top - shape2.top)); if (key ='s') and (d>=shape1.width) then shape1.top:=shape1.top +10; if (key ='w') and (d>=shape1.Width) then shape1.top:=shape1.top -10; if (key ='d') and (d>=shape1.Height) then shape1.Left:=shape1.Left +10; if (key ='a') and (d>=shape1.Height) then shape1.left:=shape1.left -10; label1.Caption:=inttostr(shape1.top); label2.Caption:=inttostr(shape1.Left); if (key ='k') and (d>=shape1.width)then shape2.top:=shape2.top +10; if (key ='i') and (d>=shape1.width)then shape2.top:=shape2.top -10; if (key ='l') and (d>=shape1.Height)then shape2.Left:=shape2.Left +10; if (key ='j') and (d>=shape1.Height)then shape2.left:=shape2.left -10; label3.Caption:=inttostr(shape2.top); label4.Caption:=inttostr(shape2.Left); end; Den Code zur Berechnung des Abstandes würde ich aber in eine Funktion auslagern, da du ihn für die Kollisionsprüfung nochmal brauchst. also: im private Abschnitt die Funktion deklarieren, und dann im Code Bereich erstellen.
Delphi-Quellcode:
jetzt kannst Du die in deiner keypressed prozedur verwenden:
...
private function CalcAbstand: real; ... Implementation .... function TForm1.CalcAbstand: real; begin result := sqrt((shape1.Left - shape2.Left)*(shape1.Left - shape2.Left) + (shape1.Top - shape2.top)*(shape1.Top - shape2.top)); end;
Delphi-Quellcode:
und die Kollisionsprüfung gehört an's Ende der keypressed Prozedur erneut hin.
procedure TForm1.keypress(Sender: TObject; var Key: Char);
var d:real; begin d := CalcAbstand; ... end; Allerdings ist deine Prüfung genau verkehrt herum.
Delphi-Quellcode:
Dann sollte es klappen.
...
d := CalcAbstand; if (d < shape1.width) or (d < shape1.height) then // hier die Bedingung richtig schreiben showmessage('tagged!'); end; |
Re: Problem mit "Programm" für die Schule
Also keine Ahnung was ich da mit irgendwelchen Kugeln machen wollt oder was auch immer. Also wenn ich mich zurück in meine Schulzeit erinnere (auch wenn wir da noch TP 7 hatten) hatten wir auch ne Aufgabe 1 Spiel zu programmieren, dabei geht es eigentlich nicht darum eine neues Spiel zu erfinden, sondern eigentlich die Tätigkeiten auszuüben, die zum Programmieren gehören. Also mein Tip für euch, weil es ja anscheinend schon eng wird, tritt deinem "Kumpel" in den A... und schnappt euch das gute alte Packman. Schafft euch ein zufällig erstelltes Spielfeld (bestehend aus Gold und Minen ( hier solltet ihr ein wenig Gehirnschmalz mal reinstecken für den Punkt: was wenn nur noch Minen da sind) und wann ist ein Level zu Ende).
Die Grundlagen für die Bewegung habt ihr schon, so wie ich das sehe, Punktezählsystem und Lebenssystem und schon seit ihr fertig. Damals habe ich so eins im Textmodus in 10h geschrieben, wir hatten aber auch einen guten Lehrer also plant mal etwas mehr Zeit ein. Ich denke das sind schon ziemlich gute Tips für dich wie man es machen kann. Ob du es machst k.A. ist auch nicht meine Note und wie es rüber kommt, suchst du noch eine Methode, "wo kann ich abschreiben, ohne dass es auffällt" mit deiner Frage, ob es jemand mal "schnell" machen, anstatt auf die einfachst zu kommen, es selber machen. MfG BAMatze |
Re: Problem mit "Programm" für die Schule
Zitat:
Ich glaube, das Beste wäre, wenn ich jetzt erstmal an meinem "Spiel" dranbleibe. Sich jetzt an etwas komplett Neues ranzusetzen, um das nur halb fertig bzw. halb richtig zu haben am Ende, wäre eher unproduktiv meiner Meinung nach. Da habe ich lieber ein eher simples Programm, welches dafür anständig läuft und fertig ist. Aber trotzdem danke für den Tipp/Denkanstoß :wink: Und jetzt noch einmal zum eigentlichen Thema: Wollte es eben mal so wie von thkerkmann geschrieben ausprobieren, allerdings gibt Lazarus die Fehlermeldung "Die Datei "" konnte nicht gefunden werden. Überprüfen sie den Suchpfad in Projekt->Compilereinstellungen...->Andere Unitdateien." raus, wenn ich auf das grüne Pfeilchen klicke... Naa gut, abgesehen davon, hat jemand vielleicht eine sinnvolle Idee, die man auch ohne großen Aufwand und ohne viel Fachwissen, vielleicht mit ein wenig Hilfe von jemandem, mit in das Tickspiel einbauen kann? MfG :) |
Re: Problem mit "Programm" für die Schule
Was du noch gebrauchen könntest, ist eine Procedure setFaenger, die nach bestimmten Intervall den Gegner wechselt. Wer soll denn den Punkt bekommen, wenn kein Spieler als Fänger ausgewählt ist. :wink:
Wenn der Spieler gefangen wurde gibt es für den Fänger ein Punkt und dann muss die Sperre wieder gelöst werden, das müsstest du auch noch einbinden. Die Bewegung der Kreise musst du auch noch ändern, derzeit ist es nur möglich eine Kugel zu steuern. Wie man die Steuerung trennen könnte, weiß ich nicht. Vielleicht könnte man für jede Kreissteuerung eine Procedure schreiben und die in verschiedene Threads einordnen. Aber wie man nun ein Onkeypress Ereigniss für mehrere Tasten macht ist die Frage, denn es wird ja immer nur ein Key übergeben. |
Re: Problem mit "Programm" für die Schule
Erst einmal DANKE für die jetzt doch noch ankommende Hilfe :)
Soo...Also, ich bin jetzt erst einmal so weit, dass ich die Shapes mit den Tasten steuern kann und sobald sie sich berühren, kommt die Message. Wie aber kann ich denn den Fänger "setten"?? Und wie weise ich dann diesem genau eine Punktzahl zu? Also, dass es für denjenigen immer einen Punkt dazugibt, kriege ich glaube ich auch noch hin...aber wem oder was genau müsste ich das zuordnen? Und zweitens, wie kann ich die beiden Shapes wieder auf ihre ursprüngliche Position springen lassen, sobald sie sich berührt haben und man die Message weggeklickt hat? Erst einmal so viel, wenn das dann klappt, kann man immer noch weitersehen^^ Hoffe mal, es ist einigermaßen verständlich ausgedrückt :P MfG |
Re: Problem mit "Programm" für die Schule
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal was geschrieben.
Delphi-Quellcode:
Leider weiß ich noch nicht, wie man die Kreise zur gleichen Zeit steuern kann. Vielleicht mit GetAsyncKeystate() und einer Procedure die immer wieder aufgerufen wird.
...
var akSp: integer=1; pkSp: array [1..2] of integer; run: boolean=true; implementation procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); VAR Select:integer; begin if Run=true then begin case Key of 's': shape1.top:=shape1.top+10; 'w': shape1.top:=shape1.top-10; 'd': shape1.Left:=shape1.Left+10; 'a': shape1.left:=shape1.left-10; 'k': shape2.top:=shape2.top+10; 'i': shape2.top:=shape2.top-10; 'l': shape2.Left:=shape2.Left+10; 'j': shape2.left:=shape2.left-10; end; rungame; end Else begin Select:=MessageDlg('Sie wurden gefangen! Möchten Sie weiter spielen?',mtConfirmation,[mbYes,mbNo],0); case Select of mrYes: begin Shape1.Top:=128; Shape1.Left:=144; Shape2.Top:=128; Shape2.Left:=416; Run:=true; end; mrNo: close; end; end; end; procedure TForm1.RunGame; var abstand:real; x1,y1,x2,y2:real; begin x1:=Shape1.Left+Shape1.Width/2; x2:=Shape2.Left+Shape2.Width/2; y1:=Shape1.Top+Shape1.Height/2; y2:=Shape2.Top+Shape2.Height/2; abstand:=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)))-105; if abstand<0 then begin pkSp[akSp]:=pkSp[akSp]+1; Label4.Caption:=inttostr(pkSp[1])+':'+inttostr(PkSp[2]); run:=false; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin akSP:=setGegner(akSp); end; function TForm1.setGegner(aksp:integer):integer; begin if aksp=1 then result:=2 else result:=1; Label3.Caption:='Spieler '+inttostr(result)+' du bist dran!'; end; |
Re: Problem mit "Programm" für die Schule
Also mein Programm habe ich soweit jetzt erst einmal fertig.
Könntest du deinen Ansatz vielleicht noch einmal uppen, also auch Unit.pas usw? Dann könnte ich mich da, wenn ich Zeit habe, mal reingucken und evtl. was dazulernen. Wenn du das nicht möchtest, ist auch nicht so schlimm^^ Aber vielleicht könntest du dann dennoch versuchen, zu erklären, was die Zeilen ungefähr aussagen bzw. tun? Wäre echt nett :) MfG |
Re: Problem mit "Programm" für die Schule
Liste der Anhänge anzeigen (Anzahl: 1)
Ich stell dir mal das komplette Project rein, dann kannst du das mal durcharbeiten. Aber erklären kann ich dir nichts, da sind keine besonderen Befehle dabei, das müsstest du alles können schließlich ist das Grundwissen. :roll: Ich weiß zwar nicht wie viel ihr im Unterricht schon durchgenommen habt, aber meinem Infolehrer wäre das für 10 Stunden zu wenig.
|
Re: Problem mit "Programm" für die Schule
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz