//#include<curses.h>
#include<stdlib.h>
#include<signal.h>
#include<time.h>

#define CHAR_BIRD '0'//表示bird
#define CHAR_STONE '*'//表示背景的柱子
#define CHRR_BLANK ' '
/*
**链表表示柱子
*/
typedef struct node
{
    int x,y;
    struct node *next;
}node,*Node;//node表示结构体数据,Node表示结构体指针类型

Node head,tail;
int bird_x,bird_y;
int ticker;

/**
*函数声明
*/
void init();
void init_bird();
void init_draw();
void init_head();
void init_wall();
void drop(int sig);
int set_ticker(int n);

int set_ticker(int n_msec)
{
    struct itimerval timeset;
    long n_sec,n_usec;

    n_sec = n_msec/;

    n_usec = (n_msec%)*1000L;

    timeset.it_interval.tv_sec = n_sec;
    timeset.it_interval.tv_usec = n_usec;

    timeset.it_value.tv_sec = n_sec;
    timeset.it_value.tv_usec = n_usec;

    return setitimer(ITIMER_REAL,&timeset,NULL);
}
void drop(int sig)
{
    int j;
    Node tmp,p;

    move(bird_y,bird_x);
    addch(CHAR_BLANK);
    refresh();
    bird_y++;
    move(bird_y,bird_x);
    addch(CHAR_BIRD);
    refresh();

    if((char)inch()==CHAR STONE)
    {
        set_ticker();
        sleep();
        endwin();
        exit();
    }

    p=head->next;
    )

    head->next= p->next;
    free(p);
    tmp = malloc(sizeof(node));
    tmp->x = ;
    do
    {
        tail->next = tmp;
        tmp->next = NULL;
        tail = tmp;
        ticker-=;
        set_ticker(ticker);
    }
    for(p = head->next;p->next!=NULL;p->x--,p=p->next>
    {
        ;j<p->y;j++)
            move(j,p->x);
        addch(CHAR_STONE);
        refresh();
    }
    ;j<=;j++)
    {
        move(j,p->x-);
        addch(CHAR_STONE);
        refresh();
    }
}
}
tail->x--;
}
int main()
{
    char ch;
    init();
    )
    {
        ch = getch();
        if(ch==' '||ch=='w'||ch=='W')
        {
            move(bird_y,bird_x);
            addch(CHAR_BLANK);
            refresh();
            bird_y--;
            move(bird_y,bird_x);
            addch(CHAR_BIRD);
            refresh();
            if((char)inch()==CHAR_STONE)
            {
                set_ticker();
                sleep();
                endwin();
                exit();
            }
        }
        else if(ch=='z'||ch=='z')
        {
            set_ticker();
            do
            {
                ch= getch();
            }
            while(ch!='q'||ch=='Q')
            {
                sleep();
                endwin();
                exit();
            }
        }
        ;
    }
    void init()
    {
        initscr();
        cbreak();
        noecho();
        cur_set();

        srand(time());
        signal(SIGLRM,drop);
        init_bird();
        init_head();
        init_wall();
        init_draw();
        sleep();
        ticker=;
        set_ticker(ticker);
    }
    void init_bird()
    {
        bird_x = ;
        bird_y = ;
        move(bird_y,bird_x);
        addch(CHAR_BIRD);
        refresh();
        sleep();
    }
    void init_head()
    {
        Node tmp,p;
        p=head;
        ;i<=;i+=)
        {
            tmp = malloc(sizeof(node));
            tmp->x=i;
            do
            {
                tmp->y = rand()%;
            }
            );
            p->next=tmp;
            tmp->next =NULL;
            p=tmp;
        }
        tail = p;
    }
void init_draw()
{
    Node p;
    int i,j;
    for(p= head->next;p->next!=NULL;p->next)
    {
        ;i--)
        {
            ;j<p->y;j++)
            {
                move(j,i);
                addch(CHAR_STONE);
                refresh();
            }
            ;j<=;j++)
            {
                move(j,i);
                addch(CHAR_STONE);
                refresh();
            }
        }
        sleep();
    }
}

BirdError的更多相关文章

随机推荐

  1. Python之路----------shutil模块

    高级的文件.文件夹.压缩包 处理模块 复制文件: import shutil f1 = open('test') f2 = open('test2','w') shutil.copyfileobj(f ...

  2. CSS4

    1.处理溢出(overflow) overflow的取值可以是visible.hidden,scroll,auto,其中visible是默认值.visible表示不裁剪内容,也不添加滚动条,强制显示元 ...

  3. MWeb 1.4 新功能介绍二:静态博客功能增强

    MWeb 比较有特色的是一键生成静态博客功能,然后从 MWeb 最开始规划要做静态博客生成功能时,我就希望 MWeb 的静态博客生成功能在易用的同时,还要有很强大的扩展性. 比如说能自己增加网站公告, ...

  4. js的一些实用的小技巧

    1.移动端自适应: 移动端的编写首先需要在header写入以下内容来表示页面是以不缩放的形式展示的: <meta name="viewport" content=" ...

  5. 谈谈LoveLive SIF以及即将诞生的LL练习器

    由于课程需要和自身需求以及广大的LLer的需求,这个学期我将做一个造福全世界LLer的安卓app,它的名字是——还没想好(喂),总之是个LL SIF的练习器.什么?你问我LL SIF是什么?看来你不是 ...

  6. font-family styles

    以下是几种常用字体的字形样式预览: 步骤阅读

  7. Eclipse安装svn插件的几种方式

    Eclipse安装svn插件的几种方式 1.在线安装: (1).点击 Help --> Install New Software... (2).在弹出的窗口中点击add按钮,输入Name(任意) ...

  8. paper 121 :matlab中imresize函数

    转自:http://www.cnblogs.com/rong86/p/3558344.html matlab中函数imresize简介: 函数功能:该函数用于对图像做缩放处理. 调用格式: B = i ...

  9. LINQ使用细节之.AsEnumerable()和.ToList()的区别

    先看看下面的代码,用了 .AsEnumerable(): 1 var query = (from a in db.Table2 where a = SomeCondition3 select a.So ...

  10. 对ADC(DAC)的线性度(INL和DNL)的一点理解 [转]

    大家在使用ADC的时候,往往最关注位数,而对ADC的线性度往往会忽略. 其实这个线性度也是ADC非常重要的指标,ADC(或DAC,其实ADC也是由DAC组成的)线性度指标有两个: INL:翻译过来叫“ ...