Laden...
S
Shaddow30
myCSharp.de - Member
2
Themen
6
Beiträge
Letzte Aktivität
vor 4 Jahren
Dabei seit
08.04.2017
Erstellt vor 4 Jahren

Hallo liebe C# Community,

ich stehe hier vor einer für mich großen Herausforderung, vorweg ich bin ein Hobbyentwickler und habe mir vieles mit großer Freude selber beigebracht weiß aber leider noch längst nicht alles!

Unzwar habe ich mir eine MouseKeyHook Library runtergeladen und mir InputSimulator für das simulieren von mausclicks besorgt.
Beides NuGet Pakete.

Ich habe mir ein script erstellt das, während ich meine linke Maustaste gedrückt halte, sehr schnell viele linke mausclicks quasi spammt, und sobald ich loslasse, damit aufhört. Mein Problem ist, dass das manchmal hängen bleibt.

Mit dem MouseKeyHooks habe ich mir ein Mouse Button Down und Mouse Button Up Event erstellt, dann habe ich mir eine int variable erstellt die immer +1 zählt sobald die maustaste gedrückt wird und -1 sobald sie losgelassen wird. Mir ist aufgefallen dass in den Situationen, wo die Maustaste hängen bleibt meine variable plötzlich zwischen 3 und 2 hin und herspringt, das heißt ein up event wurde ausgelassen oder nicht registriert.

Ich habs auch schon mit GetAsyncKeystate GetKeystate und anderen Hook Libs probiert. Ich komme immer zum selben Ergebnis. Mit Autohotkey habe ich sowas ähnliches programmiert, da hatte ich einen Befehl "GetKeyState" wo ich einen Parameter hinzufügen konnte um nur den physischen Status zu lesen. Also ob der Nutzer die Maustaste auch wirklich gedrückt hat oder nicht.
https://www.autohotkey.com/docs/commands/GetKeyState.htm

Da frage ich mich ob das nicht auch mit C# möglich sei, im Internet habe ich leider nichts hilfreiches gefunden.

Meine Frage ist nun wie kann ich das umgehen bzw lösen? Was ist da genau das Problem bzw warum passiert das überhaupt?

Vielen Dank und freundliche Grüße
Shaddow

Erstellt vor 7 Jahren

Hallo!

Damit sind dann meine Fragen für's erste beantwortet. Vielen Dank euch beiden.

Dass es kompliziert ist wusste ich schon von vornehinein, aber gerade deswegen interessiert mich das Thema.

Grüße

Erstellt vor 7 Jahren

Mit dem zurückgeben mehrerer Werte kann ich die Dichte oder das Verhältnis bestimmen, bei 2 Werten ist die Chance immer bei 50%, aber vielen Dank für den Tipp.

Im Script habe ich derzeit die Leerzeichen als Weg bestimmt. Eine Abfrage für den Benutzer existiert noch nicht, da ich noch keinen Benutzer programmiert habe. Ich scrolle derzeit nur mit W A S D in die jeweilige Richtung um 1 Block.

Dein Satz zum Thema Straßennetzwerk ist eigentlich genau das was ich suche und wo mein Problem liegt. Ich schaffe es zwar Wege zu generieren, diese endlos lang zu machen, jedoch schaffe ich es nicht, diese Wege oder das Straßennetzwerk von jeder Richtung aus kommend gleichbleibend zu generieren. Wie im ersten Beitrag beschrieben, "Erst oben dann links != Erst nach links & dann nach oben" - das ist jedes mal mein Endergebnis. Leider.

Meine Angehensweise bisher war, vom x0, y0 Punkt aus Wege in alle Richtungen zu generieren, diese Wege haben dann eine gewisse Chance Verzweigungen, Enden oder Kurven zu bilden, dabei wird immer kontrolliert ob am nächsten Punkt bereits ein Weg existiert oder eben nicht. Jenachdem bricht er dann entweder ab oder geht weiter. Nur kann diese Angehensweise meiner Meinung nach nicht das gewünschte Ergebnis erbringen. Ich bin sehr erfreut über alle Infos die man mir dazu geben kann.

Freundliche Grüße

Erstellt vor 7 Jahren

Hallo!

vielen Dank euch, das hat mir schon mal etwas weitergeholfen.

