;von Thomas Decker - begonnen am 14. August 2oo5 Const xr = 1024, yr = 768 Graphics xr, yr, 32, 2 AppTitle("Tribute to PENTAX") SetBuffer BackBuffer() normal_font = LoadFont("Courier New", 20) SetFont normal_font Global mouse_x, mouse_y ;Einführende Worte Cls Text 20, 100, "Pentax ist ein altes Werbespiel einer Kamera, welches ich leider nicht" Text 20, 125, "mehr besitze. Aber damit auch zukünftige Generationen was von diesem" Text 20, 150, "Spiel haben: Hier die BlitzBasic-Variante." Text 20, 200, "Es geht darum herunterfallende Bildausschnitte auf einer Fläche zu" Text 20, 225, "platzieren. Aber testen Sie selbst..." Text 0, yr-StringHeight("|"), "Mausklick, um fortzusetzen" Flip(0) WaitMouse() ;Bild laden, Attribute (Breite, Höhe, etc.) festlegen, Bild aufteilen bild = LoadImage("bild.jpg") b_breite = ImageWidth(bild) b_hoehe = ImageHeight(bild) f_breite = 4 ;Aufteilung des Bildes f_hoehe = 3 fg_breite = b_breite / f_breite fg_hoehe = b_hoehe / f_hoehe ;kleines Bild anfertigen fkb_breite = b_breite / 2 fkb_hoehe = b_hoehe / 2 kleinesBild = CopyImage(bild) ResizeImage kleinesBild, fkb_breite, fkb_hoehe ;bild = LoadImage("cap001.bmp") ;ResizeImage bild, 640, 400 ;b_breite = ImageWidth(bild) ;b_hoehe = ImageHeight(bild) ;f_breite = 4 ;f_hoehe = 3 ;fg_breite = b_breite / f_breite ;fg_hoehe = b_hoehe / f_hoehe Dim bildchen(f_breite, f_hoehe) Dim feld(f_breite, f_hoehe) For i = 1 To f_breite For j = 1 To f_hoehe bildchen(i, j) = CreateImage(fg_breite, fg_hoehe) CopyRect (i-1) * fg_breite, (j-1) * fg_hoehe, fg_breite, fg_hoehe, 0, 0, ImageBuffer(bild), ImageBuffer(bildchen(i, j)) Rect (i-1) * fg_breite, (j-1) * fg_hoehe, fg_breite, fg_hoehe, 0 Next Next Type scrollBild Field bildnr Field ypos Field gewaehlt End Type Local scrollBild.scrollBild ;* * * Spielscheilfe * * * fertig = 0 z = fg_hoehe fps = CreateTimer(120) Cls Repeat mouse_x = MouseX() mouse_y = MouseY() ;neues Herunterfallendes Bild erzeugen z = z + 1 If z > fg_hoehe + 20 Then z = 0 Repeat gefunden = True nichtgefunden = False:anz = 0 xw = Rand(1, f_breite) yw = Rand(1, f_hoehe) If feld(xw, yw) = 0 Then gefunden = True Else gefunden = False For a.scrollBild = Each scrollBild: If a\bildnr = bildchen(xw, yw) Then gefunden = False anz = anz + 1 Next If anz = (f_breite * f_hoehe) - fertig Then nichtgefunden = True: gefunden = False Until gefunden = True Or nichtgefunden Or KeyDown(1) If gefunden = True scrollBild.scrollBild = New scrollBild scrollBild\bildnr = bildchen(xw, yw) scrollBild\ypos = -fg_hoehe End If End If Cls ;Raster Color 50, 50, 50 For i = 1 To f_breite For j = 1 To f_hoehe Rect (i-1) * fg_breite, (j-1) * fg_hoehe, fg_breite, fg_hoehe, 0 If feld(i, j) > 0 Then DrawBlock feld(i, j), (i-1) * fg_breite, (j-1) * fg_hoehe Next Next ;kleines Bild Color 255, 255, 255 Rect f_breite * fg_breite + 5, 0, 1, yr Rect 0, f_hoehe * fg_hoehe + 5, xr, 1 DrawBlock kleinesBild, f_breite * fg_breite + 10, f_hoehe * fg_hoehe + 10 ;Herunterfallende Bildteile nach unten verschieben, darstellen und auswählbar machen Color 50, 50, 50 Rect xr - fg_breite - 20, 0, fg_breite + 20, yr, 1 For scrollBild = Each scrollBild scrollBild\ypos = scrollBild\ypos + 1 If scrollBild\ypos > -fg_hoehe And scrollBild\ypos < yr Then If mouseInRect(xr - fg_breite - 10, scrollBild\ypos, xr - fg_breite - 10 + fg_breite, scrollBild\ypos + fg_hoehe) Then rg = 5 ;Abstand des Auswahlrahmens Color 255, 255, 0 Rect xr - fg_breite - 10 - rg, scrollBild\ypos - rg, fg_breite + 2*rg, fg_hoehe + 2*rg, 0 If MouseDown(1) Then For a.scrollBild = Each ScrollBild: a\gewaehlt = 0: Next scrollBild\gewaehlt = 1 End If End If If scrollBild\gewaehlt = 1 Then Color 255, 255, 0:Rect xr - fg_breite - 10 - rg, scrollBild\ypos - rg, fg_breite + 2*rg, fg_hoehe + 2*rg, 1 DrawBlock scrollBild\bildnr, xr - fg_breite - 10, scrollBild\ypos End If If scrollBild\ypos > yr Then Delete scrollBild.scrollBild Next ;Bild auf dem Feld platzieren, falls an richtiger Stelle Text 20, 0, f_breite * fg_breite Text 20,20,mouse_x If mouseInRect(0,0,f_breite * fg_breite, f_hoehe * fg_hoehe) Then mausFeld_X = mouse_x / fg_breite + 1 mausFeld_Y = mouse_y / fg_hoehe + 1 If MouseDown(1) Then gewaehltBild = 0 For a.scrollBild = Each ScrollBild If a\gewaehlt = 1 Then a\gewaehlt = 0: gewaehltBild = a\bildnr: Delete a.scrollBild: Exit Next ;Wenn ein Bildchen richtig platziert wurde If gewaehltBild > 0 And bildchen(mausFeld_X, mausFeld_Y) = gewaehltBild Then For a.scrollBild = Each ScrollBild: If a\bildnr = gewaehltBild Then Delete a.scrollBild Next feld(mausFeld_X, mausFeld_Y) = gewaehltBild fertig = fertig + 1 End If End If End If Flip(0) WaitTimer(fps) Until KeyDown(1) Or fertig = f_breite * f_hoehe FreeTimer(fps) ;Gewinnertext anzeigen If fertig = f_breite * f_hoehe Then Cls DrawBlock bild,0,0 Color 255, 255, 0 Text 0, b_hoehe, "SIE HABEN GEWONNEN!!!" Flip(0) WaitKey() End If End ;Diese Funktion prüft, ob die Maus sich innerhalb des angegebenen Rechtecks befindet und liefert ;entsprechend true oder false zurück Function mouseInRect (x1, y1, x2, y2) If mouse_x < x1 Then Return False If mouse_x > x2 Then Return False If mouse_y < y1 Then Return False If mouse_y > y2 Then Return False Return True End Function