Показать сообщение отдельно

  #5  
Старый 13.01.2010, 20:25
Ann$
Новичок
Регистрация: 13.01.2010
Сообщений: 2
Провел на форуме:
2592

Репутация: 0
По умолчанию

Код:
#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);
	


}
Вот только я незнаю правильно или нет

Последний раз редактировалось slesh; 14.01.2010 в 10:32.. Причина: [code]
 
Ответить с цитированием