Pygame Vampire Survivors?

Hallo ich programmiere gerade ein Spiel in Pygame das dem Spiel Vampire Survivors ähnelt ich habe aktuell das problem das Problem das wenn der spieler auf die Gegner hinzu läuft die Gegener nach hinten verschoben werden staat nach vorn weil.

Also aktuell wenn ich stehe laufen die Gegner auf mich zu.

Und wenn ich von den Gegnern weg laufe werden sie aus dem Screen geschoben.

Aber wenn ich auf sie zu laufe werden sie auch aus dem Screen geschoben.

Obwohl sie dann normal laufen sollen als ob der spieler steth hier der wichtige code:   def update(self, dt, player, screen_width, screen_height):

    if not self.collided_with_enemy and self.is_visible:

      dx = player.x - self.x

      dy = player.y - self.y

      distance = max(1, pygame.math.Vector2(dx, dy).length())

      direction = pygame.math.Vector2(-dx / distance, -dy / distance)

      player_rect = pygame.Rect(player.x, player.y, player.hitbox_width, player.hitbox_height)

      enemy_rect = pygame.Rect(self.x, self.y, self.hitbox_width, self.hitbox_height)

      if player_rect.colliderect(enemy_rect):

        player.handle_collision()

        self.speed = 0

        return

      if dx != 0 and dy != 0:

        dx = 0

        dy = 0

      speed_multiplier = self.speed * dt

      if player.is_moving:

        speed_multiplier *= 0.5

      # Anpassung der Bewegungsrichtung basierend auf dem Spielerstatus

      if player.is_moving:

        self.x -= direction.x * speed_multiplier

        self.y -= direction.y * speed_multiplier

      else:

        self.x += direction.x * speed_multiplier

        self.y += direction.y * speed_multiplier

      self.x = max(-self.hitbox_width, min(self.x, screen_width))

      self.y = max(-self.hitbox_height, min(self.y, screen_height))

      self.animation_timer += dt

      if self.animation_timer >= self.animation_speed:

        self.animation_timer = 0

        self.current_frame = (self.current_frame + 1) % self.animation_frames

      # Anpassung der Geschwindigkeit basierend auf der Bewegungsrichtung des Spielers

      player_direction = pygame.math.Vector2(player.x - self.x, player.y - self.y)

      player_distance = max(1, player_direction.length())

      player_direction = player_direction.normalize()

      dot_product = player_direction.dot(direction)

      if dot_product > 0.5:

        # Spieler bewegt sich dem Gegner entgegen

        self.speed = self.original_speed + 100

      else:

        # Spieler bewegt sich vom Gegner weg

        self.speed = self.original_speed - 100

    else:

      self.x += self.direction * self.speed * dt

      self.collided_with_enemy = False

    for enemy in enemies:

      if check_enemy_collision(player, enemy):

        break

Java, JavaScript, Minecraft, C Sharp, Programmiersprache, Python, Python 3, Unity, Pygame
Wo schlagt ihr nach, wenn ihr euch nicht auskennt beim Programmieren?

Hallo Leute, ich will nur Fragen, was ihr macht, wenn ihr nicht weiter wisst bei einem Projekt, während ihr programmiert. 

Weil ich möchte programmieren und ich möchte meiden Internet Seiten (die mit fertig geschriebenen) und YouTube Tutorials zu verwenden, während ich programmiere, da dort die Codes fertig geschrieben sind und ich sie nicht komplett abschreiben möchte, aber ich könnte mir den Code zumindest durchlesen.

Ich würde lieber im Internet die offizielle Dokumentationen der Programmiersprachen zur Hand nehmen und wenn es wirklich ein spezifisches Problem ist, könnte ich diese oben genannten Methoden verwenden, die ich normalerweise Meiden würde und wahrscheinlich auch Foren wie auf Reddit und Stack Overflow verwenden (obwohl mir Stack Overflow immer sehr unsympathisch wirkt).

Mir ist es bewusst, dass das alles Selbstverständlich ist sowas zu tun, aber in der Schule wurde uns sowas nicht so gelehrt sowas zu machen, sondern uns wurden die Zetteln/Word Dateien gegeben, mit Trockenen Erklärungen und meistens stumpfes Auswendiglernen. Die Aufgaben, die uns die Professoren geben sind recht unverständlich und trotz das wir sie Fragen stellen konnten, haben sie niemanden beim Programmieren geholfen, sowie als wollen sie uns dazu bringen das Programmieren zu hassen.

