Neuigkeiten:

[13. Nov 2022] Upgrade auf SMF 2.1.

Hauptmenü

Die neue VB.NET-Version... News und Infos

Begonnen von Stiepen, 07. Juli 2011, 16:50:12

⏪ vorheriges - nächstes ⏩

Stiepen

Nun, da ich schon einige Zeit an der nachsten Version arbeite, Ist mir die Idee gekommen, einen neuen Beitrag zu öffnen, um den Entwicklungsstatus mit den Anderen zu Teilen.

Nun - Das ist er!

Derzeit arbeite ich an der Benutzeroberfläche.

Jojos Vorschlag
Zitat von: Jojo am 04. Juli 2011, 20:55:06bei github oder so ein Repository an[zu]legen, um den Code (bzw auch die unterschiedlichen Versionen) besser verwalten zu können[,]
bin ich noch nicht weiter Nachgegangen, werde das aber Gleich mal machen.
Wer Rächtschreipfehlär findet, darf sie behalten

Jojo


Stiepen

Sorry, Aber ich komme mit git nicht wirklich klar:

Ich habe ein VB2010-Projektverzeichnis. Aber wie lade ich das jetzt hoch ???
Wer Rächtschreipfehlär findet, darf sie behalten

Jojo

Man kann da nichts "hochladen". Du brauchst dafür einen Git-Client, z.B. TortoiseGit.

Stiepen

#4
Hallo,

Ich hab mal eine Frage: Warum hast du eigentlich für Meldungsfenster eine eigene Klasse definiert, wo doch VB eine Funktion dafür bietet?

Ich frag mal nur so aus Interesse...

EDIT: Der Statische Teil(d.h. alles was nicht vom code erstellt wird) des Hauptfensters ist Fertig. Ich baue jetzt ersteinmal Neues Hotel, Speichern/Laden, und Importfunktion für .sav-Dateien ein

EDIT2: VB.NET lässt leider keine Arrays mit indizes < 0 zu. Und da ich viel Code kopiere *pfeif* muss ich das ganze Umschreiben. und ja ich hab längere Zeit nichts mehr an HM.NET Gemacht *ein weiteres mal: pfeif*

<longedit id="3">

Ich brauche hilfe beim Umgang mit der BASS-Bibliothek. kannst du mir da helfen?
ich hab mir ersteinmal die BASS.NET gedownloaded. jetzt versuche ich es mit deinem code bzw. der Übersetzung und hab (welch ein Wunder) keinen Fehler im Code. wenn ich weiß obs geht melde ich mich nochmal.
eigentlich brauche ich die bass.dll nicht, da vb.net dafür eine Methode namens My.Computer.Audio.Play() bietet. aber zumindest die Hintergrundmusik wollte ich über bass laufen lassen, da ich nur so den play-fortschritt anzeigen lassen kann und prüfen kann, ob dasstück zu ende ist.

</longedit>;)

Wer Rächtschreipfehlär findet, darf sie behalten

Jojo

Zitat von: Stiepen am 27. August 2011, 19:12:39Ich hab mal eine Frage: Warum hast du eigentlich für Meldungsfenster eine eigene Klasse definiert, wo doch VB eine Funktion dafür bietet?
Meine eigene MessageBox hat auch eigene Icons, die in das restlichen Icon-Schema der Anwendung passen, und erzeugt zudem keinen Systemsound, sondern Programmspezifische Sounds.

ZitatEDIT2: VB.NET lässt leider keine Arrays mit indizes < 0 zu. Und da ich viel Code kopiere *pfeif* muss ich das ganze Umschreiben. und ja ich hab längere Zeit nichts mehr an HM.NET Gemacht *ein weiteres mal: pfeif*
Dafür kann man sich ja eigene Container-Klassen definieren, die z.B. intern das Range -2...100 auf 0...102 mappen.

