public void vemuctieu() { //Các mục tiêu này nằm ở màn hình chính int x = toadox; int y = toadoy; TrucToaDo ttd = new TrucToaDo(); kcmt = khoangcachmuctieu(); Graphics g = Graphics.FromImage(RADAR.vungtam1); SolidBrush mauve = new SolidBrush(maumuctieu); int tgnhay = thoigiannhay;//Khoảng thời gian chờ để nhảy lên vị trí mới int timewait = thoigiancho;// Thời gian chờ để mục tiêu băt dầu chạy so với Radar int time =ttd.xacdinhthoigian();//Luôn nhân được giá trị thời gian hiện tại int i = 0; int thoigian_rd_chay = time - RADAR.thoigianbatdau;//Thời gian Radar đã chạy int thoigianmuctieuchay = thoigian_rd_chay - timewait; int t = thoigianmuctieuchay / tgnhay;// Dùng tìm các khoảng thời gian if ((kcmt > 160) && (bd > 0)) mt_destroyed = 1;//--Huy bo khi ra ngoai pham vi if (thoigian_rd_chay >= timewait) {//-----------------Tăng tọa độ theo thời gian định sẵn mt_Started = 1; // Muc tieu dau tien chon loai chuyen dong nay int tdxA = 0; int tdxB = 0; int tdyA = 0; int tdyB = 0; float AB = 0; double vantoc = 0; if ((t > tangtoado_mt) && (mt_destroyed == 0)) { if (thutu == 1) { counted++; if (toadox < 150)//--> den 150 chuyen qua toa do khac { toadoy++; toadox++; } else if (toadox < 200) { toadoy--; toadox++; } else { toadox++; toadoy++; } tangtoado_mt = t; qdmt += Math.Sqrt(2); vantoc = (qdmt * 2.5 * 3600000 / (counted * tgnhay)); vxt = (float)(Math.Ceiling(vantoc)); } else if (thutu == 2) {// Ve duong di cho muc tieu thu 2 tangtoado_mt = t; tdyA = toadoy - (toadox *toadox) / ((Math.Abs(toadox) + 1) * 60); toadox--; toadoy = tdyA; //Tinh van toc tdxA =toadox;//toa do truoc tdxB = toadox - 1;//toa do sau tdyB = tdyA - (tdxB * tdxB) / ((Math.Abs(tdxB) + 1) * 60); AB = (float)(Math.Sqrt((tdxA - tdxB) * (tdxA - tdxB) + (tdyA - tdyB) * (tdyA - tdyB))); qdmt += AB; counted++; vantoc = 3600000 * qdmt * 2.5 / (counted * tgnhay);//-->Km/h vxt = (float)Math.Ceiling(vantoc); } else if (thutu == 3) { tangtoado_mt = t; // Tăng tọa độ lên mapmt3++; //Tinh toc do tdxB = toadox + (int)(5 * Math.Sin((mapmt3 - 1) * Math.PI / 180f));//Truoc do tdyB = toadoy - (int)(2 * Math.Cos((mapmt3 - 1) * Math.PI / 180f)); toadox = toadox + (int)(5 * Math.Sin(mapmt3 * Math.PI / 180f)); //Hien tai toadoy = toadoy - (int)(2 * Math.Cos(mapmt3 * Math.PI / 180f)); tdxA = toadox; tdyA = toadoy; AB = (float)(Math.Sqrt((tdxA - tdxB) * (tdxA - tdxB) + (tdyA - tdyB) * (tdyA - tdyB))); counted++; qdmt += AB; vantoc = 3600000 * qdmt * 2.5 / (counted * tgnhay);//-->Km/h vxt =(float)Math.Ceiling(vantoc); } else if (thutu == 4) { tangtoado_mt = t; mapmt4 += 0.07f; toadox = toadox - 1; if (toadox > 180) { mtve4 += 2; tdyB = toadoy + (int)(Math.Abs(mtve4 - 2) * Math.Cos(mapmt4 - 0.07)) / 30; toadoy = toadoy + (int)(Math.Abs(mtve4) * Math.Cos(mapmt4)) / 30; //Tinh van toc tdxA = toadox;//Hien tai tdyA = toadoy; tdxB = tdxA + 1; AB = (float)(Math.Sqrt((tdxA - tdxB) * (tdxA - tdxB) + (tdyA - tdyB) * (tdyA - tdyB))); counted++; qdmt += AB; vantoc = 3600000 * qdmt * 2.5 / (counted * tgnhay);//-->Km/h vxt =(float) Math.Ceiling(vantoc); } else { mtve4 -= 2; tdyB = toadoy + (int)(Math.Abs(mtve4 + 2) * Math.Cos(mapmt4 - 0.07)) / 30; toadoy = toadoy + (int)(Math.Abs(mtve4) * Math.Cos(mapmt4)) / 30; tdxA = toadox;//Hien tai tdyA = toadoy; tdxB = tdxA + 1; AB = (float)(Math.Sqrt((tdxA - tdxB) * (tdxA - tdxB) + (tdyA - tdyB) * (tdyA - tdyB))); counted++; qdmt += AB; vantoc = 3600000 * qdmt * 2.5 / (counted * tgnhay);//-->Km/h vxt =(float) Math.Ceiling(vantoc); } } else if (thutu == 5) { tangtoado_mt = t; x05++; mtve5 += 0.1f; tdxA = x05 + (int)(RADAR.R / 5 * Math.Sin((float)mtve5)); tdyA = y05 + (int)(RADAR.R / 5 * Math.Cos((float)mtve5)); // Tinh toc do toadox =tdxA; toadoy = tdyA; tdxB = x05-1+(int)(RADAR.R /5 * Math.Sin((float)(mtve5-0.1f))); tdyB = y05-1+(int)(RADAR.R /5 * Math.Cos((float)(mtve5-0.1f))); AB = (float)(Math.Sqrt((tdxA - tdxB) * (tdxA - tdxB) + (tdyA - tdyB) * (tdyA - tdyB))); counted++; qdmt += AB; vantoc = 3600000 * qdmt * 2.5 /(counted*tgnhay); vxt =(float) Math.Ceiling(vantoc); } else if (thutu == 6) { tangtoado_mt = t; x06--; y06++; mtve6 += 0.08f; r06 += 0.6f; tdxA = x06 + (int)(r06 * Math.Sin((float)mtve6)); tdyA = y06 + (int)(r06 * Math.Cos((float)mtve6)); toadoy = tdyA; toadox = tdxA; tdxB = x06 + 1 + (int)((r06 - 0.6f) * Math.Sin((float)(mtve6 - 0.08f))); tdyB = y06 - 1 + (int)((r06 - 0.6f) * Math.Sin((float)(mtve6 - 0.08f))); AB = (float)(Math.Sqrt((tdxA - tdxB) * (tdxA - tdxB) + (tdyA - tdyB) * (tdyA - tdyB))); counted++; qdmt += AB; vantoc = 3600000 * qdmt * 2.5 / (counted * tgnhay);//-->Km/h vxt =(float) Math.Ceiling(vantoc); } } //Nếu là những lần tiếp theo sau lần quét trúng if ((bd > 0)&&(khoangcachmuctieu()<=160)) { //Chỉ vẽ lại vết khi mà mục tiêu nằm trong tầm kiểm soát for (i = 0; i < bd; i++) { g.FillRectangle(mauve, vetx[i], vety[i], 2, 2); } } if ((kcmt <= 160) && (ttd.quettrung(x, y) == 1) && (mt_catch == 1)) { if (bd == 0) {//Lần đầu tiên quét trúng g.FillRectangle(mauve, x, y, 2, 2); vetx[0] = x; vety[0] = y; bd++; } else {//Cac lan quet sau lan quet trung dau tien // ve cac vet for (i = 0; i < bd; i++) { g.FillRectangle(mauve, vetx[i], vety[i], 2, 2); } // ve diem hien tai g.FillRectangle(mauve, x, y, 2, 2); // Cập nhật điểm hiện tại vào vết nếu tọa độ đã thực sự thay đổi if ((vetx[bd - 1] != x) || (vety[bd - 1] != y)) { vetx[bd] = x; vety[bd] = y; //tang bien dem bd++; } } qt = 1; ttd.sound(); } } }
public void Space_Scan() { //Nap toa do muc tieu TrucToaDo ttd = new TrucToaDo(); Graphics g = Graphics.FromImage(RADAR.vungtam2); g.SmoothingMode = SmoothingMode.AntiAlias; int mt_load = 0; TrucToaDo.xypoint mt; if ((bd > 0) && (mt_catch == 1) && (mt_destroyed == 0)) { if (RADAR.mtselect != thutu) { kcmt = (int)(Math.Sqrt((vetx[bd - 1] - 180) * (vetx[bd - 1] - 180) + (vety[bd - 1] - 180) * (vety[bd - 1] - 180))); } if (kcmt <= 160) { if (ttd.quettrung(toadox,toadoy) == 1) { td_Axis[0].x = toadox; td_Axis[0].y = toadoy; td_Axis[0].z = toadoz; mt_load = 1; } else if (qt == 1) { td_Axis[0].x = vetx[bd - 1]; td_Axis[0].y = vety[bd - 1]; td_Axis[0].z = toadoz; mt_load = 1; } } ttd.quaytheotruc( TrucToaDo.Truc.x, (float)(-Math.PI / 30),td_Axis,1); ttd.quaytheotruc(TrucToaDo.Truc.z, (float)(-Math.PI / 10),td_Axis,1); //VE if (mt_load == 1) { mt = ttd.map3to2(td_Axis[0]); SolidBrush color_mt = new SolidBrush(maumuctieu); g.FillRectangle(color_mt, mt.x - 1, mt.y - 1, 5, 5); } } }