读《游戏编程指南》

简介: 趁着空闲读彭博的《游戏编程指南》。 一、语言 1、定义多维数组 int **p;p = new int*[40];for(int i = 0; i < 40; ++i) p[i] = new int [60]; // 为p数组中的每一指针分配内存 2、定义字符串 char* str = "alexmy"; // "alexmy"是在常量区,无需手动释放

趁着空闲读彭博的《游戏编程指南》。

一、语言

1、定义多维数组

int **p;
p = new int*[40];
for(int i = 0; i < 40; ++i)
	  p[i] = new int [60]; // 为p数组中的每一指针分配内存

2、定义字符串

char* str = "alexmy"; // "alexmy"是在常量区,无需手动释放
		 	

3、常用函数

int rand()								// 返回一个随机整数
void srand(int) 					// 根据参数重新初始化随机数产生器
int/float abs(int/float)  // 返回数的绝对值
min/max(a,b)							// 返回a和b中较小/大的值
int atoi(char* s)					// 返回由s字符串转换成的整数
double atof(char* s)			// 返回由s字符串转换成的浮点数

char *strcpy(char *dest, char *src);,该函数使dest=src并返回新的dest。使用它还可以实现字符串和字符数组之间的转换。
char *strncpy(char *dest, char *src, int size);,和strcpy的唯一区别是只拷贝size个字符。记得补上尾部的’/0’!
char* strcat(char *dest, char *src);,将src连接到dest的后面,并返回新的dest。
char* strstr(char *s1, char *s2);,返回指向s2在s1中第一次出现的位置的指针。
char* strchr(char *s1, char c);,返回指向c在s1中第一次出现的位置的指针。
char* strlwr(char *s);,将s中的所有大写字母转为小写。
char* strset(char *s, char c);,将s内所有字符替换为字符c。
int strcmp(const char*s1, const char* s2);,判断如按字典顺序s1是否在s2之前。是则返回1,否则返回-1,若两字符串相等,返回0。
int strlen(char *s);,返回字符串的长度。

4、文件读写

	#include <fstream>
	using namespace std;
	int a;
	……
	fstream file;
	file.open("abc.dat"); //使用file.open("abc.dat", ios::binary);可指定为二进制模式
	file>>a; //就像cin
	file<<"abcdefg"; //就像cout
	……
	file.close(); //关闭文件

二、内嵌汇编

1、处理器大部分指令不能直接施用在内存中的变量上,需要借助寄存器这个中间存储单元(可以看成是一个变量),Pentium级处理器有八个32位的通用寄存器。

分别为:EAX,EBX,ECX,EDX,EBP,ESP,EDI,ESI,每一个通用寄存器的低16位又分别被称为AX,BX,CX,DX,BP,SP,DI,SI。其中AX,BX,CX,DX的高8位称为AH,BH,CH,

DH,低8位被称为AL,BL,CL,DL,注意内嵌汇编中不应施用EBP,ESP他们存储着重要的堆栈信息。

还有一个非常重要的寄存器,叫做标志寄存器(EFLAGS),标注了运算结果的各个属性,不恩能够直接读取或修改它。这些属性有:不溢出/溢出(OF),正/负(SF),

非零/零(ZF),偶/奇(PF),不进位/进位(CF)

2、实例:两个正整数相加

void main()
	{
		int a = 1, b = 2;
		int* c = &a;
		_asm		// 开始内嵌汇编
		{
			mov eax,c;
			mov eax,[eax];
			mov ebx,b;
			lea eax,[eax+ebx];
			mov a,eax;
		}			 	// 内嵌汇编结束
	}
JMP				无条件转移                          
	JE / JZ				ZF=1时转移
	JNE / JNZ			ZF=0时转移

JS					SF=1时转移
JNS					SF=0时转移		
JO					OF=1时转移
JNO 				OF=0时转移
JP / JPE			PF=1时转移
JNP / JPO 			PF=0时转移

根据两无符号数关系转移:
	JA / JNBE			大于时转移 (CF或ZF=0)
	JBE / JNA			不大于时转移 (CF或ZF=1)
	JB / JNAE / JC		小于时转移 (CF=1)
	JNB / JAE / JNC 	不小于时转移 (CF=0)

根据两有符号数关系转移:
JNLE / JG			大于时转移 ((SF异或OF)或ZF)=0 )
JLE / JNG			不大于时转移 ((SF异或OF)或ZF)=1 )
JL / JNGE     		小于时转移 (SF异或OF=1)
	JNL / JGE			不小于时转移 (SF异或OF=0)
	
	特殊转移语句:
	JECXZ				CX=0时转移






相关文章
|
人工智能 智能设计 算法
游戏编程之十三 3D类游戏
游戏编程之十三 3D类游戏
144 0
|
5月前
|
搜索推荐 Windows
Axure RP 9高手速成秘籍:解锁终极快捷键,设计效率飙升10倍!
Axure RP 9作为一款功能强大的原型设计工具,提供了丰富的快捷键来加速设计流程。以下是一份详尽的Axure RP 9快捷键大全,旨在帮助用户更高效地完成设计工作。
|
C语言
全网最详细用c语言实现植物大战僵尸游戏(下)-1
全网最详细用c语言实现植物大战僵尸游戏(下)
251 0
|
Python
Python版飞机大战游戏的设计(三)-----游戏背景
Python版飞机大战游戏的设计(三)-----游戏背景
147 0
Python版飞机大战游戏的设计(三)-----游戏背景
|
C语言 Windows
全网最详细用c语言实现植物大战僵尸游戏(下)-2
全网最详细用c语言实现植物大战僵尸游戏(下)
271 0
|
存储 C语言 C++
全网最详细用c语言实现植物大战僵尸游戏(上)-1
全网最详细用c语言实现植物大战僵尸游戏(上)
818 0
|
C语言
全网最详细用c语言实现植物大战僵尸游戏(上)-2
全网最详细用c语言实现植物大战僵尸游戏(上)
215 0
|
存储 区块链
无聊猿大逃杀游戏卷轴模式系统开发逻辑步骤
区块链的去中心化,数据的防篡改,决定了智能合约更加适合于在区块链上来实现
|
vr&ar 图形学
【Unity3D 灵巧小知识点】 ☀️ | Unity退出游戏代码
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
|
vr&ar 图形学 索引
【Unity3D 灵巧小知识点】 ☀️ | Unity中如何使用代码切换场景
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
【Unity3D 灵巧小知识点】 ☀️ | Unity中如何使用代码切换场景