C Sharp – die neusten Beiträge

C# Programm Zweidimensionales Array?

Moin,

sitze schon ne Weile an einem Programm, das einen Integer (nennen wir ihn Zahl ) vom Benutzer einlesen soll. Ausgehend von Zahl soll dann wie folgt ein zweidimensionales Array erstellt werden:

  • das Array ist Zahl x Zahl groß
  • das Element oben links im Array (also [0, 0] ) hat den Wert Zahl x Zahl
  • jedes weitere Element rechts daneben hat jeweils -1 weniger
  • anders beschrieben: es wird von links nach rechts abwärts gezählt beginnend vom Wert Zahl x Zahl

Da ich mir den Lösungsweg Stück für Stück erarbeiten möchte, könnt Ihr auf die komplette Lösung/ bzw. Erklärung verzichten.

Ich weiß, dass man Zeilen und Spalten bei dieser Aufgabe beide mit for-Schleifen erstellen kann, doch der Einfachheit halber möchte ich erst verstehen, wie ich mit den Spalten vorgehen muss.

Ohne for-Schleife bekomme ich die erste Spalte problemlos erstellt und das sieht dann so aus:

oder:

Console.WriteLine("Geben Sie eine Zahl ein, bei der nach dem"+ "Schema Zahl*Zahl ein Array erstellet werden soll:");
            string eingabe = Console.ReadLine();
            int intEingabe = Convert.ToInt32(eingabe);
            Console.WriteLine("\n");
            int[,] eingabeArray = new int[intEingabe,intEingabe];
            int eingabeArrayLänge = intEingabe * intEingabe;

            //Erste Spalte:
            eingabeArray[0, 0] = eingabeArrayLänge;
            eingabeArray[1, 0] = eingabeArray[0, 0] - 1;
            eingabeArray[2, 0] = eingabeArray[1, 0] - 1;
            Console.WriteLine(eingabeArray[0, 0] + "\n" + eingabeArray[1, 0] + "\n" + eingabeArray[2, 0]);

Bis dahin kein Problem doch wie schaffe ich es nun, dass ich die erste Spalte nicht "von Hand" ausfüllen muss? Das muss doch irgendwie mit ner for-Schleife zu machen sein?

Doch ich komme da nicht weiter - egal wie ich es drehe und wende.. Wäre nett wenn jemand mir die passende for-Schleife zeigen könnte.

LG

Bild zum Beitrag
Computer, Schule, Programm, programmieren, C Sharp, Informatik, Programmiersprache, For-Schleife, Ausbildung und Studium

Wie kriege ich dieses Unity2D Touch/Swipe-Jump-Movement-Problem gelöst?

Hallo,

ich programmiere zur Zeit ein Unity2D-Spiel jedoch ist gerade ein Problem aufgetreten, welches ich vermutlich nicht allein lösen kann.

Und zwar habe ich in meinem Spiel eine Swipe-Mechanik eingebaut, die mit einem Rigidbody sowie einem Vector2 funktioniert und eine Sprungmechanik, wo der Charakter konstant am Springen ist.

Das Problem ist aber, dass beides mit einem Rigidbody und einem Vector2 nicht/funktioniert. Dies führt dazu, dass, wenn ich die Swipe-Mechanik, der Character so unschön nach unten gezogen wird.

