當前位置:編程學習大全網 - 編程語言 - 急求:我們windows要交壹個大作業 各位大佬 謝謝咯

急求:我們windows要交壹個大作業 各位大佬 謝謝咯

#include <stdlib.h>

#include <graphics.h>

#include <bios.h>

#define mDRAW 5

#define mLINE 6

#define mADOWN 7

#define mGEN 8

#define mLEFT 75

#define mRIGHT 77

#define mSPACE 57

#define mDOWN 80

#define mESC 1

#define TIMEINT 2

#define MAXX 9

#define MAXY 30

#define BACKCOLOR BLACK

#define WINX 50

#define WINY 470

#define GAP 6

#define AREAX (WINX+GAP)

#define AREAY (WINY-GAP)

#define BOXW 15

int oldarea[MAXY+1][MAXX];

int area[MAXY+1][MAXX];

int actW,actH,actX,actY;

int curX,curY,curColor,curW,curH;

int newX,newY,newColor,newW,newH;

int active;

int box[4][4];

int FORCOLOR;

int MESSAGE;

int BOX[7][4][4]={

{

{1,1,1,1},

{0,0,0,0},

{0,0,0,0},

{0,0,0,0}

},{

{1,1,1,0},

{1,0,0,0},

{0,0,0,0},

{0,0,0,0}

},{

{1,1,1,0},

{0,0,1,0},

{0,0,0,0},

{0,0,0,0}

},{

{1,1,1,0},

{0,1,0,0},

{0,0,0,0},

{0,0,0,0}

},{

{1,1,0,0},

{0,1,1,0},

{0,0,0,0},

{0,0,0,0}

},{

{0,1,1,0},

{1,1,0,0},

{0,0,0,0},

{0,0,0,0}

},{

{1,1,0,0},

{1,1,0,0},

{0,0,0,0},

{0,0,0,0}

}

};

void init();

void draw();

int genBox();

int getKey();

void lineFull();

int moveLeft();

int moveRight();

int moveDown();

int rotate();

int getW();

int getH();

void clearOldBox();

void putNewBox();

int collisionRotate(int box[][4]);

void getMessage();

void dispatchMessage();

int timeCome();

void fallDown();

int gameOver();

main()

{

int i;

init();

do

{

getMessage();

dispatchMessage();

}

while(!gameOver());

getch();

closegraph();

}

void getMessage()

{

if(MESSAGE) return;

if(timeCome())

{

MESSAGE=mADOWN;

return;

}

if(bioskey(1))

{

MESSAGE=bioskey(0)>>8;

return;

}

}

void dispatchMessage()

{

switch(MESSAGE)

{

case mLEFT: moveLeft();break;

case mRIGHT: moveRight();break;

case mADOWN: moveDown();break;

case mSPACE: rotate();break;

case mDOWN: fallDown(); break;

case mDRAW: draw();break;

case mLINE: lineFull();break;

case mGEN: genBox();break;

case mESC: closegraph(); exit(0);

default: MESSAGE=0;

}

}

void fallDown()

{

while(active)

{

moveDown(); draw();

}

MESSAGE=mLINE;

}

int timeCome()

{

static long tm, old;

tm=biostime(0,tm);

if(tm-old<TIMEINT) return 0;

else

{

old=tm; return 1;

}

}

void init()

{

int i,j,x1,y1,x2,y2;

int driver=DETECT, mode=0;

randomize();

registerbgidriver(EGAVGA_driver);

initgraph(&driver,&mode,"");

cleardevice();

setfillstyle(SOLID_FILL,BLUE);

bar(0,0,639,479);

x1=AREAX;

y1=AREAY-BOXW*MAXY;

x2=AREAX+MAXX*BOXW;

y2=AREAY;

rectangle(--x1,--y1,++x2,++y2);

setfillstyle(SOLID_FILL,BLACK);

bar(++x1,++y1,--x2,--y2);

y1=AREAY-MAXY*BOXW; y2=AREAY;

setcolor(DARKGRAY);

for(i=0;i<MAXX;i++)

{

x1=AREAX+i*BOXW;

line(x1,y1,x1,y2);

}

x1=AREAX; x2=x1+MAXX*BOXW;

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

{

y1=AREAY-j*BOXW;

line(x1,y1,x2,y1);

}

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

for(i=0;i<MAXX;i++)

area[j][i]=oldarea[j][i]=0;

actX=0; actY=0; actW=MAXX-1; actH=MAXY-1;

draw();

MESSAGE=mGEN;

}

