Karoblock Rally

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

mabox

Betreff: Karoblock Rally

BeitragSo, Mai 18, 2008 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Einige von euch kennen es vielleicht. Ein Spiel welches man zu zweit (oder mehr) auf einem karierten Block spielt. Man zeichnet sich eine Rennstrecke und "fährt" sie dann ab. die Geschwindigkeit ist die länge der Striche und man kann nicht beliebig schnell beschleunigen oder abbremsen, auch die Kurven kann man nicht beliebig fahren, denn es gillt folgende Regel.
Die Fahrtlinie wird in fahrtrichtung an sich selbst angehängt. Ihr Endpunkt ist der neue Mittelpunkt. Die neuen Fahrtmöglichkeiten sind die 8 Punkte (umliegende kästchen) um diesen Punkt und der Punkt selbst.
user posted image

Ich hab so ein kleines Spiel im Urlaub programmiert weil wir es spielen wollte und wir keinen karierten Block hatten. Bis jetzt ist es nur für 2 Spieler spielbar und hat noch kleine Fehler.
Ich will das ganze aber noch mit einer KI versehen damit man es auch alleine gegen den PC spielen kann.
Kennt einer von euch ein gutes tutorial über KI (möglichst ein deutsches)

noch eine Frage: Wie soll ich das an besten mit der Kollision machen?
Wenn die Fahrtlinie mit dem Rand kollidiert hat man verloren. Bis jetzt geht das mit Imagescollide, aber wie kann man das mit der KI vereinen, also das die kapiert wo sie langfahren darf und wo nicht. Ist es vielleicht besser den Streckenrand in einzelnen Punkten abzuspeichern? also so das man schaut wie der x Wert bei welchen y Wert ist?
Das Spiel soll später so sein, dass sich jeder selber strecken malen kann.

hier mal mein aktueller Code: [AUSKLAPPEN]
Global x_graph = 800
Global y_graph = 600
Graphics x_graph,y_graph,0,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
Global bild
Global rally = LoadImage ("rally1.png")
MaskImage rally,255,255,255
ClsColor 255,255,255

Dim x_line_start_alt(2)
Dim y_line_start_alt(2)
Dim x_line_start(2)
Dim y_line_start(2)
Dim x_line_end(2)
Dim y_line_end(2)

Global kaestchen_groesse = 15
Global spieler = 1
Global kollision
x_line_start(spieler) = 25
y_line_start(spieler) = 8
x_line_end(spieler) = x_line_start(spieler)
y_line_end(spieler) = y_line_start(spieler)
spieler = 2
x_line_start(spieler) = 25
y_line_start(spieler) = 10
x_line_end(spieler) = x_line_start(spieler)
y_line_end(spieler) = y_line_start(spieler)
timer = CreateTimer (100)
spieler = Rand(1,2)

Repeat
   Cls
   WaitTimer (timer)
   kaestchen_einzeichnen()
   DrawImage rally,0,0
   fahrtmoeglichkeiten_einzeichnen()
   ziellinie()
   If bild > 0 Then DrawImage bild,0,0
;   Text 0,0,kollision
;   Text 0,20,(2*x_line_end(spieler)-x_line_start(spieler)+r)*kaestchen_groesse
   FlushMouse
   Flip 0
Until KeyHit(1)


Function kaestchen_einzeichnen()
   Color 220,220,220
   For i = 1 To x_graph / kaestchen_groesse
      Line i * kaestchen_groesse,0,i * kaestchen_groesse,y_graph
      Line 0,i * kaestchen_groesse,x_graph,i * kaestchen_groesse
   Next
