Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

minesweper

Uploader:MitgliedManello
Datum/Zeit:31.01.2014 19:41:14

#DEFINE Offen 16
#DEFINE Fahne 32
#DEFINE Bombe 64

DIM SHARED AS INTEGER Feldbreite=20,Feldhoehe=20,Feldgroesse=20
DIM SHARED AS INTEGER Bombenzahl=50
DIM SHARED AS INTEGER feld(0 TO Feldbreite-1, 0 TO Feldhoehe-1)
DIM SHARED AS ANY PTR BildBombe,BildFahne
SCREENRES Feldbreite*Feldgroesse, Feldhoehe*Feldgroesse, 32
BildBombe=IMAGECREATE(Feldgroesse, Feldgroesse)
BildFahne=IMAGECREATE(Feldgroesse,Feldgroesse)
BLOAD "bombe.bmp", BildBombe
BLOAD "fahne.bmp", BildFahne

DIM AS INTEGER verteilt = 0,x,y
RANDOMIZE
DO
    x=INT(RND*Feldbreite)
    y=INT(RND+Feldhoehe)
    IF feld(x,y)=Bombe THEN CONTINUE DO
    feld(x,y)=Bombe
    verteilt +=1
LOOP UNTIL verteilt=Bombenzahl

'################################################

FOR i AS INTEGER=0 TO Feldbreite-1
    FOR k AS INTEGER=0 TO Feldhoehe-1
        LINE (i*Feldgroesse, k*Feldgroesse)-STEP(Feldgroesse-1,Feldgroesse-1),,B
    NEXT
NEXT

DIM SHARED AS INTEGER mausX,mausY,mausB,mausX2,mausY2,mausB2,fx,fy,wert
DO
    GETMOUSE mausX,mausY,,mausB
    IF mausB THEN
        fx=mausX \ Feldergroesse
        fy=mausY \ Feldergroesse

        DO
            GETMOUSE mausX2,mausY2,,mausB2
            SLEEP 1
        LOOP UNTIL mausB2=0

        IF mausX2\Feldgroesse <> fx OR mausY2\Feldgroesse <> fy THEN CONTINUE DO
        IF mausB=1 THEN
            wert=aufdecken(fx,fy)
            IF wert=Bombe THEN feldZeigen : GETKEY : EXIT DO
        ELSEIF mausB=2 AND (feld(fx,fy) AND Offen)=0 THEN
            feld(fx,fy) XOR=Fahne
            PUT (fx*Feldgroesse,fy*Feldgroesse),BildFahne, XOR
        END IF
    END IF
    SLEEP 1
LOOP UNTIL INKEY = CHR(27)
IMAGEDESTROY bildBombe
IMAGEDESTROY bildFahne

'################################

FUNCTION aufdecken(x AS INTEGER,y AS INTEGER) AS INTEGER
    IF feld(x,y) AND OFFEN THEN RETURN Offen
    IF feld(x,y) AND Fahne THEN RETURN Fahne

    IF feld(x,y)AND Bombe THEN
        PUT (x*FeldGroesse,y*FeldGroesse),BildBombe
        feld(x,y)OR= Offen
        RETURN Bombe
    END IF

    DIM AS INTEGER zaehler=0
    FOR i AS INTEGER=x-1 TO x+1
        IF i <0 OR i>=FeldBreite THEN CONTINUE FOR
        FOR k AS INTEGER=y-1 TO y+1
            IF k <0 OR k>= FeldHoehe THEN CONTINUE FOR
            IF feld(i,k) AND Bombe THEN zaehler+=1
        NEXT
    NEXT
    DRAW STRING ((x+.5)*FeldGroesse-4),STR(zaehler)
    feld(x,y)OR=Offen

    IF zaehler=0 THEN
        FOR i AS INTEGER=x-1 TO x+1
            IF i <0 OR i>=FeldBreite THEN CONTINUE FOR
            FOR k AS INTEGER=y-1 TO y+1
                IF k <0 OR k>=FeldHoehe THEN CONTINUE FOR
                aufdecken i,k
            NEXT
        NEXT
    END IF
    RETURN zaehler
END FUNCTION

SUB feldZeigen
    FOR x AS INTEGER=0 TO FeldBreite-1
        FOR y AS INTEGER=0 TO FeldHoehe-1
            aufdecken x,y
        NEXT
    NEXT
END SUB