Const xr = 800, yr = 600
Global mouse_x, mouse_y
SeedRnd MilliSecs()
Graphics xr, yr, 16, 2
AppTitle ("ALEA")


	Type Wuerfel
		Field w
		Field x, y, g
		Field ox, oy
		Field dragx, dragy
		Field drag, drop
		Field platz ;1 = Tisch, 2 = Becher
	End Type
	Global Wuerfel.Wuerfel
	For i = 1 To 5
		Wuerfel = New Wuerfel
		Wuerfel\platz = 2
	Next	
	
	bg = CreateImage(xr, yr)
	SetBuffer ImageBuffer(bg)
	Cls
	createBackground	
	
	Global dragnr, spieler, spielerzahl, runde
	Global b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13

	SetBuffer BackBuffer()


	;Startbildschirm -----------------------------------------------------------------------------------------
	
		Cls
		For i = 1 To 50
			drawWuerfel(Rand(xr), Rand(50), Rand(30, 50), Rand(1, 6))
			drawWuerfel(Rand(xr), Rand(yr - 100, yr), Rand(30, 50), Rand(1, 6))
			drawWuerfel(Rand(50), Rand(yr), Rand(30, 50), Rand(1, 6))
			drawWuerfel(Rand(xr - 100, xr), Rand(yr), Rand(30, 50), Rand(1, 6))

		Next
		
		Color 255, 255, 255
		Text (xr - StringWidth("Kniffel")) / 2, 100, "Kniffel"
		Text 100, 150,  "Das Kniffelspiel für Blitzbasic! Was will man mehr. Die Regeln sollten"
		Text 100, 170, "bekannt sein. Ansonsten noch was zur Bedienung. Welcher Spieler an der"
		Text 100, 190, "Reihe ist, wird oben links angezeigt. Man hat die Möglichkeit bis zu"
		Text 100, 210, "dreimal zu würfeln, indem man auf dem runden Button in der Mitte drückt."
		Text 100, 230, "Dabei kann man Würfel, die man behalten möchte, einfach auf den Tisch"
		Text 100, 250, "ziehen per Drag&Drop (oder wenn man sie doch würfeln möchte, einfach)"
		Text 100, 270, "zurück ziehen). Man kann aber auch jederzeit (spätestens nach dem dritten
		Text 100, 290, "Wurf) seinen Wurf setzen und die Punkte eintragen, indem man links eine
		Text 100, 310, "Wurffolge aussucht. Die Punkte werden korrekt eingetragen entsprechend
		Text 100, 330, "der Würfel. Nachdem die Punkte eingetragen wurden, ist nach einem"
		Text 100, 350, "beherzten Klick auf den zum Fertig-Button mutierten Würfel-Button der"
		Text 100, 370, "nächste Spieler an der Reihe. Das Spiel endet, sobald jeder Spieler"
		Text 100, 390, "alle Punkte eingetragen hat.   - Viel Spaß"
		Text 400, 480, "- Mausklick um das Spiel zu starten -"
		Flip()
	
		WaitMouse()
		FlushMouse()

	;Spieler auswählen... ----------------------------------------------------------------------------------------
	Local b[6]
	spielerzahl = 0
	Repeat	
		mouse_x = MouseX()
		mouse_y = MouseY()
	
		Cls
		Color 255, 255, 255
		Text 10, 10, "Wieviele Spieler nehmen am Spiel Teil?"		
		For i = 1 To 6
			b[i] = ClickedInRect(50 + i * 70, 50, 60, 60,  b[i])
			If b[i] = 3 Then spielerzahl = i: Exit
			If b[i] = 1 Then 
				drawWuerfel(50 + i * 70-5, 50-5, 60+10, i)
			Else
				drawWuerfel(50 + i * 70, 50, 60, i)
			End If
		Next
		Flip(0)
	Until spielerzahl > 0 Or KeyDown(1)
	If spielerzahl = 0 Then End
	
	Dim Punkte(spielerzahl, 13)
	For s = 1 To spielerzahl
	For p = 1 To 13
		Punkte(s, p) = -1	
	Next
	Next

	
.Spiel	;Spiel beginnen
	
	spieler = 0
	

.NaechsterSpieler ;nächsten Spieler auswählen ----------------------------------------------------------------------------------
	spieler = spieler + 1
	If spieler > spielerzahl Then spieler = 1

