Laden...

Forenbeiträge von BlackArtC# Ingesamt 29 Beiträge

14.09.2016 - 21:09 Uhr

Erstmal danke für die Antworten!

@unconnected

Wie lange hast du für dieses Problem gebraucht bzw. wie hast du dir da deine Strategie zurecht gelegt? Ich meine wie der Baum entsteht ist eigentlich sehr simpel, aber wie ich dann die Vierecke/Dreiecke für jeden Ast bekomme ist wieder ne andere Nummer.

@trib

Danke für den Link. Hab mir mal paar Einträge durchgelesen - sind echt gut und verständlich geschrieben, da kann man bestimmt mal die ein oder andere Sache programmieren (vor allem das verschlüsselungs Zeug)

13.09.2016 - 23:32 Uhr

Vielen Dank für die Antwort (Hab ne Englische PDF gefunden, das Buch ist leider ein wenig zu teuer für mich 😕).

Villt war meine Frage etwas unglücklich gestellt, ich versuche es nochmal:

  • Wenn ich ein vorhandenes Problem habe, wie du schon sagtest, z.B denn Pythagoras Baum wie gehe ich jetzt am besten vor, einen Algorithmus zu diesem Problem zu entwickeln. Muss man dafür einfach so Fit in Mathe sein das man sich die ganzen Formeln zurechtlegt und dann einfach im Code selbst verarbeitet oder kann man da auch als "normalo" Matheversteher sich alles Stück für Stück erarbeiten ohne gleich nen anderen Code als Referenz ran zuziehen?

Gruß

13.09.2016 - 22:24 Uhr

Hallo,

da ich jetzt seit paar Wochen als Anwendungsentwickler (Azubi) tätig bin, habe ich dementsprechend wieder angefangen zu programmieren. Dabei bin ich auch bei dem Thema Algorithmen hängen geblieben (und da kann man ja sehr sehr viel mit machen).

Habe schon auf ProjectEuler ein paar Aufgaben gelöst und auch hier aus dem Forum die ein oder andere Aufgabe "bearbeitet"(So Sachen wie Primzahl Generator, Fakultäten Generator, Dezimal in römische Ziffernfolge, alle Wörter von 1 - 999 auf englisch in Klarschrift ect). Nun komme ich aber an einen Punkt wo ich nicht mehr weiter komme. Ich würde gerne so Sachen wie "Conways Game of Life" oder den "Pythagoras Baum" - bzw. diverse Sortieralgorithmen programmieren, jedoch weiß ich nicht wie man sich da am besten einarbeitet. Was ich evtl. noch mit Brute Force lösen konnte, erfordert jetzt wohl mehr "Mathematik" bzw. Kenntnisse in Rekursiven Methoden ODER generell Wissen das ich einfach nicht habe.

Deswegen ist meine Frage: Wie arbeitet man sich am besten in diese Geschichte ein(und wie würdet Ihr eure ersten Überlegungen auf einem Blatt wiederspiegeln, Struktogramm ect?). Mir fällt es jetzt z.B nicht schwer zu verstehen wie ein Pythagoras Baum entsteht oder bis zu einem gewissen Level komme ich auch noch mit dem Mathe zurecht, jedoch gibt es dann einen Punkt wo ich kein Land mehr sehe. Natürlich fehlt es mir auch allgemein an Erfahrung in der Programmierung - beschäftige mich aber seit neustem gerne in meiner Freizeit mit solchen Themen.

Würde mich über Antworten freuen,

Grüße

25.04.2016 - 18:51 Uhr

Habe den Code jetzt auf das hier runter reduziert, und das Funktioniert auch super.
Falls es jetzt immernoch "unsauber" ist, muss ich mich wohl noch ne weile mit beschäftigen.


 foreach (var item in breakOutPosition)
            {
                if (ball.Collision(item))
                    ball.Turn(0);
            }
            breakOutPosition.RemoveAll(position => position.Intersects(ball.GetBallRec));

Danke für die Hilfe!

gruß

25.04.2016 - 15:07 Uhr

@LaTino Also mir ist klar das ich ohne i-- einen falschen Index anspreche, deswegen habe ich es ja auch rein geschrieben und in meinem Beispielcode mit den 2 Ausgaben "gezeigt".

