一些语法在游戏开发中的应用

  • 一、减少不必要的全局变量
  • 二、动态二维数组
  • 三、整数转换为字符串输出
  • 四、播放音乐模板

一、减少不必要的全局变量

游戏开发中有些变量只需要在少数函数中传递,修改数值。如果不用指针的话,会造成全局变量过多。

例如下面:

#include<stdio.h>
int score=5;
void addScore()
{
	score=score+1;

}
void printfScore()
{
	printf("%d\n",score);
}
void minusScore()
{
	score=score-1;
}
int main()
{
	addScore();
	minusScore();
	printfScore();
	return 0;
}
上面代码就有一个全局变量,  接下来我们就来尽量的减少不必要的全局变量,让它们变成局部变量。
我们可以用指针作为函数的参数,因为指针可以在函数内部中改变参数的值,减少不必要的全局变量。

改进后的代码如下:

#include<stdio.h>
void addScore(int *sc)
{
	*sc=*sc+1;

}
void printfScore(int sc)
{
	printf("%d\n",sc);
}
void minusScore(int *sc)
{
	*sc=*sc-1;
}
int main()
{
	int score=5;
	addScore(&score);
	minusScore(&score);
	printfScore(score);
	return 0;
}

二、动态二维数组

模板代码如下:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	int high,width,i,j;
	scanf("%d %d",&high,&width);//自定义输入长、宽。

	//分配动态二维数组的内存空间
	int **canvas=(int**)malloc(high*sizeof(int*));
	for(i=0;i<high;i++)
		canvas[i]=(int*)malloc(width*sizeof(int));

	for(i=0;i<high;i++)
		for(j=0;j<width;j++)
			canvas[i][j]=i+j+1+1;//初始化为坐标之和 
	for(i=0;i<high;i++)
	{	
		for(j=0;j<width;j++)
			printf("%d ",canvas[i][j]);
	    printf("\n");
	}

	//回收动态数组的空间
	for(i=0;i<high;i++)
		free(canvas[i]);
	free(canvas);
	return 0;
}

三、整数转换为字符串输出

在图形化编程中只能输出字符串,所以我们要把整数转换为字符串

自己写的转换函数如下:

#include<stdio.h>
#include<stdlib.h>
void Int2Str(int x,char *istr)//将正整数x转换为字符串istr
{
	char ch,*p,*t;
	int r;
	p=t=istr;
	while(x>0)
	{
		r=x%10;
		x=x/10;
		*p=48+r;
		p++;
	}
	*p='
#include<stdio.h>
#include<stdlib.h>
void Int2Str(int x,char *istr)//将正整数x转换为字符串istr
{
char ch,*p,*t;
int r;
p=t=istr;
while(x>0)
{
r=x%10;
x=x/10;
*p=48+r;
p++;
}
*p='\0';
p--;
while(t<p)//将p中的字符串倒序排列
{
ch=*t;
*t=*p;
*p=ch;
t++;
p--;
}
}
int main()
{
char s[30];
int score=5326;
Int2Str(score,s);
printf("%s\n",s);
return 0;
}
'
; p--; while(t<p)//将p中的字符串倒序排列 { ch=*t; *t=*p; *p=ch; t++; p--; } } int main() { char s[30]; int score=5326; Int2Str(score,s); printf("%s\n",s); return 0; }
当然我们也可以用系统自带的sprintf函数

例:

int score=56;
char s[5];
sprintf(s,"%d",score);  

四、播放音乐模板

只播放一次音乐 模板代码如下:

#include<string.h>
#include<Windows.h>
#include<mmsystem.h>
#pragma comment(lib,"Winmm.lib")
void PlayMusicOnce(char *fileName)
{
	char cmdString1[50]="open";
	strcat(cmdString1,fileName);
	strcat(cmdString1,"alias song");
	mciSendString("close song",NULL,0,NULL);//先把前面一次的音乐关闭
	mciSendString(cmdString1,NULL,0,NULL);//打开音乐
	mciSendString("play song",NULL,0,NULL);//仅播放一次
}
int main(void)
{
	PlayMusicOnce(" F:\.mp3 ");//输入的是要播放的音乐的路径
	system("pause");
	return 0;
}

循环播放音乐 模板代码如下:

#include<string.h>
#include<Windows.h>
#include<mmsystem.h>
#pragma comment(lib,"Winmm.lib")
void PlayMusicOnce(char *fileName)
{
	char cmdString1[50]="open";
	strcat(cmdString1,fileName);
	strcat(cmdString1,"alias song");
	mciSendString("close song",NULL,0,NULL);//先把前面一次的音乐关闭
	mciSendString(cmdString1,NULL,0,NULL);//打开音乐
	mciSendString("play song repeat",NULL,0,NULL);//循环播放
}
int main(void)
{
	PlayMusicOnce(" F:\.mp3 ");
	system("pause");
	return 0;
}

本文地址:https://blog.csdn.net/qq_46527915/article/details/107890820