Versteht mich nicht falsch, ich finde Programmieren trotzdem interessant und will es auch erlernen, aber das was man in der Schule lernt ist nichts. Wir haben dort nie wirklich was mit GC oder Memory Allocations gehabt, sondern haben meistens oberflächlich mit VS 2019 mit C# gelernt. Die Sprache ist eigentlich recht verständlich, aber in der Schule war es eben recht schmerzhaft zu lernen.

Programmiersprachen die ich lernen möchte sind C# und Python zurzeit. In der Zukunft auch Rust, aber das würde ich später lernen.

Wie ist es bei euch so?

Danke LG

Software, App, Programm, Webseite, programmieren, C Sharp, Entwicklung, Programmiersprache, Python, Softwareentwicklung, Rust, Entwicklertools
C# Was habe ich falsch gemacht?

Hier der Code vorab:

using System;
namespace Test_2
{
  class Program
  {
    static void Main(string[] args)
    {
      string antwort;
      bool antwortOk;
      do
      {
        Console.WriteLine("Guten Tag Herr Baumann, wollen sie meinen roboter starten? [Ja|Nein]");
        antwort = Console.ReadLine();
        antwortOk = antwort.ToLower() == "ja" || antwort.ToLower() == "nein";
        if (!antwortOk)
        {
          Console.WriteLine("Bitte geben Sie Ja oder Nein ein");
        }
      } while (!antwortOk);
      if (antwort.ToLower() == "ja")
      {
        string antwortRobo1;
        bool antwortOkRobo1;
        do
        {
          Console.WriteLine("Ist die Wand da?? [Ja|Nein]");
          antwortRobo1 = Console.ReadLine();
          antwortOkRobo1 = antwortRobo1.ToLower() == "ja" || antwortRobo1.ToLower() == "nein";
          if (!antwortOkRobo1)
          {
            Console.WriteLine("Bitte geben Sie Ja oder Nein ein");
          }
        } while (!antwortOkRobo1);
         
        if (antwortRobo1.ToLower() == "Nein")
        {
          Console.WriteLine("Schritt)");
        }
        else if (antwortRobo1.ToLower() == "Ja")
        {
          Console.WriteLine("drehung");
        } 
      }
      Console.WriteLine("Bis zum nächsten Mal!");
      Console.ReadKey();
    }
  }
}

Wieso beendet er das Programm, wenn ich bei der zweiten Frage Ja oder nein eingebe?

C Sharp, Programmiersprache, Visual Studio
C# Versuch zwei?

Guten Morgen,

ich bin gerade dabei mit dem Programmieren bei C# Anzufangen und bräuchte mal ein wenig Hilfe. Ich habe bis jetzt diesen Code:

using System;
namespace roboter
{
  class Program
  {
    static void Main(string[] args)
    {
      string antwort;
      bool antwortOk;
      string antwortRobo;
      bool antwortOkRobo;
      {
        do
        {
          Console.WriteLine("Guten Tag Herr Baumann, möchten sie meinen Roboter starten? [Ja|Nein]");
          antwort = Console.ReadLine();
          antwortOk = antwort.ToLower() == "ja" || antwort.ToLower() == "nein";
          if (!antwortOk)                                              //Nur die Frage, ob man es starten will
          {
            Console.WriteLine("Bitte geben Sie Ja oder Nein ein");
          }
        } while (!antwortOk);
        do
        {
          Console.WriteLine("Ist die Wand schon da?");
          antwortRobo = Console.ReadLine();
          antwortOkRobo = antwortRobo.ToLower() == "ja" || antwortRobo.ToLower() == "nein";
          if (!antwortOkRobo)                                              //Nur die Frage, ob man es starten will
          {
            Console.WriteLine("Bitte geben Sie Ja oder Nein ein");
          }
          Console.WriteLine("Schritt");
        } while (!antwortOkRobo);
        Console.WriteLine("Drehung");
         
        do
        {
          Console.WriteLine("Möchten Sie eine weitere Aufgabe Berechnen? [Ja|Nein]");
          antwort = Console.ReadLine();
          antwortOk = antwort.ToLower() == "ja" || antwort.ToLower() == "nein";
          if (!antwortOk)
          {                                                    //Nur Frage, ob man ihn nochmal starten soll
            Console.WriteLine("Bitte geben Sie Ja oder Nein ein");
          }
        } while (!antwortOk);
      } while (antwort.ToLower() == "ja") ;
      Console.WriteLine("Bis zum nächsten Mal!");
      Console.ReadKey();
    }
  }
}