Komisch kommts mir jetzt nicht umbedingt vor, da es ja so funktioniert wie ich es will.

Aber ich habe schon verstanden das man das nicht so machen soll.

Danke Coffeebean für den Link:)

Gruß

25.04.2016 - 14:29 Uhr

Hallo, also ich möchte mal jetzt behaupten das es eigentlich doch so läuft wie es soll z.B



List<int> Recs = new List<int>();

            Recs.Add(new int());
            Recs.Add(new int());
            Recs.Add(new int());
            Recs.Add(new int());

            Recs[0] = 1;
            Recs[1] = 2;
            Recs[2] = 2;
            Recs[3] = 1;

            for (int i = 0; i < Recs.Count; i++)
            {
                Console.WriteLine(Recs[i]);
                //Ausgabe: 1 2 2 1
            }



       for (int i = 0; i < Recs.Count; i++)
            {
                if (Recs[i] == 2)
                {
                    Recs.RemoveAt(i);
                    i -= 1;
                }
            }

            Console.WriteLine();

            foreach (var item in Recs)
            {
                Console.WriteLine(item); 
                //Ausgabe ohne i-=1 : 121
                // Ausgabe mit i-=1 : 11
            }

Also ausgelasen wird da ja nichts und wie man an der Ausgabe sehen kann, hat die Liste am ende 2 Objekte weniger. Versteht mich nicht falsch, ich befülle keine Liste und lösche sie im gleichen Zug wieder, ich vergleiche lediglich eine Position mit den Werten in meiner Liste und lösche diesen "Eintrag". Da alles von der Listengröße abhängig ist, wird sie nächstes mal auch weniger durchlaufen. Also tut mir leid wenn ich gerade den Fehler nicht verstehe 😕

**Edit

@CoLo

Wenn man bei deinem Code auch das i-=i macht, kommt bei mir am Ende ein Listen Count von 0 raus. Also wird alles gelöscht wie gewollt.



   List<string> list = new List<string>();
            list.Add("A");
            list.Add("B");
            list.Add("C");
            list.Add("D");
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
                list.Remove(list[i]); //list.RemoveAt(i); macht das Gleiche
                i -= 1;
            }

            Console.Title = Convert.ToString(list.Count); //Ausgabe 0

25.04.2016 - 13:26 Uhr

@Weismat danke für den Tipp, kannte ich vorher gar nicht ^^. Werde ich mir mal demnächst anschauen.

@CoLo Danke für deine Antwort, aber was ist jetzt genau fehlerhaft das sich die Liste ändert?
Es ist ja mein Ziel das die Liste sich ändert ^^ und so klappt es auch wie es soll 😃

25.04.2016 - 12:35 Uhr

Naja sagen wir du hast 5 Objekte in der Liste {A0,A1,A2,A3,A4};

Wenn du jetzt ne for schleife machst , i = 0 und du löschst diesen Wert, dann sieht deine Liste so aus: {A1,A2,A3,A4}. Das bedeutet wenn der Ball "theoretisch" mit A0 und A1 kollidiert, würde A1 erst im nächsten Schleifen durchlauf gelöscht werden, da er im vorherigen ja auf 0 gerutscht ist und somit ausgelassen wird, da i ja schon 0 war. Deswegen nochmal i auf null und alles überprüfen(wird auch nur bei einer Kollision ausgeführt).

Habe das gestern als Konsolenanwendung programmiert um zu schauen wie ich das am besten mache und dort war es zumindest so, dass manchmal noch ein Wert in der Liste stand, obwohl dieser raus sollte. Aber keine Garantie das ich das richtig verstanden habe.

25.04.2016 - 12:06 Uhr

Okay Leute, sorry für den Stress aber ich habe mein Fehler gefunden. Die "Rectangles" wurden einmal mit festen Werten der breakOutPosition zugewiesen und beim zeichnen wurden dann immer wieder neue Rectangles angelegt. Somit tritt dann eben immer das ein, was bei mir das Problem ist.

Wenn ich jetzt in der Draw Methode die breakOutPosition als Parameter übergebe, klappt es wunderbar.


 for (int j = 0; j < breakOut.Count; j++)
            {
                breakOut[j].DrawBricks(spriteBatch, new Vector2(j * 128, 0),breakOutPosition[j]); //new Rectangle(j * 128, 0, 128, 16));            
            }