Ich füge mal den Code für ein besseres Verständnis ein:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
  public float jumpForce;
  float currentJumpForce;
  private bool isGrounded;
  Vector2 startPos;
  Vector2 movedPos;
  Vector2 endPos;
  public float speed;
  public Rigidbody2D rb;
  bool isTouch;

  // Start is called before the first frame update
  void Start()
  {
    currentJumpForce = jumpForce;
  }

  // Update is called once per frame
  void Update()
  {
    if (Input.touchCount > 0)
    {
      Touch touch = Input.GetTouch(0);
      
      switch(touch.phase)
      {
        case TouchPhase.Began:
          startPos = touch.position;
          isTouch = false;
          break;
        case TouchPhase.Moved:
          movedPos = touch.position;
          print(movedPos - startPos);
          isTouch = true;
          break;
      }
    }
  }

  void FixedUpdate()
  {
      if (isGrounded) <----- Sprung-Mechanik
      {
        rb.velocity = Vector2.up * currentJumpForce;
        isGrounded= false;
      }

      if (isTouch) <------ Swipe-Mechanik
      {
        if (startPos.x < movedPos.x)
        {
          rb.velocity = new Vector2(speed, 0); <----- Hier muss ich eine x- und y-Achse angeben. Jedoch führt der "0"-Wert dazu, dass der Character nach unten gedrückt wird (sehr langsam nach unten fällt)(Das liegt daran dass die Sprung-Machnik ebenfalls mit einem Rigidbody und Vector2 funktioniert und somit dann der Sprungwert auf "0" gesetzt wird!
        }
        else if (startPos.x > movedPos.x)
        {
          rb.velocity = new Vector2(-speed, 0);
        }

        isTouch = false;
      }
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
      istap = true;
    }
  }

Könnte mir jemand bitte eine Alternative zu der Sprung- oder Swipe-Mechanik schreiben?

PS: PhysicsMaterial2D klappt nicht, da der Charakter immer höher Springt.

Computer, Schule, programmieren, C Sharp, Spieleentwicklung, Unity, Unity2D

Wie kann ich Text in einer Variable in C# speichern, ohne ihn zu entfernen, wenn ich zurück in die Main Methode komme?

Hey, ich habe vor ein paar Tagen angefangen C# zu lernen und versuche nun einige einfache Programme für Anfänger zu programmieren. Der Taschenrechner hat schon funktioniert jedoch scheitert es jetzt bei einem Schreibprogramm, was den Text temporär in einer Variable der Konsole speichern soll und wieder aufrufbar ist.

Am Anfang meine Codes, habe ich 4 String Variablen als Speicherplatz festgelegt. Wie diese aussehen, sieht man auf dem Bild.

Nun muss der Nutzer angeben, ob er einen neuen Text speichern oder ein vorhandenes Dokument öffnen will. Will er ein neues speichern wird mit Hilfe einer If-Abfrage geschaut, welche von den 4 Variablen noch leer ist.

...darunter sind mit "else if" noch die anderen Speicherplätze festgelegt.

Nach einer Eingabe wird der Text in dem String gespeichert und man gelangt zurück zur Main Methode, wo dann allerdings wieder das, was in die Variable eingetragen wurde gelöscht wird, da ich den Variablen ja einen Startwert zuweisen musste. (sieht man auf dem Bild) ich kann die variablen auch nicht später der Eingabe direkt zuweisen, da die Konsole erst überprüfen muss, welche Variable noch frei ist.

Ich hoffe es ist verständlich, was mein Problem ist und jemand kann mir weiterhelfen.

Vielen Dank schon mal im Voraus!

Bild zum Beitrag
Computer, Software, Technik, programmieren, C Sharp, Technologie, Visual Studio 2019

C# / Unity: Mit Leertaste Spiel starten?

Hallo,

ich habe ein Spiel in Unity programmiert, in dem man mit einem Block verschiedenen Blöcken ausweichen muss. Wenn man diese berührt, fängt alles noch einmal an (ziemlich einfaches Spielprinzip).

Der Spielerblock bewegt sich dauerhaft nach vorne und man hat die Möglichkeit, sich nach rechts oder links zu bewegen.

Nun möchte ich, wenn ich am Anfang des Spiels die Leertaste drücke, dass sich dieser Block ab dann dauerhaft nach vorne bewegt. Nur leider geht der Spieler immer nur ein paar Pixel nach vorne, wenn ich die Leertaste drücke. Aber er soll dauerhaft nach vorne gehen. Ich hoffe, Ihr versteht, was ich meine.

