24小时热门版块排行榜    

查看: 1651  |  回复: 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的回帖

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的回帖

viking1992

新虫 (初入文坛)


dubo(金币+1): 欢迎讨论 2011-09-01 19:47:40
引用回帖:
4楼: Originally posted by imyourkobe at 2011-08-28 15:59:56:
好好看看数据结构的链表操作:插入和删除内容啊!

我……還木有學數據結構…………下學期的課程
幽人竹桑園 歸臥寂無喧 物情今已見 ?拇擞麩o言
5楼2011-09-01 10:09:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

imyourkobe

铁杆木虫 (著名写手)

引用回帖:
5楼: Originally posted by viking1992 at 2011-09-01 10:09:07:
我……還木有學數據結構…………下學期的課程

那看不懂不怪你啊。慢慢学习吧。
6楼2011-09-01 13:42:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文俊点点

木虫 (著名写手)


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

viking1992

新虫 (初入文坛)

引用回帖:
7楼: Originally posted by 文俊点点 at 2011-09-01 18:21:02:
数据结构不用学的  看看就可以了   那个逻辑是固定的········

反正是必修課=_,=
幽人竹桑園 歸臥寂無喧 物情今已見 ?拇擞麩o言
8楼2011-09-04 08:48:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 viking1992 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 290求调剂 +6 @将就将就看 2026-03-10 11/550 2026-03-17 10:22 by @将就将就看
[论文投稿] 有没有大佬发小论文能带我个二作 +3 增锐漏人 2026-03-17 4/200 2026-03-17 09:26 by xs74101122
[考研] 考研调剂 +3 淇ya_~ 2026-03-17 5/250 2026-03-17 09:25 by Winj1e
[考研] 304求调剂 +7 小熊joy 2026-03-14 7/350 2026-03-17 08:53 by 雾散后相遇lc
[考研] 东南大学364求调剂 +5 JasonYuiui 2026-03-15 5/250 2026-03-16 21:28 by 木瓜膏
[考研] 化学调剂0703 +8 啊我我的 2026-03-11 8/400 2026-03-16 17:23 by 我的船我的海
[考研] 0703化学调剂 +6 妮妮ninicgb 2026-03-15 9/450 2026-03-16 16:40 by houyaoxu
[考研] 312求调剂 +3 陌宸希 2026-03-16 4/200 2026-03-16 15:06 by peike
[基金申请] 现在如何回避去年的某一个专家,不知道名字 +3 zk200107 2026-03-12 6/300 2026-03-14 17:13 by zk200107
[考研] 328求调剂 +3 5201314Lsy! 2026-03-13 6/300 2026-03-14 15:31 by hyswxzs
[考研] 321求调剂 +3 CUcat 2026-03-10 3/150 2026-03-14 00:25 by JourneyLucky
[考研] 318求调剂 +3 李新光 2026-03-10 3/150 2026-03-14 00:21 by JourneyLucky
[考研] 311求调剂 +8 zchqwer 2026-03-10 8/400 2026-03-14 00:01 by JourneyLucky
[考研] 复试调剂 +9 Copy267 2026-03-10 9/450 2026-03-13 23:45 by userper
[考研] 26调剂/材料/英一数二/总分289/已过A区线 +6 步川酷紫123 2026-03-13 6/300 2026-03-13 21:59 by 星空星月
[考研] 四川大学085601材料工程专硕 初试294求调剂 +4 祝我们好在冬天 2026-03-11 4/200 2026-03-13 21:39 by peike
[考研] 26调剂/材料科学与工程/总分295/求收留 +9 2026调剂侠 2026-03-12 9/450 2026-03-13 20:46 by 18595523086
[考研] 085600材料与化工 309分请求调剂 +7 dtdxzxx 2026-03-12 8/400 2026-03-13 14:43 by jxchenghu
[考研] 26考研求调剂 +5 丶宏Sir 2026-03-13 5/250 2026-03-13 13:05 by JourneyLucky
[考研] 333求调剂 +3 152697 2026-03-12 4/200 2026-03-13 07:08 by Iveryant
信息提示
请填处理意见