| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1881 人关注过本帖
标题:发个字符界面的贪食蛇。
只看楼主 加入收藏
qingmeisu200
Rank: 4
等 级:业余侠客
帖 子:113
专家分:215
注 册:2010-3-16
结帖率:100%
收藏
 问题点数:0 回复次数:12 
发个字符界面的贪食蛇。
/*-----snake.c-----*/

#include <stdio.h>
#include <conio.h>
#include <bios.h>
#include <stdlib.h>

#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b

/*-----函数定义-----*/
void Print_welcome(void);                       /*  欢迎信息  */
void Print_moze();                              /*  画出地图  */
void Get_key();                                 /*  接收按键  */
void Game();                                    /*  游戏过程  */
void Print_food();                              /*  输出食物  */
void wall_pass();                               /*  是否撞墙  */
void hit_own();                                 /*  撞到自己  */
void eat_food();                                /*  吃到食物  */
void Game_over();                               /*  游戏结束  */

/*-----数据结构定义-----*/

struct node                                         /*蛇身节点的x,y坐标,和蛇的生命。*/
{
    int x,y;
};                                                  
struct food                                         /*食物的x,y坐标,和食物状态,life为1时食物有,life为0时需要出现食物*/
{
    int x,y;
    int life;
}food;
struct node snakexy[300];                           /*存储蛇身坐标*/
int turnx[40],turny[40],turn_count,length;          /*蛇身转角坐标和蛇的转角数和蛇身长度*/
int life;                                           /*当life为0时蛇死,为1时蛇活着。*/
enum fangxiang{null,up,down,left,right} way;                                /*蛇的方向*/
int key,key_pre,score;                                      /*按键和分数*/
int i;
/*-----主函数-----*/
int main(void)
{
    Print_welcome();
    getch();
    clrscr();
    Print_moze();
    Game();
    getch();
    return 0;
}

/*-----输出欢迎信息-----*/
void Print_welcome(void)
{
    window(0,0,80,25);
    textbackground(WHITE);
    textcolor(YELLOW);
    clrscr();
    gotoxy(25,11);
    cprintf("Welcome to snake game!\n");
    gotoxy(32,12);
    cprintf(" have fun!");
    gotoxy(25,13);
    cprintf("Press any key to start!");
}

/*-----画出地图-----*/
void Print_moze(void)
{
    int i;
    gotoxy(36,1);
    printf("score:%d",score);
    printf("");
    gotoxy(1,2);
    for(i=0;i<80;i++)
        putchar('-');
}

/*-----游戏过程----*/
void Game(void)
{
    randomize();                 /*随机数生成*/
    life=1;                      /*生命为活*/
    food.life=1;                 /*需要出现食物*/
    score=0;                     /*分数为0*/
    length=3;                    /*蛇身初始长度为1*/
    /*   way=null;      */              /*没有方向*/
    turn_count=0;                /*拐角数为0*/
    snakexy[0].x=1;              /*蛇的第一个节点坐标 */
    snakexy[0].y=3;
    snakexy[1].x=2;
    snakexy[1].y=3;
    snakexy[2].x=3;
    snakexy[2].y=3;
    food.x=13;
    food.y=19;
/*---初始化变量完毕---*/

    for(i=0;i<length;i++)
    {
        gotoxy(snakexy[i].x,snakexy[i].y);
        putchar(4);
    }
    while(1)
    {
        while(!kbhit())
        {
            switch(key)
            {
                case UP:
                            if(length!=1)
                            for(i=0;i<length-1;i++)
                            {
                                snakexy[i].x=snakexy[i+1].x;
                                snakexy[i].y=snakexy[i+1].y;
                            }
                            snakexy[length-1].y--;
                            break;
                case DOWN:
                            if(length!=1)
                            for(i=0;i<length-1;i++)
                            {
                                snakexy[i].x=snakexy[i+1].x;
                                snakexy[i].y=snakexy[i+1].y;
                            }
                            snakexy[length-1].y++;
                            break;
                case LEFT:
                            if(length!=1)
                            for(i=0;i<length-1;i++)
                            {
                                snakexy[i].x=snakexy[i+1].x;
                                snakexy[i].y=snakexy[i+1].y;
                            }
                            snakexy[length-1].x--;
                            break;
                case RIGHT:
                            if(length!=1)
                            for(i=0;i<length-1;i++)
                            {
                                snakexy[i].x=snakexy[i+1].x;
                                snakexy[i].y=snakexy[i+1].y;
                            }
                            snakexy[length-1].x++;
                            break;
                case ESC:
                            Game_over();
            }/*switch(key)_end*/
            wall_pass();
            hit_own();
            eat_food();
            for(i=0;i<length;i++)
            {
                Print_moze();
                if(food.life==1)
                {
                    gotoxy(food.x,food.y);
                    putchar(3);
                }
                gotoxy(snakexy[i].x,snakexy[i].y);
                putchar(4);
            }
            delay(60000);
            clrscr();
            if(food.life==0)
                Print_food();
        }/*while(!kbhit())_end*/
        Get_key();
        if(food.life==0)
            Print_food();


    }/*end_while(1)*/
}

