一些语法在游戏开发中的应用
程序员文章站
2022-04-11 21:58:06
一些语法在游戏开发中的应用一、减少不必要的全局变量二、动态二维数组三、整数转换为字符串输出四、播放音乐模板一、减少不必要的全局变量游戏开发中有些变量只需要在少数函数中传递,修改数值。如果不用指针的话,会造成全局变量过多。例如下面:#includeint score=5;void addScore(){score=score+1;}void printfScore(){printf("%d\n",score);}void minusScore(...
一些语法在游戏开发中的应用
一、减少不必要的全局变量
游戏开发中有些变量只需要在少数函数中传递,修改数值。如果不用指针的话,会造成全局变量过多。
例如下面:
#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='\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:\\1.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:\\1.mp3 ");
system("pause");
return 0;
}
本文地址:https://blog.csdn.net/qq_46527915/article/details/107890820