美文网首页
C语言/C++编程大神?简单的迷宫小游戏代码详解!

C语言/C++编程大神?简单的迷宫小游戏代码详解!

作者: 程序爱好者 | 来源:发表于2019-07-17 16:38 被阅读0次

    C语言是面向过程的,而C++是面向对象的

    C和C++的区别:

    C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

    C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

    C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

    其实C语言的话,做出来的东西,各种系统挺多的,需要的是不断地去挖掘,有人说,C语言学了不就是一些简单的语法,函数,数据结构什么的嘛,就一些知识点会了不就行了。

    在我看来这个只是大学里面需要掌握的一些,其实C语言很强大的,可以做的东西,项目挺多的,各种小游戏,管理系统什么的,所以说不要说会了那些C语言的知识点就说,C很简单很会了,其实当我们去动手做项目的时候就是一脸懵逼的,大学时候我想问问,有多少人动手去做过什么项目,或许尝试做个推箱子或者贪吃蛇有可能,但是这肯定只局限于百分之十五的大学生吧。

    简单的迷宫小游戏__C语言程序源代码详解:

    #include <stdio.h>

    #include <conio.h>

    #include <windows.h>

    #include <time.h>

    #define Height 31 //迷宫的高度,必须为奇数

    #define Width 25 //迷宫的宽度,必须为奇数

    #define Wall 1

    #define Road 0

    #define Start 2

    #define End 3

    #define Esc 5

    #define Up 1

    #define Down 2

    #define Left 3

    #define Right 4

    小编推荐一个学C语言/C++的学习裙【728483370  】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

    int map[Height+2][Width+2];

    void gotoxy(int x,int y) //移动坐标

    {

    /* typedef struct _COORD {

    SHORT X;

    SHORT Y;

    } COORD, *PCOORD; */

    COORD coord;

    coord.X=x;

    coord.Y=y;

    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );

    }

    void hidden()//隐藏光标

    {

    /* typedef void *HANDLE; */

    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    /* typedef struct _CONSOLE_CURSOR_INFO {

    DWORD  dwSize;

    BOOL  bVisible;

    } CONSOLE_CURSOR_INFO *PCONSOLE_CURSOR_INFO; */

    CONSOLE_CURSOR_INFO cci;

    GetConsoleCursorInfo(hOut,&cci);

    cci.bVisible = 0;//赋1为显示,赋0为隐藏

    SetConsoleCursorInfo(hOut,&cci);

    }

    void create(int x,int y) //随机生成迷宫

    {

    int c[4][2] = {0,1,1,0,0,-1,-1,0}; //四个方向

    int i,j,t;

    //将方向打乱

    for(i=0;i<4;i++)

    {

    j = rand()%4;

    t = c[i][0];

    c[i][0] = c[j][0];

    c[j][0] = t;

    t = c[i][1];

    c[i][1] = c[j][1];

    c[j][1] = t;

    }

    map[x][y] = Road;

    for(i = 0;i < 4;i++)

    if(map[x + 2 * c[i][0]][y + 2 * c[i][1]] == Wall)

    {

    map[x + c[i][0]][y + c[i][1]] = Road;

    create(x+ 2 * c[i][0],y + 2 * c[i][1]);

    }

    }

    int get_key() //接收按键

    {

    char c;

    while(c = getch())

    {

    if(c == 27)

    return Esc; //Esc

    if(c != -32)

    continue;

    c = getch();

    if(c == 72)

    return Up; //上

    if(c == 80)

    return Down; //下

    if(c ==75 )

    return Left; //左

    if(c == 77)

    return Right; //右

    }

    return 0;

    }

    void paint(int x,int y) //画迷宫

    {

    gotoxy(2 * y - 2,x - 1);

    switch(map[x][y])

    {

    case Start:

    printf("入");break; //画入口

    case End:

    printf("出");break; //画出口

    case Wall:

    printf("※");break; //画墙

    case Road:

    printf(" ");break; //画路

    }

    }

    void game()

    {

    int x=2,y=1; //玩家当前位置,刚开始在入口处

    int c; //用来接收按键

    while(1)

    {

    gotoxy(2 * y - 2,x - 1);

    printf("☆"); //画出玩家当前位置

    if(map[x][y] == End) //判断是否到达出口

    {

    gotoxy(30,24);

    printf("到达终点,按任意键结束");

    getch();

    break;

    }

    c = get_key();

    if(c == Esc)

    {

    gotoxy(0,24);

    break;

    }

    switch(c)

    {

    case Up: //向上走

    if(map[x-1][y] != Wall)

    {

    paint(x,y);

    x--;

    }

    break;

    case Down: //向下走

    if(map[x+1][y] != Wall)

    {

    paint(x,y);

    x++;

    }

    break;

    case Left: //向左走

    if(map[x][y-1] != Wall)

    {

    paint(x,y);

    y--;

    }

    break;

    case Right: //向右走

    if(map[x][y+1] != Wall)

    {

    paint(x,y);

    y++;

    }

    break;

    }

    }

    }

    int main()

    {

    int i,j;

    srand((unsigned)time(NULL)); //初始化随即种子

    hidden(); //隐藏光标

    for(i = 0;i <= Height + 1;i++)

    for(j = 0;j <= Width + 1;j++)

    if(i == 0 || i == Height + 1 || j == 0 || j == Width + 1) //初始化迷宫

    map[i][j] = Road;

    else

    map[i][j] = Wall;

    create(2 * (rand() % (Height / 2)+1),2 * (rand() % (Width / 2) + 1)); //从随机一个点开始生成迷宫,该点行列都为偶数

    for(i = 0;i <= Height+1;i++) //边界处理

    {

    map[i][0]=Wall;

    map[i][Width+1]=Wall;

    }

    for(j=0;j<=Width+1;j++) //边界处理

    {

    map[0][j]=Wall;

    map[Height+1][j]=Wall;

    }

    map[2][1]=Start; //给定入口

    map[Height-1][Width]=End; //给定出口

    for(i=1;i<=Height;i++)

    for(j=1;j<=Width;j++) //画出迷宫

    paint(i,j);

    game(); //开始游戏

    getch();

    return 0;

    }

    涉及到的C语言的知识点也不是很多,这个知识点里面有我自己的说法,全属个人的见解.

    这些是C/C++能做的

    服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等.

    相关文章

      网友评论

          本文标题:C语言/C++编程大神?简单的迷宫小游戏代码详解!

          本文链接:https://www.haomeiwen.com/subject/uncclctx.html