24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1671  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 316求调剂 +5 yyx想调剂 2026-04-05 5/250 2026-04-05 22:22 by 咔咔咔咔9
[考研] 272分求调剂 +4 wangyile2233 2026-04-02 4/200 2026-04-05 22:21 by 286640313
[考研] 308求调剂 +3 终不似从前 2026-04-05 3/150 2026-04-05 20:07 by 啵啵啵0119
[考研] 求调剂到0856材料工程 +3 程9915 2026-04-05 3/150 2026-04-05 18:15 by 蓝云思雨
[考研] 272求调剂 +4 电气李 2026-04-05 4/200 2026-04-05 10:41 by lbsjt
[考研] 288环境专硕,求调材料方向 +13 lllllos 2026-04-04 14/700 2026-04-04 23:34 by lqwchd
[考研] 调剂 +9 19945159693 2026-04-03 10/500 2026-04-04 20:16 by dongzh2009
[考研] 302求调剂一志愿华中师范大学 +8 小江小江江江 2026-04-02 8/400 2026-04-04 19:50 by 蓝云思雨
[考研] 求调剂:085600材料与化工,考材科基,总分319 +21 678lucky 2026-03-31 26/1300 2026-04-04 16:22 by dongzh2009
[考研] 一志愿哈尔滨工业大学085600英一数二337分求调剂 +11 lyz0427 2026-04-03 11/550 2026-04-04 15:31 by dongzh2009
[考研] 348分环境工程·调剂 +10 吴彦祖24k 2026-04-03 11/550 2026-04-04 14:19 by 无际的草原
[考研] 0703求调剂 +6 zizimo 2026-03-31 6/300 2026-04-04 14:16 by 无际的草原
[考研] 本9一志愿2 0854低分专硕286求调剂 +9 芒种111 2026-04-04 9/450 2026-04-04 11:01 by tangruihua
[考研] 322求调剂 +6 FZAC123 2026-04-03 6/300 2026-04-03 22:23 by 科研小专家
[考研] 一志愿深大085601材料工程专业(专硕)300分可以调剂去哪 +8 10160315 2026-04-02 8/400 2026-04-03 09:36 by hypershenger
[考研] 275学硕081000服从调剂到其他专业,保不住本专业了 +7 一只小小水牛 2026-04-02 8/400 2026-04-02 14:23 by alice-2022
[考研] 求调剂,一志愿南京师范大学计算机专硕,初试373,六级通过, +3 计算机追梦人 2026-04-01 3/150 2026-04-02 07:57 by fxue1114
[考研] 307分求调剂 +14 (o~o) 2026-03-31 15/750 2026-04-01 20:43 by longlotian
[考研] 环境工程调剂 +9 hyzzzzzzz. 2026-04-01 9/450 2026-04-01 14:20 by salamander`
[考研] 本2一志愿C9-333分,材料科学与工程,求调剂 +9 升升不降 2026-03-31 9/450 2026-03-31 18:01 by 无际的草原
信息提示
请填处理意见