int genBox()

{

int i,j,boxidx;

boxidx=random(7); FORCOLOR=random(7)+1;

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

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

box[j][i]=BOX[boxidx][j][i];

curW=getW(); curH=getH();

curX=(MAXX+curW)/2;

if(curX+curW>=MAXX)curX=MAXX-1-curW;

curY=MAXY-1-curH;

newX=curX; newY=curY; actX=curX;actY=curY;

actW=newW=curW; actH=newH=curH;

active=1;

if(collision(box)) return 0;

putNewBox();

draw(); MESSAGE=0;

return 1;

}

void lineFull()

{

int row,col, rowEnd,full,i,j;

rowEnd=newY+newH;

if(rowEnd>=MAXY-1) rowEnd=MAXY-2;

for(row=newY; row<=rowEnd;)

{

full=1;

for(col=0;col<MAXX;col++)

if(!area[row][col]){full=0; break;}

if(!full){++row; continue;}

for(j=row; j<MAXY-1;j++)

for(i=0;i<MAXX;i++)

area[j][i]=area[j+1][i];

actX=0;actY=row; actW=MAXX-1; actH=MAXY-1-row;

draw(); rowEnd--;

}

MESSAGE=mGEN;

}

void draw()

{

int row,col,x1,y1,x2,y2;

for(row=actY;row<=actY+actH;row++)

for(col=actX;col<=actX+actW;col++)

if(area[row][col]!=oldarea[row][col])

{

if(area[row][col]==0)

setfillstyle(SOLID_FILL,BACKCOLOR);

else

setfillstyle(SOLID_FILL,FORCOLOR);

x1=AREAX+col*BOXW; x2=x1+BOXW;

y1=AREAY-(row+1)*BOXW; y2=y1+BOXW;

bar(++x1,++y1,--x2,--y2);

oldarea[row][col]=area[row][col];

}

MESSAGE=0;

}

int moveLeft()

{

newX=curX-1; clearOldBox();

if(collision(box))

{

newX=curX;

putNewBox();

MESSAGE=0;

return 0;

}

putNewBox();

actW=curW+1; actX=curX=newX;

MESSAGE=mDRAW;

return 1;

}

int moveRight()

{

newX=curX+1; clearOldBox();

if(collision(box))

{

newX=curX;

putNewBox();

MESSAGE=0;

return 0;

}

putNewBox();

actW=curW+1; actX=curX; curX=newX;

MESSAGE=mDRAW;

return 1;

}

int moveDown()

{

int i,j;

newY=curY-1;

clearOldBox();

if(collision(box))

{

newY=curY;

putNewBox();

active=0;

MESSAGE=mLINE;

return 0;

}

putNewBox();

actH=curH+1; actY=newY; curY=newY;

MESSAGE=mDRAW;

return 1;

}

int rotate()

{

int newBox[4][4];

int i,j;

clearOldBox();

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

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

newBox[j][i]=0;

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

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

newBox[curW-i][j]=box[j][i];

newW=curH; newH=curW;

if(collisionRotate(newBox))

{

newW=curW; newH=curH; newX=curX; newY=curY;

putNewBox();

MESSAGE=0;

return 0;

}

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

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

box[j][i]=newBox[j][i];

putNewBox();

actH=newH>curH? newH:curH;

actW=curX+actH-newX;

actX=newX; actY=newY; curX=newX;

curY=newY; curW=newW; curH=newH;

MESSAGE=mDRAW;

return 1;

}

int getW()

{

int i,j;

for(i=3;i>0;i--)

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

if(box[j][i]) return i;

return 0;

}

int getH()

{

int i,j;

for(j=3;j>0;j--)

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

if(box[j][i]) return j;

return 0;

}

void clearOldBox()

{

int i,j;

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

for(i=0;i<=curW; i++)

if(box[j][i])

area[curY+j][curX+i]=0;

}

void putNewBox()

{

int i,j;

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

for(i=0;i<=newW;i++)

if(box[j][i])

area[newY+j][newX+i]=FORCOLOR;

}

int collision(int cbox[][4])

