ñêà÷àòü ðåôåðàòû
  RSS    

Ìåíþ

Áûñòðûé ïîèñê

ñêà÷àòü ðåôåðàòû

ñêà÷àòü ðåôåðàòûÊóðñîâàÿ ðàáîòà: Àðêàäíà ãðà "ãîëüô" ç åëåìåíòàìè òðüîõâèì³ðíî¿ ïîâåðõí³

Ïîøóê i-ãî åëåìåíòà â çâ'ÿçàíîìó ñòèñíóòîìó çáåðåæåíí³ çä³éñíþºòüñÿ ìåòîäîì ïîâíîãî ïåðåãëÿäó, ïðè ïîñë³äîâíîìó çáåðåæåíí³ - ìåòîäîì á³íàðíîãî ïîøóêó.

Ïåðåâàãè ³ íåäîë³êè ïîñë³äîâíîãî ñòèñíóòîãî ³ çâ'ÿçàíîãî ñòèñíóòîãî àíàëîã³÷í³ ïåðåâàãàì ³ íåäîë³êàì ïîñë³äîâíîãî ³ çâ'ÿçàíîãî çáåðåæåííÿ.

Ðîçãëÿíåìî íàñòóïíó çàäà÷ó. Íà âõîä çàäàí³ äâ³ ïîñë³äîâíîñò³ ö³ëèõ ÷èñåë M=, N=, ïðè÷îìó 92% åëåìåíò³â ïîñë³äîâíîñò³ Ì äîð³âíþþòü íóëåâ³. Ñêëàñòè ïðîãðàìó äëÿ îá÷èñëåííÿ ñóìè äîáóòê³â Mi * Ni, ³=1,2,...,10000.

Ïðèïóñòèìî, ùî ñïèñîê Ì çáåð³ãàºòüñÿ ïîñë³äîâíî ñòèñëî â ìàñèâ³ ñòðóêòóð m ç îãîëîøåííÿì:

 

struct

{ int nm;

float val; } m[10000];

Äëÿ âèçíà÷åííÿ ê³íöÿ ñïèñêó äîäàìî ùå îäèí åëåìåíò ³ç ïîðÿäêîâèì íîìåðîì m[j].nm=10001, ùî íàçèâàºòüñÿ ñòîïåðîì (stopper) ³ ðîçòàøîâóºòüñÿ çà îñòàíí³ì åëåìåíòîì ñòèñíóòîãî çáåðåæåííÿ ñïèñêó â ìàñèâ³ m.

 Ïðîãðàìà äëÿ ïåðåáóâàííÿ øóêàíî¿ ñóìè ìຠâèãëÿä:

 # include

 main()

