Hirdetés

Új hozzászólás Aktív témák

  • Tomi_78

    aktív tag

    Sziasztok!
    Annak megválaszolásában kérném a segítségeteket, hogy egy listába a legutóbb beszúrt elem indexét hogyan lehet megkapni? Mert én most a listanév.Count-1 képletet használom hozzá, de valamiért ez nem jó.
    A programomban van egy palya nevű térkép, amely alapján elhelyezem a képernyőre a játék elemeit, viszont nem mindenhol illeszkednek így pontosan egymáshoz, amiknek kéne, pl. a szereplőknek a platformok fölé. Ezért azt csinálom, hogy a létrehozáskor az y koordinátájuk módosuljon úgy, hogy leessenek az alattuk levő platformra, és azután indulhatna a játék - de ez eddig nem sikerült nekem.
    Így néz ki most, felvázolva lényege:
    /*1: Játékos, 2: robot1, 3: platform, 4: platform és fölötte robot1, 5: tank1, 6: platform és fölötte tank1,
                7: ketrec, 8: platform fölötte ketreccel, 9: kis drón*/
                switch (mostpalya) {
                    case 1:
                        palya = new int[,]{{0,0,0,0,0,0,0,0,0,0},
                                        {0,0,9,0,0,0,0,0,5,0},
                                        {0,0,0,0,3,3,4,8,3,3},
                                        {0,0,0,0,0,0,0,0,0,0},
                                        {3,4,3,3,0,0,0,0,0,0},
                                        {0,0,0,0,0,0,0,0,0,0},
                                        {0,0,0,3,3,0,0,3,8,3},
                                        {0,0,0,0,0,0,0,0,0,0},
                                        {0,3,3,0,0,3,3,3,0,0},
                                        {2,0,0,0,1,0,0,0,0,5},
                                        };

    Aztán egy tank létrehozása:
    case 5:
                                    var egyell3 = new JatekElemei();
                                    egyell3.xhely = xh;
                                    egyell3.yhely = yh-tank1all.Height;
                                    egyell3.nezirany = "balra";
                                    egyell3.mitcsinal = "jarkal";
                                    egyell3.mostkepe = tank1all;
                                    egyell3.neve="tank1";
                                    egyell3.mozgseb = 6;
                                    egyell3.elete=3;
                                    egyell3.melyseg = 0;
                                    jatelemlista.Add(egyell3);
                                    elhelyez(jatelemlista.Count-1,egyell3.xhely,egyell3.yhely,egyell3.mostkepe.Width,egyell3.mostkepe.Height);
                                break;

    és az elhelyező alprogramok:
    void elhelyez(int jatelem, int xh, int yh, int kepszel, int kepmag) {
                while (yh<=Screen.PrimaryScreen.Bounds.Height-talcamag-cimsormag && kivelutkozik(jatelem,xh,yh+kepmag+1,kepszel,kepmag)==-1) {
                    yh+=1;
                }
                jatelemlista[jatelem].yhely = yh;
            }

    int kivelutkozik(int hivoobj, int ittx, int itty, int objkepszel, int objkepmag) {
                for (int i=0; i<jatelemlista.Count; i++) {
                    var je = jatelemlista[i];
                    if (hivoobj!=i && je.neve!="arcocska" && ittx<je.xhely+je.mostkepe.Width && ittx+objkepszel>je.xhely && itty<je.yhely+je.mostkepe.Height && itty+objkepmag>je.yhely) return i;
                }
                return -1;
            }

    És az a fő baj, hogy az elhelyez alprogram hívása az összes tankot elmozgatja, nemcsak a jatelem indexűt, ami elvileg a jatelemlista.Count-1.
    Az meg már csak a hab a tortán, hogy nem is jól teszi lentebb őket, hanem lóg a levegőben az egyik a kettő közül.

Új hozzászólás Aktív témák