| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1366 人关注过本帖
标题:关于用C语言写贪吃蛇的问题
只看楼主 加入收藏
夜丨殇
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2013-9-16
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:12 
关于用C语言写贪吃蛇的问题
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#include <time.h>
#include <math.h>

#define H 25
#define W 40
void map();
int move(struct snake * p);
void key(char key, int * direction);

struct snake//蛇的结构体
{
    int * x, * y;
    int joint;//蛇的长度
    int direction;//蛇的方向
    int life;
}play;

void gotoxy(int x, int y)
{
    COORD c;
    c.X = 2 * x, c.Y = y; //本游戏只使用双字节符号
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}

void main()
{

    int i,j;
    struct snake * p;
    p=(struct snake *)malloc(sizeof(struct snake));
    p->x=(int *)malloc(sizeof(int));
    p->y=(int *)malloc(sizeof(int));

    p->x[0] = 15;
    p->y[0] = 12;

    p->x[1] = 15;
    p->y[1] = 13;

    p->x[2] = 15;
    p->y[2] = 14;

    p->x[3] = 15;
    p->y[3] = 15;
    p->direction=1;
    p->joint=4;
    printf("%d %d %d %d ",p->x[0],p->y[0],p->direction);
    char ch;
    while(1)
    {
        if(kbhit())
        {
            ch = getch();
            key(ch,&p->direction);
            p->joint++;//在这里我想测试下蛇的长度是否会增加
        }
        move(p);
        Sleep(200);

    }
    getch();
}

void key(char key, int * direction)
{
    if(key == 'w'&& (*direction)!=2)
        (*direction)=1;
    else if(key == 's'&& (*direction)!=1)
        (*direction)=2;
    else if(key == 'a'&& (*direction)!=4)
        (*direction)=3;
    else if(key == 'd'&& (*direction)!=3)
        (*direction)=4;
}

int move(struct snake * p)
{
    int i;
    int food = 0;
    if(p->direction == 1)
        p->y[0]=p->y[0]-1;
    else if(p->direction == 2)
        p->y[0]=p->y[0]+1;
    else if(p->direction == 3)
        p->x[0]=p->x[0]-1;
    else if(p->direction == 4)
        p->x[0]=p->x[0]+1;
    
    p->x[p->joint] = p->x[p->joint-1];
    p->y[p->joint] = p->y[p->joint-1];
    gotoxy(p->x[p->joint],p->y[p->joint]);
    printf("  ");
    for(i = (p->joint-1);i > 0;--i)
    {
        p->x[i] = p->x[i-1];
        p->y[i] = p->y[i-1];
    }
    gotoxy(p->x[i],p->y[i]);
    printf("");            
    return 0;
}
我这段代码主要是实现蛇的移动的、但是蛇的长度增加到一定程度以后就出问题了(会斜着走)这要怎么解决啊、求大神帮忙改改
搜索更多相关主题的帖子: 贪吃蛇 C语言 
2013-09-16 15:27
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:4 
你看看是不是某个变量控制的不对!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-09-16 16:13
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:4 
调试跟一下咯...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-09-16 16:57
夜丨殇
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2013-9-16
收藏
得分:0 
回复 2楼 我叫沃恩
我估计问题应该是出在move函数里面,但是实在是想不出改哪里
2013-09-16 17:27
夜丨殇
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2013-9-16
收藏
得分:0 
求大神解答啊~!!!
2013-09-16 19:42
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:4 
虽然没时间调试我不知道哪错了,可是目测代码的数量应该不够。。。。。。。。。。。

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-09-16 20:43
夜丨殇
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2013-9-16
收藏
得分:0 
回复 6楼 小小程序猿
我只贴出来控制蛇移动的那部分代码
2013-09-16 21:24
youngdavid
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:698
注 册:2012-9-24
收藏
得分:4 
代码贴完整看看
2013-09-17 08:19
夜丨殇
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2013-9-16
收藏
得分:0 
回复 8楼 youngdavid
问题只出在这断代码里、别的我还没写完、所以就不贴了。。
2013-09-17 23:24
sc3161425
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-6-13
收藏
得分:0 
- - 我怎么一个都看不懂
2013-09-21 16:37
快速回复:关于用C语言写贪吃蛇的问题
数据加载中...
 
   



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

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