.ErsterWurf ;Ersten Wurf starten -----------------------------------------------------------------------------------------
	ende = False
	Repeat: mouse_x = MouseX(): mouse_y = MouseY()
		wb = clickedInOval(240, 350, 100, 100, wb)
		If wb = 3 Then ende = True
		Cls	
		Color 255, 255, 255
		Text 10, 10, "Spieler " + spieler + " ist an der Reihe " + mouse_x + "," + mouse_y
		Text 260, 390, "1. Wurf"
		DrawImage bg, 0, 0
		drawPoints
		drawHotspots

		Flip(0)
		;WaitTimer fpsTimer
			
	Until KeyDown(1) Or ende

	For Wuerfel = Each Wuerfel: Wuerfel\platz = 2: Next	
	shakeBecher
	

.ErsteWahl	;Würfel wählen, oder Runde beenden --------------------------------------------------------------------------
	dragnr = 0
	imbecher = 5
	ende = 0
	Repeat: mouse_x = MouseX(): mouse_y = MouseY()
		Cls	
		DrawImage bg, 0, 0
		drawPoints
		Color 255, 255, 255
		Text 10, 10, "Spieler " + spieler + " ist an der Reihe " + mouse_x + "," + mouse_y		
		do5Wuerfel
		If choseCombi() Then Goto SpielerFertig

		
		;Schauen, ob Würfel im Becher sind
		imbecher = 0
		For Wuerfel = Each Wuerfel
			If Wuerfel\platz = 2 Then imbecher = imbecher + 1
		Next
		Color 255, 255, 255
		If imbecher > 0 Then		
			Text 260, 390, "2. Wurf"		
			wb = clickedInOval(240, 350, 100, 100, wb)
			If wb = 3 Then ende = 1
		End If
			
		drawHotspots

		Flip(0)
		;WaitTimer fpsTimer
			
	Until KeyDown(1) Or ende > 0


.ZweiterWurf ;Das Zweite Mal würfeln --------------------------------------------------------------------------------

	shakeBecher

.ZweiteWahl ;Das Zweite Mal wählen ------------------------------------------------------------------------------

	dragnr = 0
	imbecher = 5
	ende = 0
	Repeat: mouse_x = MouseX(): mouse_y = MouseY()
		Cls	
		DrawImage bg, 0, 0
		drawPoints
		Color 255, 255, 255
		Text 10, 10, "Spieler " + spieler + " ist an der Reihe " + mouse_x + "," + mouse_y		
		do5Wuerfel
		If choseCombi() Then Goto SpielerFertig

		
		;Schauen, ob Würfel im Becher sind
		imbecher = 0
		For Wuerfel = Each Wuerfel
			If Wuerfel\platz = 2 Then imbecher = imbecher + 1
		Next
		Color 255, 255, 255
		If imbecher > 0 Then		
			Text 260, 390, "3. Wurf"		
			wb = clickedInOval(240, 350, 100, 100, wb)
			If wb = 3 Then ende = 1
		End If
			
		drawHotspots

		Flip(0)
		;WaitTimer fpsTimer
			
	Until KeyDown(1) Or ende > 0

.DritterWurf ;Das dritte Mal würfeln

	shakeBecher
	
.DritteWahl ;Das dritte Mal wählen (nicht nochmal würfeln) ----------------------------------------------------------

	dragnr = 0
	imbecher = 5
	ende = 0
	Repeat: mouse_x = MouseX(): mouse_y = MouseY()
		Cls	
		DrawImage bg, 0, 0
		drawPoints
		Color 255, 255, 255
		Text 10, 10, "Spieler " + spieler + " ist an der Reihe " + mouse_x + "," + mouse_y		
		Text 230, 390, "Kein Wurf übrig"
		do5Wuerfel
		If choseCombi() Then Goto SpielerFertig
		
		drawHotspots

		Flip(0)
		;WaitTimer fpsTimer
			
	Until KeyDown(1) Or ende > 0




