Type tPersonen anzahl As Integer kampfkraft As UByte motivation As UByte End Type Type tHeer milizen As tPersonen infanteristen As tPersonen kavalleristen As tPersonen artilleristen As tPersonen pferde As UInteger schwerter As UInteger hellebarden As UInteger spiesse As UInteger kanonen As UInteger musketen As UInteger pistolen As UInteger lanzen As UInteger saebel As UInteger End Type Type tFeldherr name_ As String rang As UByte kriegskasse As Integer heer As tHeer End Type Dim As tFeldherr spieler(1) Type tPosition x As Single 'x - Position auf dem Schlachtfeld y As Single 'y - Position auf dem Schlachtfeld End Type Type tKrieger zugehoerigkeit : 1 As UInteger '1 Bit: Freund = 0 / Feind = 1 typ : 2 As UInteger '2 Bits: Milizionär, Infanterist, Kavallerist oder Geschütz 'Bewaffnung --> je 1 Bit: 1 = Waffe vorhanden / 0 = Waffe nicht vorhanden schwert : 1 As UInteger hellebarde : 1 As UInteger spiess : 1 As UInteger muskete : 1 As UInteger pistole : 1 As UInteger lanze : 1 As UInteger position As tPosition kampfkraft As UByte 'von 0 - 255 motivation As UByte 'bei Infanterie und Kavallerie von 0 - 255 ladezustand As UByte 'bei Artillerie, Muskete und Pistole in % verwundung As UByte 'in % End Type Enum miliz = 0 infanterie kavallerie artillerie End Enum Declare Sub schlachtfeld_darstellen(krieger() As tKrieger) 'For x As Integer = 1 To 20 ' ? IIf(1,(Rnd * 100)/(Rnd * 1000),0) 'Next 'Sleep 'End 'testarmeen erstellen With spieler(0) .name_ = "Feldherr 0" .rang = 2 .kriegskasse = 150000 With .heer With .milizen .anzahl = 3000 .kampfkraft = 50 .motivation = 10 End With With .infanteristen .anzahl = 100 .kampfkraft = 200 .motivation = 200 End With With .kavalleristen .anzahl = 100 .kampfkraft = 200 .motivation = 200 End With With .artilleristen .anzahl = 100 .kampfkraft = 200 .motivation = 200 End With .pferde = 50 .schwerter = 200 .hellebarden = 60 .spiesse = 20 .kanonen = 0 .musketen = 120 .pistolen = 150 .lanzen = 200 .saebel = 200 End With End With With spieler(1) .name_ = "Feldherr 1" .rang = 2 .kriegskasse = 150000 With .heer With .milizen .anzahl = 3000 .kampfkraft = 50 .motivation = 20 End With With .infanteristen .anzahl = 100 .kampfkraft = 200 .motivation = 200 End With With .kavalleristen .anzahl = 100 .kampfkraft = 200 .motivation = 200 End With With .artilleristen .anzahl = 100 .kampfkraft = 200 .motivation = 200 End With .pferde = 50 .schwerter = 1 .hellebarden = 50 .spiesse = 1000 .kanonen = 0 .musketen = 120 .pistolen = 150 .lanzen = 200 .saebel = 200 End With End With 'krieger für die schlacht erstellen ReDim As tKrieger krieger(0) Dim As Integer k, kmax0, x k = 0 For x = 0 To 1 'beide spieler 'milizionäre With spieler(x).heer For y As Integer = 1 To .milizen.anzahl If .schwerter + .hellebarden + .spiesse = 0 Then Exit For EndIf k += 1 ReDim Preserve krieger(k) krieger(k).zugehoerigkeit = x krieger(k).typ = miliz krieger(k).kampfkraft = .milizen.kampfkraft krieger(k).motivation = .milizen.motivation If .schwerter Then krieger(k).schwert = 1 .schwerter -= 1 ElseIf .hellebarden Then krieger(k).hellebarde = 1 .hellebarden -= 1 ElseIf .spiesse Then krieger(k).spiess = 1 .spiesse -= 1 EndIf Next End With If x = 0 Then 'maximalen index von spieler 0 merken kmax0 = k EndIf Next 'For x = kmax0 - 1 To kmax0 + 1 ' ? kmax0;" ";x;" ";krieger(x).zugehoerigkeit 'Next 'Sleep 'End '#Include "crt.bi" ''################## 'Dim As String sendeString = String(SizeOf(tFeldherr), Chr(0)) 'Dim pt As UByte Ptr = @spieler(0) 'Dim s As tFeldherr = spieler(0) ''Dim As tFeldherr bar ''sendeString = Cast(String,s) ' 'For x As Integer = 0 To SizeOf(tFeldherr) - 1 ' sendeString[x] = pt[x] 'Next ' ''memcpy(StrPtr(sendeString), @spieler(0), SizeOf(tFeldherr)) '? SizeOf(tFeldherr) 'Print sendeString ' 'Open ExePath + "\variable.txt" For Output As #1 'Print #1, sendeString; 'Close ? UBound(krieger) Dim As tPosition schlachtfeld, posmil schlachtfeld.x = 500 'grösse des schlachtfelds in metern schlachtfeld.y = 800 'krieger auf dem schlachtfeld platzieren 'spieler 0 'anfangswerte posmil.x = 10 '10m vom linken rand posmil.y = schlachtfeld.y - 10 '10m vom unteren rand For x = 1 To kmax0 'spieler 0 (grün) With krieger(x) posmil.x += 3 '3m nach rechts If posmil.x > schlachtfeld.x - 10 Then 'rechter rand erreicht posmil.y -= 2 '2m nach oben (= nächste reihe) posmil.x = 10 '10m vom linken rand EndIf .position.x = posmil.x 'position in objektvariable schreiben .position.y = posmil.y End With Next 'spieler 1 'anfangswerte posmil.x = schlachtfeld.x - 10 '10m vom rechten rand posmil.y = 10 '10m vom oberen rand For x = kmax0 + 1 To k 'spieler 1 (rot) With krieger(x) posmil.x -= 3 '3m nach links If posmil.x < 10 Then 'linker rand erreicht posmil.y += 2 '2m nach unten (= nächste reihe) posmil.x = schlachtfeld.x - 10 '10m vom rechten rand EndIf .position.x = posmil.x 'position in objektvariable schreiben .position.y = posmil.y End With Next 'kontrolle ScreenRes schlachtfeld.x, schlachtfeld.y, 32 Dim As Single geschwindigkeit(UBound(krieger)), geschw For x As Integer = 1 To UBound(krieger) geschwindigkeit(x) = Rnd * 2 + 100 Next Do For x As Integer = 1 To UBound(krieger) geschw = geschwindigkeit(x)/500 krieger(x).position.y += IIf(krieger(x).zugehoerigkeit,geschw,-geschw) If (krieger(x).position.y < 0) Or (krieger(x).position.y > schlachtfeld.y) Then geschwindigkeit(x) *= -1 EndIf Next schlachtfeld_darstellen(krieger()) 'Sleep 1'00 Loop While InKey = "" Sleep Sub schlachtfeld_darstellen(krieger() As tKrieger) ScreenLock Cls For x As Integer = 1 To UBound(krieger) With krieger(x) PSet (.position.x, .position.y),IIf(.zugehoerigkeit,RGB(255,0,0),RGB(0,255,0)) End With Next ScreenUnLock End Sub