Laden...
Avatar #avatar-3416.jpg
barzelona myCSharp.de - Member
St. Ingbert - Saarland Dabei seit 16.02.2007 165 Beiträge
Benutzerbeschreibung

Forenbeiträge von barzelona Ingesamt 165 Beiträge

07.10.2009 - 15:27 Uhr

Hallo,

falls es jemanden interessiert:

Ich hab jetzt einfach die Tasten im Spiel selbst abgefangen und dann nur noch die Parameter in der GameComponent geändert. Dann ging das alles!

Gruß
Michael

01.10.2009 - 16:21 Uhr

Hallo,

ich hab mir das nochmal angeguckt. Daran hat es nicht gelegen. Die Enum Keys ist übrigens aus dem Namespache Microsoft.Xna.Framework.Input;

Hat noch jemand einen anderen Vorschlag?

Gruß
Michael

01.10.2009 - 08:55 Uhr

Danke schon mal für die Antwort! Werd ich heut Abend (auf der Arbeit im mom)mal ausprobieren und euch berichten ob es funktioniert. Sollte noch wer einen anderen Vorschlag haben darf er den natürlich auch posten.

Gruß
Michael

01.10.2009 - 07:22 Uhr

Hallo,

heute mal wieder ein Beitrag von mir... diesmal hats mit XNA zu tun.

Ich habe folgendes Problem:

in einer DrawableGameComponent, die mir etwas zeichnen soll, will ich eine UserEingabe verarbeiten, folglich implementiere ich folgenden Code in die Update-Methode der GameComponent:

 
keyState = Keyboard.GetState();
                   if (keyState.IsKeyDown(Keys.Up))
                    {
                        moveDirection = Direction.Up;
                    }
                    if (keyState.IsKeyDown(Keys.Down))
                    {
                        moveDirection = Direction.Down;
                    }
                    if (keyState.IsKeyDown(Keys.Left))
                    {
                        moveDirection = Direction.Left;
                    }
                    if (keyState.IsKeyDown(Keys.Right))
                    {
                        moveDirection = Direction.Right;
                    }

keyState is vom Typ KeyboardState, Direction ist eine Enum von mir.
Zunächst habe ich das ganze ausprobiert und gemerkt, dass einfach nichts passiert, des weiteren habe ich dann beim Debuggen jeweils in der Zeile "movedirection = Direction. ... ;" einen Haltepunkt gesetzt. Jedoch kann ich noch so viel auf meinen Pfeiltasten rumdrücken, er kommt einfach nicht in diese Codezeilen. Die if-Abfragen hingegen werden durchgeführt, sind aber immer false.

Muss ich in GameComponents irgendwie noch die Eingaben der Hauptanwendung weiterleiten, oder irgendeine Variable ändern?

Ich kann zumindest nicht nachvollzihen, warum hier nichts passiert.

Falls es hilft, hier noch die Initialize() der GameComponent, vielleicht fehlt was:


        public override void Initialize()
        {
            //Zunächst deaktivieren
            isActive = false;
            //ContentManager zum Laden der TileTexturen
            content = new ContentManager(Game.Services);

            base.Initialize();
        }

Danke schon mal für eure Antworten!

Gruß
Michael

13.05.2009 - 16:22 Uhr

Hallo,

Danke erst mal für eure Antworten!

Ich hätte da aber noch eine Frage: Woran erkenne ich, dass es ein valides XHTML-Dokument ist, und wie muss ich dann den Doctype ändern?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de-DE">

das ist der normale Doctype von der Seite...

mfg Michael

10.05.2009 - 15:35 Uhr

Hallo,

ich hab ne Frage zu HTML. Ich wollte einige Informationen von einer Website auslesen. Mein Ansatz war bisher, dass ich die Website per HttpWebRequest/Response in eine string-Variable heruntergeladen hab und dann mit RegEx nach bestimmten mustern gesucht hab. Die Gruppen hab ich dann ausgelesen.
Jetzt hab ich mir überlegt ob es nicht vielleicht ähnlich wie bei XML-Dateien auch eine möglichkeit gibt, HTML-Dateien zu deserialisieren. Dann wär das auslesen der Informationen ungemein leichter. Mein bisheriger RegEx-Pattern passt nämlich schon nicht mehr auf meinen Monitor.

Wenn irgendwer weiß mit welcher Klasse man so etwas handeln kann, oder wenn jemand einen ganz anderen Ansatz einfach mal posten, vielleicht kann ich ja was damit anfangen^^

Vielen Dank schonmal im voraus!

Michael

//Edit: Entschuldigung... hab grad bemerkt, dass ich bei Netzwerktechnologien wohl falsch bin... Bitte nach Web-Technologien verschieben