Ich würde gerne, dass er nur den Schritt macht, wenn man nein sagt. Und wenn man ja sagt, soll er sich nur drehen und keinen Schritt machen, wie kann ich das am besten umsetzen?

C Sharp, Visual Studio
Downgrade dank Versionsverwaltung möglich?

Hallo zusammen

Wir haben folgende Situation. Aktuell führen wir eine neue Software ein. Der Hersteller schickt uns hier Key-Account-Manager die technisch nicht sehr pfiffig sind. Soweit so gut. Nun hatten wir gerade die Diskussion, ob wir auf der Testinstanz im Falle eines Falle ein SW-Downgrade machen können. Der Hersteller meinte; "nicht in allen Fällen".
aber ist nicht gerade auch das die Idee einer Versionsverwaltung?

Use-Case

Wir haben zwei Systeme:

  • Produktion und
  • Testumgebung

Wir habe eine Versionsverwaltung (Git) von der aus wir die SW entsprechend deployen. Sowohl auf Testumgebung als auch auf Prod.

So, nun hat man es offenbar verpasst, die Regeln für die Testumgebung festzusetzen. Der Hersteller (welcher aktuell bei uns im Haus ist) verlangt von uns immer wieder, dass wir RC (Release Candidates) auf die Testumgebung spielen. Was auch nicht dramatisch ist. Problem ist nur, dass wir offenbar die Softwareparität ausser Acht lassen. Denn was ich gerne hätte, wäre eine Produktion und eine Testumgebung die zumindest potenziell den selben Softwarestand fahren können. Dann kann man auf der Testumgebung spielen so viel man will, man kann jederzeit die Produktion 1:1 abbilden. Zumindest auf Softwareebene.

Nun gehe ich davon aus, dass man mit der Versionsverwaltung genau das kann. Also eine alte Version mit dem Master Mergen und dann deployen. Der Hersteller (technisch vielleicht nicht affin, da Verkäufer im Haus) meint, dass das nicht zwingend geht. Da beim RC oder bei welcher Version auch immer Tabellen bzw. die DB neu organisiert wird.

aber ich gehe eben genau davon aus, dass eine alte SW-Version die Tabellen bzw. DB Schemen dann wieder so um- und überschreibt wie sie das zum Versionsstand XYZ aus der Vergangenheit gemacht hat.

bin ich hier völlig auf dem Holzweg? Eine Versionsverwaltung bringt mir in dem Fall doch herzlich wenig, wenn ich kein Fallback bzw. Downgrade machen kann. richtig?

Grüsse euch, danke für eure Gedanken im Voraus.

Software, C Sharp, Datenbank, Downgrade, Softwareentwicklung, Upgrade, Datenbanksystem, github, Datenbankmodell
Blockiert reddit einen HttpClient nach zu vielen Anfragen?

Guten Morgen.
Ich hab einen discord bot geschrieben mit der Funktion Content von Reddit zu ziehen.
Vor ca. 3 Wochen als ich ihn das letzte Mal an hatte, hat noch alles funktioniert.
Mittlerweile bekomme ich diese Exception:

Error: Response status code does not indicate success: 403 (Blocked).

Das Blocken der IP ist unwahrscheinlich, da ich es mit einem VPN und von einem anderen physikalischem Standort ausprobiert habe.

Bei der zweiten Zeile flieg ich raus:

var client = new HttpClient();
                var result = await client.GetStringAsync($"https://reddit.com/r/{subreddit ?? "dankmemes"}/random.json?limit=1"); 

Hat jemand 'ne Ahnung woran das liegt? Meistens wird der Command ziemlich gespammt...
Vllt liegt das daran und da wurde iwas gesperrt?
Vllt kennt ihr aber auch eine bessere Möglichkeit das ganze umzusetzen?
Danke im Voraus!