Nun stellt sich mir noch die Frage, wie müsste ich die Sache angehen wenn ich die Wege etwas sinnvoller gestalten möchte. So dass wirkliche "Wege" existieren und nicht blos auf viel Glück ein Weg vorhanden ist, der dann aber irgendwann endet, und der Spieler dann keine Chance mehr hat sich weiter fortzubewegen. Mein derzeitiger Code zum testen:


    class Controller
    {
        private static int Seed = 1;

        private static int scale = 8;
        private static int density = 170;


        public static bool gameEnd = false;

        static byte GetTileNumber(int x, int y)
        {
            int seed = x ^ ~y;
            Random rnd = new Random(seed);
            return (byte)rnd.Next(0, 256);
        }


        static void Main()
        {
            int px = 0, py = 0;


            while (true)
            {
                Console.Clear();

                for (int x = 0; x < Console.WindowWidth / scale; x++)
                {
                    for (int y = 0; y < Console.WindowHeight / scale; y++)
                    {
                        if (GetTileNumber(x+px, y+py) < density)
                        {
                            for (int i = 0; i <= scale; i++)
                            {
                                Console.SetCursorPosition(x * scale, y * scale + i);
                                string text = "";
                                for (int j = 0; j < scale; j++)
                                {
                                    text += " ";
                                }
                                Console.Write(text);
                            }
                        }
                        else
                        {
                            for (int i = 0; i <= scale; i++)
                            {
                                Console.SetCursorPosition(x * scale, y * scale + i);
                                string text = "";
                                for (int j = 0; j < scale; j++)
                                {
                                    text += "#";
                                }
                                Console.Write(text);
                            }
                        }
                    }
                }
                ConsoleKeyInfo key = Console.ReadKey(true);
                if (key.Key.Equals(ConsoleKey.W))
                {
                    py--;

                }
                if (key.Key.Equals(ConsoleKey.S))
                {
                    py++;
                }
                if (key.Key.Equals(ConsoleKey.A))
                {
                    px--;
                }
                if (key.Key.Equals(ConsoleKey.D))
                {
                    px++;
                }

            }
        }

    }
Erstellt vor 7 Jahren

Hallo!

Vielen Dank schon mal für die freundliche Antwort.

Leider habe ich etwas sehr wichtiges vergessen zu erwähnen, unzwar ist die Map endlos in alle Richtungen. Gerade deswegen ist es eine Herausforderung für mich.

Durch eine Endlosegenerierung in alle Richtungen bekomme ich eine Fehlermeldung, deshalb die Sichtweitenbegrenzung und erst wenn man sich bewegt werden neue Objekte gespawned. Ähnlich wie in Minecraft nur eben 2D.

Ich werde das oben editieren.
Danke nochmals und Lg

Erstellt vor 7 Jahren

Hi,

ich habe vor kurzem C# gelernt, und erweitere mein Wissen dabei sehr gerne mit kniffligen dingen. Nun habe ich mir die Herausforderung gestellt, ein Minispiel zu entwickeln, das auf Zufallswerten aufbaut. Nach viel rumprobieren habe ich eine Map, die zufallsgeneriert wird und endlos sein soll, erschaffen können. Jedoch war mein Plan das alles über einen Seed zu machen. Was nicht ganz so funktioniert wie ich's gern hätte. Und zwar war meine Lösung zuerst viele Wege in verschiedene Richtungen zu machen, und das alles über einen Random-Generator zufallsgenerieren zu lassen. Die Map wird um 1 "Block" in die Richtung in die der Spieler geht erweitert (maximale Sichtweite).
Dabei ist das Problem leider, dass wenn der Spieler zuerst nach links geht und anschließend nach oben, die Map ganz anders generiert wird als wenn dieser zuerst nach oben und danach nach links geht. Ich habe ungefähr 2 Tage verschiedene Möglichkeiten durchprobiert, bin leider jedoch immer auf ähnliche Ergebnisse gekommen, aber es lässt mir keine Ruhe, deswegen wende ich mich nun an Euch.

Das ganze wird als ConsoleApp erstellt und dient wie gesagt rein zum erweitern meines derzeitigen Wissens.

Ich wäre für jeden Tipp, Angehensweise, oder Verlinkung zu etwas nützlichem (und eher noch auf Anfänger-Niveau) sehr dankbar!

Freundliche Grüße