您的位置首页生活百科

怎么用C语言做简易小游戏(2048开发)

怎么用C语言做简易小游戏(2048开发)

的有关信息介绍如下:

怎么用C语言做简易小游戏(2048开发)

问:C语言都学了这么久了,怎么连个小游戏都做不了?

答:主要是C语言中的库函数并没有完全掌握,只凭着基础语法很难做出游戏的。

问:我想做个游戏界面,怎么办?

答:如果你有图形库的话可以使用#include中的图形函数,没有的话可以下载easyX安装图形库(不建议使用图形库,一是C语言做界面很困难,二是可移植性不高),建议用二维数组表示图形即可。

问:做游戏怎么让图形动起来?

答:图形是连续动态的画面,你需要清屏函数清除画面,再建立新界面输出,快速重复

便可以做出动画效果(清屏函数: #include system("cls"); )

问:如果做出了游戏,操作问题怎么解决,怎么能让程序自动获取我的输入?

答:使用#include getch( ); (注意不是getchar( ),但是和getchar( )用法一样)程序会自动获取你的输入。

问:我想控制程序运行速度,设置难度怎么办?

答:程序休眠#include sleep(int time );可以使程序暂停一段时间,sleep中的time是毫秒(1秒=1000毫秒)。

问:我想让数字/敌人随机出现怎么办?

答:随机函数#includesrand(int seed); int rand(void);随机数就是这样生成的,seed为随机种子,rand( )为随机数生成器(其实并不是真正的随机,只要固定

随机种子的值,随机数的值也是固定的)一般我们把时间设为随机种子,以保证随机

种子的值能自动变化,随机数生成器#include #include

srand((unsigned) time(0)); number=rand();

2048程序

//声明

#include

#include

#include

#include

#include

#define SIZE 4

static int score=0;

void putn(int n[][SIZE]);

void getn(int n[][SIZE]);

int isempty(int n[][SIZE]);

int isfull(int n[][SIZE]);

void math(int n[][SIZE],char c);

void tow(int n[][SIZE]);

void toa(int n[][SIZE]);

void tos(int n[][SIZE]);

void tod(int n[][SIZE]);

//主函数

int main()

