//#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. 从零开始攻略PHP(7)——面向对象(上)

    1.理解面向对象的概念 面向对象软件的一个重要优点是支持和鼓励封装的能力.封装也叫数据隐藏. 在面向对象的软件中,对象是一个被保存数据和操作这些数据的操作方法的唯一.可标识的集合. 对象可以按类进行分 ...

  2. smarty 模板几个例子

    一.assign和display方法的使用以及几个变量调节器 header("content-type:text/html;charset=utf-8");//加载Smarty引擎 ...

  3. [总结] JDBC数据库操作

    1.加载驱动--告诉驱动管理将使用哪一个数据库的驱动包. class.forName("com.mysql.jdbc.Driver"); 2.操作JDBC ADI完成数据库动作 D ...

  4. Win7开机登陆密码忘记了?不必重做系统(详图)

     1)如果是普通账户密码忘了.方法:重新启动电脑,启动到系统登录界面时,同时按住Ctrl+Alt键,然后连击Del键两次,会出现新的登录界面,用户名处输入“Administrator”密码为空,回车即 ...

  5. 纯css的防止图片撑破页面的代码(图片自动缩放)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Nodejs&express+mongodb完成简单用户登录(即Nodejs入门)

    刚了解nodejs,发现nodejs配置起来不复杂,但也有很多需要注意的地方,今天就记录一下,以后也可拿出来看看. 要完成这个简单的示例,从零开始,走三步就行了. 一.搭建开发环境 二.创建项目(ex ...

  7. SpringMVC 温故而知新

    http://www.cnblogs.com/bigdataZJ/p/5815467.html直接引用别人的吧,没时间呀

  8. git push :推送本地更改到远程仓库的三种模式

    摘要:由于在git push过程中,no-fast-forward 的push会被拒绝,如何解决git push失败的问题?这里面有三种方法,分别会形成merge形式的提交历史,线性形式的提交历史,覆 ...

  9. ajax 如何接受 PHP页面返回的json数组

    JSON JSON(JavaScript Object Notation)是Douglas Crockford提出的.他是一个轻量级的数据交换格式,基于JavaScript对象字面量. 我们可以将之前 ...

  10. Dynamics AX 2012 R2 通过数据源保存记录时触发的方法

    我们都知道,在窗体上保存记录时,会像在表上保存时一样,触发很多方法.这里Reinhard找到了一个流程图,看看都触发了哪些方法,并且这些方法是以怎样的顺序被触发的. 窗体上数据源的Validate() ...