ZitatIch brauche hilfe beim Umgang mit der BASS-Bibliothek. kannst du mir da helfen?
BASS ist wirklich easy, wenn du Probleme damit hast, frage am besten im BASS-Forum nach, da wird dir garantiert schneller geholfen werden v.a. weil ich dir wirklich nur mit der Original-BASS-Bibliothek helfen kann, nicht aber mit BASS.net.
Übrigens bezweifle ich (schon allein wegen dem Klassennamen), dass die .net-Funktionen für komplexes Audio-Mixing in Spielen gedacht sind. Der HotMan spielt ja "nicht nur" Sounds ab, sondern blendet auch zwischen ihnen über und ähnliches.

Stiepen

OK, das ist mir noch gar nicht aufgefallen, ich beschäftige mich grad mit BASS. liegen die musik/sound-dateien irgendwo (wenn ja, wo) einzeln vor? ich habe einen freund, der sich mit mixing u.Ä. beschäftigt. darf ich ihn mal beauftragen ein neues stück für den HotMan zu entwickeln?
Wer Rächtschreipfehlär findet, darf sie behalten

Jojo

#7
Die Musik gibt's unter anderem hier, das Extrahieren der Sounds bleibt zur Übung überlassen (sollte wirklich kein Problem bei einem Open-Source-Programm sein...). ;)

Stiepen

#8
Ja ich werde im Quelltext nocheinmal auf spurensuche gehen;) ich meld mich nochmal

EDIT: der link leitet mich immer auf http://rumba.microfocus.com/ um
Wer Rächtschreipfehlär findet, darf sie behalten

Jojo


Stiepen

#10
Jau link geht. hab ihn auch gleich meinem freund geschickt, damit er mal einen eindruck hat, was das für musik ist, die wir für hm brauchen  ;)

EDIT: zu bass: leider läuft die original-bibliothek nicht unter vb.net :(
Wer Rächtschreipfehlär findet, darf sie behalten

Jojo

Zitat von: Stiepen am 28. August 2011, 23:15:01
was das für musik ist, die wir für hm brauchen  ;)
Am besten Fahrstuhlmusik.

Zitat: zu bass: leider läuft die original-bibliothek nicht unter vb.net
Ja klar, BASS.net ist ja auch nur ein .net-Wrapper für BASS. Das kann nicht mehr und nicht weniger als BASS. Ich kann dir aber trotzdem nicht helfen, wenn irgendwas mit BASS.net nicht funktioniert, weil ich es nicht benutze.

Stiepen

#12
Zitat von: Jojo am 29. August 2011, 01:10:24
Zitat von: Stiepen am 28. August 2011, 23:15:01
was das für musik ist, die wir für hm brauchen  ;)
Am besten Fahrstuhlmusik.
das bezog sich eher auf hintergrundmusik, aber ich leite es mal witer...
Zitat
Zitat: zu bass: leider läuft die original-bibliothek nicht unter vb.net
Ja klar, BASS.net ist ja auch nur ein .net-Wrapper für BASS. Das kann nicht mehr und nicht weniger als BASS. Ich kann dir aber trotzdem nicht helfen, wenn irgendwas mit BASS.net nicht funktioniert, weil ich es nicht benutze.
Hatte ich nicht anders erwartet. aber es ist auf jedeen fall einfacher zu bedienen (zumindest auf en ersten blick)  ;)
Wer Rächtschreipfehlär findet, darf sie behalten

Stiepen

#13
So: Ich hab hier mal den derzeitigen Stand des Quelltextes der Hotel/Filialenklasse:
Leier musste ich neu beginnen, da sich im alten Projekt die Toolbarbuttons in der Mainform gelöscht haben (der Fehler lag irgendwo in den Ressourcen). In dem Zusammenhang hab ich das Ganze vollständig überarbeitet.


Public Class clsHotelKette
#Region "Declares (Private)"
    Private _Geld As UInt64
    Private _Hotels As List(Of clsFiliale)
#End Region
#Region "Declares (Public)"
    Public Event MoneyChanged(ByVal sender As System.Object, ByVal e As EventArgs)
    Public Event GameOver(ByVal sender As System.Object, ByVal e As GameOverEventArgs)
    Public Structure GameOverEventArgs
        Dim Reason As GameOverReason
    End Structure

    Public Enum GameOverReason
        Unknown = 0
        NotEnougthMoney = 1
        HotelToBad = 2
    End Enum