.SpielerFertig ;Spieler beendet seine Runde --------------------------------------------------------------------------
	ende = 0
	Repeat: mouse_x = MouseX(): mouse_y = MouseY()
		Cls	
		DrawImage bg, 0, 0
		drawPoints
		Color 255, 255, 255
		Text 10, 10, "Spieler " + spieler + " ist an der Reihe " + mouse_x + "," + mouse_y
		do5Wuerfel
		
		Color 255, 255, 255
		Text 260, 390, "Fertig"		
		wb = clickedInOval(240, 350, 100, 100, wb)
		If wb = 3 Then ende = 1
		
			
		drawHotspots

		Flip(0)
		;WaitTimer fpsTimer
			
	Until KeyDown(1) Or ende > 0
	
	runde = runde + 1
	If runde < spielerzahl * 13 And (Not KeyDown(1)) Then Goto NaechsterSpieler
	
	drawEndstand
	WaitKey()
	End

	
	
	
Function createBackground()
		For i = 0 To 5
			drawWuerfel(90, 50 + i * 40, 30, i + 1)
			drawWuerfel(130, 50 + i * 40, 30, i + 1)
			drawWuerfel(170, 50 + i * 40, 30, i + 1)
		Next

		Color 255, 255, 255
		Rect 0, 40, 205, 1,1: Circle 205, 50, 10, 270, 360
		Rect 0, 290, 205, 1,1: Circle 205, 280, 10, 180, 270: Circle 205, 300, 10, 270, 360
		Rect 0, 580, 205, 1,1: Circle 205, 570, 10, 180, 270
		Rect 215, 50, 1, 230
		Rect 215, 300, 1, 270
		
			;Dreierpasch
			drawWuerfel(90, 300, 30, 3)
			drawWuerfel(130, 300, 30, 3)
			drawWuerfel(170, 300, 30, 3)

			;Viererpasch
			drawWuerfel(50, 340, 30, 1)
			drawWuerfel(90, 340, 30, 1)
			drawWuerfel(130, 340, 30, 1)
			drawWuerfel(170, 340, 30, 1)
		
			;Full House
			drawWuerfel(10, 380, 30, 2)
			drawWuerfel(50, 380, 30, 2)
			drawWuerfel(90, 380, 30, 4)
			drawWuerfel(130, 380, 30, 4)
			drawWuerfel(170, 380, 30, 4)

			;Kleine Straße
			drawWuerfel(50, 420, 30, 1)
			drawWuerfel(90, 420, 30, 2)
			drawWuerfel(130, 420, 30, 3)
			drawWuerfel(170, 420, 30, 4)

			;Große Straße
			drawWuerfel(10, 460, 30, 2)
			drawWuerfel(50, 460, 30, 3)
			drawWuerfel(90, 460, 30, 4)
			drawWuerfel(130, 460, 30, 5)
			drawWuerfel(170, 460, 30, 6)

			;Chance
			drawWuerfel(10, 500, 30, 7)
			drawWuerfel(50, 500, 30, 7)
			drawWuerfel(90, 500, 30, 7)
			drawWuerfel(130, 500, 30, 7)
			drawWuerfel(170, 500, 30, 7)

			;Kniffel
			drawWuerfel(10, 540, 30, 5)
			drawWuerfel(50, 540, 30, 5)
			drawWuerfel(90, 540, 30, 5)
			drawWuerfel(130, 540, 30, 5)
			drawWuerfel(170, 540, 30, 5)
			
			
			;Tisch
			Color 255, 255, 255
			Oval 250, 60, 250, 250, 1
			Rect 375, 60, 500, 250, 1
			Color 0, 0, 0
			Oval 270, 80, 210, 210, 1
			Rect 375, 80, 500, 210, 1
			Text 355, 65, "Tisch"

			;Würfelbecher
			Color 255, 255, 255
			Rect 400, 350, 400, 1, 1
			Rect 400, 440, 400, 1, 1
			Circle 400, 395, 45, 0, 180
			Oval 240, 350, 100, 100, 0
			Text 400, 330, "Becher"

			;For i = 1 To 5
			;drawWuerfel 300 + i * 80, 360, 70, i
			;Next

End Function

