3D-Pilzsuche (OpenGL)


  • 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: 3dpilzsuche.zip


    Viel Spaß beim Spielen!



    2 Mal editiert, zuletzt von SvenB ()

  • Abifiz

    Hat den Titel des Themas von „3D Pilzsuche (OpenGL)“ zu „3D-Pilzsuche (OpenGL)“ geändert.
  • 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'.


  • 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

  • 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

  • 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

  • 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 8k.zip


    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#

Jetzt mitmachen!

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