"Kompletter" Code:

var client = new HttpClient();
                var result = await client.GetStringAsync($"https://reddit.com/r/{subreddit ?? "dankmemes"}/random.json?limit=1");
                if (!result.StartsWith("["))
                {
                    await Context.Channel.SendMessageAsync("Subreddit doesn't exist...");
                    return;
                }
                JArray arr = JArray.Parse(result);
                JObject post = JObject.Parse(arr[0]["data"]["children"][0]["data"].ToString());

                var builder = new EmbedBuilder()
                    .WithImageUrl(post["url"].ToString())
                    .WithColor(new Color(0, 0, 255))
                    .WithTitle(post["title"].ToString())
                    .WithUrl("https://reddit.com/" + post["permalink"].ToString())
                    .WithFooter($"🗨 {post["num_comments"]} ⬆️ {post["ups"]}");
                var embed = builder.Build();
                await Context.Channel.SendMessageAsync(null, false, embed);
C Sharp, reddit, Discord Bot
Programm Problem in CSharp (Microsoft Visual Studio)?

Hallo ich habe ein Problem in meinen Projekt. Dieses programmiere ich innerhalb von Visual Studio mit CSharp. Es soll folgendermaßen funktionieren: Ich speichere Daten mithilfe von Textfeldern und Buttons in einem Array. Dann habe ich die Möglichkeit dieses Array zu durchsuchen, nach Kundennummer, Firmenname, Straße, Ort und Plz. Dabei habe ich folgenden Code verwendet:

private void buttonSuchen_Click(object sender, EventArgs e)
    {
      string SuchEingabe = textBoxSuche.Text.Trim().ToLower();
      List<Tkunde> suchergebnisse = new List<Tkunde>();
      switch (labelSpeziSuche.Text)
      {
        case "Die Kundennummer eingeben":
          foreach (Tkunde kunde in KundenArray)
          {
            if (kunde.Kundennummer.ToString().Contains(SuchEingabe))
            {
              suchergebnisse.Add(kunde);
            }
          }
          break;
        case "Den Firmennamen eingeben":
          foreach (Tkunde kunde in KundenArray)
          {
            if (kunde.Firmenname.ToLower().Contains(SuchEingabe))
            {
              suchergebnisse.Add(kunde);
            }
          }
          break;
        case "Die Straße eingeben":
          foreach (Tkunde kunde in KundenArray)
          {
            if (kunde.Straße.ToLower().Contains(SuchEingabe))
            {
              suchergebnisse.Add(kunde);
            }
          }
          break;
        case "Die Plz eingeben":
          foreach (Tkunde kunde in KundenArray)
          {
            if (kunde.Plz.ToString().Contains(SuchEingabe))
            {
              suchergebnisse.Add(kunde);
            }
          }
          break;
        case "Den Ort eingeben":
          foreach (Tkunde kunde in KundenArray)
          {
            if (kunde.Ort.ToLower().Contains(SuchEingabe))
            {
              suchergebnisse.Add(kunde);
            }
          }
          break;
        default:
          break;
      }
      // Ausgabe der Suchergebnisse
      if (suchergebnisse.Count > 0)
      {
        StringBuilder sb = new StringBuilder();
        foreach (Tkunde kunde in suchergebnisse)
        {
          sb.AppendLine($"Kundennummer: {kunde.Kundennummer}, Firmenname: {kunde.Firmenname}, Straße: {kunde.Straße}, PLZ: {kunde.Plz}, Ort: {kunde.Ort}");
        }
        MessageBox.Show(sb.ToString(), "Suchergebnisse");
      }
      else
      {
        MessageBox.Show("Keine Ergebnisse gefunden.", "Suchergebnisse");
      }

Jetzt kommt aber der Witz: Wenn ich nach gespeicherten Kundennummern bzw. Plz suche, gibt er mir alle zutreffenden Ergebnisse aus, auch Firmenname Straße und Ort. Suche ich jetzt allerdings nach den Firmennamen, der Straße oder dem Ort, dann kommt der Fehler: System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.""kunde.Firmenname" war "null".Wie kann das passieren, wenn ich doch zuvor die Werte für alle 5 Angaben richtig ausgegeben bekommen habe?

Array, C Sharp, Visual Studio
SMS Authentifizierung API Anbieter?

Hallo,

vielleicht hat ja jemand selber ein wenig Erfahrung gemacht oder kennt sich dahingehend ein wenig aus.

Worum es geht:
Ich möchte als Privatperson in meiner Software Telefonnummern verifizieren können durch Codes, welche per SMS gesendet werden. Dafür würde ich dementsprechend auch bezahlen. Eventuell soll das Projekt später geschäftlich werden, dass ich aber noch unklar. Erstmal soll es privat ablaufen. Keine Einnahmen, nichts.

Was ich brauche:
Einen Anbieter, der kostengünstig SMS für Authentifizierung senden kann, weltweit, für wenig Geld. Dabei soll es möglich sein, den (SMS) Service als Privatperson zu benutzen, aber auch als Geschäftsperson. Es werden vermutlich nicht sehr viele SMS gesendet, daher sollte der einen nicht gleich sperren, wenn mal eine Pause drin ist.

API Anforderung:
C# → Crossplatform oder HTTPs bevorzugt. Wichtigster Punkt: Crossplatform. Notfalls darf auch eine andere Sprache als C# her (oder anderes Protokoll).

Was ich mir hier erhoffe:
Ideen für Anbieter, die man benutzen kann, um das Vorhaben zu ermöglichen. Man erstellt in der Software einen Account, statt E-Mail benutzt man Telefonnummer und diese muss per Code geprüft werden. Warum ich mich für SMS entscheide statt E-Mail hat Gründe, welche gut durchdacht sind, aber hier nicht zur Sache tun.

Kennt jemand einen Anbieter, der die Anforderungen erfüllt.

Ich habe bereits ein wenig recherchiert, leider kam ich ständig auf Seiten, die zu teuer (wirklich extrem teuer) sind oder scheinbar nur Geschäftskunden wollen.
Bei Fragen gerne fragen, ansonsten freue ich mich auf hilfreiche Antworten.

Vielen Dank

Server, Computer, Sicherheit, Netzwerk, Programmierer, programmieren, JavaScript, Login, Kommunikation, C Sharp, Preisvergleich, Python, SMS, Telefonanbieter, entwickeln, API, Authentifizierung
Wie kommt man in C# an die "Date Taken" Property eines Bildes?

FileInfo fi = new FileInfo(file);

DateTime modified = fi.LastWriteTime;

DateTime created = fi.CreationTime;

Liefert nicht das genaue Datum zurück, wann das Bild aufgenommen wurde.

Ich brauche aber das genaue Datum, der Aufnahme. Jemand 'ne Idee wie ich da ran komme?
Ich benutze .Net 6.0

Der komplette Code bisher:

static void Main(string[] args)
        {
            Random rand = new Random();
            foreach (var filePath in Directory.GetDirectories("G:\\230419 Pictures"))
            {
                string[] files = Directory.GetFiles(filePath);
                foreach (string file in files)
                {
                    try
                    {
                        FileInfo fi = new FileInfo(file);
                        DateTime modified = fi.LastWriteTime;
                        DateTime created = fi.CreationTime;
                        string dateTimeZeug = (modified < created ? modified : created).ToString("yyyy-MM-dd_hh-mm-ss");
                        bool createdSuccessfully = false;
                        int tries = 0;
                        while (!createdSuccessfully)
                        {
                            if (tries == 0)
                            {
                                try
                                {
                                    File.Move(file, Path.Combine(filePath, dateTimeZeug + fi.Extension));
                                    createdSuccessfully = true;
                                }
                                catch (Exception e)
                                {
                                    tries++;
                                    continue;
                                }
                            }
                            else
                            {
                                if (tries > 100)
                                {
                                    throw new Exception("Error: " + file);
                                }
                                else
                                {
                                    try
                                    {
                                        File.Move(file, Path.Combine(filePath, dateTimeZeug + "-" + rand.Next(100) + fi.Extension));
                                        createdSuccessfully = true;
                                    }
                                    catch (Exception e)
                                    {
                                        tries++;
                                        continue;
                                    }

                                }
                            }
                            tries++;
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(file);
                    }
                }
            }
            Console.WriteLine("Success!");
        } 
Bild zum Beitrag
Bilder, C Sharp, Windows 10

Meistgelesene Fragen zum Thema C Sharp