1. Artikel
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forum
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Paules-PC-Forum.de
  2. Forum
  3. Programmierung
  4. XProfan
  5. Wettbewerb 2021

3D-Pilzsuche (OpenGL)

  • SvenB
  • 7. Oktober 2021 um 22:07
  • SvenB
    War schon mal da
    Reaktionen
    26
    Beiträge
    32
    • 7. Oktober 2021 um 22:07
    • #1

    Willkommen bei der 3D-Pilzsuche! Meine Idee ist ein kleines OpenGL-Spiel, welches sich wie ein Shooter spielt. Steuerung: W A S D + Maus

    Die Low-Poly-Grafik verwendet generative Ansätze und besteht komplett aus Zylindern und Kugeln.

    Der Code hat genau 4K (4096 Bytes) und läuft ohne Abhängigkeiten in XProfan X4 bis zu XProfan 11 sowie Profan2Cpp und FreeProfan. Durch Anpassung des Random Seeds in Zeile 79 bekommt man theoretisch unendlich neue Levels, es wird allerdings bei der Erstellung nicht geprüft ob Spieler oder Pilze in Bäumen hängen

    Ich reiche gerne bei Gelegenheit eine besser lesbare 8K Version nach.

    Hier als ausführbare EXE Datei als Download:

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Viel Spaß beim Spielen!


    Code
    declare h&,ft&,wlk&,a#,u&,t!,r!,rb%,rxt!,rYT!,pXT!,pZT!,rx!,ry!,rzs!,rz!,posX!,posY!,posZ!,msx%,msy%,mx%,my%,list&,f&,t&,t2&,px!,py!,pz!,mxinc%,myinc%,pos#,p#,o#[220],tx!,tz!,col&,imp!,t_fl&,v_fl!,tp!,p&,p&[10]
    Dim pos#,32:Dim p#,8:Dim a#,32
    def r(0) -75+(Rnd(1500)*.1)
    u& = UseDll("user32.dll"):ImportFunc(u&,"SetCursorPos","s"):ImportFunc(u&,"GetCursorPos","g")
    o#[0]=new(xpDisk)
    Proc mve
    If iskey(2)
    if (rb%=0) & (posY!=-1)
    imp!=20:rb%=1
    Endif
    Else
    rb%=0
    Endif
    posY!=posy!-(imp!*.01) +v_fl!
    If posY!<-1:inc t_fl&:v_fl!=.01*t_fl&:Else:t_fl&=0:v_fl!=0:imp!=0:posY!=-1:Endif
    mxinc%=mxinc%+msx%-mx%:myinc%=myinc%+msy%-my%:rYT!=(-mxinc%)*.1:rXT!=(-myinc%)*.1
    Case (rXT!>60):rXT!=60
    Case (rXT!<-60):rXT!=-60
    Case (abs(rXT!-rX!)>.001):rX!=rX!+((rXT!-rX!)*.45)
    Case (abs(rYT!-rY!)>.001):rY!=rY!+((rYT!-rY!)*.45)
    If iskey(83):pz!=-.2:Elseif iskey(87):pz!=.2:Endif
    If iskey(68):py!=-.2:Elseif iskey(65):py!=.2:Endif
    If (pz!<>0) | (py!<>0)
    If (pz!<>0) & (py!<>0):pz!=pz!*.7071:py!=py!*.7071:Endif
    t!=py!
    py!=cos(.0174533*ry!)*t!-sin(.01745*ry!)*pz!
    pz!=sin(.0174533*ry!)*t!+cos(.01745*ry!)*pz!
    col&=0
    o#[0].posx!=pXT!+py!
    o#[0].posy!=pZT!+pz!
    o#[0].x!=.5
    Whileloop 1,210
    Case intersect("d",o#[&loop],o#[0]):col&=&loop
    Wend
    IfNot col&
    pXT!=pXT!+py!:pZT!=pZT!+pz!
    ElseIf col&>200
    Inc p&
    p&[col&-200]=1
    o#[col&].posx!=9999
    Endif
    pz!=0:py!=0
    Endif
    Case (abs(pXT!-posX!)>.001):posX!=posX!+((pXT!-posX!)*.2)
    Case (abs(pZT!-posZ!)>.001):posZ!=posZ!+((pZT!-posZ!)*.2)
    If (mx%<20) | (mx%>%maxx-20) | (my%<20) | (my%>%maxy-20)
    msx%=%maxx*.5
    msy%=%maxy*.5
    s(msx%,msy%)
    Else
    msx%=mx%
    msy%=my%
    Endif
    g(p#):mx%=Long(p#,0):my%=Long(p#,4)
    Endproc
    Proc drw
    oGL("Clear")
    oGL("Push")
    oGL("Rotate",rx!,ry!,rz!)
    oGL("Move",posx!,posy!,posz!)
    oGL("glLightfv",~GL_LIGHT0,~GL_POSITION,pos#)
    oGL("glLightfv",~GL_LIGHT0,~GL_AMBIENT,a#)
    Whileloop 20
    oGL("Push")
    oGL("Move",sin(&loop+f&*.001/&loop)*20*&loop,30,cos(&loop+f&*.001/&loop)*20*&loop)
    oGL("Rotate",0,&loop+f&*.001/&loop,0)
    oGL("Color",1,1,1,1)
    IfNot wlk&
    wlk&=ogl("StartList")
    Whileloop 3
    oGL("Move",0,0,6)
    oGL("Sphere",8-(&loop MOD 2)*2,6,6)
    Wend
    ogl("EndList")
    Endif
    ogl("drawlist",wlk&)
    oGL("Pop")
    Wend
    oGL("Push"):oGL("Rotate",-90,0,0):oGL("Move",-posx!-120,posz!-120,0):oGL("Color",.15,.2,0,1):oGL("Quad",480,480):oGL("Pop")
    WhileLoop 10
    Set("RandSeed",&loop+916)
    If p&[&loop]<>1
    oGL("Push")
    tx!=r():tz!=r():tp!=1.8+rnd(150)*.01
    if p&[&loop]=0
    o#[&loop+200]=new(xpDisk):o#[&loop+200].posx!=-tx!:o#[&loop+200].posy!=-tz!:o#[&loop+200].x!=tp!*.15:p&[&loop]=2
    endif
    oGL("Move",tx!,.08,tz!):oGL("Color",.3,.2,.2,1):oGL("Cylinder",.08,.025,.2,5):oGL("Color",.7,.63,.5,1)
    oGL("Move",0,.1,0)
    oGL("Rotate",20-rnd(40),20-rnd(40),0)
    oGL("glScalef",1.0,.5,1.0):oGL("Sphere",.25,5,5):oGL("Pop")
    Endif
    Wend
    IfNot list&
    list&=ogl("StartList")
    WhileLoop 200
    oGL("Push")
    tx!=r():tz!=r():tp!=1.8+rnd(150)*.01
    o#[&loop]=new(xpDisk)
    o#[&loop].posx!=-tx!
    o#[&loop].posy!=-tz!
    o#[&loop].x!=tp!*.75
    oGL("Move",tx!,0,tz!):oGL("Rotate",0,rnd(360),0):oGL("Color",.3,.2,.05,1):oGL("Cylinder",tp!*.2,tp!*.15,tp!,6):oGL("Color",.1,.2,.05,1):oGL("Move",0,.25*tp!,0)
    WhileLoop 7+tp!
    oGL("Move",0,.45*tp!,0):oGL("Cylinder",tp!*1.2-&loop*.25,0,tp!,6)
    Wend
    oGL("Pop")
    Wend
    WhileLoop 1,500
    tx!=r():tz!=r():tp!=.2+rnd(200)*.005
    oGL("Push"):oGL("Move",tx!,-tp!*.5,tz!):oGL("Rotate",0,rnd(360),rnd(360)):oGL("Color",.2,.2,.2,1):oGL("Sphere",tp!,4,6):oGL("Pop")
    Wend
    ogl("EndList")
    Endif
    ogl("DrawList",list&):oGL("Pop"):oGL("Origin",-6,3,-10):oGL("Print",ft&,str$(p&)+" / 10"):oGL("Show")
    Endproc
    windowstyle 80:cls:Showcursor 0:ShowMax
    oGL("Init",%hWnd,.68,.80,1,1):oGL("PosMode",1):oGL("glShadeModel",~GL_FLAT):oGL("Fog",3,80,99):oGL("glEnable",$803A)
    h&=create("Font","Arial",1,0,0,0,0):ft&=oGL("OutlineFont",h&,.1):deleteobject h&
    Long pos#,0=single(0),single(40),single(0),single(1)
    Long a#,0=single(.5),single(.5),single(.7),single(1)
    WhileNot IsKey(27)
    t2&=&gettickcount
    Case (t2&-t&)<16:sleep 16-(t2&-t&)
    t&=t2&
    mve()
    drw()
    inc f&
    Wend
    FreeDll u&:Dispose p#,pos#,a#
    Alles anzeigen

    2 Mal editiert, zuletzt von SvenB (7. Oktober 2021 um 22:27)

  • Abifiz 7. Oktober 2021 um 22:25

    Hat den Titel des Themas von „3D Pilzsuche (OpenGL)“ zu „3D-Pilzsuche (OpenGL)“ geändert.
  • Volkmar
    Moderator
    Reaktionen
    6.892
    Beiträge
    6.851
    • 7. Oktober 2021 um 22:27
    • #2

    Super Beitrag. Danke.

    Ich habe auch schon 10 Pilze eingesammelt :top:

    Gruß Volkmar

  • Abifiz
    Moderator
    Reaktionen
    2.068
    Beiträge
    3.527
    • 7. Oktober 2021 um 22:31
    • #3

    Willkommen in unserem Forum, Du Pilz-Fachmann! :top::top::top: :top::top:

    Meine smarte, die kommenden Zeitalter bescheiden vorwegnehmende Signatur befindet sich noch in ihrem Herstellungsprozeß. Im 1. Quartal 2034 dürfte mit ihrer Lieferung zu rechnen sein.

    Vorläufig zitiere ich Karl Kraus: „Wer jetzt übertreibt, kann leicht in den Verdacht kommen, die Wahrheit zu sagen.“

    Dazu meint Pepino: Cogito, ergo schnurr'.

  • Volkmar
    Moderator
    Reaktionen
    6.892
    Beiträge
    6.851
    • 7. Oktober 2021 um 22:35
    • #4

    Vor lauter Freude über den interessanten Beitrag habe ich doch glatt was vergessen, da mußte erst Abifiz kommen und mir das vor machen:

    :willkommen:

    Gruß Volkmar

  • SvenB
    War schon mal da
    Reaktionen
    26
    Beiträge
    32
    • 7. Oktober 2021 um 22:42
    • #5

    Vielen Dank für das freundliche Willkommen! :) Bisher war ich nur auf den anderen XProfan-Foren unterwegs und hier nur als Gast aber das möchte ich gerne ändern ;)

  • Volkmar
    Moderator
    Reaktionen
    6.892
    Beiträge
    6.851
    • 7. Oktober 2021 um 22:47
    • #6

    Freut mich. In letzter Zeit sieht es hier etwas ruhig aus, aber das kann ja nur besser werden, wenn noch jemand dazu kommt. Also mach hier ruhig mal etwas "Betrieb" wenn Du gute Ideen hast.

    Gruß Volkmar

  • meierkurt
    lebendes Inventar
    Reaktionen
    3.163
    Beiträge
    3.138
    • 7. Oktober 2021 um 22:49
    • #7

    Also eine Online-Pilssuche, das wäre wirklich was feines :)

    +++ Red Bull verleiht Flügel: Limonadenhersteller sattelt um auf Pianoleasing +++ (https://www.der-postillon.com/search/label/Newsticker)

  • Volkmar
    Moderator
    Reaktionen
    6.892
    Beiträge
    6.851
    • 7. Oktober 2021 um 23:04
    • #8

    Wo die besten Pilsstellen in Deiner Nähe sind, sollte doch Google wissen :)

    Gruß Volkmar

  • Schwabenpfeil!
    Administrator
    Reaktionen
    12.198
    Artikel
    80
    Beiträge
    36.946
    • 8. Oktober 2021 um 10:27
    • #9

    Auch von mir ein herzliches :willkommen:

    Toll, wenn die XProfran-Gruppe wieder ein bisschen belebt wird :-De

    Meine aktuellen Bücher: Windows 7 Tipps & Tricks · · Windows 10 Schritt für Schritt erklärt · · Windows 10 Tipps & Tricks · · Gern zum Schlern

    »Nur wo du zu Fuß warst, bist du auch wirklich gewesen.«
    Johann Wolfgang von Goethe.

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 8. Oktober 2021 um 18:24
    • #10

    Sind hoffentlich Champignons und keine Karbol-Egerlinge! Meine Stimme für Sven!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Volkmar
    Moderator
    Reaktionen
    6.892
    Beiträge
    6.851
    • 8. Oktober 2021 um 18:57
    • #11

    Dann merk Dir Deine Wahl gut, abstimmen wollen wir im Dezember in Form einer Umfrage ;)

    Gruß Voklmar

  • Jac de Lad
    Meister
    Reaktionen
    132
    Beiträge
    1.657
    • 9. Oktober 2021 um 02:15
    • #12

    Für so einen Mini-Quelltext äußerst beeindruckend!

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)/PureBasic 6.00/RAD Studio 11 (Alexandria)/Perl 5.34.00/Python 3.10.0
    Ryzen 5800X/Gigabyte B550m DS3H/32GB RAM@3600MHz/Radeon HD7770 OC/Asus Xonar SE/46TB HDD+512GB Samsung 980 Pro+2TB Crucial SSD/28" Samsung 4k
    Synology DS920+ mit 42TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 9 Pro (12GB/256GB)
    https://jacdelad.bplaced.net

  • SvenB
    War schon mal da
    Reaktionen
    26
    Beiträge
    32
    • 11. Oktober 2021 um 15:48
    • #13

    Danke für die Kommentare, natürlich sind die Pilze essbar, nur mit Pilsen kann ich nicht dienen.

    Wie versprochen, hier ein kommentierter Quelltext, welcher langsam aber sicher auch schon wieder am fett werden ist (Ducken, Animationen, UI-Symbole uvm. und ein etwas verbasteltes Frame-Skipping). Als ausführbare EXE + Quellcode

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    An der 4K Version war ich auch noch mal dran, diese wäre dann jetzt nicht mehr lesbar ;)

    Neue Funktionen sind hier:

    • Das Wichtigste: Das Level ist jedes Mal komplett zufällig, Bäume überschneiden sich nicht mehr und Pilze sind immer erreichbar
    • Highscore Funktion
    • Hübschere Pilze
    • Leichtes Auf-/Abbewegen beim Laufen
    Code
    Declare s&,h&,w%,g&,w&,a#,t!,b%,u!,j!,k!,d!,a!,b!,e!,w!,s!,v!,x%,y%,m%,n%,b&,f&,t&,u&,v&,h!,i!,i%,j%,q#,p#,o#[220],c!,g!,c&,m!,i&,l!,p!,p&,p&[10],l&,r$,m$,c$,p$,q$,z$,s$,o&:set("errorlevel",-1):s&=val(ReadIni$("HKEY_1","SOFTWARE\\Pilzsuche","h")):set("errorlevel",0):Dim q#,32:Dim p#,8:Dim a#,32:r$="Rotate":m$="Move":c$="Color":p$="Push":q$="Pop":z$="Cylinder":s$="Sphere":Def r(0) -75+(Rnd(1500)*.1):Def g(1) !"user32","GetCursorPos":Def s(2) !"user32","SetCursorPos":o#[0]=new(xpDisk):windowstyle 80:cls:Showcursor 0:ShowMax:Randomize:oGL("Init",%hWnd,.68,.80,1,1):oGL("PosMode",1):oGL("glShadeModel",$1D00):oGL("Fog",3,80,99):h&=create("Font","Ink Free",12,0,1,0,0):g&=oGL("OutlineFont",h&,0):deleteobject h&:Long q#,0=0,single(40),0,single(1):Long a#,0=single(.5),single(.5),single(.7),0:v&=&gettickcount:WhileNot IsKey(27): u&=&gettickcount:Case (u&-t&)<16:sleep 16-(u&-t&):t&=u&:If iskey(2):if (b%=0) & (s!=-1):m!=20:b%=1:Endif:Else:b%=0:Endif:s!=s!-(m!*.01) +l!:If s!<-1:inc i&:l!=.01*i&:Else:i&=0:l!=0:m!=0:s!=-1:Endif:i%=i%+x%-m%:j%=j%+y%-n%:j!=(-i%)*.1:u!=(-j%)*.1:Case (u!>60):u!=60:Case (u!<-60):u!=-60:Case (abs(u!-a!)>.001):a!=a!+((u!-a!)*.45):Case (abs(j!-b!)>.001):b!=b!+((j!-b!)*.45):If iskey(83):i!=-.2:Elseif iskey(87):i!=.2:Endif:If iskey(68):h!=-.2:Elseif iskey(65):h!=.2:Endif:If (i!<>0) | (h!<>0):If (i!<>0) & (h!<>0):i!=i!*.7071:h!=h!*.7071:Endif:inc w%:t!=h!:h!=cos(.0174533*b!)*t!-sin(.01745*b!)*i!:i!=sin(.0174533*b!)*t!+cos(.01745*b!)*i!:c&=0:o#[0].posx!=k!+h!:o#[0].posy!=d!+i!:o#[0].x!=.5:Whileloop 1,210:Case intersect("d",o#[&loop],o#[0]):c&=&loop:Wend:IfNot c&:k!=k!+h!:d!=d!+i!:ElseIf c&>200:Inc p&:if p&=10:v&=&gettickcount-v&:if (v&<s&) | (s&=0):s&=v&:WriteIni "HKEY_1","SOFTWARE\\Pilzsuche","h"=str$(s&):endif:endif:p&[c&-200]=1:o#[c&].posx!=9999:Endif:i!=0:h!=0:Endif:Case (abs(k!-w!)>.001):w!=w!+((k!-w!)*.2):Case (abs(d!-v!)>.001):v!=v!+((d!-v!)*.2):If (m%<20) | (m%>%maxx-20) | (n%<20) | (n%>%maxy-20):x%=%maxx*.5:y%=%maxy*.5:s(x%,y%):Else:x%=m%:y%=n%:Endif:g(p#):m%=Long(p#,0):n%=Long(p#,4):oGL("Clear"):oGL(p$):oGL(r$,a!,b!,e!):oGL(m$,w!,s!+sin(w%*.2)*.07,v!):oGL("glLightfv",$4000,$1203,q#):oGL("glLightfv",$4000,$1200,a#):Whileloop 20:l&=&loop:oGL(p$):oGL(m$,sin(l&+f&*.001/l&)*20*l&,30,cos(l&+f&*.001/l&)*20*l&):oGL(r$,0,l&+f&*.001/l&,0):IfNot w&:w&=ogl("StartList"):Whileloop 5:l&=&loop:oGL(m$,0,0,6):oGL(p$):oGL(r$,l&*43,0,l&*22):oGL(s$,if((l&=1) | (l&=5),4,if(l&=3,8,7)),6,6):oGL(q$):Wend:ogl("EndList"):Endif:ogl("drawlist",w&):oGL(q$):Wend:oGL(p$):oGL(r$,-90,0,0):oGL(m$,-w!-120,v!-120,0):oGL(c$,.15,.2,0,1):oGL("Quad",480,480):oGL(q$):WhileLoop 10:l&=&loop:If p&[l&]<>1:oGL(p$):if p&[l&]=0:o#[l&+200]=new(xpDisk):o#[l&+200].posx!=-r():o#[l&+200].posy!=-r():o#[l&+200].x!=.3:p&[l&]=2:endif:oGL(m$,-o#[l&+200].posx!,.08,-o#[l&+200].posy!):oGL(c$,.3,.2,.2,1):oGL(z$,.16,.08,.35,6):::oGL(m$,0,.15,0):oGL(r$,20-l&,20+l&,0):::oGL(z$,.25,.25,.01,7):oGL(m$,0,.03,0):oGL(c$,.7,.63,.5,1):oGL(z$,.28,.3,.05,7)::oGL(m$,0,.125,0)::oGL(z$,.3,.2,.2,7):oGL(m$,0,.15,0):oGL(z$,.2,.05,.1,7):oGL(q$):Endif:Wend:IfNot b&:b&=ogl("StartList"):WhileLoop 200:l&=&loop:oGL(p$):o&=0:l&=&loop:whilenot o&:c!=r():g!=r():o&=1:whileloop 0,l&-1:if (abs(c!+o#[&loop].posx!)+abs(g!+o#[&loop].posy!))<8:o&=0:break:endif:wend:whileloop 201,210:case (abs(c!+o#[&loop].posx!)+abs(g!+o#[&loop].posy!))<8:o&=0:wend:wend:p!=1.8+rnd(150)*.01:o#[&loop]=new(xpDisk):o#[&loop].posx!=-c!:o#[&loop].posy!=-g!:o#[&loop].x!=p!*.75:oGL(m$,c!,0*.5,g!):oGL(r$,0,rnd(360),0):oGL(c$,.3,.2,.05,1):oGL(z$,p!*.4,p!*.15,p!*2,6):oGL(c$,.1,.2,.05,1):oGL(m$,0,.25*p!,0):WhileLoop 6+p!:oGL(m$,0,.7*p!,0):oGL(z$,p!*1.5-&loop*.15*p!,0,p!*1.5,7):Wend:oGL(q$):Wend:WhileLoop 1,500:c!=r():g!=r():p!=.2+rnd(200)*.005:oGL(p$):oGL(m$,c!,-p!*.5,g!):oGL(r$,0,rnd(360),rnd(360)):oGL(c$,.2,.2,.2,1):oGL(s$,p!,4,6):oGL(q$):Wend:ogl("EndList"):Endif:ogl("DrawList",b&):oGL(q$):oGL("Origin",-(%maxx/%maxy*7.5),7,-20):oGL("glDisable",$0B71):oGL("Print",g&,str$(p&)+" / 10"+if(p&>9," Well done! "+str$(int(v&*.001))+"s Hiscore: "+str$(int(s&*0.001))+"s","")):oGL("glEnable",$0B71):oGL("Show"):inc f&:Wend:Dispose p#,q#,a#

  • Volkmar
    Moderator
    Reaktionen
    6.892
    Beiträge
    6.851
    • 11. Oktober 2021 um 16:21
    • #14

    Super! Ich dachte schon, ich hätte mich im Wald verirrt. Aber dann fand ich doch noch den 10. Pilz.

    Gruß Volkmar

  • cadtec
    Ist öfter hier
    Reaktionen
    22
    Beiträge
    40
    • 15. Dezember 2021 um 08:38
    • #15

    Grandios :) !

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Windows 11

  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™