{

int i,j;

if(newX<0) return 1;

if(newX+newW>=MAXX) return 1;

if(newY<0) return 1;

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

for(i=0;i<=newW;i++)

if(area[newY+j][newX+i]&&cbox[j][i]) return 1;

return 0;

}

int collisionRotate(int cbox[][4])

{

int i,j;

if(newX+newW>=MAXX) newX=MAXX-1-newW;

if(newY+newH>=MAXY) newY=MAXY-1-newH;

if(collision(cbox)) return 1;

for(i=0;i<=newW;i++)

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

if(area[newY+j][newX+i])

{

newX-=newW-i+1; goto L;

}

L: return collision(cbox);

}

int gameOver()

{

if(!active &&(curY+curH>MAXY-3)) return 1;

else return 0;

}

回答者: mmeshow - 魔法師 四級 2008-7-5 15:23

/*由於自己算法的問題向左位移有些問題

在TC2下通過*/

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <graphics.h>

#include <stdlib.h>

#include <time.h>

#include <bios.h>

#define ESC 0x011b

#define UP 0x4800

#define DOWN 0x5000

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define SPACE 0x3920

#define Y 0x1579

#define N 0x316e

#define clearkbd(); while(bioskey(1)) bioskey(0); /*清空鍵盤緩沖隊列*/

void update();

void messagebox();

void process();

void initremove();

void initinfo();

void initbox();

void initposition();

void next_shape();

typedef struct shape /*形狀單壹狀態的記錄*/

{ int attr;

int co[8];

}shape;

typedef struct RE_AB /*相對,絕對坐標記錄*/

{ int Rx,Ry;

int x1,x2,y1,y2;

}RE_AB;

RE_AB RA;

shape p[19]={ { RED,0,1,1,0,1,1,2,1 }, /*數組中保證y最大的在最後,以便initposition使用*/

{ RED,0,1,1,0,1,1,1,2 },

{ RED,0,0,1,0,2,0,1,1 },

{ RED,0,0,0,1,1,1,0,2 },

{ GREEN,0,0,1,0,2,0,3,0 },

{ GREEN,0,0,0,1,0,2,0,3 },

{ CYAN,0,0,0,1,1,0,1,1 },

{ BROWN,0,0,1,0,1,1,2,1 },

{ BROWN,1,0,0,1,1,1,0,2 },

{ BLUE,1,0,2,0,1,1,0,1 },

{ BLUE,0,0,0,1,1,1,1,2 },

{ MAGENTA,0,0,0,1,0,2,1,2 },

{ MAGENTA,2,0,0,1,1,1,2,1},

{ MAGENTA,0,0,1,0,1,1,1,2 },

{ MAGENTA,0,0,0,1,1,0,2,0 },

{ YELLOW,0,2,1,0,1,1,1,2 },

{ YELLOW,0,0,1,0,2,0,2,1 },

{ YELLOW,1,0,0,0,0,1,0,2},

{ YELLOW,0,0,0,1,1,1,2,1 },

};

int nback,nleft,nright,r_f[12][22],rs1,rs2,xcors,xcorb,ycors,ycorb;

/*檢查方快有沒有左,右,下接觸,遊戲區內所有格子有無顏色記錄數組,rs1形狀記錄,rs2為提示框用,記錄小格子在遊戲區中的位置,按鍵存儲*/

void interrupt (*oldint)(); /*系統定時中斷*/

int count_down=0,count_other=0; /*中斷記時*/

void interrupt newint() /*設置新的中斷程序*/

{ count_down++;

count_other++;

oldint();

}

void intenable() /*設置中斷向量表,啟動新的中斷程序*/

{ oldint=getvect(0x1c);

disable();

setvect(0x1c,newint);

enable();

}

void intrestore() /*恢復中斷向量*/

{ disable();

setvect(0x1c,oldint);

enable();

}

void HZ12(int x0,int y0,int w,int color,char *s) /*根據字模,在dos下顯示漢字*/

/*橫坐標,縱坐標,字間隔,漢字顏色,漢字字符串*/