#End Region
#Region "Propertys (Public)"
    ''' <summary>
    ''' Das Geld, dass dem Spieler zur Verfügung steht
    ''' </summary>
    ''' <value>Der Wert in $</value>
    ''' <returns>Der Wert in $</returns>
    ''' <remarks></remarks>
    Public Property Money As UInt64
        Set(ByVal value As UInt64)
            If value < GameOverMoney Then
                Dim tmpEventArgs As GameOverEventArgs
                tmpEventArgs.Reason = GameOverReason.NotEnougthMoney
                RaiseEvent GameOver(Me, tmpEventArgs)
            Else
                _Geld = value
                RaiseEvent MoneyChanged(Me, Nothing)
            End If
        End Set
        Get
            Return _Geld
        End Get
    End Property
#End Region
#Region "Methoden/Funktionen (Private)"

#End Region
#Region "Methoden (Public)"
    ''' <summary>
    ''' Fügt der Liste der Filialen eine neue Filiale hinzu
    ''' </summary>
    ''' <param name="Filiale">Die hinzuzufügende Filiale</param>
    ''' <exception cref="NotConstructedException">Der Konstruktor der übergebenden Filiale wurde noch nicht aufgerufen</exception>
    ''' <exception cref="ArgumentException">Es existiert bereits eine Filiale mit dem angegebenen Nameen</exception>
    ''' <remarks></remarks>
    Public Sub AddFiliale(ByVal Filiale As clsFiliale)
        For Each el In _Hotels
            If el.Name = Filiale.Name Then
                Throw New ArgumentException("Es existiert schon eine Filiale mit diesem namen")
            Else
                If Filiale.IsConstructed Then
                    _Hotels.Add(Filiale)
                Else
                    Throw New NotConstructedException("Der konstrukter der Filiale wurde nicht aufgerufen")
                End If
            End If
        Next

    End Sub

#End Region
End Class
Public Class clsFiliale
#Region "Declares (Private)"
    Private _Name As String
    Private _isConstructed = False 'Wurde der Konstruktor aufgerufen?
    Private _Hotel(102, 99) As Roominfo

#End Region
#Region "Declares (Public)"
    Public Enum RoomType As Integer
        Kein = 0 'Hier ist Luft
        Leer = 1 'Leerer Raum
        '---Wohnen---
        EinzelNormal = 2
        DoppelNormal = 3
        EinzelLuxus = 4
        EinzelLuxs = 5
        Suite = 6
        '---Attraktionen---
        Kiosk = 7
        Gesellschaft = 8
        Casino = 9
        Sporthalle = 10
        Schwimmbad = 11
        Kino = 12
        '---Sonstige---
        Empfang = 13 '13 - Muhahaha da krigt man ja schon beim check-in das kalte grausen ;)
        Küche = 14
        Tiefgarage = 15
        Kühlraum = 16
        Aufzug = 17
    End Enum
    Public Enum RoomPosition As Integer
        none = 0
        Links = 1
        Rechts = 2
        ObenLinks = 1
        ObenRechts = 2
        UntenLinks = 3
        UntenRechts = 4
    End Enum
    Public Structure RoomInfo
        Dim Type As RoomType
        Dim Position As RoomPosition 'Nur für mehrfeld-Räume interessant
        Dim Belegt As Boolean
        Dim BelegtTage As UInteger 'Wenn ja, wie lange noch?
    End Structure
#End Region
#Region "Propertys (Public)"
    ''' <summary>
    ''' Der Name der Filiale
    ''' </summary>
    ''' <value> Der Name der Filiale</value>
    ''' <returns> Der Name der Filiale</returns>
    ''' <exception cref="ArgumentException">Ungültiger Name</exception>
    ''' <remarks></remarks>
    Public Property Name As String
        Set(ByVal value As String)
            Select Case value
                Case ""
                    Throw New ArgumentException("Der Name kann nicht leer Sein")
                Case value.Length > 32
                    Throw New ArgumentException("Der Name darf Maximal 32 Zeichen lang sein")
                Case Else
                    _Name = value
            End Select
        End Set
        Get
            Return _Name
        End Get

    End Property
    ''' <summary>
    ''' Prüft, Ob bereits der Constructor aufgerufen wurde
    ''' </summary>
    ''' <returns>Ein Boolscher Wert, der Angibt, ob der Konstruktor bereits aufgerufen wurde</returns>
    ''' <remarks></remarks>
    Public ReadOnly Property IsConstructed
        Get
            Select Case _isConstructed
                Case True
                    Return True
                Case False
                    Return False
                Case Else 'schließt den Fall nothing ein
                    Return False
            End Select
        End Get
    End Property
#End Region
#Region "Methoden/Funktionen (Private)"

#End Region
#Region "Methoden/Funktionen (Public)"
    ''' <summary>
    ''' Erstellt eine neue Instanz
    ''' </summary>
    ''' <param name="FilialenName">Der Name der Neuen Filiale</param>
    ''' <exception cref="ArgumentException">Ungültiger Name</exception>
    ''' <remarks></remarks>
    Public Sub New(ByVal FilialenName As String)
        Try
            Name = FilialenName
            _isConstructed = True
        Catch ex As Exception
            Throw ex 'Die Arbeit an den Aufrufenden delegieren - Nein, wir sind nicht faul ;) *unschuldig*
        End Try

    End Sub
    ''' <summary>
    ''' Setzt die Informationen für ein Hotelzimmer
    ''' </summary>
    ''' <param name="Etage">Die Etage des Zimmers: U2 = -2; U1 = -1; EG = 0; OGxx = xx</param>
    ''' <param name="ZimmerNr">Vertikale Zimmerposition 1 = ganz Links</param>
    ''' <param name="value">Der Wert den Das Zimmer erhalten soll</param>
    ''' <remarks></remarks>
    Public Sub SetRoomInfo(ByVal Etage As Int16, ByVal ZimmerNr As UInt16, ByVal value As RoomInfo)
        _Hotel(Etage + 2, ZimmerNr - 1) = value
    End Sub
    ''' <summary>
    ''' Gibt die Informationen für ein Hotelzimmer zurück
    ''' </summary>
    ''' <param name="Etage">Die Etage des Zimmers: U2 = -2; U1 = -1; EG = 0; OGxx = xx</param>
    ''' <param name="ZimmerNr">Vertikale Zimmerposition 1 = ganz Links</param>
    ''' <returns>Der Wert den Das Zimmer derzeit hat</returns>
    ''' <remarks></remarks>
    Public Function getRoomInfo(ByVal Etage As Int16, ByVal ZimmerNr As UInt16)
        Return _Hotel(Etage + 2, ZimmerNr - 1)
    End Function
#End Region
End Class


Sagmal Jojo, kannste nicht ne Spoilerfunktion ins Forum einbauen?(also dass der code versteckt ist und man ihn über einen button ein- und wieder ausblenden kann) ;)
dann könnte man das besser lesen...

EDIT: Mir fällt grad auf Dungeon2 läuft unter Win7 64-Bit nicht :(
Wer Rächtschreipfehlär findet, darf sie behalten

Jojo

Zitat von: Stiepen am 29. August 2011, 01:15:41
das bezog sich eher auf hintergrundmusik, aber ich leite es mal witer...
Das war mir auch klar und deswegen habe ich ja auch so geantwortet.

ZitatSagmal Jojo, kannste nicht ne Spoilerfunktion ins Forum einbauen?
Der Code wird doch in der Größe begrenzt, das reicht völlig. Ich installiere keine Forenmods, die machen nur das Aktualisieren den Forensoftware zum Albtraum.

ZitatEDIT: Mir fällt grad auf Dungeon2 läuft unter Win7 64-Bit nicht
Klar, ist ja auch wie ein Großteil meiner Spiele ein DOS-Spiel.