小故事:
接着上节,然后我C语言学不会,却偶然接触到了war3的地图编辑器。然后疯狂的沉迷其中。我第一次感受到了做游戏的快乐。虽然那时候我也没完整做出过一张地图,我一直在做各种绚丽的技能(当时是用的一个war3地图编辑器里叫做触发编辑器的东西做的)。在玩这个编辑器的过程中,我学会了很多比较现代的游戏编程的概念。比如说,触发器、面向对象等等东西(这些概念当时我是不晓得的,后来才晓得)。在学习这个编辑器的过程中,我还学会了很多编程的基础概念,比如变量、数据类型、函数体、判断语句、循环体、递归、栈、树等等一系列东西。(没错,那时我还不会c/c++。。。。)很神奇的是在用那种比较上层的编辑器时,却学会基本别人学c++学了好久才会接触的东西。因为是直接面向游戏编程,所以学习到的算法基本都是为游戏服务的。这更为我以后学其它语言打好了基础。
那么,以上我提到的那些编程的基础概念。也就是我在这章和下章要讲的。
没错,我只讲两章。包括C++的基本语法,我也只一笔带过。详细的请自学<<C++ primer>>
本章概要
1.C++数据类型
2.C++标准输入输出流
3.C++判断语句
4.C++数组
5.C++循环语句
6.C++函数与递归
一.C++数据类型
下面讲的速度会很快。详细请自学<<C++Primer>>
C++数据类型(常用数据类型)
1.bool 布尔型
2.int 整型
3.float 单精度浮点型
4.double 双精度浮点型
5.char 字符型
1.bool布尔型就是true和flase中的一个,一种逻辑符号,代表了(true)真和假(flase)
2.int 整型,就是整数。int fuk = 3.141592653;这样定义一个整型。编译之后编译器会自动省略后面的小数位只取3(并没有四舍五入什么的)
3.float / double 实数型,最常用的类型。用来表示一个实数(数学意义上的实数,可以理解成带小数的数字类型),至于c++为啥要分int 和float,基本是因为以前的cpu计算float很慢,为了效率就做了两个类型分别处理。而现在的CPU对浮点型做了优化,基本不会去考虑它会给你带来什么效率低下的问题,在某些cpu上处理浮点型甚至比整形还快。
4.char 字符型,实际上也是个整形。详见ASCII码表
http://www.360doc.com/content/11/1208/05/1258863_170546100.shtml
基本就是一个整数代表了一个字符。
下面是使用示例
#include <iostream>
using namespace std;
int main()
{
{
int a = 10,b = 222.321321321; //整形不带小数
int c = (a + b)*a-20/10;
cout<<c;
cout<<"整形四则运算"<<endl; //endl是标准输出流结尾
}//分割语句块防止变量重命名
{
int a = 10,b = 3.141592653; //浮点型带小数
int c = a*3
cout<<"浮点型四则运算"<<endl;
}
{
char a = 'A;
int b = 65
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"b="<<(char)b<<endl;//这里是强制转换把整形强制转换成字符型,让计算机认识
//整形也可以转换成字符型
}
return 0;
}
直接去运行下看看结果找找规律就懂了
二.C++标准输入输出流
先只讲两个
cout 和 cin
cout是输出流
cin是输入流
具体用法
#include <iostream>
#include <string> //加载string库
using namespace std;
int main()
{
cout<<"haha"<<"nidaye"<<"good"<<endl;
cout<<1+2+3+4+5+6+7<<endl;
cout<<"1*2-3+4"<<1*2-3+4<<endl;
int a = 0;
cin>>a;
cout<<a<<endl;
string fuk;
cin>>fuck;
cout<<fuck<<endl;
return 0;
}
依旧是自己去运行一下。然后看结果吧。
<<这个符号 有两个意思,一个是重载输出流运算符,一个是移位运算(这个知识点就不讲了,大多数书里都有写)
三.判断语句
语句的原意基本就是:如果...就..否则
自然语言描述一下就是 if xxx then dosth else dosth
当xx事情发生时,就干啥干啥,否则就干啥干啥
而用C++语法来书写就是
if(某个表达式为真)
{
//就干些啥
}
else //否则
{
//就干些啥
}
写个最基本的例子
#include <iostream>
#include <string> //加载string库
using namespace std;
int main()
{
if(1<2)
{
cout<<"1<2 yes"<<endl;
}
else
{
cout<<"1<2 no"<<endl;
}
return 0;
}
else 因为1<2永远为真
所以else里面的东西永远不会执行
以下例子用了上面教的东西
实际例子:
#include <iostream>
#include <string> //加载string库
using namespace std;
int main()
{
int a = 0;
cin>>a;
if (a > 5)
{
cout<<a<<">5";
}
else
{
cout<<a<<"<5";
}
return 0;
}
当然如果else里面没有事情要干的话,可以直接省略
类似于这样
if(xxx)
{
}
还可以这样
if(xxx)
...
else
...
不过只允许一个表达式
四.C++数组
数组就是一个集合。
具体表示方法如下
int a[10] 定义一个可以容纳十个整形的数组
float b[20] 定义一个可以容纳二十个浮点型的数组
具体格式也就是
类型 变量名 [数组可容纳的个数]
因为一些历史原因C/C++的数组下表是从0开始的
什么叫做下表就是[]这两括号里面的数字叫做下标
a[9] = 10; 9就是数组a的下标
那么下面写点实际代码自己切身体会下数组吧
#include <iostream>
#include <string> //加载string库
using namespace std;
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9};
cout<<a[0]<<endl;
cout<<a[9]<<endl;//注意没有10因为下标是从0开始的
string hehe[10] = {"a","b","c","d","e","f","g","h","i","j"}
cout<<hehe[0]<<endl;
cout<<hehe[9]<<endl;
return 0;
}
五.C++的循环语句
循环语句就是,循环执行一个代码块
C语言里有三种循环语法
第一种是
while(...)
{
}
第二种是
do
{
}
while(...)
第三种是
for(...;...;...)
{
}
实际代码
#include <iostream>
#include <string> //加载string库
using namespace std;
int main()
{
while(1)//当括号内为假就跳出,为真就执行,非零为真零为假。
{
cout<<"gen beng ting bu xia lai"<<endl;
}
return 0;
}
#include <iostream>
#include <string> //加载string库
using namespace std;
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10}
for(int i = 0;i<10;i++)//i++ 相当于 i=i+1
{
cout<<a[i]<<endl;
}
return 0;
}
dowhile 就不演示了,自己一下就琢磨出来了
六.C++函数
函数这东西在数学里就是一个集合到另一个集合的映射
在C++里其实也差不多。
比如定义一个
f(x) = 1+x
y = f(10)
Y就=11了
这个在高中里就学过了。
在c++里表达方式也差不多
具体格式为
返回值类型 函数名 (形参)
{
}
形参就是接受外部输入的参数
函数示例
#include <iostream>
#include <string> //加载string库
using namespace std;
int add(int a,int b)
{
return a+b;//返回a+b的值
}
int main()
{
cout<<add(1,2)<<endl;
return 0;
}
在数学里函数还可以递归
也就是
f(x) = f(x)+1 | x < 10
在C++里可以这么表示
#include <iostream>
#include <string> //加载string库
using namespace std;
int f(int x)
{
if(x > 10)
return 1;
x = x + 1;
}
int main()
{
cout<<f(1)<<endl;
return 0;
}
基本比较简单的语法讲完了。如果想要真正了解c++
请自主翻阅<<C++ Primer>>
结尾:
考虑了很久,语法章到底要不要写。
个人觉得,写,一定要写。但是我不会写的很全。
更重要的是,读者要有自己的自学能力,书籍我已经一而再再而三的推荐过了。
大概语法会有两章,一张是面向过程的。也就是这章。
还有一章是面向对象的,也就是下一章。
至于c++的各种奇葩特性,什么迭代器啊,STL啊。我就不多做阐述了。
在下下章会直接切入正题,用我以前写过的一个简单的2d游戏引擎来制作游戏。
(至于为什么不用cocos2dx什么的,后面大家会知道的,我打算教大家怎么制作这个简单的2d游戏引擎)