Pacman

  • Hallo erstmal

    also ich bin neu hir im Forum und hätte da ein Problem

    ich will ein Pacman spiel machen und habe folgende fragen:

    1. Wie mache ich das man ins nächste Level kommt erst wenn man alle punkte gesammelt hat. ich habe nicht die Pro version nur den ganz normalen Game Maker 7.0

    2. Wie mache ich das die Gegner ganz zufällige Seiten gehen
  • hallo erstmal,
    Zufällige Sachen machst du am Besten mit random(x).
    Um die Gegner in zufällige Richtungen laufen zu lassen,
    setzt du ihre speed auf einen bestimmten Wert und gibst dann
    direction=random(360) ein.
    Mit den Punkten nimmst du einfach check variable und dann
    instance_number(deinpunkteobjekt) und als Wert 0,
    dass sollte funktionieren.
    Gruß, Spellmaker
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • Naja, Spellmarker, das mit direction ist nicht ganz so richtig, normalerweiße kann man bei einem Pacman nicht in alle Richtungen gehen, sondern nur link, rechts, rauf und hinunter. also würde ich vorschlagen das er statt:

    GML-Quellcode

    1. direction=random(360)

    das hier schreibt:

    GML-Quellcode

    1. direction=choose(0,90,180,270)

    Dann suchti er sich halt immer oben , unten ... aus.

    LG Afroman
  • Choose nimmt aber automatisch den größten Wert. Dann muss er halt
    direction=floor(random(4))*90 machen

    Edit: ups...
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Spellmaker ()

  • 1. Es gibt auch eine D&D Aktion, die die Anzahl an Instanzen eines Objekts prüft.
    2. Eigentlich sollte es so gehen:

    GML-Quellcode

    1. // Collisions Event => Wand:
    2. direction = choose(direction+90,direction-90);
    Das lässt die Geister, wenn sie in ihre Bewegungsrichtung an die Wand "klatschen" entweder nach rechts oder links gehen. Eventuell musst du noch ein paar Abfragen einbauen, um zu prüfen, ob die Richtung frei ist.
  • was man machen muss is verhindern, dass die geister während eines geschlossenen ganges ihre richtung um 180° drehen, habe mal nen labyrinth bot gebaut... is zwar nicht allzu intelligent, aber bewegt sich wenigstens richtig. ich hab bei jeder bewegung vorher getestet mit collision_point ob der geist an den stellen , an denen er sich befinden würde, wenn er denn die richtung änderte, freien platz hätte.. bei mir war eine bewegung 24 pixel groß, also

    if collision_point(x-24,y,deine-wand,0,1).... hier im beispiel wurde die richtung nach links überprüft, und in mienem code eine variable "links" auf 1 gesetzt, wenn der zug möglich ist, andernfalls auf 0.
    (neues beispiel)
    nun zaehle ich alle richtungen zusammen, und wenn ich in einem abgeschlossenen gang bin (zB hoch und runter) is die summe = 2 , da oben und unten auf 1 gesetzt sind (links und rechts auf 0) ... an so einem punkt sollte die richtung zufällig gewählt werden, jedoch NICHT der gegenteiligen richtung entsprechen, habe sowas gemacht wie x und xprevious... habe einfach chose(up,left,down,right) gemacht bis das ergebnis ungleich 0 ist (weil 0 ja bedeutet dasses end geht) und dann den wert auf ne variable zB "i" übertragen.. nach der bewegung wird "i2" der wert von i übergeben,... dann bei der bewegung kann man dann eine bewegungsänderung um 180° verhindern weil man den wert der vorherigen richtung in "i2" kennt. nun wenn die anzahl der freien richtungen >2 ist ist man an einer kreuzung, und random is wieder aktiv(, immernoch mit der sperre für die gegenteilige richtung)

    ich häng die datei mal an, d für die, die gm6.1 nicht haben den teil vom code.

    (alarm[0] event)

    GML-Quellcode

    1. if place_free(x,y-24) up=1 else up=0; // hier abtasten
    2. if place_free(x-24,y) left=1 else left=0;
    3. if place_free(x,y+24) down=1 else down=0;
    4. if place_free(x+24,y) right=1 else right=0;
    5. if up+left+down+right=1 // bei sackgasse in meinem labyrinth eine wand simulieren
    6. instance_create(x,y,pseudowall);
    7. if up+left+down+right>2 // is unwichtig für pacma
    8. {
    9. a=collision_point(x,y-24,field,0,0).tries;
    10. b=collision_point(x-24,y,field,0,0).tries;
    11. c=collision_point(x,y+24,field,0,0).tries;
    12. d=collision_point(x+24,y,field,0,0).tries;
    13. do if a*b*c*d!=0
    14. {a-=1;b-=1;c-=1;d-=1}
    15. until a*b*c*d=0
    16. rup=0;rleft=0;rdown=0;rright=0; // immer noch unwichtig für pacman
    17. if (a=0)and(up=1)and(ip!=1) rup=1;
    18. if (b=0)and(left=1)and(ip!=2) rleft=1;
    19. if (c=0)and(down=1)and(ip!=3) rdown=1;
    20. if (d=0)and(right=1)and(ip!=4) rright=1;
    21. if rup+rleft+rdown+rright=1 // ja das auch unwichtig für pacman
    22. {
    23. if rup=1 i=1;
    24. if rleft=1 i=2;
    25. if rdown=1 i=3;
    26. if rright=1 i=4;
    27. }else
    28. do i=choose(up+0*up,left+1*left,down+2*down,right+3*right); until (i!=0)//and(i!=j);<- veralteter kommentar
    29. }
    30. else // HIER das random mit choose
    31. do i=choose(up+0*up,left+1*left,down+2*down,right+3*right); until (i!=0)//and(i!=j);
    32. m=0; // das ausführen der bewegung in abhängigkeit von "i"
    33. //variable m is unwichtig für pacman
    34. //ip entspruicht dem oben angesprochenem "i2"
    35. if (i=1)and((ip!=i)or((down=0)and(up+left+down+right=1))) {y-=24;ip=3;m=1}
    36. if (i=2)and((ip!=i)or((right=0)and(up+left+down+right=1))) {x-=24;ip=4;m=1}
    37. if (i=3)and((ip!=i)or((up=0)and(up+left+down+right=1))) {y+=24;ip=1;m=1}
    38. if (i=4)and((ip!=i)or((left=0)and(up+left+down+right=1))) {x+=24;ip=2;m=1}
    39. h=collision_point(x,y,field,0,1) // unwichtig
    40. if (h>0)and(m=1) h.tries+=1;
    41. alarm[0]=1;
    Alles anzeigen


    hier die datei vom game maker 6.1
    räume müssen "per hand" geändert werden, es existeiern 3 labyrinthe
    (falls wer den bot anguggn will, im alarm event kann die geschwindigkeit angepasst werden, alarm[0]=1 also so schnell wie n step isses anfänglich, man kann gegen den bit antreten, mit pfeiltasten bewegen)

    speedyshare.com/365496736.html

    EDIT by TrunX: Unnötige Zeilenumbrüche entfernt und GML-Tags eingefügt.
  • Benutzer online 1

    1 Besucher