Új hozzászólás Aktív témák
-
zuzu000
őstag
Sziasztok!
C#-ban próbálok egy wolf3d klónt írni, suliban beadandóhoz kell. Megvan az eredeti forráskód, de c++ tudásom sajna ennyire nincs a topon, hogy minden részét tudjam értelmezni. Egy metódus lenne, ami elég fontos, ha tudnátok segíteni, megköszönném (hogy pontosan mit is csinál)
boolean CheckLine (objtype *ob)
{
int x1,y1,xt1,yt1,x2,y2,xt2,yt2;
int x,y;
int xdist,ydist,xstep,ystep;
int temp;
int partial,delta;
long ltemp;
int xfrac,yfrac,deltafrac;
unsigned value,intercept;
x1 = ob->x >> UNSIGNEDSHIFT; // 1/256 tile precision
y1 = ob->y >> UNSIGNEDSHIFT;
xt1 = x1 >> 8;
yt1 = y1 >> 8;
x2 = plux;
y2 = pluy;
xt2 = player->tilex;
yt2 = player->tiley;
xdist = abs(xt2-xt1);
if (xdist > 0)
{
if (xt2 > xt1)
{
partial = 256-(x1&0xff);
xstep = 1;
}
else
{
partial = x1&0xff;
xstep = -1;
}
deltafrac = abs(x2-x1);
delta = y2-y1;
ltemp = ((long)delta<<8)/deltafrac;
if (ltemp > 0x7fffl)
ystep = 0x7fff;
else if (ltemp < -0x7fffl)
ystep = -0x7fff;
else
ystep = ltemp;
yfrac = y1 + (((long)ystep*partial) >>8);
x = xt1+xstep;
xt2 += xstep;
do
{
y = yfrac>>8;
yfrac += ystep;
value = (unsigned)tilemap[x][y];
x += xstep;
if (!value)
continue;
if (value<128 || value>256)
return false;
//
// see if the door is open enough
//
value &= ~0x80;
intercept = yfrac-ystep/2;
if (intercept>doorposition[value])
return false;
} while (x != xt2);
}
ydist = abs(yt2-yt1);
if (ydist > 0)
{
if (yt2 > yt1)
{
partial = 256-(y1&0xff);
ystep = 1;
}
else
{
partial = y1&0xff;
ystep = -1;
}
deltafrac = abs(y2-y1);
delta = x2-x1;
ltemp = ((long)delta<<8)/deltafrac;
if (ltemp > 0x7fffl)
xstep = 0x7fff;
else if (ltemp < -0x7fffl)
xstep = -0x7fff;
else
xstep = ltemp;
xfrac = x1 + (((long)xstep*partial) >>8);
y = yt1 + ystep;
yt2 += ystep;
do
{
x = xfrac>>8;
xfrac += xstep;
value = (unsigned)tilemap[x][y];
y += ystep;
if (!value)
continue;
if (value<128 || value>256)
return false;
//
// see if the door is open enough
//
value &= ~0x80;
intercept = xfrac-xstep/2;
if (intercept>doorposition[value])
return false;
} while (y != yt2);
}
return true;
}A nagyrésze érthető, de vannak c++ dolgok, amik számomra teljesen ismeretlenek. False-t ad vissza, ha a "vonal" útjában van valami, igazat, ha a kettő obj között semmi nincs.
xt1 = x1 >> 8;
Ez pontosan mit csinál?
Illetve y1&0xff és a többi ilyen rész?
Előre is köszi
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Tizenkét tányérra térne át a Toshiba a HDD-piacon
- Újjászületés: szombattól új szerverkörnyezetben a PROHARDVER! lapcsalád
- Milyen alaplapot vegyek?
- exHWSW - Értünk mindenhez IS
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- alza vélemények - tapasztalatok
- Kompakt vízhűtés
- nVidia GeForce GTX 1070 / 1070 Ti / 1080 (GP104)
- Mibe tegyem a megtakarításaimat?
- ASZTALI GÉP / ALKATRÉSZ beárazás
- További aktív témák...
- ASUS TUF Gaming F15 gamer laptop
- S. Mario PC! Hogy fusson a Super Mario! I5 14400F / RX 6900XT 16GB / 32GB DDR5 / 1TB SSD
- Motorola edge 40 neo - makulátlan, ár-érték bajnok
- Dell Latitude 5500 8.gen-i5/16GB RAM/256SSD/WIN11/GARANCIA
- LOQ 15IRX9 15.6" FHD IPS i7-13650HX RTX 4060 16GB 1TB NVMe magyarított (lézerezett) vbill gar
- GeForce RTX 3060Ti (OEM HP)
- AKCIÓ! ASUS ROG G16 (2025) G615LR 16 - Ultra 9 275HX 32GB DDR5 1TB SSD RTX 5070Ti 12GB WIN11
- Microsoft Surface Go 10.5" 8GB 128GB Pentium Gold 4415Y 1 év garancia
- LG 35WN75C-B - 35" Ívelt VA - 3440x1440 - 100Hz 5ms - USB Type-C 60W - AMD FreeSync - HDR 10
- Apple iPhone 14 Pro / Gyárifüggetlen / 128GB / 12Hó Garancia / 88% akku
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest