#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <time.h>
#define L 1
#define LX 15
#define LY 4
static struct BLOCK
{
    int x0,y0,x1,y1,x2,y2,x3,y3;
    int color,next;
    intb[]={{0,1,1,1,2,1,3,1,4,1},{1,0,1,3,1,2,1,1,4,0},{1,1,2,2,1,2,2,1,1,2},{0,1,1,1,1,0,2,0,2,4},{0,0,0,1,1,2,1,1,2,3},{0,0,1,0,1,1,2,1,3,8},{1,0,1,1,2,2,2,1,2,5},{0,2,1,2,1,1,2,1,2,6},{0,1,0,2,1,1,1,0,3,9},{0,1,1,1,1,2,2,2,3,10},{1,1,1,2,2,1,2,0,3,7},{ 1,0,1,1,1,2,2,2,7,12},{0,1,1,1,2,1,2,0,7,13},{0,0,1,2,1,1,1,0,7,14},{0,1,0,2,1,1,2,1,7,11},{0,2,1,2,1,1,1,0,5,16},{0,1,1,1,2,2,2,1,5,17},{1,0,1,1,1,2,2,0,5,18},{0,0,0,1,1,11,2,1,5,15},{0,1,1,1,1,0,2,1,6,2,0},{0,1,1,2,1,1,1,0,6,21},{0,1,1,2,1,1,2,1,6,22},{1,0,1,1,1,2,2,1,6,19}};
    static int d[10]={33000,3000,1600,1200,900,800,600,400,300,200};
    int Llevel,Lcurrent,Lnext,Lable,lx,ly,Lsum;
    unsigned Lpoint;
    int La[19][10],FLAG,sum;
    unsigned ldelay;
    void scrint(),datainit(),dispb(),eraseeb();
    void throw(),judge(),delayp(),move(0,note(0,show();
    int Ldrop(),Ljudge(),nextb(),routejudge();
}
main()
{
    char c;
    datainit();
    Label=nextb();
    Label=Ldrop();
    while(1){
        delayp();
c语言游戏编程题经典100例
        if(Label!=0)
        {
            Ljudge();
            Lable=nextb();
        }
        ldelay--;
        if(ldelay==0)
        {
            Label=Ldrop();
            ldelay=d[0];
        }
        if(FLAG!=0) break;
       
        while(getch()!='\r');
        goto xy(38,16);
        cputs("again?");
        c=getch();
        while(c!='n'&&c!='N')
            c lscr();
    }
   
    int nextb()
    {
        if(La[(b[Lnext].y0)][(3+b[Lnext].x0)]!=0||La[(b[Lnext].y1)][(3+b[Lnext].x1)]!=0|| La[(b[Lnext].y2)][(3+b[Lnext].x2)]!=0||La[(b[Lnext].y3)][3+b[Lnext].x3)]!=0)
        {
            FLAG=L;
            return (-1);
        }
        erase b(0,3,5,Lnext);
        Lcurrent=Lnext;
        lx=3;ly=0;
        Label=0;
        ldelay=d[0];
        Lsum ++;
        Lpoint+=1;
        Lnext=random(23);
        dispb(0,3,5,Lnext);
        text color(7);
        goto xy(3,14);
        printf("%#5d",Lsum);
        goto xy(3,17);
        printf("%#5d",Lpoint);
        return(0);
}
   
    void delayp()
{
        char key;
    if(kbhit()!=0)
    {
        key=getch();
        move(key);
        if(key=='\\')
            getch();
    }
}
void move(funkey)
char funkey;
{
    int tempcode;
case 'k';
    if(lx+b[current].x0>0)
    {
        if(La[ly+(b[Lcurrent].y0)][lx-1+(b[Lcurrent].x0)]==0&&La[(ly+b[current].y1)][(lx-1+b[current].x1]==0&&La[ly+b[current].y2)][lx-1+b[Lcurrent].x2)]==0&&La[ly+(b[current].y3)][lx-1+(b[Lcurrent].x3)]==0)
        {
            eraseb(L,lx,lyLcurrent);
            lx--;
            dispb(L,lx,ly,Lcurrent);
        }
    }break;
    case 0x20;
        tempcode=b[Lcurrent].next;
        if (lx+b[tempcode].x0>=0 && lx+b[tempcode].x3<=9 && ly+b[tempcode].y1<=19 && ly+b[tempcode].y2<=19)
        {
            if(routejudge()!+-1)
            {
                if(La+(b[tempcode].y0)][lx+(b[tempcode].x0)]==0 && La[ly+(b[tempcode].y1)][lx+(b[tempcode].x1)]==0 && La[ly+(b[tempcode].y2)][lx+(b[tempcode].x2)]==0 && La[ly+(b[tempcode].y3)][lx+(b[tempcode].x3)]==0)
                    eraseb(L,lx,ly,Lcurrent);
                Lcurrent=tempcode;
                dispb(L,lx,ly,Lcurrent);
            }
        }break;
        case 'M';
            if(lx+b[Lcurrent].x3<9)
            {
                if(La[ly+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]==0 && La[ly+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]==0 && La[ly+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]==0 && La[ly+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]==0)
                {
                    eraseb(L,lx,ly,Lcurrent);
                    lx++;
                    disb(L,lx,ly,Lcurrent);
                }
            }break;
case 'p';
    throw();break;
case 0x1b;
    clrscr();
    exit(0);break;
default:break;
}
void throw()
{
    int tempy;
    tempy=ly;
    while(ly+b[Lcurrent].y1<19 && ly+b[current].y2<19&&La[ly+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]==0 && La[ly+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]==0 && La[ly+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]==0 && La[ly+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]==0)
        ly++;
    ly--;
    eraseb(L,lx,tempy,Lcurrent);
    dispb(L,lx,ly,Lcurrent);
    La[ly+b[Lcurrent].y0)][lx+(b[current].x0)]=La[ly+b[Lcurrent].y1)][lx+(b[current].x1)]=La[ly+b[Lcurrent].y2)][lx+(b[current].x2)]=La[ly+b[Lcurrent].y3)][lx+(b[curre
nt].x3)]=b[Lcurrent].color;
    Label=-1;
}
int routejudge()
{
    int i,j;for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            if(La[ly+i][lx+j]!=0)
                return(-1);
            else return(1);
}
int Ldrop()
{
    if(ly+b[Lcurrent].y1>=18||ly+b[Lcurrent].y2>=18
    {
        La[ly+b[Lcurrent].y0)][lx+(b[current].x0)]=3;
        La[ly+b[Lcurrent].y1)][lx+(b[current].x1)]=1;
        La[ly+b[Lcurrent].y2)][lx+(b[current].x2)]=5;
        La[ly+b[Lcurrent].y3)][lx+(b[current].x3)]=b[Lcurrent].color;
        return(-1);
    }
    if(La(ly+1+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]!=0||La(ly+1+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]!=0||La(ly+1+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]!=0||La(ly+1+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]!=0){La[ly+b[Lcurrent].y0)][lx+(b[current].x0)]=La[ly+b[Lcurrent].y1)][lx+(b[current].x1)]=0B La[ly+b[Lcurrent].y2)][lx+(b[current].x2)]=La[ly+b[Lcurrent].y3)][lx+(b[current].x3)]=b[Lcurrent].color)
    {
        return(-1);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。