Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2010, 17:40   #1
$Anya$
Новичок
Джуниор
 
Регистрация: 15.11.2009
Сообщений: 2
По умолчанию Проверти пожалуйста задачку на Си для моделирования обхода препяствия роботом

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <time.h>

unsigned char far *screen = MK_FP (0xA000,0);

void SetMode (int Mode)
{
union REGS regs;
regs.h.ah = 0;
regs.h.al = Mode;
int86 (0x10, &regs, &regs);
}

void ClearScreen (void)
{
unsigned i;
for (i=0; i<64000l; i++) screen [i]=0;
}

void drawBody (int x, int y, unsigned char *draw)
{
int x1,y1;

x += 2;
y += 3;

for (y1=0;y1<14;y1++)
for (x1=0;x1<17;x1++)
if (draw[y1*17+x1] !=0) screen[320*(y1+y)+x1+x] = draw[y1*17+x1];
}


void clearBody (int x, int y)
{
int x1,y1;

x += 2;
y += 3;

for (y1=0;y1<14;y1++)
for (x1=0;x1<17;x1++)
screen[320*(y1+y)+x1+x] = 0;
}


void drawObstacle (int x, int y, unsigned char *draw)
{
int x1,y1;

x += 4;
y += 5;

for (y1=0;y1<10;y1++)
for (x1=0;x1<12;x1++)
if (draw[y1*12+x1] !=0) screen[320*(y1+y)+x1+x] = draw[y1*12+x1];
}

void WaitSync(void)
{
while(inportb(0x3DA) &0x8);
while(!(inportb(0x3Da)&0x8));
}


void drawLine1 (int x)
{
int y;
for (y=0;y<=200;y++)
screen[320*y+x] = 8;
}

void drawLine2 (int y)
{
int x;
for (x=0;x<=320;x++)
screen[320*y+x] = 8;
}

unsigned char robot[17*14] = {
0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,
0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,
0,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,
1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,
0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,
0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,
0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,
1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1
};

unsigned char obstacle[12*10] = {
8,8,8,8,8,8,8,8,8,8,8,8,
8,3,1,1,1,1,1,1,1,1,3,8,
8,1,3,1,1,1,1,1,1,3,1,8,
8,1,1,3,1,1,1,1,3,1,1,8,
8,1,1,1,3,3,3,3,1,1,1,8,
8,1,1,1,3,3,3,3,1,1,1,8,
8,1,1,3,1,1,1,1,3,1,1,8,
8,1,3,1,1,1,1,1,1,3,1,8,
8,3,1,1,1,1,1,1,1,1,3,8,
8,8,8,8,8,8,8,8,8,8,8,8
};


void goNow(int go, int *kx, int *ky ) {

int x = *kx;
int y = *ky;


if( go == 1) y--;
else if( go == 2) {y--; x++;}
else if( go == 3) {x++;}
else if( go == 4) {x++; y++;}
else if( go == 5) {y++;}
else if( go == 6) {y++; x--;}
else if( go == 7) {x--;}
else if( go == 8) {x--; y--;}

*kx = x;
*ky = y;
}

void main ()
{
int x, y, i = 1;
int up = 0;
int r_max = 0;
int kx = 0, ky = 0;
int r = 0;
int go = 0;
// все шаги
int xs[1000];
int xy[1000];
//препятствия
int ss[161];
int xx;
long j;
time_t t;

SetMode (0x13);

srand((unsigned) time(&t) );
r = rand() % 1000000;


//for(x=0; x <= 320; x += 20) drawLine1(x);
//for(y=0; y <= 200; y += 20) drawLine2(y);

for (xx=0; xx < 160; xx++) ss[i] = 0;

xs[0] = 0;
xy[0] = 0;

while (kx != 15 || ky != 9) {



srand(i * i * r * r);

if (ky == 0 && kx == 0) { up = 2; r_max = 3; }
else if (ky == 0 && kx == 15) { up = 4; r_max = 2; }
else if (ky == 9 && kx == 15) { up = 1; r_max = 2; }

else {

if (ky == 0) {up = 2; r_max = 4;}
else if (kx == 0) {up = 1; r_max = 4;}
else if (kx == 15) {up = 4; r_max = 2;}
else if (ky == 9) {up = 0; r_max = 3;}
else { up = 1; r_max = 5;}

}

go = (rand() % (r_max - 1) ) + up + 1;


goNow( go, &kx, &ky );


xs[i] = kx;
xy[i] = ky;

ss[ky*16+kx] = 1;



i++;
}



for (xx=0; xx < 160; xx++) {
if (ss[xx] == 0) {
srand(r * r * xx * xx);
go = rand() % 5;
if (go > 1) drawObstacle( (xx % 16) * 20, (xx / 16) * 20, obstacle);
}
}

for(xx = 0 ; xx < i; xx++) {
drawBody( xs[xx]*20, xy[xx]*20, robot);

for (j = 0; j < 200000000; j++) {}
clearBody(xs[xx]*20, xy[xx]*20);
}

SetMode(3);



}
$Anya$ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверти,файлы,паскаль!! DjDeniels-61 Паскаль, Turbo Pascal, PascalABC.NET 4 01.07.2009 18:36
Подскажите тему для моделирования Кирилл13 Помощь студентам 1 14.02.2009 21:10
Проверти код! на паскале! Спасибо! Impulsive Паскаль, Turbo Pascal, PascalABC.NET 2 10.03.2008 21:54