潍坊IT培训
美国上市IT培训机构

18300268127

热门课程

达内培训班:C语言/C++编程基础入门学习

  • 时间:2018-02-22
  • 发布:达内培训班
  • 来源:互联网

    C和C++的区别:
    C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
    C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”.
    C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。
    C语言/C++编程基础入门学习,第一个小项目,制作打造扫雷小游戏
    不息说写个几百行的小项目,于是我写了一个节制台的扫雷,没有想到精简完了代码才200行摆布,不外考虑到这是我精简事后的,浓缩才是精华嘛,我就发出来大师一起进修啦,看到轨范跑起来能玩,感受仍是蛮有造诣感的~哈哈
    扫雷应该属于一款公共游戏,从我初中使用计较机起头,它就被集成到了windows体系中,虽然他是这么经典,我仍是要引见一下他的弄法,然后再考虑在节制台中怎样实现它。
    C语言/C++编程基础入门学习,第一个小项目,制作打造扫雷小游戏
    1 游戏的主界面,是一个一个小方格,在小方格上单击左键,可以翻开小方格看看后面有什么。
    2 在这些小方格的背后潜匿着雷,若是不幸点中了雷,那么就GameOver了。
    2 若是点中的不是一个雷,那么就是一块空位,这个时辰会出现两种情形:
    1)用鼠标点中的空位四周八个点内有雷,那么就表示雷的个数
    2)用鼠标点中的空位四周没有雷,这个时辰就将四周的空位全数表示出来,碰着该表示数字的空位,就将数字表示出来。(细致不雅观不雅观察你会创造,数字会将空位围起来,这是一句废话,可是也值得想一想这是为什么)
    3 在小方格上,点击鼠标的右键,可以将一个空位标识表记标帜为雷,固然这个功能只是为了便当你记忆你之前确定是雷的地方。(还有摆布键都点,和点击右键出现?标识表记标帜,这里就不谈啦)
    4 当空位上残剩的格子数和雷的个数一样多,那么这个时辰就应该算是成功啦。
    OK~游戏流程说完了,这个时辰该谈谈若何实现了。
    1 首先必要一张舆图,一样平常情形下我们都可以用一个二维数组表示一个舆图,每一个元素代表着扫雷中的一个小方格。相应元素存储0,那么舆图上的这个位置就是空位,相应元素存储1,那么就代表这个位置就一颗雷。
    2 在节制台上服从二维数组长度和宽度,打印相应的小方块。
    3 然后就用鼠标点击那些小方块,对付节制台来讲,在黑框框的区域中是有坐标的,可以使用一些函数捕捉到你点击了屏幕的哪一个坐标。
    4 对付节制台来说,打印一个字符,有的字符横向占一个位置比如通俗的字母数字,有的字符横向占两个位置比如一些图形字符: ①②③■◆等等,这点在节制台编程的时辰要注意。
    5 当点击屏幕的时辰,获取到点击的坐标后,去二维数组中检察相应的位置是雷仍是空位,从而做相应的措置。
    1)假设点击到了雷,那么就节制游戏竣事
    2)假设点击到了空位有两种情形
    1)点击的空位四周有雷,那么就将雷的个数表示出来
    2)假设点击的空位四周没有雷,那么就使用递归的编制去探测四周的点,探测出与其相连的所有四周有雷的点。
    这个是我实现的了局:
    下面就是代码啦:
    // saolei.cpp : 界说节制台应用轨范的进口点。
    //
    #include “stdafx.h”
    #include
    #include
    #include
    #define Boom 10
    int a[10][10] = {0};
    COORD TempPos[100] ={0};
    int nSign = 0;
    /************************************
    函数名 : WriteWchar
    函数浸染: 在节制台相应的坐标上表示一串字符
    前往值 : void
    参数 : int x 横坐标
    参数 : int y 纵坐标
    参数 : char szString[] 要表示的字符串
    声名 :
    ************************************/
    void WriteWchar(int x,int y,char szString[])
    {
    HANDLE hOut= GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos = {x*2,y};
    SetConsoleCursorPosition(hOut,pos);
    printf(“%s”,szString);
    }
    /************************************
    函数名 : DrawNumber
    函数浸染: 在相应的坐标上,按照传入的数字,打印相应的数字字符
    前往值 : void
    参数 : COORD pos 要打印的位置
    参数 : int nNumber 要打印的数字
    声名 :
    ************************************/
    void DrawNumber(COORD pos,int nNumber)
    {
    switch (nNumber)
    {
    case 1:
    WriteWchar(pos.X,pos.Y,“①”);
    break;
    case 2:
    WriteWchar(pos.X,pos.Y,“②”);
    break;
    case 3:
    WriteWchar(pos.X,pos.Y,“③”);
    break;
    case 4:
    WriteWchar(pos.X,pos.Y,“④”);
    break;
    case 5:
    WriteWchar(pos.X,pos.Y,“⑤”);
    break;
    case 6:
    WriteWchar(pos.X,pos.Y,“⑥”);
    break;
    case 7:
    WriteWchar(pos.X,pos.Y,“⑦”);
    break;
    case 8:
    WriteWchar(pos.X,pos.Y,“⑧”);
    break;
    default:
    break;
    }
    }

    /************************************

山东编程培训

    函数名 : GetNumber
    函数浸染: 获取一个点的四周有几颗雷
    前往值 : int
    参数 : COORD pos 要探测的点的坐标
    声名 :
    ************************************/
    int GetNumber(COORD pos)
    {
    int nCount = 0;
    for(int i = pos.X-1;i<=pos.X+1;i++)
    for (int j = pos.Y-1;j<=pos.Y+1;j++)
    {
    if (a[j][i] == Boom)
    {
    nCount++;
    }
    }
    return nCount;
    }
    /************************************
    函数名 : Drawmap
    函数浸染: 打印一下舆图
    前往值 : void
    声名 :
    ************************************/
    void Drawmap()
    {
    for (int i =0;i<10;i++)
    {
    for (int j =0;j<10;j++)
    {
    WriteWchar(j,i,“■”);
    }
    }
    }
    /************************************
    函数名 : Init
    函数浸染: 随机生成10个地雷,然后存到数组中
    前往值 : void
    声名 :
    ************************************/
    void Init()
    {
    srand(time(NULL));
    for (int i =0;i<10;i++)
    {
    int Temp_x = rand()%10;
    int Temp_y = rand()%10;
    //断定这个地方是不是已经生成一个雷了,若是没有,赋值为雷
    if (a[Temp_x][Temp_y]!=Boom)
    {
    a[Temp_x][Temp_y] = Boom;
    }
    //若是是雷,就相称于本次生成没有产生过……
    else
    {
    i--;
    }
    }
    Drawmap();
    }
    /************************************
    函数名 : IsClose
    函数浸染: 断定是不是已经探测过的点,由于使用的8标的目的递归的探测,如许按捺频频
    前往值 : bool
    参数 : COORD posTemp
    声名 :
    ************************************/
    bool IsClose(COORD posTemp)
    {
    for (int i =0;i
    {
    if(TempPos[i].X == posTemp.X&&TempPos[i].Y == posTemp.Y)
    return true;
    }
    return false;
    }
    /************************************
    函数名 : IsKongdi
    函数浸染: 断定一个点是空位,仍是雷,若是是空位,必要做其他措置
    前往值 : void
    参数 : COORD pos
    声名 :
    ************************************/
    bool IsKongdi(COORD pos)
    {
    int nNumber = 0;
    //1 若是是雷,就直接前往一个false声名要挂了
    if (a[pos.Y][pos.X] == Boom)
    {
    return false;
    }
    //2 若是不是雷,那么就做后续措置
    else
    {
    //2.1先断定一下四周有几颗雷
    nNumber = GetNumber(pos);
    if (nNumber!=0){
    //有几颗雷,就打印这个数字
    DrawNumber(pos,nNumber);
    return true;
    }
    else
    {
    //若是没有雷,那就先画空位出来,然后向四周扩散去探测其他点
    WriteWchar(pos.X,pos.Y,“ ”);
    }
    }
    //2.2点到了空位,可是四周没有雷的情形的措置,继续去探测四周8个点
    for(int i = -1;i<=1;i++)
    for (int j = -1;j<=1;j++)
    {
    COORD posTemp = {pos.X+i,pos.Y+j};
    //是不是越界了
    if (i==0&&j==0||posTemp.X==-1||posTemp.Y==-1||posTemp.X==10||posTemp.Y==10)
    continue;
    //这个点是不是已经探测过了
    if (IsClose(posTemp))
    continue;
    //这个点没有探测过,就将其参加到数组中,然后使其在往后的探测中,存入
    TempPos[nSign++] =posTemp;
    IsKongdi(posTemp);
    }
    return true;
    }
    /************************************
    函数名 : GetMousePosition
    函数浸染: 获取鼠标点击的位置,假设没有获取到,就前往(-1,-1)
    前往值 : COORD 鼠标点击的坐标
    声名 :
    ************************************/
    COORD GetMousePosition()
    {
    HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
    INPUT_RECORD stcInput = {0};
    DWORD buffer;
    COORD pos = {-1,-1};
    ReadConsoleInput(hIn,&stcInput,1,&buffer);
    if (stcInput.EventType == MOUSE_EVENT)
    {
    MOUSE_EVENT_RECORD stcMouseEnent = stcInput.Event.MouseEvent;
    if (stcMouseEnent.dwButtonState ==FROM_LEFT_1ST_BUTTON_PRESSED )
    {
    pos = stcMouseEnent.dwMousePosition;
    pos.X/=2;
    }
    }
    return pos;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    Init();
    COORD pos;
    //起头游戏
    while(1)
    {
    //获取鼠标点击位置
    pos = GetMousePosition();
    if (pos.X!=-1)
    {
    //若是鼠标点击的位置被探测过了,就起头下一次轮回
    if (IsClose(pos))
    {
    continue;
    }
    TempPos[nSign++] =pos;
    bool bIskongdi = IsKongdi(pos);
    //点到雷了,就直接退出游戏了。
    if (false ==bIskongdi)
    {
    system(“cls”);
    WriteWchar(20,10,“you lose”);
    getchar();
    break;
    }
    //检测是不是赢了,赢的前提就是没有被探测的点的个数和雷的个数相称
    if (nSign ==90)
    {
    system(“cls”);
    WriteWchar(20,10,“you win”);
    }
    }
    }
    return 0;
    }
    项目不是很长,可是解释我写的还算明白,估量大师都可以看得懂,希望对付新手们有必定的辅佐,末了,感激大师的支撑!!!
    这些是C/C++能做的

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

更多山东编程培训相关资讯,请扫描下方二维码

山东编程培训

上一篇:达内培训班:C语言中运算符与表达式
下一篇:return在c语言中的用法

马上预约七天免费体验课

姓名:

电话:

Java 程序优化知识笔记-潍坊达内

学习java的人需要看的书

学习java值得看的书

怎样才能成为一名Java架构师

选择城市和中心
贵州省

广西省

海南省

达内教育

有位老师想和您聊一聊