24小时热门版块排行榜    

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

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的回帖
查看全部 8 个回答

viking1992

新虫 (初入文坛)

话说……那个诡异的出现在程序中间的表情真的不关我的事……
幽人竹桑園 歸臥寂無喧 物情今已見 ?拇擞麩o言
2楼2011-08-27 18:57:38
已阅   回复此楼   关注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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 329求调剂 +9 想上学吖吖 2026-03-19 9/450 2026-03-20 22:01 by luoyongfeng
[考研] 0817 化学工程 299分求调剂 有科研经历 有二区文章 +22 rare12345 2026-03-18 22/1100 2026-03-20 20:39 by zhukairuo
[考研] 求调剂 +3 @taotao 2026-03-20 3/150 2026-03-20 19:35 by JourneyLucky
[考研] 环境工程调剂 +9 大可digkids 2026-03-16 9/450 2026-03-20 17:38 by 醉在风里
[考研] 08工学调剂 +5 用户573181 2026-03-20 5/250 2026-03-20 15:47 by xia_2003
[考研] 生物学调剂招人!!! +3 山海天岚 2026-03-17 4/200 2026-03-19 21:34 by 怎么释怀
[考研] 085601材料工程专硕求调剂 +10 慕寒mio 2026-03-16 10/500 2026-03-19 15:26 by 丁丁*
[考研] 材料与化工求调剂 +7 为学666 2026-03-16 7/350 2026-03-19 14:48 by 尽舜尧1
[考研] 0703化学 305求调剂 +4 FY_yy 2026-03-14 4/200 2026-03-19 05:54 by anny19840123
[考研] 材料工程专硕调剂 +5 204818@lcx 2026-03-17 6/300 2026-03-18 22:55 by 204818@lcx
[考研] 0854可跨调剂,一作一项核心论文五项专利,省、国级证书40+数一英一287 +8 小李0854 2026-03-16 8/400 2026-03-18 14:35 by 搏击518
[考研] 302求调剂 +10 呼呼呼。。。。 2026-03-17 10/500 2026-03-18 12:45 by Linda Hu
[考研] 材料,纺织,生物(0856、0710),化学招生啦 +3 Eember. 2026-03-17 9/450 2026-03-18 10:28 by Eember.
[考研] 材料专硕326求调剂 +6 墨煜姒莘 2026-03-15 7/350 2026-03-17 17:10 by ruiyingmiao
[考研] 材料工程专硕274一志愿211求调剂 +6 薛云鹏 2026-03-15 6/300 2026-03-17 11:05 by 学员h26Tkc
[考研] 283求调剂 +3 听风就是雨; 2026-03-16 3/150 2026-03-17 07:41 by 热情沙漠
[考研] 0854控制工程 359求调剂 可跨专业 +3 626776879 2026-03-14 9/450 2026-03-16 17:42 by 626776879
[考研] 070303 总分349求调剂 +3 LJY9966 2026-03-15 5/250 2026-03-16 14:24 by xwxstudy
[考研] 326求调剂 +3 mlpqaz03 2026-03-15 3/150 2026-03-16 07:33 by Iveryant
[考研] 297一志愿上交085600求调剂 +5 指尖八千里 2026-03-14 5/250 2026-03-14 17:26 by a不易
信息提示
请填处理意见