| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1450 人关注过本帖
标题:【原创】贪吃蛇 大家进来提点意见
只看楼主 加入收藏
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
结帖率:100%
收藏
 问题点数:0 回复次数:18 
【原创】贪吃蛇 大家进来提点意见
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <windows.h>

#define TIME 200

void rect(void);
void snake_init(POINT *snake);
void gotoxy(int,int);

int main(void)
{
    int i,j,last_ch,num=0;
    int start,end;
    int ch = 'd';
    int food = 0;

    POINT snake[100];
    POINT snake_food;

    rect();

    snake_init(snake);
    start = 4;
    end = 0;
    gotoxy(snake[end].x,snake[end].y);
    printf("*****");

    while(1)
    {
        while(!kbhit())
        {
            switch(ch)
            {
                case 'a':
                    if(last_ch == 'd')
                    {
                        ch = last_ch;
                        break;
                    }
                    _sleep(TIME);
                    gotoxy(snake[end].x,snake[end].y);
                    printf(" ");
                    for(j=0;j < start;j++)
                        snake[j] = snake[j+1];
                    gotoxy(snake[start].x-1,snake[start].y);
                    printf("*");
                    snake[start].x -= 1;
                    break;
                case 'd':
                    if(last_ch == 'a')
                    {
                        ch = last_ch;
                        break;
                    }
                    _sleep(TIME);
                    gotoxy(snake[end].x,snake[end].y);
                    printf(" ");
                    for(j=0;j < start;j++)
                        snake[j] = snake[j+1];
                    gotoxy(snake[start].x+1,snake[start].y);
                    printf("*");
                    snake[start].x += 1;
                    break;
                case 's':
                    if(last_ch == 'w')
                    {
                        ch = last_ch;
                        break;
                    }
                    _sleep(TIME);
                    gotoxy(snake[end].x,snake[end].y);
                    printf(" ");
                    for(j=0;j < start;j++)
                        snake[j] = snake[j+1];
                    gotoxy(snake[start].x,snake[start].y+1);
                    printf("*");
                    snake[start].y += 1;
                    break;
                case 'w':
                    if(last_ch == 's')
                    {
                        ch = last_ch;
                        break;
                    }
                    _sleep(TIME);
                    gotoxy(snake[end].x,snake[end].y);
                    printf(" ");
                    for(j=0;j < start;j++)
                        snake[j] = snake[j+1];
                    gotoxy(snake[start].x,snake[start].y-1);
                    printf("*");
                    snake[start].y -= 1;
                    break;
                default:
                    ch = last_ch;
                    break;
            }

            /* 撞墙处理 */
            if(snake[start].x <= 0 || snake[start].x >= 42 || snake[start].y <=0 || snake[start].y >= 13)
            {
                gotoxy(17,5);
                printf("你输了\n");
                gotoxy(13,6);
                system("pause");

                gotoxy(0,0);
                rect();
                snake_init(snake);
                start = 4;
                end = 0;
                gotoxy(snake[end].x,snake[end].y);
                printf("*****");

                ch = 'd';
                food = 0;
                num = 0;
            }

            /* 撞到自己 */
            for(i=start-1;i >= 0;i--)
            {
                if(snake[start].x == snake[i].x && snake[start].y == snake[i].y)
                {
                    gotoxy(17,5);
                    printf("你输了\n");
                    gotoxy(13,6);
                    system("pause");

                    gotoxy(0,0);
                    rect();
                    snake_init(snake);
                    start = 4;
                    end = 0;
                    gotoxy(snake[end].x,snake[end].y);
                    printf("*****");

                    ch = 'd';
                    food = 0;
                    num = 0;
                }
            }

            /* 生成食物 */
            if(!food)
            {
                srand(time(0));
                snake_food.x = rand() % 40 + 2;
                snake_food.y = rand() % 11 + 2;
                gotoxy(snake_food.x,snake_food.y);
                printf("*");
                food = 1;
            }

            /* 吃到食物 */
            if(snake[start].x == snake_food.x && snake[start].y == snake_food.y)
            {
                start += 1;
                snake[start].x = snake_food.x;
                snake[start].y = snake_food.y;
                gotoxy(65,6);
                num += 10;
                printf("%d",num);
                food = 0;
            }
            last_ch = ch;
        }
        ch = getch();
    }
    
    return 0;
}

void gotoxy(int X, int Y)
{
    HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD coord;
    coord.X = X;
    coord.Y = Y;
    SetConsoleCursorPosition(
        hOutput,
        coord
        );
}

void rect(void)
{
    printf("┌────────────────────┐\n");
    printf("│                                        │\n");
    printf("│                                        │\n");
    printf("│                                        │\n");
    printf("│                                        │\n");
    printf("│                                        │\n");
    printf("│                                        │         你的分数为  0\n");
    printf("│                                        │\n");
    printf("│                                        │\n");
    printf("│                                        │\n");
    printf("│                                        │\n");
    printf("│                                        │\n");
    printf("│                                        │\n");
    printf("└────────────────────┘\n");
}

void snake_init(POINT *snake)
{
    snake[0].x = 2;
    snake[0].y = 1;
    
    snake[1].x = 3;
    snake[1].y = 1;
    
    snake[2].x = 4;
    snake[2].y = 1;
    
    snake[3].x = 5;
    snake[3].y = 1;
    
    snake[4].x = 6;
    snake[4].y = 1;
}

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 xxwpk007 于 2010-7-13 18:41 编辑 ]
搜索更多相关主题的帖子: 提点 贪吃 意见 
2010-07-13 16:27
lixiaojun121
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-7-12
收藏
得分:0 
nbdehen
2010-07-13 17:12
human84
Rank: 3Rank: 3
来 自:哈尔滨 / 重庆
等 级:论坛游侠
帖 子:154
专家分:141
注 册:2009-11-1
收藏
得分:0 
学习了...顶
2010-07-13 20:27
一路向西
Rank: 2
来 自:宁夏
等 级:论坛游民
帖 子:13
专家分:38
注 册:2010-5-26
收藏
得分:0 
    看来需要改进啊    好想不能控制   随机选择食物是可以 但是  蛇不能够控制
2010-07-13 22:31
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
为什么我copy去调试了下
说有1个error?
2010-07-13 23:13
qq1
Rank: 2
等 级:论坛游民
帖 子:92
专家分:22
注 册:2010-3-26
收藏
得分:0 
用VC编译
2010-07-13 23:59
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
就是用VC编译的啊
2010-07-14 00:08
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
收藏
得分:0 
回复 4楼 一路向西
可以控制的 w,s,a,d => 上,下,左,右
2010-07-14 08:30
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
好啊,学习

我就是真命天子,顺我者生,逆我者死!
2010-07-14 08:53
火龙果
Rank: 2
等 级:论坛游民
帖 子:42
专家分:79
注 册:2010-6-26
收藏
得分:0 
楼主你太好了,学习了
2010-07-14 15:43
快速回复:【原创】贪吃蛇 大家进来提点意见
数据加载中...
 
   



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

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