| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 998 人关注过本帖
标题:大一新生求助
只看楼主 加入收藏
葫芦兄弟
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-10-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
大一新生求助
我在做一个简单的贪吃蛇游戏,但是在如何控制蛇的移动没有想法,请求各位大神指点;
下面是我自己根据老师给的提示打的代码:
#include <windows.h>  
#include <iostream>
#include<stdio.h>
#include <time.h>
#define FrameX 4
#define FrameY 4
#define FrameW 40
#define FrameH 20
void gotoxy(int x,int y);
void print_frome();
class Food
{
    private:
        int x;
        int y;
    public:
        void display();
};
class Snake
{
private:
    int x[100];
    int y[100];
    int length;
    int speed;
    int count;
    int direction;
public:
    Snake();
    void display();
    void move();
    void wall();
};
int main()
{
    Food food;
    Snake snake;
    system("Color 70");
    print_frome();
    food.display();
    while(1)
    {
        Sleep(500);
        snake.move();
        snake.wall();
        snake.display();
    }
    return 0;
}
void Food::display()
{
    int a,b;
    srand(time(NULL));
    a=rand()%(FrameW-1)+1;
    b=rand()%(FrameH-2)+1;
    x=a+FrameX;
    y=b+FrameY;
    gotoxy(x,y);
    printf("@");//食物
}
Snake::Snake()
{
    int i;
    length=3;
    count=0;
    speed=300;
    x[0]=FrameX+2;
    y[0]=FrameY+FrameH/2;
    for(i=1;i<length;i++)
    {
        x[i]=x[i-1]+2;
        y[i]=y[i-1];
    }

}
void Snake::display()
{
    int i;
    for(i=1;i<length-1;i++)
    {
        gotoxy(x[i],y[i]);
        printf("◎");
    }
    gotoxy(x[0],y[0]);
    printf("○");
    gotoxy(x[length-1],y[length-1]);
    printf("●");
}
void Snake::move()
{
    int i;
    gotoxy(x[0],y[0]);
    printf("  ");
    for(i=0;i<length-1;i++)
    {
        x[i]=x[i+1];
        y[i]=y[i+1];
    }
    x[length-1]=x[length-1]+2;
}
void Snake::wall()
{
    if(x[length-1]==FrameX+FrameW-2)
        x[length-1]=FrameX+2;
}
void gotoxy(int x,int y)
{
   HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);//保存标准输出环境句柄
   COORD p;//COORD是一个坐标类,里面是横坐标和纵坐标
   p.X=x;
   p.Y=y;
   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);//设置光标位置
}
void print_frome()
{
    int i;
    gotoxy(FrameX+FrameW+5,FrameY);//右边的文字
    printf(" level: ");
    gotoxy(FrameX+FrameW+5,FrameY+2);
    printf("count: ");
    gotoxy(FrameX+FrameW+5,FrameY+4);
    printf("length: ");
    gotoxy(FrameX+FrameW+5,FrameY+6);
    printf("speed ");
    gotoxy(FrameX,FrameY);//左边的表格
    printf("╔");
    gotoxy(FrameX+FrameW-2,FrameY);
    printf("╗");
    gotoxy(FrameX,FrameY+FrameH-1);
    printf("╚");
    gotoxy(FrameX+FrameW-2,FrameY+FrameH-1);
    printf("╝");
    for(i=2;i<FrameW-2;i=i+2)
    {
        gotoxy(FrameX+i,FrameY);
        printf("==");
        gotoxy(FrameX+i,FrameY+FrameH-1);
        printf("==");
    }
    for(i=1;i<FrameH-1;i++)
    {
        gotoxy(FrameX,FrameY+i);
        printf("‖");
        gotoxy(FrameX+FrameW-3,FrameY+i);
        printf("‖");
    }
    gotoxy(FrameX+FrameW/2-5,FrameY/2);
    printf("贪吃蛇大作战");
}