/*-----接收按键-----*/
void Get_key(void)
{
    key=bioskey(0);
}
/*-----游戏结束-----*/
void Game_over()
{
    printf("\a");
    clrscr();
    gotoxy(35,13);
    printf("score:%d",score);
    getch();
    exit(0);
}

/*-----输出食物-----*/
void Print_food()
{
    food.x=(rand()%83)+2;
    food.y=(rand()%22)+3;
    gotoxy(food.x,food.y);
    putchar(3);
    food.life=1;
}
/*-----是否撞墙-----*/
void wall_pass()
{
    if((snakexy[length-1].x==85)||(snakexy[length-1].x==0)||(snakexy[length-1].y==2)||(snakexy[length-1].y==25))
        Game_over();
}
/*-----吃到食物-----*/
void eat_food()
{
    if((snakexy[length-1].x==food.x)&&(snakexy[length-1].y==food.y))
    {
        score=score+5;
        food.life=0;
        snakexy[length].x=food.x;
        snakexy[length].y=food.y;
        length++;
    }
}

/*-----撞到自己-----*/
void hit_own(void)
{
    for(i=0;i<length-2;i++)
        if((snakexy[length-1].x==snakexy[i].x)&&(snakexy[length-1].y==snakexy[i].y))
            Game_over();
}


写的很烂,只是不停的刷新屏幕,所以有时会闪。懒得改了。
搜索更多相关主题的帖子: 字符 界面 
2010-07-05 09:50
qingmeisu200
Rank: 4
等 级:业余侠客
帖 子:113
专家分:215
注 册:2010-3-16
收藏
得分:0 
对了,怎么发帖子才不用发那种问题贴? 我还要结贴?

我能!
2010-07-05 09:51
cs008007009
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2010-7-9
收藏
得分:0 
我运行了下,还不错。。。我学机械的,大一刚结束,大一学的是谭浩强的那本书,学完后感觉一个有趣的程序都编不了,现在我才知道c还能这么编,牛!!,我看了下你这个程序,怎么好多函数谭浩强的那本书都没提到,果然是入门的书啊楼主能不能给我介绍点c语言进阶的书啊,谢谢啊
2010-07-10 09:40
qingmeisu200
Rank: 4
等 级:业余侠客
帖 子:113
专家分:215
注 册:2010-3-16
收藏
得分:0 
回复 3楼 cs008007009
没有书会介绍这些函数,自己在网上查的。进阶的有 《c陷阱与缺陷》 《c专家编程》

我能!
2010-07-12 11:39
cs008007009
Rank: 1
等 级:新手上路
帖 子:7
专家分:2
注 册:2010-7-9
收藏
得分:0 
回复 4楼 qingmeisu200
哦,谢了、、、、
2010-07-12 13:13
蜂蜜加了水00
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-7-16
收藏
得分:0 
真的不错!
2010-07-18 17:00
蜂蜜加了水00
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-7-16
收藏
得分:0 
请问楼主:如果我想实现一个界面中根据按键来控制两架飞机的动画,如何实现?
谢谢
2010-07-18 17:01
lydia991
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-7-21
收藏
得分:0 
楼主,为什么我运行不了阿。 #include <bios.h>
 错误在这个上面。。
2010-07-21 19:01
qingmeisu200
Rank: 4
等 级:业余侠客
帖 子:113
专家分:215
注 册:2010-3-16
收藏
得分:0 
回复 8楼 lydia991
  win-tc 编译

我能!
2010-07-24 13:18
Antwind
Rank: 2
等 级:论坛游民
帖 子:82
专家分:53
注 册:2010-7-11
收藏
得分:0 
楼主:你太牛比了..................
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶


/*************我就是程序;程序就是我!******************/
2010-08-13 20:15
快速回复:发个字符界面的贪食蛇。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022666 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved