24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1686  |  回复: 7
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

viking1992

新虫 (初入文坛)

[求助] 大二编程废求助高手解答一下这个贪吃蛇的C++程序

看到一个贪吃蛇的C++程序  中间有几个地方不懂 求指教!

#include
#include
#include
#include
#include   //使用当前时间做种子;
enum dir{up,down,left,right};  //枚举类型enum dir;
//围墙;
class Fence{
public:
        void InitFence();
        void OutputF();
public:
        char game[20][20];
}f; //定义对象;
//画框框;
void Fence::InitFence(){
        for(int i=0; i<20; i++)
                for(int j=0; j<20; j++){
                        if(i==0||i==19||j==0||j==19)
                                game[j]= '*';
                        else game[j]= ' ';
        }
}
//显示框框;
void Fence::OutputF(){
        for(int i=0; i<20; i++){
                for(int j=0; j<20; j++)
                        cout<[j]<<' ';
                        cout<                 }
}

//蛇结点;
class SnakeNode{
private:
        int x,y;
        SnakeNode *prior,*next;
public:
        void add_head(int x,int y);
        int get_x();
        int get_y();
        void delete_tail();
}*head=NULL, *tail =NULL;
//插入头结点;
void SnakeNode::add_head(int x,int y){
        SnakeNode *q=new SnakeNode;
        q->x =x; q->y =y;
        q->next =head;         
        q->prior =NULL;
        if(head) head->prior =q;
        head =q;
        if(!tail) tail =head;
        f.game[x][y]= '*';  //f对象可以在定义Fence类时定义; 且Fence类在SnakeNode类前定义;
}
int SnakeNode::get_x(){
        return x;
}
int SnakeNode::get_y(){
        return y;
}
//删除尾结点;
void SnakeNode::delete_tail(){
        SnakeNode *p =tail;
        f.game[tail->get_x()][tail->get_y()]= ' ';//把尾结点的坐标表示的'*'置为空格;
        if(tail==head)
                tail= head= NULL;
        else{
                tail= tail->prior;
                tail->next= NULL;
        }
        delete p;
}

//move移动;
class move{
public:
        dir point;    //枚举变量point: 控制方向;
        int food_x;
        int food_y;
public:
        void moving();
        void change_point(char);  //改变方向;
        void get_food();
};

void move::moving(){
        int a,b;
        a= head->get_x();  //取得头结点横坐标
        b= head->get_y();  //头结点纵坐标
        switch(point){
        case up: --a; break;
        case down: ++a; break;
        case left: --b; break;
        case right: ++b; break;
        }
        if(a==19||b==19||a==0||b==0){                                //判断是否撞墙;                                               
                cout<<"game over!!!"<                 exit(0);
        }
        if(a==food_x && b==food_y){                                        //吃food;
                head->add_head(a,b);
                get_food();
        }
        else{
                head->add_head(a,b); //插入头结点;
                head->delete_tail(); //删除尾结点;
        }
}

void move::change_point(char keydown){
        switch(keydown){
        case 'w': point= up; break;
        case 's': point= down; break;
        case 'a': point= left; break;
        case 'd': point= right; break;
        }
}
void move::get_food(){
        srand((unsigned int) time(NULL)); //做种子(程序运行时间);
        food_x= rand()%18+1;
        food_y= rand()%18+1;
        f.game[food_x][food_y]= '*';
}

//main();
int main(){
        cout<<"Using 'w,s,a,d'to control direction!!!\n\n\n";
        //画框框和小蛇;
        move m;
        f.InitFence();
        head->add_head(4,3);
        head->add_head(4,4);
        head->add_head(4,5);
        m.get_food();
        f.OutputF();
        while (true){
                char keydown= getch(); //getch()返回键盘上读取的字符;包含头文件
                m.change_point(keydown);
                while(!kbhit()){ //判断有没有按键落下;
                         system("cls" );  //清屏函数               
                                 m.moving();
                        f.OutputF();
                        Sleep(200);
                }
        }
        return 0;
}
问一下红字部分程序的设置目的 以及怎么运行和实现的……(简要的说 就是什么意思= =)
特别是结点那一块……动态数组和各种指针什么的 看着就头大………………
多谢了

[ Last edited by 微尘、梦想 on 2011-8-27 at 20:06 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

幽人竹桑園 歸臥寂無喧 物情今已見 ?拇擞麩o言
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文俊点点

木虫 (著名写手)


dubo(金币+1): 欢迎讨论 2011-09-01 19:47:49
数据结构不用学的  看看就可以了   那个逻辑是固定的········
这是你所拥有的时间·····这是你所能改变的生活·········
7楼2011-09-01 18:21:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 8 个回答

viking1992

新虫 (初入文坛)

话说……那个诡异的出现在程序中间的表情真的不关我的事……
幽人竹桑園 歸臥寂無喧 物情今已見 ?拇擞麩o言
2楼2011-08-27 18:57:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

imyourkobe

铁杆木虫 (著名写手)

【答案】应助回帖

★ ★
viking1992(金币+5): 虽然依旧不是很懂……不过谢谢了~都木有人理我TUT 2011-08-28 15:00:05
余泽成(金币+2): 谢谢参与应助! 2011-09-01 15:38:46
数据结构中的。
1)双向链表插入操作:插入到表头的处理
q->next =head; //把q对应结点插入到 head位置,即head为q后继。      
q->prior =NULL;//q对应结点是表头了,对应的prior 应该为空。
if(head)
head->prior =q;//如果已经存在头结点,要处理原头结点,把其前驱设置为q结点
head =q;        //q作为新头结点
2)删除操作类似的。
3楼2011-08-28 12:15:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

imyourkobe

铁杆木虫 (著名写手)


dubo(金币+1): 欢迎讨论 2011-09-01 19:47:31
好好看看数据结构的链表操作:插入和删除内容啊!
4楼2011-08-28 15:59:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 华师大读博 +3 xq83 2026-04-22 3/150 2026-04-22 03:56 by 啊哒哒哒叨
[论文投稿] 急需审稿人!!! +3 陆小果画大饼 2026-04-21 3/150 2026-04-21 23:54 by jzy_123456
[考博] 申博/考博 +4 啃面包的小书虫 2026-04-17 8/400 2026-04-21 16:26 by 啃面包的小书虫
[考研] 295分求调剂 +6 ?要上岸? 2026-04-17 6/300 2026-04-21 08:18 by Equinoxhua
[论文投稿] 期刊推荐 +3 材料研究生 2026-04-15 5/250 2026-04-20 16:02 by 豆豆7758
[教师之家] 又一批高校组建人工智能学院 师资行吗 不是骗人吗 +4 yexuqing 2026-04-19 4/200 2026-04-20 14:47 by brantleo
[考研] 337求调剂 +3 jyz04 2026-04-18 3/150 2026-04-20 12:24 by 研可安
[考博] 申博 +3 Xyyx. 2026-04-18 3/150 2026-04-20 10:44 by YuY66
[考博] 湖南大学刘巧玲课题组2026年第二批次博士研究生招生信息 +3 南风观火 2026-04-18 5/250 2026-04-20 10:13 by 南风观火
[考研] 求计算机方向调剂 +3 Toffee2 2026-04-16 6/300 2026-04-19 22:37 by ll叶
[考研] 294求调剂 +8 淡然654321 2026-04-17 9/450 2026-04-19 19:51 by Equinoxhua
[考研] 304求调剂 +8 castLight 2026-04-16 8/400 2026-04-19 17:14 by 中豫男
[考研] 求调剂 +10 小聂爱学习 2026-04-16 12/600 2026-04-19 16:51 by 中豫男
[考研] 求调剂 +6 苦命人。。。 2026-04-18 7/350 2026-04-19 16:27 by 中豫男
[考研] 0854求调剂 +23 门路摸摸 2026-04-15 27/1350 2026-04-19 01:59 by 烟雨流涯
[考研] 300求调剂 +12 橙a777 2026-04-15 12/600 2026-04-18 23:51 by 路病情
[考研] 接受任何调剂 +6 也就是栗子 2026-04-17 7/350 2026-04-18 17:20 by 涵竹刘
[考研] 260求调剂 +4 Zyt1314520.. 2026-04-17 5/250 2026-04-18 08:28 by babysonlkd
[考研] 急需调剂 +9 绝不放弃22 2026-04-15 10/500 2026-04-18 08:09 by chixmc
[考研] 322求调剂 +6 tekuzu 2026-04-17 6/300 2026-04-17 13:48 by Espannnnnol
信息提示
请填处理意见