搜索更多相关主题的帖子: void int display printf for 
2017-10-21 20:49
阴阳居士
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-10-19
收藏
得分:0 
几乎没有注释,给个差
2017-10-23 08:44
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
我帮你把蛇移动控制起来。
如下修改后可用光标控制键控制移动方向,修改及增加的部分有详细注释。
程序代码:
#include <windows.h>  
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <conio.h>   //添加一个输入输出库
#define FrameX 4
#define FrameY 4
#define FrameW 40
#define FrameH 20 
void gotoxy(int x,int y);
void print_frome();
class Food
{
    private:
        int x;
        int y;
    public:
        void display();
};
class Snake
{
private:
    int x[100];
    int y[100];
    int length;
    int speed;
    int count;
    int direction;
public:
    Snake();
    void display();
    void move(int);  //增加移动方向参数
    void wall();
};
int main()
{
    Food food;
    Snake snake;
    int f=0;  //运动方向标志:0右移 1左移 2下移 3上移
    char a;
    system("Color 70");
    print_frome();
    food.display();
    while(1)
    {
        if(kbhit())   //判断击键
        {
            a=getch();
            if(a<0)
            {
                a=getch();
                if(a=='K'&&f!=0)f=1;
                if(a=='M'&&f!=1)f=0;
                if(a=='H'&&f!=2)f=3;
                if(a=='P'&&f!=3)f=2;   //用方向键控制蛇的移动方向
            }
        }

        Sleep(500);
        snake.move(f);       //移动函数增加一个方向参数
        snake.wall();
        snake.display();
    }
    return 0;
}
void Food::display()
{
    int a,b;
    srand(time(NULL));
    a=rand()%(FrameW-1)+1;
    b=rand()%(FrameH-2)+1;
    x=a+FrameX;
    y=b+FrameY;
    gotoxy(x,y);
    printf("@");//食物
}
Snake::Snake()
{
    int i;
    length=3;
    count=0;
    speed=300;
    x[0]=FrameX+2;
    y[0]=FrameY+FrameH/2;
    for(i=1;i<length;i++)
    {
        x[i]=x[i-1]+2;
        y[i]=y[i-1];
    }

}
void Snake::display()
{
    int i;
    for(i=1;i<length-1;i++)
    {
        gotoxy(x[i],y[i]);
        printf("");
    }
    gotoxy(x[0],y[0]);
    printf("");
    gotoxy(x[length-1],y[length-1]);
    printf("");
}
void Snake::move(int f)
{
    int i;
    gotoxy(x[0],y[0]);
    printf("  ");
    for(i=0;i<length-1;i++)
    {
        x[i]=x[i+1];
        y[i]=y[i+1];
    }
    if(f==0)x[length-1]=x[length-1]+2;
    if(f==1)x[length-1]=x[length-1]-2;
    if(f==2)y[length-1]=y[length-1]+1;
    if(f==3)y[length-1]=y[length-1]-1;   //根据移动参数调整移动方向
}
void Snake::wall()
{
    if(x[length-1]==FrameX+FrameW-2)
        x[length-1]=FrameX+2;
}
void gotoxy(int x,int y)
{
   HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);//保存标准输出环境句柄
   COORD p;//COORD是一个坐标类,里面是横坐标和纵坐标
   p.X=x;
   p.Y=y;
   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);//设置光标位置
}
void print_frome()
{
    int i;
    gotoxy(FrameX+FrameW+5,FrameY);//右边的文字
    printf(" level: ");
    gotoxy(FrameX+FrameW+5,FrameY+2);
    printf("count: ");
    gotoxy(FrameX+FrameW+5,FrameY+4);
    printf("length: ");
    gotoxy(FrameX+FrameW+5,FrameY+6);
    printf("speed ");
    gotoxy(FrameX,FrameY);//左边的表格
    printf("");
    gotoxy(FrameX+FrameW-2,FrameY);
    printf("");
    gotoxy(FrameX,FrameY+FrameH-1);
    printf("");
    gotoxy(FrameX+FrameW-2,FrameY+FrameH-1);
    printf("");
    for(i=2;i<FrameW-2;i=i+2)
    {
        gotoxy(FrameX+i,FrameY);
        printf("==");
        gotoxy(FrameX+i,FrameY+FrameH-1);
        printf("==");
    }
    for(i=1;i<FrameH-1;i++)
    {
        gotoxy(FrameX,FrameY+i);
        printf("");
        gotoxy(FrameX+FrameW-3,FrameY+i);
        printf("");
    }
    gotoxy(FrameX+FrameW/2-5,FrameY/2);
    printf("贪吃蛇大作战");
}

能编个毛线衣吗?
2017-10-23 10:03
快速回复:大一新生求助
数据加载中...
 
   



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

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