| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 639 人关注过本帖
标题:贪吃蛇小游戏 求注释 有些地方看不太懂
取消只看楼主 加入收藏
yg黄金时代
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-26
结帖率:100%
收藏
 问题点数:0 回复次数:0 
贪吃蛇小游戏 求注释 有些地方看不太懂
#include <iostream.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>  //使用当前时间做种子;
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[i][j]= '*';
            else game[i][j]= ' ';
    }
}
//显示框框;
void Fence::OutputF(){
    for(int i=0; i<20; i++){
        for(int j=0; j<20; j++)
            cout<<game[i][j]<<' ';
            cout<<endl;
        }
}

//蛇结点;
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!!!"<<endl;
        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()返回键盘上读取的字符;包含头文件<conio.h>
        m.change_point(keydown);
        while(!kbhit()){ //判断有没有按键落下;
            system("cls");  //清屏函数;
            m.moving();
            f.OutputF();
            Sleep(200);
        }
    }
    return 0;
}
搜索更多相关主题的帖子: game void include 贪吃蛇 public 
2012-06-29 11:05
快速回复:贪吃蛇小游戏 求注释 有些地方看不太懂
数据加载中...
 
   



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

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