20.02.2009 - 13:26 Uhr

Mit dem Kalender ist das gar nid so schwer. Da muss man einfach nur den Kalender aus Outlook in eine iCalendar-Datei konvertieren (*.ics) und in den Ordner "Calendars" kopieren.
Bei Musik und ähnlichem ist das glaube ich etwas komplizierter. Es gibt aber eine Library, mit der man einen Zugriff auf das Datenbanksystem des iPod's erhält: SharePod.

mfg Michael Barz

20.02.2009 - 13:14 Uhr

Hallo,

wer von euch einen iPod hat und seinen Kalender in einem Exchange-Konto (Outlook) pflegt weis,
dass iTunes in dieser Konstellation keine Kalender synchronisieren kann.
Diese Funktionslücke habe ich durch ein kleines Add-In für Outlook beseitigt.
Durch einen Button in der Standard-Menüleiste kann man jetzt ganz einfach
(wenn ein iPod angeschlossen ist) per Klick seine Daten synchronisieren.
Bisher ist jedoch nur der Transfer des Standardkalenders möglich. Weiteres,
wie z.B. Kontakte und Notizen folgen je nach Interesse evtl. noch.

Konstruktive Kritik, Verbesserungsvorschläge und Anregungen sind erwünscht.

mfg Michael Barz

06.12.2008 - 11:14 Uhr

Hallo,

Super Arbeit...

mir is da aber noch was aufgefallen^^
Wenn ich einen Ordner hinzufügen will, in dem drei Ordner mit Musik sind, aber keine "losen" Files added er nichts... dann muss ich die einzelnen Ordner einzeln hinzufügen. Wär ganz angenehm, wenn die Ordner rekursiv durchsucht werden würden...

mfg Michael

06.12.2008 - 01:28 Uhr

Hab hier leider schon ma nen fehler...

System.IO.FileNotFoundException wurde nicht behandelt.
  Message="Die Datei oder Assembly \"ComponentFactory.Krypton.Toolkit, Version=3.0.8.0, Culture=neutral, PublicKeyToken=a87e673e9ecb6e8e\" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden."
  Source="AttaXX"
  FileName="ComponentFactory.Krypton.Toolkit, Version=3.0.8.0, Culture=neutral, PublicKeyToken=a87e673e9ecb6e8e"
  FusionLog="WRN: Protokollierung der Assemblybindung ist AUS.\r\nSie können die Protokollierung der Assemblybindungsfehler aktivieren, indem Sie den Registrierungswert [HKLM\\Software\\Microsoft\\Fusion!EnableLog] (DWORD) auf 1 festlegen.\r\nHinweis: Die Protokollierung der Assemblybindungsfehler führt zu einer gewissen Leistungseinbuße.\r\nSie können dieses Feature deaktivieren, indem Sie den Registrierungswert [HKLM\\Software\\Microsoft\\Fusion!EnableLog] entfernen.\r\n"
  StackTrace:
       bei AttaXX.App.OnStartup(StartupEventArgs e)
       bei System.Windows.Application.<.ctor>b__0(Object unused)
       bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
       bei System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
       bei System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
       bei System.Windows.Threading.DispatcherOperation.InvokeImpl()
       bei System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
       bei System.Threading.ExecutionContext.runTryCode(Object userData)
       bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
       bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
       bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       bei System.Windows.Threading.DispatcherOperation.Invoke()
       bei System.Windows.Threading.Dispatcher.ProcessQueue()
       bei System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       bei MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       bei MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
       bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
       bei System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
       bei System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
       bei System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
       bei System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
       bei MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
       bei MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
       bei System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
       bei System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
       bei System.Windows.Threading.Dispatcher.Run()
       bei System.Windows.Application.RunDispatcher(Object ignore)
       bei System.Windows.Application.RunInternal(Window window)
       bei System.Windows.Application.Run(Window window)
       bei System.Windows.Application.Run()
       bei AttaXX.App.Main()
  InnerException: 

hab die exe verwendet und der fehler tritt direkt nach dem ersten start nach der installation auf

mfg Michael

26.11.2008 - 21:58 Uhr

Hallo,

was mir grad noch einfällt. Als sehr sinnvoll würde ich empfinden, wenn es eine Funktion gäbe, die nach vollendeter Wiedergabe einer Playlist den PC herunterfährt...

mfg Michael

25.11.2008 - 15:24 Uhr

Hey, ich bin doch froh wenn Vorschläge kommen smile

Da bin ich ja froh^^

