怎么用C语言做简易小游戏(2048开发)
的有关信息介绍如下:问:C语言都学了这么久了,怎么连个小游戏都做不了?
答:主要是C语言中的库函数并没有完全掌握,只凭着基础语法很难做出游戏的。
问:我想做个游戏界面,怎么办?
答:如果你有图形库的话可以使用#include
问:做游戏怎么让图形动起来?
答:图形是连续动态的画面,你需要清屏函数清除画面,再建立新界面输出,快速重复
便可以做出动画效果(清屏函数: #include
问:如果做出了游戏,操作问题怎么解决,怎么能让程序自动获取我的输入?
答:使用#include
问:我想控制程序运行速度,设置难度怎么办?
答:程序休眠#include
问:我想让数字/敌人随机出现怎么办?
答:随机函数#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; } } }