End Function
Function fahrtmoeglichkeiten_einzeichnen()
   kollision = 0
   For t = -1 To 1
      For r = -1 To 1
         If spieler = 1 Then
            Color 220,0,0
         Else
            Color 0,220,0
         EndIf
         If (2*x_line_end(spieler) - x_line_start(spieler) + r)*kaestchen_groesse < 0 Or (2*x_line_end(spieler) - x_line_start(spieler) + r)*kaestchen_groesse > x_graph Or (2*y_line_end(spieler) - y_line_start(spieler) + t)*kaestchen_groesse < 0 Or (2*y_line_end(spieler) - y_line_start(spieler) + t)*kaestchen_groesse > y_graph Then
            kollision = kollision +1
         EndIf
         
         If ImageRectCollide (rally,0,0,0,(2*x_line_end(spieler) - x_line_start(spieler) + r)*kaestchen_groesse-2,(2*y_line_end(spieler) - y_line_start(spieler) + t)*kaestchen_groesse-2,5,5) = False Then
            Oval (2*x_line_end(spieler) - x_line_start(spieler) + r)*kaestchen_groesse-2,(2*y_line_end(spieler) - y_line_start(spieler) + t)*kaestchen_groesse-2,5,5
            Color 0,0,255
            If MouseX() < (2*x_line_end(spieler) - x_line_start(spieler) + r)*kaestchen_groesse+(kaestchen_groesse/2) And MouseX() >(2*x_line_end(spieler) - x_line_start(spieler) + r)*kaestchen_groesse-(kaestchen_groesse/2) And MouseY() < (2*y_line_end(spieler) - y_line_start(spieler) + t)*kaestchen_groesse+(kaestchen_groesse/2) And MouseY() > (2*y_line_end(spieler) - y_line_start(spieler) + t)*kaestchen_groesse-(kaestchen_groesse/2) Then
               Oval (2*x_line_end(spieler)-x_line_start(spieler)+r)*kaestchen_groesse-4,(2*y_line_end(spieler)-y_line_start(spieler)+t)*kaestchen_groesse-4,9,9,0
               If MouseHit(1) Then
                  x_line_start_alt(spieler) = x_line_start(spieler)
                  y_line_start_alt(spieler) = y_line_start(spieler)
                  x_line_start(spieler) = x_line_end(spieler)
                  y_line_start(spieler) = y_line_end(spieler)
                  x_line_end(spieler) = 2*x_line_end(spieler) - x_line_start_alt(spieler)+r
                  y_line_end(spieler) = 2*y_line_end(spieler) - y_line_start_alt(spieler)+t
                  fahrtlinie_einzeichnen()
                  If spieler = 1 Then
                     spieler = 2
                  Else
                     spieler = 1
                  EndIf
               EndIf
            EndIf
         Else
            kollision = kollision +1
         EndIf
         If kollision = 9 Then
            If spieler = 1 Then
               Color 220,0,0
            Else
               Color 0,220,0
            EndIf
            Cls
            If spieler = 1 Then farbe$ = "Rot" Else farbe$ = "Grün"
            Text x_graph/2,y_graph/2,farbe$+" hat verloren" ,1,1
            Flip
            Delay 2000
            End
         EndIf
      Next
   Next
End Function
Function fahrtlinie_einzeichnen()
   
   If bild < 1 Then
      bild = CreateImage (x_graph,y_graph)
   EndIf
   MaskImage bild,0,0,0
   SetBuffer ImageBuffer(bild)
   If spieler = 1 Then
      Color 220,0,0
   Else
      Color 0,220,0
   EndIf
   Line x_line_start(spieler)*kaestchen_groesse,y_line_start(spieler)*kaestchen_groesse,x_line_end(spieler)*kaestchen_groesse,y_line_end(spieler)*kaestchen_groesse
   SetBuffer BackBuffer()
   If ImagesCollide (rally, 0, 0, 0, bild, 0, 0, 0) Then
      Cls
      If spieler = 1 Then farbe$ = "Rot" Else farbe$ = "Grün"
      Text x_graph/2,y_graph/2,farbe$+" hat verloren" ,1,1
      Flip
      Delay 2000
      End
   EndIf
End Function
Function ziellinie()
   Color 0,0,0
   ;Rect 374,40,3,115
   Rect 374,86,3,94
End Function


dieses Bild wird benötigt:user posted image
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group