{

int i,j;

int n[SIZE][SIZE];

char c=' ';

for(i=0;i

{

for(j=0;j

{

n[i][j]=0;

}

}

printf( "***********************\n"

" 2048(%dX%d) \n"

" control:W/A/S/D \n"

"press any key to begin \n"

"***********************\n",SIZE,SIZE);

getch();

system("cls");

//n=2048;

//n=2048;

while(1)

{

if(isempty(n))

getn(n);

putn(n);

if(!isempty(n)&&isfull(n))

break;

sleep(200);

c=getch();

while(c!='w'&&c!='a'&&c!='s'&&c!='d')

c=getch();

math(n,c);

system("cls");

}

printf(" Game Over!\n",score);

return 0;

}

//函数

void putn(int n[][SIZE])

{

int i,j;

for(i=0;i

{

for(j=0;j

printf("| ");

printf("|\n");

for(j=0;j

{

if(n[i][j]==0)

printf("| ");

else

printf("|%4d ",n[i][j]);

}

printf("|\n");

for(j=0;j

printf("|_____");

printf("|\n");

}

printf("score: %d",score);

}

void getn(int n[][SIZE])

{

int a,b;

a=rand()%SIZE;

b=rand()%SIZE;

while(n[a][b]!=0)

{

a=rand()%SIZE;

b=rand()%SIZE;

}

n[a][b]=2;

}

int isempty(int n[][SIZE])

{

int i,j,count=0;

for(i=0;i

for(j=0;j

if(n[i][j]==0)

count++;

return count;

}

int isfull(int n[][SIZE])

{

int i,j,count=0;

for(i=0;i

{

for(j=1;j

{

if(n[i][j]==n[i][j+1]||n[i][j]==n[i][j-1])

count++;

}

}

for(j=0;j

{

for(i=1;i

{

if(n[i][j]==n[i+1][j]||n[i][j]==n[i-1][j])

count++;

}

}

return count>0?0:1;

}

void math(int n[][SIZE],char c)

{

switch(c)

{

case 'w':tow(n);break;

case 'a':toa(n);break;

case 's':tos(n);break;

case 'd':tod(n);break;

default :;

}

}

void tow(int n[][SIZE])

{

int i,j,a;

int m[SIZE];

for(a=0;a

m[a]=0;

for(j=0;j

{

for(a=0;a

{

for(i=0;i

{

if(n[i][j]==0)

{

n[i][j]=n[i+1][j];

n[i+1][j]=0;

}

}

}

}

for(j=0;j

{

for(a=0,i=0;i

{

if(n[i][j]!=n[i+1][j]&&n[i][j]!=0||n[i][j]==2048)

{

m[a++]=n[i][j];

n[i][j]=0;

}

else if(n[i][j]==n[i+1][j])

{

m[a++]=n[i][j]+n[i+1][j];

score+=m[a-1];

n[i][j]=0,n[i+1][j]=0;

}

}

for(i=0;i

{

n[i][j]=m[i];

m[i]=0;

}

}

}

void toa(int n[][SIZE])

{

int i,j,a;

int m[SIZE];

for(a=0;a

m[a]=0;

for(i=0;i

{

for(a=0;a

{

for(j=0;j

{

if(n[i][j]==0)

{

n[i][j]=n[i][j+1];

n[i][j+1]=0;

}

}

}

}

for(i=0;i

{

for(a=0,j=0;j

{

if(n[i][j]!=n[i][j+1]&&n[i][j]!=0||n[i][j]==2048)

{

m[a++]=n[i][j];

n[i][j]=0;

}

else if(n[i][j]==n[i][j+1])

{

m[a++]=n[i][j]+n[i][j+1];

score+=m[a-1];

n[i][j]=0,n[i][j+1]=0;

}

}

for(j=0;j

{

n[i][j]=m[j];

m[j]=0;

}

}

}

void tos(int n[][SIZE])

{

int i,j,a;

int m[SIZE];

for(a=0;a

m[a]=0;

for(j=SIZE-1;j>=0;j--)

{

for(a=SIZE-1;a>=0;a--)

{

for(i=SIZE-1;i>0;i--)

{

if(n[i][j]==0)

{

n[i][j]=n[i-1][j];

n[i-1][j]=0;

}

}

}

}

for(j=SIZE-1;j>=0;j--)

{

for(a=SIZE-1,i=SIZE-1;i>=0;i--)

{

if(n[i][j]!=n[i-1][j]&&n[i][j]!=0||n[i][j]==2048)

{

m[a--]=n[i][j];

n[i][j]=0;

}

else if(n[i][j]==n[i-1][j])

{

m[a--]=n[i][j]+n[i-1][j];

score+=m[a+1];

n[i][j]=0,n[i-1][j]=0;

}

}

for(i=SIZE-1;i>=0;i--)

{

n[i][j]=m[i];

m[i]=0;

}

}

}

void tod(int n[][SIZE])

{

int i,j,a;

int m[SIZE];

for(a=0;a

m[a]=0;

for(i=SIZE-1;i>=0;i--)

{

for(a=SIZE-1;a>=0;a--)

{

for(j=SIZE-1;j>0;j--)

{

if(n[i][j]==0)

{

n[i][j]=n[i][j-1];

n[i][j-1]=0;

}

}

}

}

for(i=SIZE-1;i>=0;i--)

{

for(a=SIZE-1,j=SIZE-1;j>=0;j--)

{

if(n[i][j]!=n[i][j-1]&&n[i][j]!=0||n[i][j]==2048)

{

m[a--]=n[i][j];

n[i][j]=0;

}

else if(n[i][j]==n[i][j-1])

{

m[a--]=n[i][j]+n[i][j-1];

score+=m[a+1];

n[i][j]=0,n[i][j-1]=0;

}

}

for(j=SIZE-1;j>=0;j--)

{

n[i][j]=m[j];

m[j]=0;

}

}

}