Hier mein Quellcode:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MoveScript : MonoBehaviour
{
  public float movespeed = 7f;
  public float movespeed2 = 7f;

  // Start is called before the first frame update
  void Start()
  {
  }

  // Update is called once per frame
  void Update()
  {
    float H = Input.GetAxis("Horizontal") * movespeed;
    Vector3 vec = new Vector3(H, 0, 0);
    Vector3 frontvec = new Vector3(0, 0, movespeed2);

Ab hier versuche ich, dies zu programmieren:

if (Input.GetKeyDown(KeyCode.Space))
{
  transform.Translate(frontvec * movespeed2 * Time.deltaTime);
}

if (Input.GetKeyUp(KeyCode.Space))
{
  transform.Translate(frontvec * movespeed2 * Time.deltaTime);
}

Ab hier geht es mit dem Rest weiter:

    transform.Translate(vec * movespeed * Time.deltaTime);
  }
  
  private void OnCollisionEnter(Collision collision)
  {
    if (collision.gameObject.tag == "Starters")
    {
      SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
  }
  
  private void OnTriggerEnter(Collider other)
  {
    if (other.gameObject.tag == "SpeedP")
    {
      movespeed2 += 1f;
    }
  
    if (other.gameObject.tag == "SideSPWN")
    {
      SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
  }
}
C Sharp, Unity

C# 2D Array erste Zeile entfernen?

Guten Tag ich bin zurzeit an einem Projekt und die erste zeile soll aus dem Array gelöscht werden.

das ist meine Ausgabe und die erste zeile soll komplett gelöscht werden.

und das ist ein teil meines Codes:

for (int i = 0; i < sArrEinkauf.GetLength(0)-1; i++)
            {
                if (sArrEinkauf[i, 0] == sArrEinkauf[i + 1, 0]) 
                {
                    int summe = 0;
                    int temp = 0;
                    int temp2 = 0;

                    temp = Convert.ToInt32(sArrEinkauf[i, 4]);                     temp2 = Convert.ToInt32(sArrEinkauf[i + 1, 4]);                     summe = temp + temp2;                     sArrEinkauf[i + 1, 4] = summe.ToString();                     sArrEinkauf[i, 0] = "X";                 }

            }             string[,] tmparray = new string[0,0];             string[] temparray = new string[5];             for (int i = 0; i < sArrEinkauf.GetLength(0); i++)             {                 Console.WriteLine("\n");                 for (int j = 0; j < sArrEinkauf.GetLength(1); j++)                 {                                          sArrEinkauf[i, 0] = "A" + sArrEinkauf[i, 0];

                    Console.Write(sArrEinkauf[i, j] + "\t");
                }
            }

Bild zum Beitrag
Computer, Schule, programmieren, Array, C Sharp, Informatik

C# WPF User Control Typname nicht vorhanden?

Hallo an alle Programmierfreunde da draußen!

Ich wollte mir gerne eine Custom User Control erstellen, weil ich sie in dieser Art und Weise in fast jeder WPF-App verwende.

Mein C# - Code:

using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;

namespace MenuBar
{
    public partial class MenuBar : UserControl
    {
        public List<string> Buttons;
        public SolidColorBrush Background;
        public SolidColorBrush Foreground;
        public SolidColorBrush BorderBrush;
        public Thickness BorderThickness;

    public MenuBar(int winHeight)
    {
        InitializeComponent();
        GridMenu.Height = winHeight;
        GridMenu.HorizontalAlignment = HorizontalAlignment.Stretch;
        GridMenu.VerticalAlignment = VerticalAlignment.Top;
    }

    public void Create()
    {
        ColumnDefinition c;
        for (int i = 0; i &lt;= Buttons.Count; i++)
        {
            c = new ColumnDefinition();
            c.Width = new GridLength(GridMenu.Width / Buttons.Count);
            GridMenu.ColumnDefinitions.Add(c);
        }

        Button btn;
        int col = 0;
        foreach (string s in Buttons)
        {
            btn = DefaultButton(s);
            GridMenu.Children.Add(btn);
            Grid.SetColumn(btn, col);
            col++;
        }
    }

    private Button DefaultButton(string title)
    {
        Button btn = new Button();
        btn.Width = GridMenu.Width / Buttons.Count;
        btn.Height = GridMenu.Height;
        btn.Background = Background;
        btn.Foreground = Foreground;
        btn.Cursor = Cursors.Hand;
        btn.BorderBrush = BorderBrush;
        btn.BorderThickness = BorderThickness;
        btn.Content = title;
        
        return btn;
    }
}

}

Mein XAML - Code:

<UserControl x:Class="MenuBar.MenuBar"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:local="clr-namespace:MenuBar"
             mc:Ignorable="d"
             x:Name="Menu">
    <Grid x:Name="GridMenu"></Grid>
</UserControl>

Abgesehen davon, dass ich nicht sicher sagen kann, dass der Code so funktioniert, bekomme ich schon beim Build eine Fehlermeldung:

 MenuBar.xaml(9, 26): [CS0426] Der Typname "MenuBar" ist im Typ "MenuBar" nicht vorhanden.

Ich habe leider absolut keine Ahnung, wo der Fehler liegt, ich programmiere noch nicht so lange. Vielleicht kann mir jemand von euch helfen?

Das Projekt wurde als DesktopApplication im .NETCore v3.1 mit JetBrains Rider erstellt.

Danke für die Hilfe!

programmieren, C Sharp, Windows Presentation Foundation

Warum funktioniert mein Installer nicht?

Ich bin mit meinen Programm in Visual Studio fertig geworden und wollte, dass man dieses Programm mit einen Installer wie jedes andere Programm welches man im Internet herunterlädt auf dem Computer installieren kann. Dafür habe ich mir die Visual Studio Erweiterung "Microsoft Visual Studio Installer Projects" (https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2017InstallerProjects) heruntergeladen.

Nachdem ich die Erweiterung heeuntergeladen hatte, habe ich in der Projektmappe meines Programms ein neues Projekt(siehe Bild 1) hinzugefügt.

Danach habe ich im "Application Folder" (siehe Bild 2) eine Projektausgabegruppe mit der "Primären Ausgabe" und der Kofiguration "(aktiv)", den Ordner wo ich alle Bild- und Sounddateien gespeichert habe (im Projektordner ist er unter "...\bin\Debug" gespeichert) und das Icon der Exe-Datei hinzugefügt. In den Ordnern "User's Desktop" und "User's Programs Menu" habe ich jeweils eine Verknüpfung zur Primär Ausgabe hinzugefügt.

Als ich damit fertig war habe ich die Batch dazu ertellt (siehe Bild 3) und im Debug Ordner von Setup1 erschienen eine Exe und eine MSI Datei.

Als ich die besagte Exe Datei ausführte, hat sich der Installer ganz normal geöffnet und mein Programm installiert. Jedoch wenn ich versuche das Programm zu starten - egal ob über der Verknüpfung am Desktop oder PrograM Menü der die Exe Datei selber im Programm Ordner - passiert gar nichts. Laut dem Task-Manager öffnet sich zwar kurz ein Prozess, schließt sich aber Direkt wieder. Wenn ich das Programm über den Projektordner von Visual Studio öffne, öffnet sich das Programm ganz normal, also warum funktioniert das nicht über die installierte Version des Programmes?

Bild zum Beitrag
PC, Computer, Videospiele, Windows, Windows 7, Technik, Programm, Installation, programmieren, installieren, C Sharp, Technologie, Visual Studio, Visual Studio 2017

Meistgelesene Beiträge zum Thema C Sharp