Function drawHotspots()
			
			Color 255, 255, 255
			If mouseInRect(5, 45, 205, 40) Then  Rect 5, 45, 205, 40, 0:  drawInfoText "Einer:\nur Einer zählen"
			If mouseInRect(5, 85, 205, 40) Then  Rect 5, 85, 205, 40, 0:  drawInfoText "Zweier:\nur Zweier zählen"
			If mouseInRect(5, 125, 205, 40) Then Rect 5, 125, 205, 40, 0: drawInfoText "Dreier:\nur Dreier zählen" 
			If mouseInRect(5, 165, 205, 40) Then Rect 5, 165, 205, 40, 0: drawInfoText "Vierer:\nur Vierer zählen"
			If mouseInRect(5, 205, 205, 40) Then Rect 5, 205, 205, 40, 0: drawInfoText "Fünfer:\nur Fünfer zählen"
			If mouseInRect(5, 245, 205, 40) Then Rect 5, 245, 205, 40, 0: drawInfoText "Sechser:\nur Sechser zählen"
			
			If mouseInRect(5, 295, 205, 40) Then Rect 5, 295, 205, 40, 0: drawInfoText "Dreierpasch:\Hierfür brauchen Sie einen Drilling\alle Augen zählen"
			If mouseInRect(5, 335, 205, 40) Then Rect 5, 335, 205, 40, 0: drawInfoText "Viererpasch:\Hierfür brauchen Sie einen Vierlilng\Alle Augen zählen"
			If mouseInRect(5, 375, 205, 40) Then Rect 5, 375, 205, 40, 0: drawInfoText "Full House:\Hierfür brauchen Sie einen Zwilling und einen Drilling\25 Punkte"
			If mouseInRect(5, 415, 205, 40) Then Rect 5, 415, 205, 40, 0: drawInfoText "Kleine Straße:\Sie brauchen vier Würfel mit aufsteigender Augenzahl\30 Punkte"
			If mouseInRect(5, 455, 205, 40) Then Rect 5, 455, 205, 40, 0: drawInfoText "Große Straße:\Sie brauchen fünf Würfel mit aufsteigender Augenzahl\40 Punkte"
			If mouseInRect(5, 495, 205, 40) Then Rect 5, 495, 205, 40, 0: drawInfoText "Chance:\Alle Augen zählen"
			If mouseInRect(5, 535, 205, 40) Then Rect 5, 535, 205, 40, 0: drawInfoText "Kniffel:\Alle Würfel müssen die gleiche Augenzahl haben\50 Punkte"			

			If mouseInRect(310, 80, 500, 210) Then drawInfoText "Tisch:\Ziehen Sie hier die Würfel vom Becher rüber,\die Sie behalten möchten."
			If mouseInRect(400, 350, 400, 90) Then drawInfoText "Becher:\Wenn Sie Würfel nicht erneut würfel wollen,\ziehen Sie diese auf den Tisch"
			If  mouseInOval(240, 350, 100, 100) Then drawInfoText "Würfelbutton:\Klicken Sie hier, wenn Sie bereit sind, zu würfeln\oder ihre Runde zu beenden"

End Function

	
Function drawWuerfel(x, y, g, n)

	er# = g / 6.0 ;Eckradius
	pr# = g / 10.0 ;Punktradius
	
	Color 255, 255, 255
	;Rect x, y, g, g, 0
	Oval x, y, 2 * er, 2 * er, 1
	Oval x + g - 2 * er, y, 2 * er, 2 * er, 1
	Oval x, y + g - 2 * er, 2 * er, 2 * er, 1
	Oval x + g - 2 * er, y + g - 2 * er, 2 * er, 2 * er, 1
	Rect x + er, y, g - 2 * er, g, 1
	Rect x, y + er, g, g - 2 * er, 1
	
	Color 0, 0, 0

	Rect x, y + er, 1, g - 2 * er, 1
	Rect x + g, y + er, 1, g - 2 * er, 1
	Rect x + er, y, g - 2 * er, 1, 1
	Rect x + er, y + g, g - 2 * er, 1, 1
	Circle x + er, y + er, er, 0, 90
	Circle x + g - er, y + er, er, 270, 360
	Circle x + er, y + g - er, er, 90, 180
	Circle x + g - er, y + g - er, er, 180, 270
	
	If n = 2 Or n = 4 Or n = 5 Or n = 6 Then Oval x + er, y + er, 2 * pr, 2 * pr, 1 ;Oben Links
	If n = 3 Or n = 4 Or n = 5 Or n = 6 Then Oval x + g - 2 * pr - er, y + er, 2 * pr, 2 * pr, 1 ;Oben Rechts
	If n = 3 Or n = 4 Or n = 5 Or n = 6 Then Oval x + er, y + g - 2 * pr - er, 2 * pr, 2 * pr, 1	 ;Unten Links
	If n = 2 Or n = 4 Or n = 5 Or n = 6 Then Oval x + g - 2 * pr - er, y + g - 2 * pr - er, 2 * pr, 2 * pr, 1 ;Unten Rechts
	If n = 1 Or n = 3 Or n = 5 Then Oval x + g / 2 - pr, y + g / 2 - pr, 2 * pr, 2 * pr	;Mitte
	If n = 6 Then Oval x + er, y + g / 2 - pr, 2 * pr, 2 * pr			;Links Mitte
	If n = 6 Then Oval x + g - 2 * pr - er, y + g / 2 - pr, 2 * pr, 2 * pr		;Links Mitte
	If n = 7 Then Text x + (g - StringWidth("?")) / 2, y + (g - StringHeight("?")) / 2, "?"
	If n <= 0 Then z$ = Str(-n): Text x + (g - StringWidth(z$)) / 2, y + (g - StringHeight(z$)) / 2, z$

	
End Function

Function drawInfoText(t$)

	Color 0, 0, 0
	Oval 250, 530, 40, 40, 1
	Oval 730, 530, 40, 40, 1
	Rect 270, 530, 480, 100, 1
	Rect 250, 550, 520, 100, 1


	Color 255, 255, 255

	z = 540
	While Instr(t$, "\")-1 > 0
		Text 260, z, Left$(t$, Instr(t$, "\")-1)
		t$ = Mid$(t$, Instr(t$, "\")+1, -1)
		z = z + 20
	Wend
	Text 260, z, t$

	Rect 250, 550, 1, 100, 1: Circle 270, 550, 20, 0, 90
	Rect 770, 550, 1, 100, 1: Circle 750, 550, 20, 270, 360
	Rect 270, 530, 480, 1, 1

End Function

Function Circle (x, y, r, sw = 0, ew = 360)

p = Sgn(ew - sw) 
w = sw
	opx = x - Sin(w) * r
	opy = y - Cos(w) * r
	;Oval x-1,y-1,2,2,1
While w <> ew
	w = w + p
	px = x - Sin(w) * r
	py = y - Cos(w) * r
	Line opx, opy, px, py
	opx = px
	opy = py
Wend

End Function


Function do5Wuerfel()

		i = 0
		For Wuerfel = Each Wuerfel			
		i = i + 1
			drawWuerfel Wuerfel\x, Wuerfel\y, Wuerfel\g, Wuerfel\w
			;Drag-start
			If mouseInRect(Wuerfel\x, Wuerfel\y, Wuerfel\g, Wuerfel\g) And MouseDown(1) And Wuerfel\drag = 0 And dragnr = 0 Then
					Wuerfel\ox = Wuerfel\x
					Wuerfel\oy = Wuerfel\y
					Wuerfel\dragx = mouse_x
					Wuerfel\dragy = mouse_y
					Wuerfel\drag = 1 
					dragnr = i
			End If			
			;Draggen
			If Wuerfel\drag = 1 And MouseDown(1) And dragnr = i Then
				Wuerfel\x = Wuerfel\ox + mouse_x - Wuerfel\dragx
				Wuerfel\y = Wuerfel\oy + mouse_y - Wuerfel\dragy				
			End If			
			;Wuerfel gedropt
			If Wuerfel\drag = 1 And (Not MouseDown(1)) Then
				Wuerfel\drag = 0
				dragnr = 0
				If mouseInRect(310, 80, 500, 210) Then
					Wuerfel\platz = 1
				ElseIf mouseInRect(400, 350, 400, 90) Then
					Wuerfel\platz = 2
				Else
					Wuerfel\x = Wuerfel\ox
					Wuerfel\y = Wuerfel\oy
				End If
			End If		
		Next

End Function

Function shakeBecher()
		xx = 300
		bp = 0
		i = 0
	For Wuerfel = Each Wuerfel
		If Wuerfel\platz = 2 Then
			bp = bp + 1
			Wuerfel\w = Rand(1, 6)
			Wuerfel\x = 300 + bp * 80
			Wuerfel\y = 360
			Wuerfel\g = 70
			Wuerfel\platz = 2
		End If
	Next

End Function

Function choseCombi()
			Local ww[6]
			b1 = clickedInRect(5, 45, 205, 40, b1) 
			b2 = clickedInRect(5, 85, 205, 40, b2) 
			b3 = clickedInRect(5, 125, 205, 40, b3) 
			b4 = clickedInRect(5, 165, 205, 40, b4) 
			b5 = clickedInRect(5, 205, 205, 40, b5) 
			b6 = clickedInRect(5, 245, 205, 40, b6) 
			
			b7 = clickedInRect(5, 295, 205, 40, b7) 
			b8 = clickedInRect(5, 335, 205, 40, b8) 
			b9 = clickedInRect(5, 375, 205, 40, b9) 
			b10 = clickedInRect(5, 415, 205, 40, b10) 
			b11 = clickedInRect(5, 455, 205, 40, b11) 
			b12 = clickedInRect(5, 495, 205, 40, b12) 
			b13 = clickedInRect(5, 535, 205, 40, b13)
			

			If b1 = 3 And Punkte(spieler, 1) = -1 Then
					p = 0
					For Wuerfel = Each Wuerfel
						If Wuerfel\w = 1 Then p = p + 1
					Next
					Punkte(spieler, 1) = p
					Return True			
			End If
			If b2 = 3 And Punkte(spieler, 2) = -1 Then
					p = 0
					For Wuerfel = Each Wuerfel
						If Wuerfel\w = 2 Then p = p + 2
					Next
					Punkte(spieler, 2) = p
					Return True			
			End If
			If b3 = 3 And Punkte(spieler, 3) = -1 Then
					p = 0
					For Wuerfel = Each Wuerfel
						If Wuerfel\w = 3 Then p = p + 3
					Next
					Punkte(spieler, 3) = p
					Return True
			End If
			If b4 = 3 And Punkte(spieler, 4) = -1 Then
					p = 0
					For Wuerfel = Each Wuerfel
						If Wuerfel\w = 4 Then p = p + 4
					Next
					Punkte(spieler, 4) = p				
					Return True
			End If
			If b5 = 3 And Punkte(spieler, 5) = -1 Then
					p = 0
					For Wuerfel = Each Wuerfel
						If Wuerfel\w = 5 Then p = p + 5
					Next
					Punkte(spieler, 5) = p				
					Return True
			End If
			If b6 = 3 And Punkte(spieler, 6) = -1 Then
					p = 0
					For Wuerfel = Each Wuerfel
						If Wuerfel\w = 6 Then p = p + 6
					Next
					Punkte(spieler, 6) = p				
					Return True
			End If
			
			If b7 = 3 And Punkte (spieler, 7) = -1 Then ;Dreierpasch prüfen
					p = 0
					dreier = False
					For Wuerfel = Each Wuerfel
						p = p + Wuerfel\w
						ww[Wuerfel\w] = ww[Wuerfel\w] + 1
						If ww[Wuerfel\w] >= 3 Then dreier = True
					Next
					If dreier = False Then p = 0
					Punkte(spieler, 7) = p
					Return True						
			End If

			If b8 = 3 And Punkte (spieler, 8) = -1 Then ;Viererpasch prüfen
					p = 0
					dreier = False
					For Wuerfel = Each Wuerfel
						p = p + Wuerfel\w
						ww[Wuerfel\w] = ww[Wuerfel\w] + 1
						If ww[Wuerfel\w] >= 4 Then dreier = True
					Next
					If dreier = False Then p = 0
					Punkte(spieler, 8) = p
					Return True						
			End If

			If b9 = 3 And Punkte (spieler, 9) = -1 Then ;Full House prüfen
					p = 25
					fullhouse = False
					For Wuerfel = Each Wuerfel
						ww[Wuerfel\w] = ww[Wuerfel\w] + 1						
					Next
					zwei = 0: drei = 0
					For a = 1 To 6
						If ww[a] >= 3 Then drei = 1 ElseIf ww[a] >= 2 Then zwei = 1
					Next
					If zwei < 1 Or drei < 1 Then p = 0
					Punkte(spieler, 9) = p
					Return True					
			End If

			If b10 = 3 And Punkte (spieler, 10) = -1 Then ;Kleine Straße
					p = 30
					klstrasse = False
					For Wuerfel = Each Wuerfel
						ww[Wuerfel\w] = ww[Wuerfel\w] + 1						
					Next
					If (ww[3] >= 1 And ww[4] >= 1) And ( (ww[1] >= 1 And ww[2] >= 1) Or (ww[2] >= 1 And ww[5] >= 1) Or (ww[5] >= 1 And ww[6] >= 1) ) Then klstrasse = True
					If Not klstrasse Then p = 0
					Punkte(spieler, 10) = p
					Return True					
			End If
			
			If b11 = 3 And Punkte (spieler, 11) = -1 Then ;Große Straße
					p = 40
					grstrasse = False
					For Wuerfel = Each Wuerfel
						ww[Wuerfel\w] = ww[Wuerfel\w] + 1						
					Next
					If (ww[2] >= 1 And ww[3] >= 1 And ww[4] >= 1 And ww[5] >= 1) And (ww[1] >= 1 Or ww[6] >= 1) Then grstrasse = True
					If grstrasse = False Then p = 0
					Punkte(spieler, 11) = p
					Return True					
			End If

			If b12 = 3 And Punkte (spieler, 12) = -1 Then ;Chance
					p = 0
					For Wuerfel = Each Wuerfel
						p = p + Wuerfel\w
					Next					
					Punkte(spieler, 12) = p
					Return True					
			End If

			If b13 = 3 And Punkte (spieler, 13) = -1 Then ;Kniffel
					p = 50
					kniffel = False
					For Wuerfel = Each Wuerfel
						ww[Wuerfel\w] = ww[Wuerfel\w] + 1						
						If ww[Wuerfel\w] = 5 Then kniffel = True
					Next
					If kniffel = False Then p = 0
					Punkte(spieler, 13) = p
					Return True					
			End If

	Return False

End Function


Function drawPoints()

		obenpunkte = 0
		For i = 1 To 13
			If Punkte(spieler, i) => 0 Then			
			If i <= 6 Then obenpunkte = obenpunkte + Punkte(spieler, i)
			If i > 6 Then plus = 10 Else plus = 0	
				Color 0, 0, 0
				Rect 5, 45 + (i-1) * 40 + plus, 205, 40, 1				
				;drawWuerfel(90, 300, 30, 3)
				drawWuerfel(90, 50 + (i-1) * 40 + plus, 30, -Punkte(spieler, i))
				Color 255, 255, 255
				Text 125, 60 + (i-1) * 40 + plus, "Punkte"
			End If
		Next
		
		If obenpunkte >= 63 Then
			Punkte(spieler, 0) = 35		
			drawWuerfel(20, 50, 30, -35)
			Color 255, 255, 255
			Text 30, 80,  "B"
			Text 30, 95,  "o"
			Text 30, 110, "n"
			Text 30, 125, "u"
			Text 30, 140, "s"
			
		End If

End Function


Function drawEndstand()

		Cls
		Color 255, 255, 255
		Text 10, 10, "Endstand"		
		For i = 1 To spielerzahl			
			drawWuerfel(10, i * 80, 60, i)
			
			pp = Punkte(i, 0)
			For p = 1 To 13
				pp = pp + Punkte(i, p)
				drawWuerfel(50 + p * 40 , i * 80 + 15, 30, -Punkte(i, p))
			Next
			Color 255, 255, 255
			Text 620, i * 80 + 20, "+         = " + pp
			drawWuerfel(650, i * 80 + 15, 30, -Punkte(i, 0))
		Next
		Flip()

End Function	


Function mouseInRect(x, y, w, h)

	If mouse_x <= x Then Return False
	If mouse_y <= y Then Return False
	If mouse_x >= x + w Then Return False
	If mouse_y >= y + h Then Return False
	Return True	

End Function

Function mouseInOval(x, y, w, h)

	Return  ((mouse_x - (x + w/2))^2 + (mouse_y - (y + h/2))^2) <= (w/2)^2
	
End Function

Function ClickedInOval(x, y, w, h, c)

	If mouseInOval(x, y, w, h) Then
		If c = 0 Then If Not MouseDown(1) Then Return 1
		If c = 1 Then If MouseDown(1) Then Return 2 Else Return 1
		If c = 2 Then If Not MouseDown(1) Then Return 3 Else Return 2
	End If
	Return 0
	
End Function

Function clickedInRect(x, y, w, h, c)

	If mouseInRect(x, y, w, h) Then
		If c = 0 Then If Not MouseDown(1) Then Return 1
		If c = 1 Then If MouseDown(1) Then Return 2 Else Return 1
		If c = 2 Then If Not MouseDown(1) Then Return 3 Else Return 2
	End If
	Return 0
	
End Function