Zum zweiten kommt eine weitere Ansicht des Players hinzu. Damit meine ich, dass der Player so wie er momentan ist, als "Mini-Player" bleibt. So wie es das etwa auch beim Winamp oder WMP gibt. Außerdem wird es eine erweiterte Ansicht geben, die ich etwas aufmotzen werde, damit dort Platz für viele, direkt offensichtliche, Optionen ist.
Dazu habe ich mich deswegen entschloßen, da ich den Player so wie er momentan ist recht gut finde und nicht unnötig mit Buttons usw. vollpflaster möchte, da ich gerade diese "Einfachheit" recht cool fand.

Aber damit auch andere Optionen nicht zu kurz kommen werde ich eine weitere Oberfläche entwerfen. Diese wird dann auch z.b. eine vergrößerbare Playlist beinhalten.
Ich bin schon fleißig am basteln und momentan finde ich die schon ziemlich cool smile Wenn ich die Oberfläche soweit fertig habe werde ich sie euch hier vorstellen.

find ich ne gute Idee... freu mich drauf

mfg Michael

25.11.2008 - 11:31 Uhr

Was mir noch gefallen würde, wäre eine Art Media Library (ähnlich wie beim Media Player) wo der Player automatisch z.b. den Ordner "Eigene Musik" durchsucht und dann die gefundene Musik nach Interpret, Genere, Jahrgang oder Album ordnet smile und ggf. automatisch Playlisten erstellt.

Wobei ich bei der Library eher drauf verzichten würde, den Eigene Musik - Ordner automatisch zu durchsuchen...
Da ist ja nicht immer bei jedem seine Musik drin. Ich würde drauf beruhen, Ordner per Hand (so wie es im moment auch ist) der Medialibrary hinzuzufügen. Jetzt im mom halt nur der Playlist.

Was ich mir noch wünschen würde, sind anstatt nur dem ContextMenu auch Buttons am unteren Rand der Playlist, die das Hinzufügen steuern. Ich finde das Ganze wird dadurch übersichtlicher und Nutzerfreundlicher.

Außerdem, das sind dann wohl aber eher Pläne für spätere Versionen, fände ich es toll, wenn man Musikdaten aus dem Player heraus auf Portable Datenträger (also USB-Stick/MP3-Player/Speicherkarten) evtl. auch CD übertragen könnte. Das sind dann immer die Situationen, wenn man den USB-Stick für ins Auto mit Musik füllen will, aber anstatt der fertigen Playlist im Player Hunderte von Ordnern und losen Musikfiles vor sich sieht.
Persönlich fände ich auch eine Unterstützung des iPod ganz praktisch, da ich dann nicht mehr an iTunes gebunden bin. Ich denke das geht vielen genauso, die eigentlich gerne andere Player verwenden würden, aber aufgrund ihres iPod keine möglichkeit dazu haben.

mfg Michael

P.S.: Ich hoffe ich haue deine ToDo-List nicht zu voll^^ 😉

23.11.2008 - 22:07 Uhr

Hallo,

schön einen Fortschritt bei diesem Projekt zu sehen.
Eine Sache ist mir da noch aufgefallen:

Wenn man während ein Lied spielt im Tagger auf "save" klickt, also den geänderten oder auch nicht geänderten Tag speichert, wird der Song erneut von vorne gespielt. Außerdem wird die Fortschrittsanzeige und die schriftliche Darstellung nicht ganz ordnungsgemäß zurückgesetzt. D.h. der Balken beginnt zwar erneut von vorne durchzulaufen, aber die Zeitanzeige springs nach 1-2 Sekuden auf einen vermeindlich anderen Zeitpunkt... Vermutlich der beim speichern erreichte.

Eine kleinere Sache ist: Der "Cancel"-Button bei der Coverauswahl (ob 1, 2 oder 3) hat den Text "cHancel"

viel Erfolg beim weitern coden!

mfg Michael

20.11.2008 - 15:32 Uhr

Hallo,

grad noch so ein paar Vorschläge...

  • import von verschiedenen Playlisttypen
    (ich nutze z.B. iTunes und habe nur dessen xml bzw. txt Format)
  • Abbruchmöglichkeit beim import (kann ja auch mal etwas mehr sein...)
  • Suche nach Titel usw...
  • Möglichkeit die Playlistanzeige zu vergrößern
    (bei vielen Titeln findet man sich gar nicht mehr zurecht)
  • eine Anzeige, wie viele Titel denn vorhanden sind
    (zum Prüfen ob auch alle geladen wurden)
  • Bearbeitung der Tags...

Wär toll wenn du das umsetzen könntest...

mfg Michael

//Edit:

Was mir grad noch aufgefallen ist:

Wenn ich ein Lied laufen lasse und dann ich der Playlist die Scrollbar per klicken bewege, beginnt das Lied erneut (manchmal erst nach dem zweiten Klicken

18.11.2008 - 18:56 Uhr

in der datenbank speichert man normalerweise nur den md5 hash. Somit kann weder Betreiber, noch ein potentieller Hacker das Passwort auslesen, wenn er sich die Daten anschaut. Zum abgleichen bildet man einfach von der User-Eingabe wieder den Hash und prüft diesen.

mfg Michael

18.11.2008 - 14:40 Uhr

Zu dem Problem mit 64-bit:
Soweit ich weiß kann man beim Debuggen einstellen für welches Zielsystem das ganze erstellt werden soll, also ob es für x86/x32 oder x64 ist. Musst mal bei den Debugoptionen bzw. den Projektoptionen gucken.

mfg Michael

09.11.2008 - 01:09 Uhr

Ich hab das ganze im Startmenu, also per Verknüpfung gestartet und hab die exe verwendet...

07.11.2008 - 14:58 Uhr

Ich hab den Player mal gestartet und dann bevor ich irgendetwas anderes gemacht habe oben rechts auf den knopf gedrück. Ich vermute mal ich hab ihn geschlossen und nicht minimiert, da nichts mehr von dem Player zu sehen war, weder in der Taskleiste noch im Taskmanager.
Dann habe ich ihn nochmal geöffnet und bekam zuerst eine Meldung mit einem sql-fehler (siehe Anhang).
Danach kamen noch zwei Fehler jeweils in einer Messagebox (jeweils NullReference):

  • AttaXX.Playlist.GetPlaylist()
  • AttaXX.DB_Functions.Query(string cmd);
    Und dann noch ein unbehandelter Fehler, von dem ich mal die Details kopiert habe:
System.NullReferenceException wurde nicht behandelt.
  Message="Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
  Source="AttaXX"
  StackTrace:
       bei AttaXX.Main.FillPlaylist(PList[] tmppl)
       bei AttaXX.Main..ctor()
       bei AttaXX.App..ctor()
       bei AttaXX.App.Main()
  InnerException: 

Also ich würd ja sagen, er konnte wegen einem SQL-Fehler die Playlist nicht laden und hat dann Folgefehler produziert in Form von NullReferenceExceptions

mfg Michael

22.10.2008 - 16:50 Uhr

die Playlist selbst einlesen. m3u-Playlists sind auch recht einfach aufgebaut und es gibt eine erklärung dazu bei WinAmp auf der Seite (wo genau weis ich nicht).

damit meinte ich eigentlich, dass du die Playlist, die du hast einfach in dein Programm einlesen kannst und dann eine mp3 nach der anderen abspielen kannst.

das wird dann halt ein wenig komplizierter als nur die Playlist auszuführen.
Aber da ich schonmal einen mp3-player geschrieben habe, stelle ich dir mal die Methode zum Auslesen einer m3u-Playlist zur Verfügung:


        public static List<string> Load(string _path)
        {
            List<string> playlist = new List<string>();
            try
            {
                if (File.Exists(_path))
                {
                    FileStream fs = new FileStream(_path, FileMode.Open, FileAccess.Read);
                    StreamReader sr = new StreamReader(fs);
                    string firstRow = sr.ReadLine();
                    if (firstRow == "#EXTM3U")
                    {
                        while (!sr.EndOfStream)
                        {
                            string cr = sr.ReadLine();
                            if (!cr.Contains("#EXTINF:"))
                            {
                                if (File.Exists(cr))
                                {
                                    songList.Add(cr);
                                }
                            }
                        }
                    }
                    fs.Close();
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Die Datei wurde nicht gefunden oder ist nicht gültig!", "Fehler beim importieren",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

aufrufen tust du das Ding folgendermaßen:


List<string> playlist = Load("playlist.m3u");

und wie du eine mp3-Datei abspielst findest du unter anderem ca. 1000x hier im Forum...
zum Beispiel hier

ich hoffe ich konnte helfen!

20.10.2008 - 20:04 Uhr

Warum willst du den Mediaplayer öffnen. Es gibt do genügend Möglichkeiten das in dein Program einzubinden. So könntest du dann auch die Lautstärke mnuell einstellen. Such einfach mal hier im Forum... da steht genügend dazu wie man mp3-Dateien abspielen kann. Notfalls kann man glaube ich immer noch ein wmp-control in seine Form einbinden. Da ist es sicher auch möglich die Lautstärke zu regeln. Wie das dann mit einer Playlist läuft die evtl schon vorhanden ist kann ich dir nicht sagen... entweder gibt es bei dem Control eine Möglichkeit Playlists einzulesen oder du musst die Playlist selbst einlesen. m3u-Playlists sind auch recht einfach aufgebaut und es gibt eine erklärung dazu bei WinAmp auf der Seite (wo genau weis ich nicht).

20.10.2008 - 19:48 Uhr

Ich habe ja in der MainForm ein Event abonniert, durch dass ich ankommende Daten empfangen kann. Ich bin jetzt so weit, dass ich kapiert habe, dass weil das Event in dem Empfangsthreat ausgelöst wurde, dieser auch die Prozesse bearbeitet die bei auslösen des Events fällig werden. Jetzt bin ich mir aber nicht sicher, ob es reicht dann in der Methode, die bei Auslösen des Events bearbeitet wird einen neuen Threat zu starten, oder ob ich zunächst per Invoke die Daten an die Form übergeben muss und aus der Form heraus den neuen Threat starten muss. Wenn ja wäre es dann eine variante das Event per Invoke auszulösen?

20.10.2008 - 16:05 Uhr

Hallo,

Wäre es dann vielleicht eine Möglichkeit im Empfangsthread einen neuen Thread zu starten, der die Daten verarbeitet und von dort aus per Invoke das GUI aktualisiert?
Die Frage ist dann, wie komme ich von dem Thread aus zu der Form, die ich aktualisieren will?
Im moment spielt sich die Verarbeitung der ankommenden Daten zumindest in der CodeDatei der jeweiligen Form ab (jedoch noch im Empfangsthread) und THIS.Invoke/BeginInvoke funktioniert (bzw. bei zweiten mal nicht). Muss ich dann MainForm.ActiveForm.Invoke (oder so ähnlich) aufrufen?

Mit der Methode würde der Empfang von Daten direkt weitergehen, die Daten würden verarbeitet und die GUI müsste nur die Ausgabe der Daten übernehmen und blockiert nicht.

mfg Michael

19.10.2008 - 19:47 Uhr

Hallo,

ich hab da ein kleines Problem betreffen Invoke und Fensterhandle
Zunächst etwas zur Anwendung:
Ich habe eine LoginForm, bei bestandenem Login soll die MainForm geöffnet und die LoginForm verborgen werden. Diese Rückmeldung, ob bestanden oder nicht bekomme ich durch ein Event, ausgelöst in einem Thread, der Daten von einem Server empfängt.
Wenn der Login bestanden ist, rufe ich per BeginInvoke einen delegaten auf, der die MainForm öffnet und den Login verbirgt.
In der MainForm sende ich einige Daten an den Server und empfange daraufhin in der gleichen weise wieder Daten vom Server. Diese Daten schreibe ich in eine statische Klasse und rufe dann per BeginInvoke eine Methode der Form auf, die diese Daten ausliest und ausgibt (aus der statischen Klasse).

Nun zum Problem:
Bei einmaligem Einloggen funktioniert diese Prozedur einwandtfrei. Wenn ich mich jedoch aus und wieder einlogge funktioniert das BeginInvoke in der MainForm nicht mehr, weil er anscheinend kein Handle hat.

Fehler: Invoke oder BeginInvoke kann für ein Steuerelement erst aufgerufen werden, wenn das Fensterhandle erstellt wurde.

Das komische daran ist, dass wenn ich mir beim Debuggen im Konstruktor this.Handle angucke steht da was drin.

Frage:
Ist das Problem gelöst, wenn ich das Event des Empfangsthreads gleich mit BeginInvoke aufrufe und dann die Daten in der GUI verarbeite? Bzw. sollte ich das nicht so wie so machen, da ansonsten der Empfangsthread während der Verabeitung blockiert wird?

Danke schon mal für eure Antworten...

mfg Michael

16.10.2008 - 10:48 Uhr

Hallo,

ich hab den Computerspieler so erstellt, dass er nach einem bestimmten Muster nach Zugmöglichkeiten sucht. Bei schwer geht er dann alle möglichkeiten durch, bei mittel halt nicht alle und bei leicht nur ganz wenige. Das sieht in etwa so aus:


class ComputerSpieler
{


Point p;

public Point Klicke(schwierigkeit s)
{
    switch (s)
    {
        case s.leicht:
            return irgendein_freies_feld();
        case s.mittel:
            if (versuche_gegner_zu_blocken()) return p;
            else return irgendein_freies_feld();
        case s.schwer:
            if (versuche_eigene_reihe_zu_vollenden()) return p;
            else if (versuche_gegner_zu_blocken()) return p;
            else return irgendein_freies_feld();
    }
    return new Point();
}

private bool irgendein_freies_feld() {...}

private bool versuche_gegner_zu_blocken()
{
    .
    .
    .
    //Wenn möglich
    p = new Point(x, y);
    return true;
    .
    .
    //Wenn nicht möglich
    return false;
}

private bool versuche_eigene_reihe_zu_vollenden()
{
    .
    .
    .
    //Wenn möglich
    p = new Point(x, y);
    return true;
    .
    .
    //Wenn nicht möglich
    return false;
}


}

02.10.2008 - 14:45 Uhr

Hallo,

der KI war bisher mein erster, somit zur Übung gedacht. Dass das so nicht die beste Lösung ist, ist mir bewusst. Das System mit dem Selbstlernenden KI ist für dieses Spiel glaube ich dennoch übertrieben, weil es wie gesagt dann doch eher trivial ist. Ich werd ihm jetzt noch bestimmte Situations-Muster "beibringen", dass es wirklich fast unmöglich ist zu Gewinnen.

Zunächst hatte ich das ganze so gedacht, dass man auch Spieler1 zum Computer machen kann. Somit wäre es möglich den Computer als erstes ziehen zu lassen und auch Computer gegen Computer spielen zu lassen (wobei das eher unnötig ist)

Ich werd mich nochmal an den KI dransetzen und eine überarbeitete Version hochladen.
Ich versuche auch auf schon gegebene Vorschläge einzugehen.

mfg Michael

01.10.2008 - 22:27 Uhr

Dann muss ich wohl noch etwas an dem KI pfeilen^^ danke für eure Beiträge!

Wenn sich ein paar Vorschläge sammeln stell ich noch eine neuere Version rein.

mfg Michael

01.10.2008 - 22:14 Uhr

Hallo,

ich hatte mal nochmal den Anreiz ein kleineres Projekt zu erstellen und hab mir gedacht,
ich kann mich ja mal an einem TicTacToe-Spiel mit KI erproben. Folgende features "zieren" mein Projekt:

  • Spieler vs. Spieler
  • Spieler vs. Computer (leicht/mittel/schwer)
    Hierzu is zu sagen: Leicht ist ganz leicht,
    und ab Mittel ist es schon sehr schwer, schwer ist unmöglich
  • Comp. vs. Comp. (hab ich rausgeworfen, empfand ich als unnötig)

Ich hoffe es gefällt euch. Bei Bedarf häng ich den SourceCode an.
Bin für Verbesserungsvorschläge und Kritik immer offen!

mfg Michael

20.01.2008 - 12:54 Uhr

Inkonsistenter zugriff heißt normalerweiße, dass du von einem Public auf ein Private Feld oder Methode zugreifst, oder Von nem Statischen auf ein Nichtstatisches. Was es jetzt genau war weiß ich nid mehr, aber eins von den beiden wars. Hatte das Problem auch mal...^^

14.12.2007 - 23:42 Uhr

hab den Fehler grad entdeckt...^^ das Join() muss raus... dann gehts. Naja, is ja auch logisch. Wenn er auf den anderen Thread wartet macht er nid weiter!

14.12.2007 - 23:29 Uhr

das is ServerInstance:

class ServerInstance
    {
        public event Server.MessageEvent NewMessage;
        public event Server.CommandEvent NewCommand;
        private const int sleepTime = 200;
        public Thread serverThread;
        public TcpClient client;
        public ClientInfo info;
        private Command currentCommand;
        private String password;
        public bool authenticated = false; 
        const int bufferSize = 10240;

        public ServerInstance(String password)
        {
            this.password = password;
        }

        public void Start(TcpClient _client)
        {
            serverThread = new Thread(new ThreadStart(Process));
            this.client = _client;
            serverThread.Start();
            serverThread.Join();
        }

        public void Process()
        {
            while (true)
            {
                bool working = false;
                NetworkStream ns = this.client.GetStream();
                if (ns.DataAvailable)
                {
                    BinaryFormatter bf = new BinaryFormatter();
                    currentCommand = (Command)bf.Deserialize(ns);
                    HandleCommand(currentCommand);

                    working = true;
                }
                if (!working)
                    Thread.Sleep(sleepTime);
            }
        }

        private void HandleCommand(Command command)
        {
            if (authenticated)
            {
                if (command.CommandLine == "Exit")
                {
                    Close();
                }
                else
                {
                    CommandToServer(command);
                }
            }
            else if (command.CommandLine == "LogIn")
            {
                if (password == command.clientInfo.Password)
                {
                    authenticated = true;
                    this.info = command.clientInfo;
                    HandleMessage(info.Username + " logged on...");

                    Command com = new Command();
                    com.CommandLine = "LogInOK";
                    Send(com);
                }
                else
                {
                    HandleMessage("LogIn failed...");
                    Command com = new Command();
                    com.CommandLine = "LogInFail";
                    Send(com);
                    serverThread.Abort();
                }
            }
            if (command.CommandLine.StartsWith("Get"))
            {
                if (command.CommandLine.Substring(3) == "Users")
                {
                    // Alle User mit ";" getrennt anhängen
                    Command com = new Command();
                    com.CommandLine = "UserList";
                    foreach (ServerInstance instance in Info.Clients)
                    {
                        com.Param += instance.info.Username + "|";
                    }
                    com.Param += ";";
                    Send(com);
                }
            }
        }

        public void HandleMessage(string message)
        {
            if (NewMessage != null)
                NewMessage(message);
        }

        private void CommandToServer(Command command)
        {
            if (NewCommand != null)
                NewCommand(command);
        }

        public void Close()
        {
            this.client.Close();
            HandleMessage(currentCommand.clientInfo.Username + " logged off...");
            serverThread.Abort();
        }

        public void Send(Command command)
        {
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(this.client.GetStream(), command);
        }
    }
11.12.2007 - 20:26 Uhr

Hallo.
Ich experimentiere im mom so ein bischen mit Client/Server-Anwendungen.
Soweit funktioniert das auch schon, jetzt hab ich nur das Problem, dass ich im mom nur mit einem Client an den Server kann. Das hängt, so vermute ich mit meiner Schleifenkonstruktion zusammen:


        public void MainListener()
        {            
            // Alle Netzwerk-Schnittstellen abhören
            TcpListener listener = new TcpListener(ipAddress, listenPort);
            listener.Start();
            HandleMessage("Server started...");
            try
            {
                do
                {
                    if (listener.Pending())
                    {
                        TcpClient newClient = listener.AcceptTcpClient();
                        HandleMessage("New client request (" +
                                        "IP: " + newClient.Client.RemoteEndPoint + ", " +
                                        "Port " + ((IPEndPoint)newClient.Client.LocalEndPoint).Port.ToString() + ")");
                        ServerInstance newConnection = new ServerInstance(this.password);
                        Info.Clients.Add(newConnection);
                        newConnection.NewMessage += new MessageEvent(HandleMessage);
                        newConnection.NewCommand += new CommandEvent(HandleCommand);
                        newConnection.Start(newClient);  //Bleibt hier stehen. Fährt erst dann fort, wenn die Verbindung getrennt wird
                    }
                    else
                    { Thread.Sleep(sleepTime); }
                } while (true);
            }
            catch (ThreadAbortException) { }
            catch (Exception ex)
            {
                throw new Exception("Fehler bei Verbindungserkennung!", ex);
            }
        }

Jetzt bleibt das ganze an der gekennzichneten stelle stehen, und die Schleife fährt erst dann fort, wenn die Verbindung beendet wird. Woran könnte das denn liegen?

Danke schon mal im voraus!

30.11.2007 - 14:40 Uhr

Also EgoShooter nur selten... bei mir gehts eher in Richtung RPG, oder Strategie.
Z.B. Guild Wars oder Herr der Ringe: Schlacht um Mittelerde

04.11.2007 - 12:01 Uhr

Hallo, Problem hat sich erledigt...

Also, hier die Lösung:
Das Verwaltungstool funktioniert nicht, wenn die Projektdaten der WebSite auf einer anderen Partition liegen, als das Betriebssystem. Folglich, wenn auf C:\ Windows ist muss auch auf C:\ das Projekt abgelegt sein

04.11.2007 - 01:32 Uhr

Hallo, ich habe folgendes Problem:
Ich habe zwei Internetseiten, auf der einen befindet sich ein Login-Control, auf der anderen im mom noch gar nichts. Wenn ich jetzt Website/ASP.NET Konfiguration oder beim Login-Control auf Website verwalten gehe, kommt diese Meldung: "Es ist ein Fehler aufgetreten. Kehren Sie zur vorhergehenden Seite zurück, und versuchen Sie es erneut."

Weiß nicht wirklich weiter

01.11.2007 - 13:24 Uhr

Würde bestimmt auch seine Funktion in Spielen finden... Pinkelpause

01.11.2007 - 13:17 Uhr

@norman_timo: Screen aus Guild Wars... Würde mal auf Kristallwüste tippen

23.10.2007 - 20:27 Uhr

Also ich hatte mal den MDA Compact I, fand ich nicht allzu praktisch, vor allem wegen der größe, dem anfälligen Touchscreen, der geringen ergonomie beim telefonieren und letzten endes weil immer das Akkufach aufging und somit dann direkt ein elendig langer Neustart durchgeführt wurde. Wie die neueren sind weiß ich nicht. D.h. meine Kritik kann auch schon wieder hinfällig sein, wenn man neuere Modelle betrachtet. Ansonsten kann man sich von den Funktionen her nicht beklagen.

19.10.2007 - 00:04 Uhr

Bei meinem Mp3-Player hab ich eine Library hier aus dem Forum genutzt:
klick mich

18.10.2007 - 23:59 Uhr

Bei mir sieht das so aus:

  • 2.0 Ghz AMD Sempron
  • 1GB Ram
  • FX5700 nVidia
  • 160GB System; 250GB Datenplatte
  • 1x 19" Monitor...

Am Arbeitsplatz von meinem Vater stehen 2x 21" HP TFT's... sehr zu empfehlen so was... da hat man gleich viel mehr überblick. Ansonsten vielleicht noch ein bischen mehr RAM, aber sonst mehr als ausreichend zum Coden.

14.10.2007 - 20:30 Uhr

Ich schließe mich den Glückwünschen mal an...

10.000 User, da sieht man, das das Konzept dieser Community irgendwie ja aufgeht.

Weiter so...!

14.10.2007 - 09:21 Uhr

Na wenn den jemand haben will, kann er ihn haben... andere Frage ist, ob er so sauber ist...
Bin nähmlich erst seit nem halben Jahr richtig dabei...

Zu dem Problem mit dem König nochmal: Das werd ich vorerst nicht behandeln, wenn ich nähmlich meine Methode zum Überprüfen ob Matt oder nicht fertig hab, schmeiß ich die momentane, nicht funktionale Überprüfung raus.

14.10.2007 - 00:23 Uhr

Bei mir war das so, dass ich mir "Visual C# 2005 - Schritt für Schritt" angeignet hab und dann beim ersten Projekt danach auf die Suche nach nem Forum gegangen bin. Joa... und mittlerweile bin ich sogar MCP...^^

14.10.2007 - 00:20 Uhr

Hallo,

Zu AntiVir: Nichts gutes gehört... schlechte erkennungsraten und so... kann aber auch anders sein..

Zu Kasperski: Fast so sicher wie Kabel durchschneiden, bringt aber auch Teilweise dessen Nachteile mit sich... wie auch schon angesprochen: Blockiert manchmal.

Zu mir selbst: Ich benutze eTrust AntiVirus und hab mir seit dem nichts mehr eingefangen.

14.10.2007 - 00:11 Uhr

hier noch grad nen Screenshot...

14.10.2007 - 00:06 Uhr

Hallo, nach einer etwas längeren Zeit meld ich mich mit meinem neuen Projekt mal wieder zurück...
Wie sich aus dem Namen schon schließen lässt, handelt es sich hierbei um ein Schachspiel in 2D-Grafik.
Leider ist es noch nicht ganz fertig, aber soweit schon funktionsfähig.
Zu spielen ist es Spieler gegen Spieler, Computergegner hab ich mir mal erlaub wegzulassen xD.
An der Überprüfung, ob Schachmatt oder nicht, sitze ich grad noch...
kann auch noch etwas dauern, das es sich als recht kompliziert erweist.

Ansonsten könnt ihr ja mal eure Eindrücke schildern... freue mich über jede konstruktive Kritik

Viel Spaß beim testen!

13.10.2007 - 23:58 Uhr

Hallo, ich hab mich in letzter Zeit auch mal etwas mit Bryce beschäftigt, evtl. könnte ich auch meinen bescheidenen Beitrag dazu leisten...
<--- Der Avatar is z.B. auch aus Bryce...

unten mal noch ein Beispiel:

24.08.2007 - 15:31 Uhr

Also ich weiß nid... man kann das zwar auf dem Video nid erkennen, aber ich würd mal fast sagen, dass das einfach neu vertont ist und der eigentlich was ganz anderes Fragt. Wenn es denn wirklich echt ist... dann sag ich ma:
Hell wie e Päckche dunkel

23.08.2007 - 18:51 Uhr

Hallo, ich hab das ganze mal mit einen Char-Array und einem Timer realisiert.
Dann werden pro Intervall in einer for schleife die einzelnen Chars in ein Label/TextBox geschrieben(angehängt) mit einer int-Variable setze ich dann immer noch den offset hoch, d.h., dass er dann nachher auch weiß, wo er im array anfangen soll. Und dann muss man halt noch überprüfen, ob er über das array hinausgeht und im entsprechenden fall, wieder von vorna anfangen.

23.08.2007 - 18:39 Uhr

Hallo, wo soll er den das "F" und das "G" herholen?