Hatte bis jetzt noch nie so Projekte mit mehreren Klassen wo alles zu allem einen Bezug hat.

Trotzdem danke!!

25.04.2016 - 11:54 Uhr

Hallo Leute, erstmal danke für die Antwort. Damit es ein wenig klarer wird ich benutze Monogame für die Entwicklung eines kleinen Spieles. Das sind die relevanten Codezeilen(habe es jetzt ohne "2D" Array gemacht):

       
for (int i = 0; i < graphics.GraphicsDevice.Viewport.Width/128; i++)
            {
                breakOut.Add(new Bricks());
                breakOutPosition.Add(new Rectangle());

                breakOut[i].LoadBricks(Content, "BreakOutTile1");
            }


    for (int i = 0; i < breakOut.Count; i++)
            {
                breakOutPosition[i] = breakOut[i].SetRectangles(i);
                
            }


for (int i = 0; i < breakOut.Count; i++)
            {
                if (ball.Collision(breakOutPosition[i]))
                {
                    ball.Turn(0);
                    breakOutPosition.Remove(breakOutPosition[i]);
                    breakOut.Remove(breakOut[i]);

                    if (i > 0)
                        i -= 0;
                }

So in der ersten Code Spalte füge ich der breakOut und breakOutPosition List jeweils 10 "Typen" zu. Mit breakOut_.LoadBricks lade ich dann die Grafik welche dargestellt werden soll.

In der zweiten Codespalte, weise ich der breakOutPosition Liste die Rectangles der erstellten breakOut "Grafiken" zu. (Also nach meinem Wissen nimmt eine List nur einen Typ an, deswegen brauche ich nochmal eine Liste für die Rectangles - die Rectangles sind einfach nur zur Kollisionerkennung vorhanden, da man das mit einfachen Texturen anscheinend nicht machen kann).

Die dritte Codespalte prüft den "Ball" auf Kollision mit einem der Rechtecke welche sich in der breakOutPosition Liste befindet. Dann prallt der Ball ab und die Objekte der beiden Liste werden an der i.ten Stelle gelöscht. Das i-=1 soll i einfach nur verringern, da die Objekte ja jetzt nach unten rutschen und ich nichts verpasse mit dem prüfen.

Was jetzt mein eigentliches Problem ist:

Egal wo mein Ball Objekt aufprallt, es wird immer das letzte Objekt gelöscht und dementsprechend rutschen die Elemente in der Liste immer weiter "nach oben". Also brauche ich irgendeinen "Platzhalter" damit die Objekte auch richtig gezeichnet werden.

Hier hat der Grüne "Ball" den 4. Balken getroffen, aber der 5. ist verschwunden. Eigentlich sollte der 4. verschwinden und der 5. bleiben.

Ich hoffe ihr versteht was ich meine,

Gruß

24.04.2016 - 22:09 Uhr

Hallo Leute,

ich habe momentan 2 Klassen in meinem Projekt(Main Klasse und eine Bricks Klasse).

In der Mainklasse erzeuge ich eine List<Bricks> welcher ich dann mehrere Klassenobjekte hinzufüge und dann per for Schleife Werte festlege.

z.B

      
 for (int i = 0; i < 10; i++)
            {
                for (int j= 0; j < 4; j++)
                {
                    FirstStage[i, j] = new Bricks();
                    FirstStage[i, j].LoadBricks(this.Content, "BreakOutTile1");

                }
            }

Das klappt auch soweit gut. Jetzt muss ich aber die Position der Bricks Objekte überprüfen und wenn diese mit meiner eingestellten Position übereinstimmen, sollen diese Objekte gelöscht werden und nichtmehr angezeigt werden.

Jetzt dachte ich mir ich speicher die Position nochmal in einer seperaten Liste, überprüfe diese dann mit der eingestellten Position und lösche dann an der "i" Stelle jeweils aus der Positions Liste und aus der FirstStage Liste die Werte.

Gibt es da ne bessere Möglichkeit, klappt das so oder habe ich grad ne Denkblockade?

Vielen Dank, Gruß

**EDIT habe es hinbekommen, jedoch werden jetzt alle Werte aufeinmal gelöscht, wenn diese nicht von hinten einzelnd gelöscht werden. Also wenn ich den 0. Index lösche, wird alles danach auch gelöscht 😕

18.04.2016 - 11:57 Uhr

Hallo,

danke für deine Antwort 😃.

Konnte mir das "Professionell Entwickeln mit C#" als Leseprobe in meinen Buchladen bestellen und kostenlos antesten 😃. Das zweite genannte Buch, ist anscheinend dann doch schon zu Oversized für einen frischling. Trotzdem danke für die Mühe !

Gruß

16.04.2016 - 21:24 Uhr

Hallo,

wollte mal Wissen ob die zwei unten genannten Bücher etwas taugen (Beide auf Amazon erhältlich):

C# Game Programming: For Serious Game Creation
C# 6 mit Visual Studio 2015: Das umfassende Handbuch: Spracheinführung, Objektorientierung, Programmiertechniken(Englisch)

Suche momentan ein Buch für die 2D Spieleentwicklung mit C# und ein allgemeins Buch welches C# ein bisschen "Fortgeschrittener" behandelt.

Villt. könnt Ihr mir ja auch Bücher empfehlen, gerne auch in Englisch.

Grüße

15.04.2016 - 20:54 Uhr

Hi,

ich weiß und kenne auch viele andere Ansätze aber das Prinzip ist für mich grad ein wenig schwer zu begreifen.

Der Wert den Sleep bekommt(start + MS_PER_FRAME - getCurrentTime()) ist er dafür da konstante Sleep Aufrufe zu erreichen also z.B brauch die Schleife im ersten Durchlauf 2 Sek und im Dritten nur eine, dass die Schleife beim nächsten mal eine Sekunde "länger" braucht oder wie?

Gruß

14.04.2016 - 15:36 Uhr

Ich habe grad gemerkt das ich das auf die genannte While Schleife bezogen habe.

Da ist ja das Problem das die Schleife theoretisch von nem leistungsstarken CPU schneller durchlaufen wird als von nem schwachen, also muss man das ja irgendwie im Spiel selbst ausgleichen das es überall ne konstante >Frame Rate hat.

Und da arbeitet man ja dann mit der DeltaTime welche am Ende mit den Positionen ect verrechnet wird. Bin aber extrem neu auf diesem Gebiet xD

14.04.2016 - 14:13 Uhr

Hey super danke (:

Hast du dein Spiel auch in Abhängigkeit der Zeit gemacht? Also das es immer konstant läuft?

14.04.2016 - 13:22 Uhr

Hehe danke für den Tipp mit dem doppelten Puffer, wusste gar nicht das es sowas gibt(Das flackern hat mich schon verrückt gemacht).

Space Shooter sind immer gut, würde ich mir falls du es irgendwann posten solltest gerne durchlesen 😄

14.04.2016 - 12:52 Uhr

Danke für die Antwort (:.

In Anbetracht der Spielgröße, werde ich das wohl mit dem Timer Event machen. Ne Game Loop in C# Forms zu Implementieren ist mir dann doch zuuuu extrem. Da greif ich dann später lieber gleich zu XNA/Mono 😛

13.04.2016 - 20:41 Uhr

Vielen Dank,
hab mir ein paar Videos angeschaut. Sieht echt knackig aus 😕

13.04.2016 - 17:13 Uhr

Danke (: Ich denke mal Delegates sind dann die Events welche ich brauche, oder?

13.04.2016 - 16:27 Uhr

Hi,

also da in einer Win Forms Anwendung an sich keine "Update" Methode vorhanden ist, muss ich ja praktisch das Zeichnen meiner Figur, die Position, die Kollisionserkennung ect. immer aktuell halten.

Momentan mache ich das alles (Zeichnen, Kollisionserkennung, bestimmen der Position)
wenn ich eine Richtungstaste drücke. Wenn ich z.B keine Taste drücke würden sich meine Gegner nicht mehr bewegen, da die ganzen Berechnungen ja erst ab Tastendruck beginnen.

Also brauche ich eine Funktion die im Hintergrund arbeitet und synchron zu meinem eigentlichen Programm läuft. Desweiteren kennt man es ja das die Oberfläche gefriert, wenn ein Prozess "zu lange braucht".

Deswegen würde ich gerne Wissen wie man das am besten realisiert (ich kenne bis jetzt nur Backgroundworker, Threading und Timer).

Gruß

13.04.2016 - 16:13 Uhr

Hallo,

ich programmier momentan ein kleines Minigame als Win Forms Anwendung aber stehe grad vor einem Problem. Ich möchte das Berechnen der Positionen(Spieler, Gegner), das überprüfen auf Kollision und das Zeichnen verlagern, da ich in meinem Programm alles abarbeite wenn ich eine Taste drücke.

Jedoch habe ich keine Erfahrung in sowas. Bis jetzt würde mir nur der Backgroundworker, der Timer und Threading einfallen, aber was ist für sowas am einfachsten umzusetzen?

Hoffe Ihr könnt mir helfen,

Gruß

25.03.2016 - 15:08 Uhr

Vielen Dank,

wenn ich mit meinem Buch fertig bin, werde ich mir das mal genauer anschauen 😄

19.03.2016 - 23:55 Uhr

Ich habe momentan "Jetzt lerne ich C# von Dirk Louis", lohnt es sich da dein vorgeschlagenes Buch zu kaufen?

18.03.2016 - 17:52 Uhr

Danke für die Antworten,

also werde ich wohl bis September nur auf C# konzentrieren und paar Bücher/Internetbeiträge durchlesen 😄.

18.03.2016 - 11:48 Uhr

Hallo bredator,

leider muss ich wohl oder übel C#,Java (Android Development Kit) und SQL für meine Arbeit
können . Da meine Ausbildung zum Fachinformatiker auch erst im September startet, würde ich gerne zumindest grundlegende Sachen drauf haben.

Hab mir jetzt noch ein "gutes" Buch zu SQL(brauch was in der Hand zum lesen) bestellt und werde das auch durcharbeiten.

Auf Android Basis konnte ich zumindest mal per Button die IMEI und den Provider auf meinem Handy anzeigen lassen c:

17.03.2016 - 22:12 Uhr

Vielen Dank für eure Antworten. Dann werde ich bis zur Ausbildung wohl felissig lernen.
SQL und Java müssen ja auch noch rein 😕

Grüße

17.03.2016 - 11:49 Uhr

Vielen Dank für die Antworten !!

Würde es bei meiner "Erfahrung" Sinn machen bzw. würde es was bringen wenn ich nebenher noch Unity lerne(Unity würde am nähsten liegen da ich bis jetzt nur gutes von dieser Engine gelesen habe und diese auch in C# ist)?

Hab momentan keine Ahnung was ich in welcher Frequenz lernen soll und was Sinn macht.

17.03.2016 - 11:09 Uhr

Hallo Leute,

mich würde mal Interessieren ob man zu Doof zum programmieren sein kann.
Ich lerne seit 2 Wochen wieder C# und Java. Dazu muss ich sagen das ich eine zweite Ausbildung als Fachinformatiker anfangen werde und davor schon eine elektronische Ausbildung mit nem 2er Schnitt abgeschlossen habe (also ganz Dumm dürfte ich nicht sein).

Ich interessiere mich wirklich sehr für die Materie, sowohl für die normale Softwareentwicklung als auch für die 2D-Spieleentwicklung. Gestern wollte ich dann ein Programm schreiben, welches einen Satz in einem string speichert, ihn splittet, in ein Array schreibt und diesen dann per Random vertauscht ausgibt. Es hat funktioniert -> jedoch gab es auch doppelte Wörter. Nach 2-3 Stunden googlen/ausprobieren hat dann auch das sortieren sowie das löschen doppelter Werte geklappt.

Was jetzt die eigentliche Frage ist: Ich erkenne zwar das was getan werden muss, tu mich jedoch schwer es richtig umzusetzen. Bei Tutorials oder Büchern kann ich wirklich gut folgen und habe auch oft AHA Effekte, aber bei diesem Programm hatte ich die totale Kopf Blockade. Muss ich jetzt davon ausgehen das ich einfach nicht das gewisse Etwas habe um gescheit zu programmieren, oder hat das einfach mit meinem geringen Wissen zu tun?

Hoffe Ihr könnt mir ernst gemeinte Antworten geben.

Gruß,
BlackArt