{ FILE *fp;

register char buffer[24];

register char str[2];

unsigned long fpos;/*fpos為最終偏移動量*/

register int i,j,k;

fp=fopen("hzk12","r");/*打開12*12漢字苦*/

while(*s)/*壹直到字符串結束為止*/

{

if(*s<0)/*漢字輸出*/

{ str[0]=(*s)-0xa0;

str[1]=*(s+1)-0xa0;

fpos=((str[0]-1)*94+(str[1]-1))*24L;/*計算漢字在hzk12的偏移量*/

fseek(fp,fpos,SEEK_SET);/*指針移動到當前位置*/

fread(buffer,24,1,fp);/*讀取壹個漢字到數組中*/

for(i=0;i<12;i++)/*12行*/

for(j=0;j<2;j++)/*兩個字節*/

for(k=0;k<8;k++)/*8位*/

if (((buffer[i*2+j]>>(7-k))&0x1)!=NULL)/*是壹就畫點*/

putpixel(x0+8*j+k,y0+i,color);

s+=2;/*壹個漢字占兩個字節,現在將指針移動兩個字節*/

x0+=w;/*顯示坐標也按照間隔移動*/

}

else/*顯示非漢字字符*/

{ settextstyle(0,0,1);

setcolor(color);

str[0]=*s;str[1]=0;

outtextxy(x0,y0+3,str);/*顯示單個字符*/

x0+=w-7;/*顯示單個字符後的x坐標變化*/

s++;/*指針移動到下壹個字節*/

}

}

fclose(fp);

}

void translation() /*把相對坐標解釋為絕對坐標*/

{ if(RA.Rx==1)

{ RA.x1=1; RA.x2=16; }

else

{ RA.x1=16*(RA.Rx-1); RA.x2=16*RA.Rx; }

if(RA.Ry==1)

{ RA.y1=1; RA.y2=16; }

else

{ RA.y1=16*(RA.Ry-1); RA.y2=16*RA.Ry; }

}

int check_b() /*檢查是否到達低部*/

{ int x,y,i,zf=0; /*zf為是否有顏色填充記錄*/

for(i=0;i<7;i++,i++)

{ x=RA.Rx+p[rs1].co[i];

y=RA.Ry+p[rs1].co[i+1];

if(y>=6)

zf+=r_f[x-15][y-6+1];

}

if(zf==0)

return 1;

else

return 0;

}

int finish()

{ int tfull=0,i; /*判斷頂層空間是否有填充*/

for(i=1;i<11;i++)

tfull+=r_f[i][1];

if(tfull!=0)

return 1; /*告訴judge()可以結束了*/

}

int check_l() /*檢查形狀是否與左接觸*/

{ int x,y,i,zf=0;

for(i=0;i<7;i++,i++)

{ x=RA.Rx+p[rs1].co[i];

y=RA.Ry+p[rs1].co[i+1];

if(y>6)

zf+=r_f[x-15-1][y-6];

if(y<=6&&x==16)

zf+=1;

}

if(zf==0)

return 1;

else

return 0;

}

int check_r() /*檢查形狀是否與右接觸*/

{ /*zf為是否有顏色填充記錄*/

int x,y,i,zf=0; /*zf為是否有顏色填充記錄*/

for(i=0;i<7;i++,i++)

{

x=RA.Rx+p[rs1].co[i];

y=RA.Ry+p[rs1].co[i+1];

if(y>6)

zf+=r_f[x-15+1][y-6];

if(y<=6&&x==25)

zf+=1;

}

if(zf==0)

return 1;

else

return 0;

}

void check_touch()

{ nback=check_b();

nleft=check_l();

nright=check_r();

}

void draw(int cb) /*畫形狀,cb=1以填充色畫形狀,cb=2以背景色畫形狀,cb=3以白色畫形狀*/

{ int i,recordx=RA.Rx,recordy=RA.Ry;

for(i=0;i<7;i++,i++)

{ RA.Rx+=p[rs1].co[i];

RA.Ry+=p[rs1].co[i+1];

if(RA.Ry<=6)

{ RA.Rx=recordx;

RA.Ry=recordy;

continue;

}

translation();

if(cb==1)

setfillstyle(1,p[rs1].attr);

else

if(cb==2)

setfillstyle(1,BLACK);

else

if(cb==3)

{ setfillstyle(1,WHITE);

r_f[RA.Rx-15][RA.Ry-6]=1; /*置對應數組標記元素*/

}

bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1);

RA.Rx=recordx;

RA.Ry=recordy;

}

}

void mov(int key) /*向下,左,右移動方塊*/