{ int ³,j=0;

float inp,sum=0;

struct /* îãîëîøåííÿ ìàñèâó */

{ int nm; /* ñòðóêòóð */

float val; } m[10000];

 

for(i=0;i<10000;i++) /* ÷èòàííÿ ñïèñêó M */ { scanf("%f",&inp); if (inp!="0)" { m[j].nm="i;" m[j++].val="inp;" } } m[j].nm="10001;" /* stopper */ for(i="0,j=0;" i<10000; i++) { scanf("%f",&inp); /* ÷èòàííÿ ñïèñêó N */ if(i="=m[j].nm)" /* îá÷èñëåííÿ ñóìè */ sum+="m[j++].val*inp;" } printf( "ñóìà äîáóòê³â Mi*Ni äîð³âíþº %f",sum); }

²íäåêñíå çáåðåæåííÿ âèêîðèñòîâóºòüñÿ äëÿ çìåíøåííÿ ÷àñó ïîøóêó ïîòð³áíîãî åëåìåíòà â ñïèñêó ³ ïîëÿãຠâ íàñòóïíîìó. Âèõ³äíèé ñïèñîê B = ðîçáèâàºòüñÿ íà òðîõè ï³äñïèñê³â Ó1,Ó2, ...,Âì òàêèì ÷èíîì, ùî êîæåí åëåìåíò ñïèñêó  ïîïàäຠò³ëüêè â îäèí ç ï³äñïèñê³â, ³ äîäàòêîâî âèêîðèñòîâóºòüñÿ ³íäåêñíèé ñïèñîê ç Ì åëåìåíòàìè, ùî âêàçóþòü íà ïî÷àòîê ñïèñê³â Ó1,Ó2, ...,Óì.

Ââàæàºòüñÿ, ùî ñïèñîê çáåð³ãàºòüñÿ íäåêñíî çà äîïîìîãîþ ï³äñïèñê³â B1,B2, ...,Bm ³ ³íäåêñíîãî ñïèñêó X = , äå ADGj - àäðåñà ïî÷àòêó ï³äñïèñêà Bj, j=1,M.

Ïðè ³íäåêñíîìó çáåðåæåíí³ åëåìåíò Äî ï³äñïèñêà Bj ìຠ³íäåêñ j. Äëÿ îäåðæàííÿ ³íäåêñíîãî çáåðåæåííÿ âèõ³äíèé ñïèñîê Ó ÷àñòî ïåðåòâîðèòüñÿ â ñïèñîê Â' øëÿõîì âêëþ÷åííÿ â êîæåí âóçîë ùå ³ éîãî ïîðÿäêîâîãî íîìåðà ó âèõ³äíîìó ñïèñêó Â, à â j-èé åëåìåíò ³íäåêñíîãî ñïèñêó Õ, êð³ì ADGj, ìîæå âêëþ÷àòèñÿ äåÿêà äîäàòêîâà ³íôîðìàö³ÿ ïðî ï³äñïèñîê Bj. Ðîçáèâêà ñïèñêó  íà ï³äñïèñêè çä³éñíþºòüñÿ òàê, ùîá âñ³ åëåìåíòè Â, ùî âîëîä³þòü âèçíà÷åíîþ âëàñòèâ³ñòþ Ðj, ïîïàäàëè â îäèí ï³äñïèñîê Bj.

Äîñòî¿íñòâîì ³íäåêñíîãî çáåðåæåííÿ º òå, ùî äëÿ ïåðåáóâàííÿ åëåìåíòà Ê ñ çàäàíîþ âëàñòèâ³ñòþ Pj äîñèòü ïåðåãëÿíóòè ò³ëüêè åëåìåíòè ï³äñïèñêà Bj; éîãî ïî÷àòîê çíàõîäèòüñÿ ïî ³íäåêñíîìó ñïèñêó Õ, òîìó ùî äëÿ êîæíîãî ÄÎ, ùî íàëåæèòü Bi, ïðè ³ íå ð³âíîìó j âëàñòèâ³ñòü Pj íå âèêîíóºòüñÿ.

Ó ðîçáèâö³  ÷àñòî âèêîðèñòîâóºòüñÿ íäåêñíà ôóíêö³ÿ G(K), ùî îá÷èñëþº ïî åëåìåíò³ Äî éîãî ³íäåêñ j, òîáòî G(K)=j. Ôóíêö³ÿ G çâè÷àéíî çàëåæèòü â³ä ïîçèö³¿ ÄÎ, ùî ïîçíà÷àºòüñÿ ïîç.K, ó ï³äñïèñêó  àáî â³ä çíà÷åííÿ âèçíà÷åíî¿ ÷àñòèíè êîìïîíåíòè ÄÎ - ¿¿ êëþ÷à.

Ðîçãëÿíåìî ñïèñîê B= ç åëåìåíòàìè

ÄÎ1=(17,Y), K2=(23,H), K3=(60,I), K4=(90,S), K5=(66,T),

K6=(77,T), K7=(50,U), K8=(88,W), K9=(30,S).

ßêùî äëÿ ðîçáèâêè öüîãî ñïèñêó íà ï³äñïèñêè ÿê ³íäåêñíó ôóíêö³þ âçÿòè Ga(K)=1+(ïîç.K-1)/3, òî ñïèñîê ðîçä³ëèòüñÿ íà òðè ï³äñïèñêà:

B1a=<(17,Y),(23,H),(60,I)>,

B2a=<(90,S),(66,T),(77,T)>,

B3a=<(50,U),(88,W),(30,S)>.

Äîäàþ÷è óñþäè ùå ³ ïî÷àòêîâó ïîçèö³þ åëåìåíòà â ñïèñêó, îäåðæóºìî:

B1a'=<(1,17,Y),(2,23,H),(3,60,I)>,

B2a'=<(4,90,S),(5,66,T),(6,77,T)>,

B3à'=<(7,50,U),(8,88,W),(9,30,S)>.

ßêùî ÿê ³íäåêñíó ôóíêö³þ âèáðàòè ³íøó ôóíêö³þ Gb(K)=1+(ïîç.K-1)%3, òî îäåðæèìî ñïèñêè:

B1b"=<(1,17,Y),(4,90,S),(7,50,U)>,

B2b"=<(2,23,H),(5,66,T),(8,88,U)>,

B3b"=<(3,60,I),(6,77,T),(9,30,S)>.

Òåïåð äëÿ ïåðåáóâàííÿ âóçëà K6 äîñèòü ïåðåãëÿíóòè ò³ëüêè îäíó ç òðüîõ ïîñë³äîâíîñòåé (ñïèñê³â). Ïðè âèêîðèñòàíí ôóíêö³¿ Ga(K) öå ñïèñîê B2à', à ïðè ôóíêö³¿ Gb(K) ñïèñîê B3b".

Äëÿ ³íäåêñíî¿ ôóíêö³¿ Gc(K)=1+K1/100, äå K1 - ïåðøèé êîìïîíåíò åëåìåíòà ÄÎ, çíàõîäèìî:

B1=<(17,Y),(23,H),(60,I),(90,S)>,

B2=<(66,T),(77,T)>,

B3=<(50,U),(88,W)>,

B4=<(30,S)>.

Ùîá çíàéòè òóò âóçîë Ê ñ ïåðøèì êîìïîíåíòîì-êëþ÷åì ÄÎ1=77, äîñèòü ïåðåãëÿíóòè ñïèñîê B2.

Ïðè ðåàë³çàö³¿ ³íäåêñíîãî çáåðåæåííÿ çàñòîñîâóºòüñÿ ìåòîäèêà À äëÿ çáåðåæåííÿ ³íäåêñíîãî ñïèñêó Õ (ôóíêö³ÿ Ga(X) ) ìåòîäèêà C äëÿ çáåðåæåííÿ ï³äñïèñê³â B1,B2,...,Bm (ôóíêö³ÿ Gc(Bi)), òîáòî âèêîðèñòîâóºòüñÿ, òàê íàçèâàíå, A-C ³íäåêñíå çáåðåæåííÿ.

Ó ïðàêòèö³ ÷àñòî âèêîðèñòîâóºòüñÿ ïîñë³äîâíî-çâ'ÿçàíå ³íäåêñíå çáåðåæåííÿ. Òîìó ùî çâè÷àéíî äîâæèíà ñïèñêó íäåêñ³â â³äîìà, òå éîãî çðó÷íî çáåð³ãàòè ïîñë³äîâíî, çàáåçïå÷óþ÷è ïðÿì³é äîñòóï äî áóäü-ÿêîãî åëåìåíòà ñïèñêó ³íäåêñ³â. ϳäñïèñêè B1,B2,...,Bm çáåð³ãàþòüñÿ ïîâ'ÿçàíî, ùî ñïðîùóº âñòàâêó ³ âèäàëåííÿ âóçë³â(åëåìåíò³â). Çîêðåìà, ïîä³áíèé ìåòîä çáåðåæåííÿ âèêîðèñòîâóºòüñÿ â ªÑ ÅÎÌ äëÿ îðãàí³çàö³¿, òàê çâàíèõ, ³íäåêñíî-ïîñë³äîâíèõ íàáîð³â äàíèõ, ó ÿêèõ äîñòóï äî îêðåìèõ çàïèñ³â ìîæëèâèé ÿê ïîñë³äîâíî, òàê ³ çà äîïîìîãîþ êëþ÷à.

Ïîñë³äîâíî-çâ‘ÿçàíå ³íäåêñíå çáåðåæåííÿ äëÿ ïðèâåäåíîãî ïðèêëàäà çîáðàæåíå íà ìàë.24, äå X=.

 Ðîçãëÿíåìî ùå îäíó çàäà÷ó. Íà âõîä çàäàíà ïîñë³äîâí³ñòü ö³ëèõ ïîçèòèâíèõ ÷èñåë, ùî çàê³í÷óºòüñÿ íóëåì. Ñêëàñòè ïðîöåäóðó äëÿ ââåäåííÿ ö³º¿ ïîñë³äîâíîñò³ é îðãàí³çàö³¿ ¿¿ ³íäåêñíîãî çáåðåæåííÿ òàêèì ÷èíîì, ùîá ÷èñëà, ùî çá³ãàþòüñÿ â äâîõ îñòàíí³õ öèôðàõ, ì³ñòèëèñÿ â îäèí ï³äñïèñîê.

Âèáåðåìî ÿê ³íäåêñíó ôóíêö³þ G(K)=K%100+1, à ÿê ³íäåêñíèé ñïèñîê Õ - ìàñèâ ç 100 åëåìåíò³â. Íàñòóïíà ôóíêö³ÿ âèð³øóº ïîñòàâëåíó çàäà÷ó:

 #include

 #include

 typedef struct nd

{ float val;

struct nd *n; } ND;

int index (ND *x[100])

{ ND *p;

int i,j=0;

float inp;

for (i=0; i<100; i++) x[i]="NULL;" scanf("%d",&inp); while (inp!="0)" { j++; p="malloc(sizeof(ND));" i="inp%100+1;" p->val=inp;

p->n=x[i];

x[i]=p;

scanf("%d",&inp);

}

return j;

}

Çíà÷åííÿì ôóíêö³¿, ùî ïîâåðòàºòüñÿ, index áóäå ÷èñëî îáðîáëåíèõ åëåìåíò³â ñïèñêó.

Äëÿ ³íäåêñíîãî ñïèñêó òàêîæ ìîæå âèêîðèñòîâóâàòèñÿ ³íäåêñíå çáåðåæåííÿ. Íåõàé, íàïðèêëàä, ìàºòüñÿ ñïèñîê B= ç åëåìåíòàìè

K1=(338,Z), K2=(145,A), K3=(136,H), K4=(214,I), K5 =(146,C),

K6=(334,Y), K7=(333,P), K8=(127,G), K9=(310,O), K10=(322,X).

Ïîòð³áíî ðîçä³ëèòè éîãî íà ñ³ìîõ ï³äñïèñê³â, òîáòî X= òàêèì ÷èíîì, ùîá ó êîæåí ñïèñîê B1,B2,...,B7 ïîïàäàëè åëåìåíòè, ùî çá³ãàþòüñÿ â ïåðøîìó êîìïîíåíò³ ïåðøèìè äâîìà öèôðàìè. Ñïèñîê Õ, ó ñâîþ ÷åðãó, áóäåìî ³íäåêñóâàòè ñïèñêîì ³íäåêñ³â Y=, ùîá ó êîæåí ñïèñîê Y1,Y2,Y3 ïîïàäàëè åëåìåíòè ç X, ó ÿêèõ ó ïåðøîìó êîìïîíåíò³ çá³ãàþòüñÿ ïåðø³ öèôðè. ßêùî ñïèñêè B1,B2,...,B7 çáåð³ãàòè ïîâ'ÿçàíî, à ñïèñêè ³íäåêñ³â X,Y ³íäåêñíî, òå òàêèé ñïîñ³á çáåðåæåííÿ ñïèñêó B íàçèâàºòüñÿ çâ'ÿçàíèì ³íäåêñíèì çáåðåæåííÿì. Ãðàô³÷íå çîáðàæåííÿ öüîãî çáåðåæåííÿ ïðèâåäåíå íà ìàë.25.


Ïðàêòè÷íà ÷àñòèíà

˳ñò³íã ïðîãðàìè

Îñíîâíèé ìîäóëü golf.c

#include <time.h>

#include <stdlib.h>

#include <dos.h>

#include <conio.h>

#include <math.h>

#include <malloc.h>

#define GRIDSIZE 80 /* Must be bigger than VIEWSIZE */

#define VIEWSIZE 61 /* MUST be odd */

#define DIFF (GRIDSIZE-VIEWSIZE)

#define DEF_DIST -1100

#define DEF_PITCH 122

#define DEF_HEIGHT 120

#define DEF_ROLL 315

#define sine(X) ((long)(sn_tbl[X]))

#define cosine(X) ((long)(sn_tbl[((X)+90) % 360]))

#define C_Plot(X,Y,C) pokeb(0xa000, (X) + 320U*(Y), C)

#define SHIFT 14

#define MASK (GRIDSIZE*GRIDSIZE)

/*

#define GetGrid(X,Y) ((unsigned)grid[((X) + GRIDSIZE*(Y) +idx) % MASK])

#define PutGrid(X,Y,C) grid[((X) + GRIDSIZE*(Y) +idx) % MASK] = (unsigned char)(C)

*/

#define CalcAddress(X,Y) (&grid[((X) + GRIDSIZE*(Y) + idx) % MASK])

extern void far *view_screen;

extern void far *screen;

extern int sn_tbl[360];

extern unsigned char grid[GRIDSIZE*GRIDSIZE];

extern unsigned rand_seed;

unsigned idx = 0;

extern long pitch_sine;

extern long pitch_cosine;

extern long roll_sine;

extern long roll_cosine;

int num_points = GRIDSIZE*GRIDSIZE;

#define START (DIFF/2)

int gx = START,gy = START;

unsigned char *gp;

int cz = DEF_DIST;

int cy = DEF_HEIGHT;

int roll = DEF_ROLL;

int cpitch = DEF_PITCH;

extern void SetMyMode(void);

extern void ClearMyScreen(void);

extern void Project(void);

extern void SwapScreens(void);

extern void DoPlasma(int,int,int,int);

extern int GetRand(void);

extern unsigned GetGrid(void);

extern void PutGrid(void);

#define _GetGrid(X,Y) (_AX = (X), _BX = (Y), GetGrid())

#define _PutGrid(X,Y,C) { _CX = (C); _AX = (X); _BX = (Y); PutGrid(); }

void SetMode(void)

{

         struct REGPACK regs;

         regs.r_ax = 0x13;

         intr(0x10, &regs);

}

void SetTextMode(void)

{

         struct REGPACK regs;

         regs.r_ax = 0x3;

         intr(0x10, &regs);

}

void SetPalette(void)

{

         register int i;

         register int j;

#define DEPTH(X) max((((X)*(3-j))/3), 3)

         for (j = 0; j<4; j++)

                   for (i = 0; i<64; i+=4)

                   {

                            if (i+j > 0)

                            {

                                      disable();

                                      outportb(0x3c8, (i >> 2)+64*j);

                                      outportb(0x3c9, 0);

                                      outportb(0x3c9, 0);

                                      outportb(0x3c9, DEPTH(2*i/3));

                                      enable();

                            }

                            disable();

                            outportb(0x3c8, (i >> 2)+64*j+16);

                            outportb(0x3c9, DEPTH(i/2+10));

                            outportb(0x3c9, DEPTH(i/4+10));

                            outportb(0x3c9, DEPTH(i/6+10));

                            enable();

                            disable();

                            outportb(0x3c8, (i >> 2)+64*j+32);

                            outportb(0x3c9, DEPTH(max(63/2+10-i,0)));

                            outportb(0x3c9, DEPTH(min(64/4+10+3*i/4,63)));

                            outportb(0x3c9, DEPTH(max(63/6+10-i,0)));

                            enable();

                            disable();

                            outportb(0x3c8, (i >> 2)+64*j+48);

                            outportb(0x3c9, DEPTH(i));

                            outportb(0x3c9, DEPTH(63));

                            outportb(0x3c9, DEPTH(i));

                            enable();

                   }

}

/*

int RandPixel(int x,int y,int x1,int y1,int x2,int y2)

{

         int col;

         col = (GetRand()%200 - 100) * (abs(x-x1)+abs(y-y1)) / (GRIDSIZE/6)

                            +((_GetGrid(x1,y1)+_GetGrid(x2,y2)) >> 1);

         if (col < 1) col = 1;

         if (col > 255) col = 255;

         _PutGrid(x,y,col);

         return col;

}

*/

/*

void DoPlasma(int x1, int y1, int x2, int y2)

{

         int x,y,s,p;

         if (x2-x1 <= 1 && y2-y1 <= 1)

                   return;

         x = (x1+x2) >> 1;

         y = (y1+y2) >> 1;

         if ((p = _GetGrid(x, y1)) == 0)

                   p = RandPixel(x,y1,x1,y1,x2,y1);

         s = p;

         if ((p = _GetGrid(x2,y)) == 0)

                   p = RandPixel(x2,y,x2,y1,x2,y2);

         s += p;

         if ((p = _GetGrid(x,y2)) == 0)

                   p = RandPixel(x,y2,x1,y2,x2,y2);

         s += p;

         if ((p = _GetGrid(x1,y)) == 0)

                   p = RandPixel(x1,y,x1,y1,x1,y2);

         s += p;

         if (_GetGrid(x,y) == 0)

                   _PutGrid(x,y,s >> 2);

         DoPlasma(x1,y1,x,y);

         DoPlasma(x,y1,x2,y);

         DoPlasma(x1,y,x,y2);

         DoPlasma(x,y,x2,y2);

}

*/

void BlankGrid(int x1,int y1,int x2,int y2)

{

         register int x,y;

         for (y = y1; y <= y2; y++)

                   for (x = x1; x <= x2; x++)

                            _PutGrid(x,y,0);

}

void NewLand(int x1,int y1,int x2,int y2)

{

         unsigned av = 0;

         int val;

         int num = 0;

         if ((val = _GetGrid(x1,y1)) > 0)

         {

                   av += val;

                   num++;

         }

         if ((val = _GetGrid(x2,y1)) > 0)

         {

                   av += val;

                   num++;

         }

         if ((val = _GetGrid(x2,y2)) > 0)

         {

                   av += val;

                   num++;

         }

         if ((val = _GetGrid(x1,y2)) > 0)

         {

                   av += val;

                   num++;

         }

         if (!av || GetRand() % 32 == 0)

                   av = GetRand() % 256;

         else

                   av /= num;

         if (_GetGrid(x1,y1) == 0)

                   _PutGrid(x1,y1, av + (GetRand() % 80 -40));

         if (_GetGrid(x2,y1) == 0)

                   _PutGrid(x2,y1, av + (GetRand() % 80 -40));

         if (_GetGrid(x2,y2) == 0)

                   _PutGrid(x2,y2, av + (GetRand() % 80 -40));

         if (_GetGrid(x1,y2) == 0)

                   _PutGrid(x1,y2, av + (GetRand() % 80 -40));

         DoPlasma(x1,y1,x2,y2);

}

void Test(void)

{

         register int p;

         register int x;

         int y;

         for (y = 0,p = idx; y < GRIDSIZE; y++)

                   for (x = 0; x < GRIDSIZE; x++, p = (p+1) % MASK)

                            C_Plot(x,y,max(grid[p],63) >> 2);

         for (x = 0; x < VIEWSIZE; x++)

         {

                   C_Plot(gx+x, gy, 0);

                   C_Plot(gx+x, gy+VIEWSIZE, 0);

                   C_Plot(gx, gy+x, 0);

                   C_Plot(gx+VIEWSIZE, gy+x, 0);

         }

/*

         for (y = 0, p = gp; y < VIEWSIZE; y++, p += DIFF)

                   for (x = 0; x < VIEWSIZE; x++,p++)

                            C_Plot(gx+x,gy+y,*p >> 3);

*/

}

void ClearScr(void)

{

         register unsigned i;

         for (i = 0; i < (320U*150); i++)

                   pokeb(0xa000,i,0);

}

void check_gx(void)

{

         if (gx < 0)

         {

                   idx = (idx-DIFF/2 + MASK) % MASK;

                   gx = START-1;

                   BlankGrid(0,0, DIFF/2-1, GRIDSIZE-1);

                   NewLand(0,0,DIFF/2,GRIDSIZE/4);

                   NewLand(0,GRIDSIZE/4,DIFF/2,2*GRIDSIZE/4);

                   NewLand(0,2*GRIDSIZE/4,DIFF/2,3*GRIDSIZE/4);

                   NewLand(0,3*GRIDSIZE/4,DIFF/2,GRIDSIZE-1);

         }

         else if (gx >= DIFF)

         {

                   idx = (idx+DIFF/2) % MASK;

                   gx = START+1;

                   BlankGrid(GRIDSIZE-DIFF/2,0, GRIDSIZE-1, GRIDSIZE-1);

                   NewLand(GRIDSIZE-DIFF/2-1,0,GRIDSIZE-1,GRIDSIZE/4);

                   NewLand(GRIDSIZE-DIFF/2-1,GRIDSIZE/4,GRIDSIZE-1,

                                                                                                                 2*GRIDSIZE/4);

                   NewLand(GRIDSIZE-DIFF/2-1,2*GRIDSIZE/4,GRIDSIZE-1,

                                                                                                                 3*GRIDSIZE/4);

                   NewLand(GRIDSIZE-DIFF/2-1,3*GRIDSIZE/4,GRIDSIZE-1,

                                                                                                                 GRIDSIZE-1);

         }

}

void check_gy(void)

{

         if (gy < 0)

         {

                   idx = (idx-DIFF/2*GRIDSIZE + MASK) % MASK;

                   gy = START-1;

                   BlankGrid(0,0, GRIDSIZE-1, DIFF/2-1);

                   NewLand(0,0,GRIDSIZE/4,DIFF/2);

                   NewLand(GRIDSIZE/4,0,2*GRIDSIZE/4,DIFF/2);

                   NewLand(2*GRIDSIZE/4,0,3*GRIDSIZE/4,DIFF/2);

                   NewLand(3*GRIDSIZE/4,0,GRIDSIZE-1,DIFF/2);

         }

         else if (gy >= DIFF)

         {

                   idx = (idx+DIFF/2*GRIDSIZE) % MASK;

                   gy = START+1;

                   BlankGrid(0,GRIDSIZE-DIFF/2,GRIDSIZE-1, GRIDSIZE-1);

                   NewLand(0,GRIDSIZE-DIFF/2-1,GRIDSIZE/4,GRIDSIZE-1);

                   NewLand(GRIDSIZE/4,GRIDSIZE-DIFF/2-1,

                                                                           2*GRIDSIZE/4,GRIDSIZE-1);

                   NewLand(2*GRIDSIZE/4,GRIDSIZE-DIFF/2-1,

                                                                           3*GRIDSIZE/4, GRIDSIZE-1);

                   NewLand(3*GRIDSIZE/4,GRIDSIZE-DIFF/2-1,

                                                                           GRIDSIZE-1,GRIDSIZE-1);

         }

}

void main(void)

{

         int rollspeed = 0;

         int xspeed = 0, yspeed = 0;

         int i;

         rand_seed = (unsigned) time(NULL);

/*       rand_seed = 2; */

         for (i = 0; i<(360+90); i++)

                   sn_tbl[i]=(int)(sin((double)i / 180.0*3.14159265) * (double)(1<<SHIFT));

         NewLand(0,0,GRIDSIZE-1,GRIDSIZE-1);

         SetMode();

         SetPalette();

//       goto skip;

         for (;;)

         {

                   Test();

                   switch(getch())

                   {

                            case 27:

                                      SetTextMode();

                                      exit(0);

                            case 'e':

                                      gx--;

                                      check_gx();

                                      break;

                            case 'r':

                                      gx++;

                                      check_gx();

                                      break;

                            case 'w':

                                      gy--;

                                      check_gy();

                                      break;

                            case 's':

                                      gy++;

                                      check_gy();

                                      break;

                            case ' ':

                                      goto skip;

                   }

                   gp = CalcAddress(gx,gy);

                   while (kbhit())

                            getch();

         }

skip:

         ;

         SetMyMode();

         SetPalette();

         gp = CalcAddress(gx,gy);

//       yspeed = -1;

//       rollspeed = (rollspeed+358) % 360;

         for (;;)

         {

                   if (kbhit())

                   {

                            switch(getch())

                            {

                            case 27:

                                      SetTextMode();

                                      exit(0);

                            case 'q':

                                      cz += 50;

                                      break;

                            case 'a':

                                      cz -= 50;

                                      break;

                            case 'u':

                                      cy -= 50;

                                      break;

                            case 'j':

                                      cy += 50;

                                      break;

                            case 'Q':

                                      cpitch = (cpitch+1) % 360;

                                      break;

                            case 'A':

                                      cpitch = (cpitch+359) % 360;

                                      break;

                            case 'E':

                                      if (xspeed > -1) xspeed--;

                                      break;

                            case 'R':

                                      if (xspeed < 1) xspeed++;

                                      break;

                            case 'e':

                                      gx--;

                                      break;

                            case 'r':

                                      gx++;

                                      break;

                            case 'W':

                                      if (yspeed > -1) yspeed--;

                                      break;

                            case 'S':

                                      if (yspeed < 1) yspeed++;

                                      break;

                            case 'w':

                                      gy--;

                                      break;

                            case 's':

                                      gy++;

                                      break;

                            case 'i':

                                      roll = (roll+1) % 360;

                                      break;

                            case 'o':

                                      roll = (roll+359) % 360;

                                     break;

                            case 'I':

                                      rollspeed = (rollspeed+1) % 360;

                                      break;

                            case 'O':

                                      rollspeed = (rollspeed+359) % 360;

                                      break;

                            case ' ':

                                      rollspeed = 0;

                                      xspeed = yspeed = 0;

                                      cz = DEF_DIST;

                                      cy = DEF_HEIGHT;

                                      roll = DEF_ROLL;

                                      cpitch = DEF_PITCH;

                                      break;

                            }

                            while (kbhit())

                                      getch();

                   }

                   gy += yspeed;

                   gx += xspeed;

                   check_gx();

                   check_gy();

                   gp = CalcAddress(gx,gy);

                   roll = (roll+rollspeed) % 360;

                   roll_sine = sine(roll);

                   roll_cosine = cosine(roll);

                   pitch_sine = sine(cpitch);

                   pitch_cosine = cosine(cpitch);

                   ClearMyScreen();

                   Project();

                   SwapScreens();

         }

}


Ðîáîòà ç ïðîãðàìîþ

Äàë³ íàâåäåíî òðè ñêð³íøîòè, ÿê³ îïèñóþòü ïðîöåñ óäàðó ïî ì”ÿ÷èêó.


Âèñíîâêè

Áóëà ðîçðîáëåíà êîìï’þòåðíà ãðà “Ãîëüô 3D” ç åëåìåíòàìè òðüîõâèì³ðíî¿ ãðàô³êè íà îñíîâ³ ôóíêö³é ïðÿìîãî äîñòóïó äî â³äåîïàì’ÿò³ â ñèñòåì³ MS DOS. Ïðè ðîçðîáö³ ïðîãðàìè âèêîðèñòîâóâàâñÿ ïàêåò BORLAND C++ 3.0 òà á³áë³îòåêà BGI.


˳òåðàòóðà.

[1] Êàñàòêèí À.È., Âàëüâà÷åâ À.Í. Ïðîôåññèîíàëüíîå ïðîãðïììèðîâàíèå íà ÿçûêå Ñè. Ìí., 1992. 240 Ñ.

[2] Íåéáàóýð À. Ìîÿ ïåðâàÿ ïðîãðàììà íà Ñ/Ñ++. Ï., 1995. 368 Ñ.

[3] Áðóíî Áàáý. Ïðîñòî è ÿñíî î Borland C++. Ì., 1996. 400 Ñ.

[4] Øàìàñ Í.Ê. Îñíîâû Ñ++ è îáüåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ. Ê., 1996. 448 Ñ.

[5] Ñïðàâî÷íèê ïî êëàññàì Borland C++ 4.0. Ê., 1994. 256 Ñ.

[6] ObjectWindows äëÿ C++. Ê., 1993., 208 Ñ.

[7] Òîì Ñâàí. Ïðîãðàììèðîâàíèå äëÿ Windows â Borland C++. Ì., 480 Ñ.

[8] Í. Áàðêàíàòè. Ïðîãðàììèðîâàíèå èãð äëÿ Windows íà Borland C++. Ì., 1994. 512 Ñ.


Ñòðàíèöû: 1, 2


Íîâîñòè

Áûñòðûé ïîèñê

Ãðóïïà âÊîíòàêòå: íîâîñòè

Ïîêà íåò

Íîâîñòè â Twitter è Facebook

  ñêà÷àòü ðåôåðàòû              ñêà÷àòü ðåôåðàòû

Íîâîñòè

ñêà÷àòü ðåôåðàòû

Îáðàòíàÿ ñâÿçü

Ïîèñê
Îáðàòíàÿ ñâÿçü
Ðåêëàìà è ðàçìåùåíèå ñòàòåé íà ñàéòå
© 2010.