c++语言 订阅
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。 [1]  C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。 [2] 展开全文
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。 [1]  C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。 [2]
信息
外文名
The C++ Programming Language/c plus plus
类    别
计算机程序设计语言
基本内容
类、封装、重载、继承、模版
中文名
C++语言
创始公司
贝尔实验室
创始人
Bjarne Stroustrup
C++发展历程
世界上第一种计算机高级语言是诞生于1954年的FORTRAN语言。之后出现了多种计算机高级语言。1970年,AT&T的Bell实验室的D.Ritchie和K.Thompson共同发明了C语言。研制C语言的初衷是用它编写UNIX系统程序,因此,它实际上是UNIX的“副产品”。它充分结合了汇编语言和高级语言的优点,高效而灵活,又容易移植。1971年,瑞士联邦技术学院N.Wirth教授发明了Pascal语言。Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。20世纪70年代中期,Bjarne Stroustrup在剑桥大学计算机中心工作。他使用过Simula和ALGOL,接触过C。他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,是Bjarne Stroustrup的初衷。以C为背景,以Simula思想为基础,正好符合他的设想。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作。1983年该语言被正式命名为C++。自从C++被发明以来,它经历了3次主要的修订,每一次修订都为C++增加了新的特征并作了一些修改。第一次修订是在1985年,第二次修订是在1990年,而第三次修订发生在c++的标准化过程中。在20世纪90年代早期,人们开始为C++建立一个标准,并成立了一个ANSI和ISO(Intemational Standards Organization)国际标准化组织的联合标准化委员会。该委员会在1994年1月25曰提出了第一个标准化草案。在这个草案中,委员会在保持Stroustrup最初定义的所有特征的同时,还增加了一些新的特征。在完成C++标准化的第一个草案后不久,发生了一件事情使得C++标准被极大地扩展了:Alexander stepanov创建了标准模板库(Standard Template Library,STL)。STL不仅功能强大,同时非常优雅,然而,它也是非常庞大的。在通过了第一个草案之后,委员会投票并通过了将STL包含到C++标准中的提议。STL对C++的扩展超出了C++的最初定义范围。虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。委员会于1997年11月14日通过了该标准的最终草案,1998年,C++的ANSI/IS0标准被投入使用。通常,这个版本的C++被认为是标准C++。所有的主流C++编译器都支持这个版本的C++,包括微软的Visual C++和Borland公司的C++Builder。 [3-6] 
收起全文
精华内容
下载资源
问答
  • C++语言基础视频教程

    万人学习 2015-03-01 10:55:47
    C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门...
  • 《信息学竞赛-C/C++入门》 C++语言

    千人学习 2019-01-28 12:52:58
    尹成老师带你步入C++语言基础的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以C++语言为核心,完整精彩的演练了C++语言操作流程以及各种精彩的小项目等,提高竞赛能力,非常适合同学们学习!
  • C++程序设计【一】之 C++ 语言简介

    千次阅读 多人点赞 2020-12-25 19:29:56
    与C语言相比,C++语言的优点2.基本的输入 / 输出3.头文件和命名空间4.强制类型转换运算符5.函数参数的默认值6.引用和函数参数的传递7.const 与指针共同使用8.内联函数9.函数的重载10.指针和动态内存分配11.用string...

    感谢内容提供者:金牛区吴迪软件开发工作室

    第一章:C++ 语言简介

    一、C++ 语言的发展简史

    在这里插入图片描述

    二、C++ 语言的特点

    在这里插入图片描述

    1.与C语言相比,C++语言的优点

    在这里插入图片描述

    2.基本的输入 / 输出

    在这里插入图片描述
    在这里插入图片描述

    额外记住的知识点:
    a 对应的 ASC码 97
    A 对应的 ASC码 65

    3.头文件和命名空间

    在这里插入图片描述
    在这里插入图片描述

    4.强制类型转换运算符

    在这里插入图片描述
    在这里插入图片描述

    5.函数参数的默认值

    在这里插入图片描述

    6.引用和函数参数的传递

    在这里插入图片描述
    在这里插入图片描述

    7.const 与指针共同使用

    在这里插入图片描述

    8.内联函数

    在这里插入图片描述

    9.函数的重载

    在这里插入图片描述

    在这里插入图片描述

    10.指针和动态内存分配

    在这里插入图片描述
    在这里插入图片描述

    11.用string对象处理字符串

    在这里插入图片描述
    求数组长度:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string citys[] = {"a", "bb", "ccc", "dddd"};
        cout << "cityArr: " << sizeof(citys) / sizeof(string) << endl; // 求数组长度
        return 0;
    }
    

    三、C++ 语言的程序结构

    在这里插入图片描述

    下一篇:C++程序设计【二】之面向对象的基本概念

    展开全文
  • 语言C++之简单C++语言介绍

    万次阅读 2018-08-07 21:20:40
    首先让我们先了解一下C++语言  信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查选手的智力和使用计算机解题的能力,选手首先应针对竞赛题目的要求构建数学模型,进而构造出计算机可以接受的算法,之后编写...

    这些只是本蒟蒻的一些见解,还望各位神犇积极评论提出宝贵意见,万分感谢!!!!!!!!!!

    第一篇啊,给点关注和赞吧,以后会写更多的!!!!!!!!!!!!!!!!!!!!!!!!!

    首先让我们先了解一下C++语言

         信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查选手的智力和使用计算机解题的能力,选手首先应针对竞赛题目的要求构建数学模型,进而构造出计算机可以接受的算法,之后编写出计算机能够执行的程序。程序设计是信息学竞赛的基本功,选手参与竞赛活动的第一步是熟练掌握一门程序设计语言,目前竞赛中允许使用的程序设计语言有C语言、C++语言、Pascal。

       C++由美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“C with Classes”带类的C)。开始,C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。

       今天C++已成为世界主流编程语言之一。

    接下来介绍一下编程所需要的工具

     

     

    现附上一道例题

    已知一位小朋友的电影票价是10元,计算x位小朋友的总票价是多少?

    我们先来理清一下题意: 假设总票价用y来表示,那么这道题就是简单的乘法,单价*票数=总票数

    则这个问题可以用以下几个步骤来实现:

      ①输入小朋友的数目x;

      ②用公式y=10*x计算总票价;

      ③输出总票价y的值。

     

    在书写代码之前,我们要先了解一下C++语言的书写方法

    1.先写该程序所需用到的头文件(模板格式:#include<所需头文件>)

    2.using namespace std;(任何语句后面都需要加分号)

    3.函数名称(模板格式:类型名 函数名(){函数内容}

    4.赋值模板格式:类型名 变量名或类型名 变量名=所需赋的值

    5.输入所需输入变量名模板格式:cin>>所需输入变量名

    6.输出模板格式:cout<<所需输入变量名或“所需要直接输出的内容”,后可加换行符endl

    7.恢复原始状态模板格式:return 0)

    代码如下:

    #include<iostream>               //使用cin,cout,须调用iostream库,这是C++基本库,头文件,正文出现的函数都有相应的函数,main函数调用iostream库
    using namespace std;//C++语言必加
    int main(){//main后面跟了一对圆括号( ),表示它是一个函数。C++中所有函数都跟有一对圆括号( ),括号中可以有一些输入参数。注意,圆括号中即使什么都没有也不能省略。如例题中显示,主函数main()中的内容,由一对花括号{ }括起来。 
        int x,y;                                //定义整型变量,如同方程设参
        cout<<"Input x=";               //输入提示,把引号之间的字符
    串送到标准的输出设备(屏幕)上。
        cin>>x;                          //小朋友的人数,输入参数的值
        y=10*x;                       //计算总票价,给y赋值
        cout<<"total="<<y<<endl;  //输出总票价,没有引号则直接输出该变量的值,endl为换行
        return 0;                             //结束程序,可加可不加,但比赛最好加
    }

    另外再讲一下保留小数的语句

    记住小数是浮点型,所以要用double或float

    与这个小数接触到的变量也必须是浮点型的,例如,double s=1.0*w;(其中1.0是浮点型,w也是)

    需要用到头文件<iomanip>

    cout<<fixed<<setprecision(需要保留的小数位数)<<所需保留位数的小数;

    接下来给大家推荐几道题

    https://www.luogu.org/problemnew/show/P1001

    https://www.luogu.org/problemnew/show/P1421

    http://oj.jzxx.net/problem.php?id=1009

    http://oj.jzxx.net/problem.php?id=2284

    http://oj.jzxx.net/problem.php?id=1008

    展开全文
  • 总目录详见:... 信息学奥赛一本通(C++版) 第一部分 C++语言 第一章 C++语言入门 http://ybt.ssoier.cn:8088/ //1000 入门测试题目 #include &lt;stdio.h&gt; int main(){  int a,b;  ...

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716

    信息学奥赛一本通(C++版)  第一部分 C++语言   第一章 C++语言入门

    http://ybt.ssoier.cn:8088/

    //1000 入门测试题目
    #include <stdio.h>
    int main(){
        int a,b;
        scanf("%d%d",&a,&b);
        printf("%d\n",a+b);
        return 0;
    }

     

    //1001 Hello,World!
    #include <stdio.h>
    int main(){
        printf("Hello,World!");
        return 0;
    }
     

    //1002 输出第二个整数
    #include <stdio.h>
    int main(){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        printf("%d",b);
        return 0;
    }

     

    //1003 对齐输出
    #include <stdio.h>
    int main(){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        printf("%8d %8d %8d",a,b,c);
        return 0;
    }

     

    //1004 字符三角形
    #include <stdio.h>
    int main(){
        char s[2];
        scanf("%s",s);
        printf("  %c  \n %c%c%c \n%c%c%c%c%c",s[0],s[0],s[0],s[0],s[0],s[0],s[0],s[0],s[0]);
        return 0;
    }

    //1005 地球人口承载力估计
    //基本思路,每年的再生资源刚好被消耗,现有资源不消耗,才能可持续发展
    //c+d*a=x*a
    //c+d*b=y*b
    //d*(b-a)=y*b-x*a
    //d=(y*b-x*a)/(b-a)
    #include <stdio.h>
    int main(){
        int x,a,y,b;
        scanf("%d%d%d%d",&x,&a,&y,&b);
        printf("%.2f",(y*b-x*a)*1.0/(b-a));
        return 0;
    }

    2017-10-19 20:46 AC该章节

     

    展开全文
  • C++语言实现贪吃蛇游戏

    万次阅读 多人点赞 2017-11-16 21:34:12
    C++语言写游戏再适合不过了,当然不是因为用它写起来简单,(相反那并不简单),但是其性能绝对是其他语言没法比的。所以这里我会用C++实现一个贪吃蛇的游戏。当然我可能有意隐瞒了你,因为我们不仅仅是用C++纯...

    最近更了个新的关于用C/C++写贪吃蛇的blog,感觉那个帮助会更大些,这篇中用DirectX技术不适合刚开始试着写游戏的同学,传送:https://blog.csdn.net/weixin_37818081/article/details/111402454

    写在前面
    用C++语言写游戏再适合不过了,当然不是因为用它写起来简单,(相反那并不简单),但是其性能绝对是其他语言没法比的。所以这里我会用C++实现一个贪吃蛇的游戏。当然我可能有意隐瞒了你,因为我们不仅仅是用C++纯语言来干这件事,那会很别扭,因为我们需要图像渲染、声音、甚至是碰撞检测(我最喜欢的一个版块)!所以仅仅用语言是不够的。
    (注:在文章最后我会给出两个版本的贪吃蛇源码及涉及到的一些资源)
    写在最前面就是为了说明我们会用其他的一些工具:DirectX(9.0)、Windows的窗口编程,这些真的没那么简单!如果你之前没听说过这些,也不要太过于担心,因为我主要是介绍贪吃蛇实现的核心逻辑,严格的说,你可以当成数据结构的知识来学,因为整条蛇是以链表为基础的!
    另外,我用纯C语言也实现过一个贪吃蛇的玩意(如果你觉得是的话),先看看游戏的运行效果:
    贪吃蛇版本1:
    这里写图片描述
    不要小瞧它!它有音乐,也有碰撞,虽然体验实在是不咋滴,不过他的游戏编写过程和游戏元素的构成还是对之后进一步编写更棒的游戏提供了十足的基础。因为他是用纯语言做的,不需要其他库等等的支持,所以很适合我们学习借鉴!

    至于第二个版本的贪吃蛇就有很大的改变,尽管还有很多地方需要改进和优化,但是他已经超越了第一个版本很多!下面看看游戏运行效果:
    贪吃蛇版本2:
    这里写图片描述
    是不是有摆脱Dos找到新大陆的感觉,他加入了新的计分模块。下面我就第二个版本的核心实现做出解释。
    版本二游戏核心代码实现
    1,蛇身的单个节点实现:

    //蛇身单个节点
    struct SNAKE {
    	bool IsSurvivor;			//当前结点是否存在(被画)
    	int coor_x;					//节点横坐标
    	int coor_y;					//节点纵坐标
    	SNAKE *link;				//指向下一个节点的指针
    	//构造函数
    	SNAKE(int x, int y, bool survivor = true,SNAKE *link = NULL) {
    		//初始化坐标值,赋值方式为tail派生
    		coor_x = x;
    		coor_y = y;
    	}
    };
    

    的确,一个十分明白的结构体,我无需做出任何解释!
    2,蛇的整个类实现(基于链表)

    //蛇精灵类定义——基于单链表实现蛇身
    class SnakeSprite {
    public:
    	SnakeSprite(int x = 300, int y = 200);
    	~SnakeSprite() { delete snakeHead; }
    	bool addTail();								//蛇尾增加长度
    	void drawThisSnake();						//绘制当前蛇身
    	void positionAction();						//完成蛇身移动(更新每个节点的坐标)
    	void turnLeft();							//蛇头的基本转向
    	void turnRight();
    	void turnUp();
    	void turnDown();
    	void recordCurrentDirection(int d = LEFT);	//记录蛇的当前运动方向,借助枚举类
    	int getDirection();
    	bool IsDeath();								//是否碰撞草丛,是蛇死亡返回true,否则返回false
    	void getCurrentPosRect(RECT &rect);
    	void getCurrentCoor(int &x, int &y);
    protected:
    	int len;									//蛇身长度_以块为单位
    	SNAKE *snakeHead;							//蛇头指针
    	SNAKE *tail;								//蛇尾指针
    	SNAKE *beforeTail;							//尾巴节点的前一个节点,方便移动
    	int directions;
    };
    

    似乎也没什么特别之处,但是有几个地方需要注意,我会在下面着重强调。
    3,部分函数实现的解释
    我想强调的就在这里,贪吃蛇整个游戏的确简单,但是真正编写的时候则需要考虑全面,因为游戏的逻辑还是特别强的。
    1》整个蛇动起来的立足点:
    我们必须记住,游戏中的蛇并不是你想象的那样在随着你的控制而‘游动’,他是电脑在以飞快的速率刷新屏幕,而你只是改变了蛇的节点坐标,而人的眼睛是存在视觉暂留的,这样就会给你一种游戏精灵在走动的效果!
    2》怎样用键盘控制蛇?

    //输入控制
    	if (Key_Down(DIK_UP) && !Key_Down(DIK_RIGHT) 
    		&& !Key_Down(DIK_LEFT) && !Key_Down(DIK_DOWN)) {
    		theSnake.turnUp();
    		if (DOWN != theSnake.getDirection()) {
    			theSnake.recordCurrentDirection(UP);
    		}
    	}
    	if (Key_Down(DIK_RIGHT) && !Key_Down(DIK_UP)
    		&& !Key_Down(DIK_LEFT) && !Key_Down(DIK_DOWN)) {
    		theSnake.turnRight();
    		if (LEFT != theSnake.getDirection()) {
    			theSnake.recordCurrentDirection(RIGHT);
    		}
    	}
    	if (Key_Down(DIK_LEFT) && !Key_Down(DIK_UP)
    		&& !Key_Down(DIK_RIGHT) && !Key_Down(DIK_DOWN)) {
    		theSnake.turnLeft();
    		if (RIGHT != theSnake.getDirection()) {
    			theSnake.recordCurrentDirection(LEFT);
    		}
    	}
    	if (Key_Down(DIK_DOWN) && !Key_Down(DIK_UP) 
    		&& !Key_Down(DIK_RIGHT) && !Key_Down(DIK_LEFT)) {
    		theSnake.turnDown();
    		if (UP != theSnake.getDirection()) {
    			theSnake.recordCurrentDirection(DOWN);
    		}
    	}
    
    //蛇类的成员函数
    void SnakeSprite::turnDown() {
    	//向下转头
    	if (directions != UP) {
    		snakeHead->coor_y += 1;
    	}
    }
    
    void SnakeSprite::turnLeft() {
    	//想左转头
    	if (directions != RIGHT) {
    		snakeHead->coor_x -= 1;
    	}
    }
    
    void SnakeSprite::turnRight() {
    	//向右转头
    	if (directions != LEFT) {
    		snakeHead->coor_x += 1;
    	}
    }
    
    void SnakeSprite::turnUp() {
    	if (directions != DOWN) {
    		snakeHead->coor_y -= 1;
    	}
    }
    

    应该是你想象的那样,我每检测到玩家按下相应的方向键,我会调用snake class的转弯的成员函数(这就是用class的好处,多么统一的代码!),然后紧接着判断玩家是否企图直接来个180°的大逆转(这在贪吃蛇游戏中是违背规则的),如果真的是这样我就在函数中不做任何处理,玩家休想达到这种阴谋!但是如果是合法的转弯(也就是90°),我会改变头结点(就是蛇的头部)的坐标变化趋势,就是代码中那样做。这样蛇就任我们控制摆布了。

    3》怎样实现蛇的移动?

    //蛇类的成员函数
    void SnakeSprite::positionAction() {
    	//实现蛇的自动运动,即依次更新每个节点内坐标的值
    	if (UP == directions) {
    		snakeHead->coor_y--;
    	}
    	if (DOWN == directions) {
    		snakeHead->coor_y++;
    	}
    	if (LEFT == directions) {
    		snakeHead->coor_x--;
    	}
    	if (RIGHT == directions) {
    		snakeHead->coor_x++;
    	}
    	SNAKE *current = snakeHead;
    	int LEN = len;
    	for (int i = 1; i < len; i ++) {
    		current = snakeHead;
    		for (int j = 1; j < LEN - 1 && len >= 3; j ++) {
    			//令current循环到指定位置
    			current = current->link;
    		}
    		current->link->coor_x = current->coor_x;
    		current->link->coor_y = current->coor_y;
    		LEN--;
    	}
    }
    
    

    这是一个相当重要的功能,因为只有可以动起来才有游戏的感觉。就是上面这个简单的函数实现了蛇的移动,他在主函数中是循环调用的,所以他的核心功能就是改变蛇头节点的坐标,让蛇头节点可以沿着当前的运动方向一直移动下去。你也许会问,那蛇的身子是怎么跟着蛇头运动的呢?那就是函数中最后的一个双重循环,内层循环会通过一个指针沿着蛇身链表找到蛇的尾巴的前一个节点,然后把此节点内的坐标值给尾巴节点,这样就实现了尾巴‘跟着动’的效果。第二次进入后内层循环会找到蛇尾巴前一个节点的前一个节点,然后把他的坐标给了尾巴的前一个节点,这样倒数第二个节点也跟上了!之后便一直重复上述循环,其实就是在用每个节点的坐标来刷新其后一个节点的坐标,这样不就让每一段蛇身都与蛇头形影不离了吗!如果还是感觉理解上有困难,可以看看下面的模拟图:
    这里写图片描述
    这里应该十分注意赋值的顺序!,我为何要‘多此一举’地用循环先找到倒数第二个节点,而不是直接从头部开始,因为那样会让蛇的坐标提前丢失,导致我们没法把真正有效的坐标值更新到对应的节点中,从而只看到蛇头在移动!不信?你可以在本子上比划比划。
    4》蛇的死亡碰撞事件检测!

    bool SnakeSprite::IsDeath() {
    	//判断是否超出规定范围 67<x<468/87<y<470
    	if (snakeHead->coor_x > 67 && snakeHead->coor_x < 460
    		&& snakeHead->coor_y > 87 && snakeHead->coor_y < 470) {
    		return false;
    	}
    	else {
    		return true;
    	}
    }
    

    嗯,这取决于你在屏幕上蛇的移动场地面积的尺寸,当检测的某个方向的坐标超过了对应方向上的场地长度,那就GAMEOVER吧!

    食物类的实现代码:

    //FOOD CLASS
    class Food {
    protected:
    	int coor_x;				//食物出现的横坐标
    	int coor_y;				//纵坐标
    public:
    	Food(int x = 100, int y = 100);
    	bool drawThisFood(bool &again);				//绘制当前食物
    	bool checkFoodPosition();					//检查当前食物出现的位置是否合法(即不能与蛇体重合)
    	void getRandCoor(int & x, int & y);			//食物的随机坐标生成
    };
    
    //APPLE CLASS
    class Apple : public Food {	//苹果是Food的一种
    private:
    	int color;				//扩展功能,标定当前Apple的颜色
    public:
    	bool beenCollision(RECT snakeRect); //检测apple是否被碰撞到,是返回true否则返回false
    	void getCurrentPosRect(RECT &rect);			//得到当前的位置矩形
    	//bool beenCollision2(int x, int y);
    };
    
    Food::Food(int x, int y) : coor_x(x), coor_y(y)
    {}
    
    void Apple::getCurrentPosRect(RECT &rect) {
    	RECT currentRect = {coor_x, coor_y, coor_x + 19, coor_y + 22};
    	rect = currentRect;
    }
    
    bool Apple::beenCollision(RECT snakeRect) {
    	RECT rect_apple, rect;
    	getCurrentPosRect(rect_apple);
    	if (IntersectRect(&rect, &rect_apple, &snakeRect)) {
    		return true;
    	}
    	else {
    		return false;
    	}
    }
    
    bool Food::drawThisFood(bool &again) {
    	//绘制当前食物到屏幕
    	int posX , posY ;
    	if (again) {
    		getRandCoor(posX, posY);
    		again = false;
    	}
    	
    	RECT rectApple = { 0, 0, 19, 22 };
    	D3DXVECTOR3 position(coor_x, coor_y, 0);
    	D3DCOLOR red = D3DCOLOR_XRGB(255, 255, 255);
    	spriteoj->Draw(apple, &rectApple, NULL, &position, red);
    
    	return true;
    }
    
    void Food::getRandCoor(int & x, int & y) {
    	//指定范围内的随机函数生成器
    	srand((unsigned)time(NULL));		//随机种子,以系统时间作为基数
    	x = foodAllowPosX + (rand() % 350);
    	y = foodAllowPosY + (rand() % 330);
    	coor_x = x;
    	coor_y = y;
    }
    
    bool Food::checkFoodPosition() {
    	//检查食物位置的合法性
    	return true;
    }
    

    这里我用FOOD作为基类,然后用APPLE来继承它,这主要是想在以后扩展这个游戏的时候加入一些新的玩法,让每种不同的食物都有自己各自属性和反应事件。
    5》食物的随机位置产生

    void Food::getRandCoor(int & x, int & y) {
    	//指定范围内的随机函数生成器
    	srand((unsigned)time(NULL));		//随机种子,以系统时间作为基数
    	x = foodAllowPosX + (rand() % 350);
    	y = foodAllowPosY + (rand() % 330);
    	coor_x = x;
    	coor_y = y;
    }
    

    这个成员函数用了随机数生成器来产生指定区间内的坐标,并把这个坐标当做食物出现的坐标。因为屏幕是在无休止刷新的,所以食物的擦除就不劳我们费心了。
    6》其他
    我在这里只是调了一些关键的地方作了阐述。其他还有琐碎的地方都需要一块块完善,但是都相对简单。至于将蛇绘制到屏幕上,这是件麻烦事!我不能展开讲,我的水平也不敢讲,但是这真的会令你沮丧,如果你只是看某些实现逻辑而其他的可以自己搞定,那么上面的解释还是挺有帮助的;如果你是个新手,那就会觉得知道逻辑和流程却无法把他们绘制到屏幕上,似乎是本我狠狠的放了鸽子。
    也许不必那么沮丧!因为我讲了你也未必能懂(哈哈),你有其他途径可以实现自己的贪吃蛇游戏:
    (1)实现纯语言版本的,没错,就是在那个黑黑的Dos框里的,因为他的实现相对简单,关键是他避免了图形渲染和Windows的窗口创建!这真的是一个不错的入门Demo。你还可以在网上找一些关于他的代码来提高自己的开发效率,如果你仍然感觉逻辑上有困难,那么我也会尽快整理出他的写作思路~
    (2)学习一些图形渲染的库和工具(如DirectX),抑或是一些简单的游戏引擎,如果那样的话,你真的会瞧不起我做的这个贪吃蛇。再不就看看我提供的两套源码吧!

    4,不足之处
    上面的代码尽管解决了一些核心的游戏逻辑,但是依然存在不足。计分系统由于食物出现的位置不当而暴增、食物万一出现在蛇身上怎么办?而我在食物位置的合法性检查上只是返回了个字面量true!希望我们一块交流和改进。

    5,资源链接
    说明:你休想直接复制粘贴上面的代码块来放在编译器里运行它,并且天真的等待游戏画面的出现,因为我早说过这些需要相应工具的支持!你甚至不能运行起版本2的EXE程序,因为可能需要DirectX的游戏环境,而恰好你的机器上没有!但是版本1的贪吃蛇是可以运行起来的,源码也是可以编译的(如果你的编译器正常的话!),因为他真的是用纯语言做的,当然性能也会有不足。
    贪吃蛇版本一资源链接:http://pan.baidu.com/s/1c2EUVc8 密码:na6m
    贪吃蛇版本二资源链接:http://pan.baidu.com/s/1hsb7k92 密码:6sbg

    公众号:Dawo

    6,版权声明
    游戏中的音乐、图片、图标等资源均来源于网络,仅供学习之用。
    借鉴数目:《游戏编程入门》、《Windows游戏编程大师技巧》

    最后谢谢大家可以看我分享的一些经验,这些都是在项目过程中遇到的麻烦,希望大家可以收获到一些知识,少走点弯路!

    展开全文
  • C++语言学习思维导图

    千次阅读 2019-06-27 10:34:35
    C++语言学习思维导图
  • c++语言的特点

    万次阅读 2019-04-12 15:21:35
    C++语言是在C语言的基础上发展而来,同时它又支持面向对象的程序设计,它主要具有以下特点: 1.继承自C语言的优点:语言简洁、紧凑,使用方便、灵活;拥有丰富的运算符;生成的目标代码质量高,程序执行效率高;可...
  • C语言与C++语言相互调用

    万次阅读 热门讨论 2018-10-17 15:02:47
    C语言与C++语言相互调用 1 C++调用C中的函数 1.1 C++调用C中的函数(正确使用) 1、案例源文件组成 ...
  • MySQL数据库编程(C++语言

    万次阅读 2019-08-21 17:17:10
    本文主要介绍使用C++语言连接和操作 MySQL 数据库的方法。 1. 准备 本文利用 MySQL++ 接口进行C++语言的数据库编程。 MySQL++ 的官网定义如下: MySQL++ is a C++ wrapper for MySQL’s C API. It is built ...
  • C++语言的主要特点和优点

    千次阅读 2019-08-12 15:40:37
    C++语言有哪些主要特点和优点 1、C++语言的特点 C++语言的的主要特点表现在两个方面,一是尽量兼容C,二是支持面向对象的方法 2、C++语言的优点 语言简洁灵活 运算符和数据结构丰富 具有结构化控制语句 ...
  • Java语言与C++语言的差异总结

    千次阅读 多人点赞 2014-01-20 09:30:09
    Java的设计者曾说过,设计这门语言的灵感...通过这些对比,我们能够了解到Java语言相对于C++语言有哪些改进,能带给我们哪些进步,这样对于更加深入理解这两种语言是大有裨益的。   下面我总结一下Java语言与C++语言
  • C++语言基础 —— C++语言入门

    千次阅读 2019-06-14 17:06:47
    Hello,World!(信息学奥赛一本通-T1001):点击这里 输出第二个整数(信息学奥赛一本通-T1002):点击这里 对齐输出(信息学奥赛一本通-T1003):点击这里 字符三角形(信息学奥赛一本通-T1004):点击这里 ...
  • 带你征服C++语言,让所有学过和没有学过C++语言的人,或是正准备学习C++语言的人,找到学习C++语言的不二法门。   C++学习教程介绍   c++学到什么程度可以找工作   C++学习视频教程课程目录 &...
  • C++语言基础到进阶

    万人学习 2018-08-20 12:39:04
    《从c语言入门到c++使用高手》套餐地址链接:https://edu.csdn.net/combo/detail/1046 《从C语言入门到c++网络通讯架构师》套餐地址链接:https://edu.csdn.net/combo/detail/1165  
  • 小白 C++语言 入门学习指引

    千次阅读 2019-12-08 16:58:17
    C++语言是当今应用最广泛的面向对象程序设计的语言,它包括C的全部特征、属性和优点。C++被认为是一种中级语言,它综合了高级语言和低级语言的特点,吸引了许许多多的编程学习者。 C++是一门运用很广泛的计算机编程...
  • C++语言(一)——C++简介

    千次阅读 2017-03-26 12:45:09
    C++语言(一)——C++简介一、C++简介 C语言作是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言并不合适。为了解决软件危机, 20世纪80年代, ...
  • substr(C++语言函数)

    万次阅读 2018-08-24 17:24:35
    substr(C++语言函数) basic_string substr(size_type _Off = 0,size_type _Count = npos) const; substr是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度_...
  • Emacs 欣赏 c++语言

    千次阅读 2012-09-22 10:58:24
    下面是我的几张Emacs配置后的效果图----针对C++语言的  我的配置脚本文件
  • 本书历经20余年,6次改版,以求完全匹配C++标准的变化发展情况,并最终成为C++语言学习的理想图书。截至当前,中文版累计销量已经突破50万册,众多新手通过自学,已经成长为各大技术公司的中坚力量。本书无论是技术...
  • 如何学好C++语言

    千次阅读 2013-01-02 22:42:41
    如何学好C++语言 昨天写了一篇如何学好C语言,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家有用。首先,因为如何学好C语言中谈到了算法和系统,所以这里就只谈C++语言。 ·...
  • Algorithm:C++语言实现之贪心法算法相关问题 目录 一、贪心法 一、贪心法 1、LIS的算法分析
  • C语言/C++语言培训视频教程 C语言/C++语言培训视频教程 C语言/C++语言培训视频教程 下载地址:百度网盘
  • Visual C++2010的c++语言四大新特性

    千次阅读 热门讨论 2010-03-11 03:05:00
    微软即将在2010年4月12日发布VS2010的正式版,对于c++语言做了修改,使之更加符合c++标准。下面对于微软对于c++语言的修改做一下分析!Lambda表达式 很多编程编程语言都支持匿名函数(anonymous function)。所谓匿名...
  • c++语言编写学生信息管理系统![图片](https://img-ask.csdn.net/upload/201506/30/1435657118_432311.jpg)
  • C++语言的主要应用领域

    千次阅读 2013-05-03 17:19:03
    对第一次接触到C++语言的用户和学者来说,了解C++语言的概念是非常重要的,那么就先说一下什么是C++语言,所谓C++语言:是一种使用非常广泛的计算机编程语言。。。   在介绍C++语言的主要应用领域之前,可以先...
  • 信息学奥赛一本通C++语言——1001:Hello,World! 信息学奥赛一本通C++语言——1002:输出第二个整数 信息学奥赛一本通C++语言——1003:对齐输出 信息学奥赛一本通C++语言——1004:字符三角形 信息学奥赛一本通C++...
  • 简单的C++程序 c++语言的输入和输出(基本数据类型)
  • C++语言文法(C++ Language Grammer) 真正的C++语言是用文法加规范说明描述的。 学习文法也很重要,当有些程序代码的风格耐人寻味的时候,参看C++语法就能迎刃而解。在深度理解和参研C++语言时,其语法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 152,715
精华内容 61,086
关键字:

c++语言

c++ 订阅