{ draw(2);

if(key==LEFT&&nleft)

RA.Rx--;

else

if(key==RIGHT&&nright)

RA.Rx++;

else

RA.Ry++;

nback=check_b();

if(nback) /*判斷形狀有沒有到達底部,有就將其顏色變為白色*/

draw(1);

else

draw(3);

}

void change() /*變換形狀*/

{ int status=rs1,buffer,i,x,y,zf=0;

if(p[rs1].attr==p[rs1+1].attr)

rs1++;

else

while(p[rs1].attr==p[rs1-1].attr)

rs1--;

for(i=0;i<7;i++,i++) /*檢查變化形狀後是否與已存形狀發生沖突*/

{ x=RA.Rx+p[rs1].co[i];

y=RA.Ry+p[rs1].co[i+1];

if(y>6)

zf+=r_f[x-15][y-6];

}

if(zf!=0)

rs1=status;

buffer=rs1;

rs1=status;

status=buffer;

draw(2);

buffer=rs1;

rs1=status;

status=buffer;

nback=check_b(); /*判斷變化後的形狀是不是到達了低部,這個檢查是十分必要的*/

if(nback)

draw(1);

else

draw(3);

}

void accelerate()

{ if(count_down>=1)

{ check_touch(); /*消除上壹步動作對方塊狀態的影響*/

count_down=0;

if(nback) /*0表示到達底部,1表示沒有到達*/

mov(DOWN);

}

}

void drawbox() /*畫方塊所在方框*/

{ int xcor,ycor;

for(xcor=xcors;xcor<=xcorb;xcor++)

for(ycor=ycors;ycor<=ycorb;ycor++)

{ if(xcor==xcors||xcor==xcorb||ycor==ycors||ycor==ycorb)

{ RA.Rx=xcor;

RA.Ry=ycor;

translation();

setfillstyle(1,DARKGRAY);

bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1);

}

}

}

void erasure(int k)

{ int i,j,recordx=RA.Rx,recordy=RA.Ry;

{ j=k-1;

for(;j>0;j--)

{ for(i=1;i<11;i++)

{ r_f[i][j+1]=r_f[i][j];

RA.Rx=i+15;

RA.Ry=j+1+6;

translation();

if(r_f[i][j+1]==1)

setfillstyle(1,WHITE);

else

setfillstyle(1,BLACK);

bar(RA.x1+1,RA.y1+1,RA.x2-1,RA.y2-1);

RA.Rx=recordx;

RA.Ry=recordy;

}

}

}

}

void pause()

{ HZ12(450,400,15,BLACK,"正常");

HZ12(450,400,15,GREEN,"暫停");

for(;;)

if(bioskey(1)&&bioskey(0)==SPACE)

{ clearkbd();

HZ12(450,400,15,BLACK,"暫停");

HZ12(450,400,15,RED,"正常");

return;

}

}

void judge()

{ int i,j,full=0; /*full等於10說明某壹行滿,該消除了*/

if(finish()) /*判斷遊戲是否該結束了*/

messagebox(); /*win編程裏有這個函數*/

for(j=1;j<21;j++) /*判斷某壹行是否滿了*/

{ for(i=1;i<11;i++)

full+=r_f[i][j];

if(full==10)

erasure(j); /*消除這行*/

full=0;

}

}

void update() /*使程序可以重新運行*/

{ cleardevice();

setbkcolor(BLACK);

initinfo(); /*提示信息初始化*/

initbox(); /*遊戲框架初始化*/

srand((unsigned)time(NULL)); /*隨機器函數的初始化*/

rs1=random(19);

rs2=random(19);

next_shape();

initposition(); /*方塊最開始的出現位置*/

initremove(); /*記錄每個方格有無顏色填充數組初始化*/

HZ12(450,400,15,RED,"正常");

process();

}

void EXIT()

{ closegraph();

intrestore(); /*恢復中斷向量*/

exit(0);

}

void initremove()

{ int i,j;

for(i=0;i<12;i++)

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

if(i==0||i==11||j==0||j==21)

r_f[i][j]=1;

else

r_f[i][j]=0;

}

void initinfo()

