Ich habe mal spaßeshalber folgendes Tutorial erstellt. Über 90% davon wurden mit chatGPT gebastelt. Die Programme laufen (alles getestet).
https://www.henkessoft.de/Csharp/Csharp - 1.htm
Du hast offenbar ein Projekt mit vorkompilierten Headern gemacht. Wenn du nicht weißt, was das ist, solltest du es halt beim Erstellen des Projektes auch nicht anwählen; Microsoft kann da gar nichts dafür. Mach am besten ein neues Projekt und diesmal ohne Precompiled Headers...
Auch wenn es schon 3 Jahre her ist, möchte ich für diesen Post bedanken, weil ich eine ganze weile nach einer solchen Möglichkeit gesucht habe. Ein Kleinigkeit hat sich geändert. Bei mir ist der Punkt "Vorlage exportieren" nicht unter Datei, sondern unter "Projekt" zu finden. Ansonsten hat alles genau so geklappt wie hier beschrieben. Das hat mir ne Menge Zeit gespart.
Creating a Battleship game using C# and WinForms can be a fun and educational project, especially if you want to implement AI opponents. Below is a simple example that outlines how to structure the project and some key components you can include.
Overview of the Game
Battleship is a strategy game where players take turns guessing the locations of each other's ships on a grid. For the AI opponent, we can implement a simple algorithm to make guesses.
Key Components
Game Board
A grid to represent the game board where players can place their ships and make guesses.
Ship Placement
Logic to allow players and AI to place their ships on the board.
Guessing Mechanism
Players and AI take turns guessing the location of ships.
AI Logic
A simple algorithm for the AI to make guesses (random or more sophisticated).
Step-by-Step Implementation
Set Up Your WinForms Project
Open Visual Studio and create a new WinForms App (.NET Framework) project.
Design the UI
Use a DataGridView or multiple Buttons to represent the game board for both the player and AI.
Include buttons for starting the game, placing ships, and making guesses.
Add labels or text boxes for displaying messages (e.g., "Hit!", "Miss!", "AI's Turn").
@TorDev sagte in Object synchronization method was called from an unsynchronized block of code.:
Ich muss dazu sagen, dass ich im originalen Programm einen Timeout beim Mutex mitgebe, und genau der tritt nämlich auf.
Siehste, und genau deswegen sollte man nie modifizierten Code posten. Auf ein minimales Beispiel reduzieren, ja, das ist gut. Aber der Fehler muss dabei halt noch auftreten.
https://www.henkessoft.de/Windows Forms/Windows Forms Csharp - 1.htm#Pong
Interessante und überschaubare Basisversion für Einsteiger, die das gerne ausbauen wollen. Vor allem der AI Bereich ist sehr einfach gestrickt, damit der Mensch eine Chance hat.
Pong ist eines der ersten und bekanntesten Videospiele (1972 von Atari entwickelt).
Ist die Aufteilung der Module/Klassen in Form, AI, Ball, GameEngine, Paddle ausreichend?
Wie könnte man die AI Strategie schleichend verstärken, ohne dass der Mensch chancenlos wird? Vielleicht adaptiv in Abhängigkeit vom Punktestand?
Snake ist ein Klassiker. Hier beschreibe ich zunächst die Programmierung einer Basisversion für dieses immer hektischer werdende Spiel.
https://www.henkessoft.de/Windows Forms/Windows Forms Csharp - 1.htm#Snake
Empfindet ihr die Aufteilung in Game und Form ausreichend?
@Th69 sagte in C# und WinForms am Beispiel Pixel Maze Challenge:
Bzgl. der Codewiederholungen für pointX und obstacleX
Ich wollte es zunächst einfach halten, habe mit 6 Schätzen und 2 Hindernissen begonnen. Die KI erzeugt wiederholenden Code ruckzuck. Man braucht aber mindestens 8 Schätze und 3 Hindernisse, um es spannend zu machen. Ich habe da noch weitere Ideen für ein Spiel mit mehreren Runden (Zeit verkürzen, mehr Hindernisse, mehr Schätze, Power-Ups (Unbesiegbarkeit, Punkte-Multiplikatoren oder Zeitverlängerungen), unsichtbare Fallen, ...). Schöne Bildchen wären auch lustig, etc.
Aufwand lohnt sich jedoch nur, wenn das Spielprinzip in dieser konkreten Form wirklich interessant ist.
@Erhard-Henkes
Auch müsste man mal das Verhalten von den USB Ports untersuchen. Habe schon erlebt dass je nach USB Port Geräte erkannt werden oder nicht.
Ich habe zwei Rechner, meinen regulären Arbeits-PC am Arbeitsplatz und meinen Homeoffice-PC zu Hause. Ich verwende auf beiden die aktuelle Visual Studio 2022-Version und das Projekt sollte eigentlich auf beiden gleich sein (git-Repository).
Auf meinem Arbeits-PC erstellt er für 3 meiner Assemblies beim Publish die Ressourcen-dlls zu den entsprechenden Sprachen, zudem gibt es kleine Unterschiede in der Menge und auf Binärebene von den ausgelieferten System-Dlls. Was mir unter anderem auffällt ist eine Differenz in den .net-dlls auf Binärebene "Crossgen2 8.0.624.26715" versus "Crossgen2 8.0.724.31311". Bei der Recherche habe ich herausgefunden, das Crossgen wohl zur .Net Toolchain gehört und mit Optimierungen zu tun hat.
Hat jemand eine Ahnung was die Unterschiede verursachen könnte, bzw. nach was ich für Änderungen ggf. suchen sollte? Ich bin mir zumindest recht sicher, das auf beiden auch der aktuelle Stand vom .net Framework 8 läuft.
Nachtrag:
Man sollte nicht zu schnell von gleichen Ständen reden, hatte auf den einen Rechner doch noch ein .net Framework 8.0.6 und auf den anderen 8.0.7
Sorry, für die späte Rückmeldung.
Habe das Problem lösen können, in dem ich Code aufräumte und nach seinen Aufgaben verteilte.
Ein Teil war reine Debug-Funktionen bezüglich dem verwendeten SDK, andere waren grundlegende Definitionen fürs Messen. Und übrig blieb eine grundlegende Klasse zum Ansteuern eines Tachymeters mit dem verwendeten SDK.
So gefällt mir die Struktur nun besser.
G' Morgen,
das hat mich weiter gebracht, vielen, vielen Dank Habe zwar neue Probleme, aber da habe ich mich vermutlich irgendwo vertan, schaue ich heute morgen nochmal rein.
VG Torsten
Hallo,
also irgendwie ist im Netz nichts zu finden, dass jemand die Hintergrundfarbe dynamisch ändert. Ich fürchte, ich muss das mal Thema mal schieben.
Dennoch vielen Dank für deine Hilfe
VG Torsten