{ char aStr[2];

setcolor(RED);

outtextxy(450,100,"This game's writer is:");

HZ12(450,140,15,RED,"該程序作者:NULL");

outtextxy(525,110,"NULL");

outtextxy(450,180,"FUNCTION FOR KEYS:");

outtextxy(450,200,"UP:change the shape");

outtextxy(450,210,"DOWN:accelerate");

outtextxy(450,220,"LEFT:move left");

outtextxy(450,230,"RIGHT:move right");

outtextxy(450,240,"ESC:exit this game");

outtextxy(450,250,"SPACE:pause");

HZ12(450,260,20,RED,"上:");

HZ12(450,280,20,RED,"下:");

HZ12(450,300,20,RED,"左:");

HZ12(450,320,20,RED,"右:");

HZ12(450,340,20,RED,"ESC:退出");

HZ12(450,360,15,RED,"空格: 暫停/開始");

HZ12(450,380,15,RED,"目前狀態:");

HZ12(20,200,15,RED,"下壹個形狀");

aStr[0]=24;

aStr[1]=0;

aStr[6]=0;

HZ12(480,260,12,GREEN,aStr);

HZ12(500,260,12,GREEN,"( 變形 )");

aStr[0]=25;

aStr[1]=0;

HZ12(480,280,12,GREEN,aStr);

HZ12(500,280,12,GREEN,"( 加速 )");

aStr[0]=27;

aStr[1]=0;

HZ12(480,300,12,GREEN,aStr);

HZ12(500,300,12,GREEN,"向左");

aStr[0]=26;

aStr[1]=0;

HZ12(480,320,12,GREEN,aStr);

HZ12(500,320,12,GREEN,"向右");

}

void messagebox()

{ int key;

setcolor(GREEN);

setfillstyle(1,DARKGRAY);

rectangle(220,200,420,300);

bar(221,201,419,299);

HZ12(280,210,15,GREEN,"GAME OVER");

HZ12(275,230,15,GREEN,"重新遊戲: Y");

HZ12(275,270,15,GREEN,"退出遊戲: N");

HZ12(450,400,15,BLACK,"正常");

HZ12(450,400,15,GREEN,"GAME OVER");

for(;;)

if(bioskey(1))

{ key=bioskey(0);

if(key==Y)

{ clearkbd();

update();

}

else

if(key==N)

{ clearkbd();

EXIT();

}

else

clearkbd();

}

}

void initbox()

{ xcors=15; /*畫遊戲框*/

xcorb=26;

ycors=6;

ycorb=27;

drawbox();

xcors=2; /*畫提示框*/

xcorb=7;

ycors=6;

ycorb=11;

drawbox();

}

void initposition()

{ RA.Rx=18;

RA.Ry=6-p[rs1].co[7];;

RA.x1=0;

RA.x2=0;

RA.y1=0;

RA.y2=0;

}

void next_shape() /*畫下壹形狀提示框*/

{ int recordx=RA.Rx,recordy=RA.Ry,buffer;

RA.Rx=3;

RA.Ry=7;

draw(2);

buffer=rs1;

rs1=rs2;

rs2=buffer;

draw(1);

RA.Rx=recordx;

RA.Ry=recordy;

buffer=rs1;

rs1=rs2;

rs2=buffer;

}

void process() /*遊戲過程*/

{ for(;;)

{ check_touch();

if(!nback)

{ rs1=rs2;

rs2=random(19); /*產生另壹種方塊的碼數*/

initposition();

judge(); /*判斷某壹行是否滿了和這個遊戲是否可以結束了*/

draw(1);

next_shape();

}

if(count_other>=1)

{ count_other=0;

if(bioskey(1)) /*對按鍵的處理*/

{ int key=bioskey(0);

clearkbd(); /*清除鍵盤緩沖隊列*/

if(key==ESC)

EXIT();

if(key==LEFT&&nleft&&nback)

mov(LEFT);

if(key==RIGHT&&nright&&nback)

mov(RIGHT);

if(key==UP&&nback)

change();

if(key==SPACE)

pause();

if(key==DOWN)

accelerate();

}

}

if(count_down>=4)

{ check_touch(); /*消除上壹步動作對方塊狀態的影響*/

count_down=0;

if(nback) /*0表示到達底部,1表示沒有到達*/

mov(DOWN);

}

}/*for*/

}

main()

{ int gdriver=DETECT,gmode=0;

initgraph(&gdriver,&gmode,"c:\\turboc2"); /*啟動圖形與中斷部分*/

intenable();

update();

}

  • 上一篇:PLC在配電監控系統中如何確定點數
  • 下一篇:請大家解釋壹下Delphi的回調函數
  • copyright 2024編程學習大全網