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

问:C语言都学了这么久了,怎么连个小游戏都做不了?
答:主要是C语言中的库函数并没有完全掌握,只凭着基础语法很难做出游戏的。
问:我想做个游戏界面,怎么办?
答:如果你有图形库的话可以使用
#include<graphics.h>中的图形函数,没有的话可以下载
easyX安装图形库(不建议使用图形库,一是C语言做界面很困难,二是可移植性不高),建议用二维数组表示图形即可。
问:做游戏怎么让图形动起来?
答:图形是连续动态的画面,你需要清屏函数清除画面,再建立新界面输出,快速重复
便可以做出动画效果(
清屏函数:  #include<conio.h> system("cls");)
问:如果做出了游戏,操作问题怎么解决,怎么能让程序自动获取我的输入?
答:使用
#include<conio.h> getch( );(注意不是getchar( ),但是和getchar( )用法一样)程序会自动获取你的输入。
问:我想控制程序运行速度,设置难度怎么办?
答:
程序休眠#include<windows.h> sleep(int time );可以使程序暂停一段时间,sleep中的time是毫秒(1秒=1000毫秒)。
问:我想让数字/敌人随机出现怎么办?
答:随机函数#include<stdlib.h>srand(int seed); int rand(void);随机数就是这样生成的,seed为随机种子,rand( )为随机数生成器(其实并不是真正的随机,只要固定
随机种子的值,随机数的值也是固定的)一般我们把时间设为随机种子,以保证随机
种子的值能自动变化,
随机数生成器#include<stdlib.h> #include<time.h>
srand((unsigned) time(0)); number=rand();

操作方法

  • 01

    2048程序

  • 02

    //声明 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<windows.h> #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]);

  • 03

    //主函数 int main() { int i,j; int n[SIZE][SIZE]; char c=' '; for(i=0;i<SIZE;i++) { for(j=0;j<SIZE;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[0][1]=2048; //n[0][3]=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; }

  • 04

    //函数 void putn(int n[][SIZE]) { int i,j; for(i=0;i<SIZE;i++) { for(j=0;j<SIZE;j++) printf("|     "); printf("|\n"); for(j=0;j<SIZE;j++) { if(n[i][j]==0) printf("|     "); else printf("|%4d ",n[i][j]); } printf("|\n"); for(j=0;j<SIZE;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<SIZE;i++) for(j=0;j<SIZE;j++) if(n[i][j]==0) count++; return count; } int isfull(int n[][SIZE]) { int i,j,count=0; for(i=0;i<SIZE;i++) { for(j=1;j<SIZE-1;j++) { if(n[i][j]==n[i][j+1]||n[i][j]==n[i][j-1]) count++; } } for(j=0;j<SIZE;j++) { for(i=1;i<SIZE-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<SIZE;a++) m[a]=0; for(j=0;j<SIZE;j++) { for(a=0;a<SIZE;a++) { for(i=0;i<SIZE-1;i++) { if(n[i][j]==0) { n[i][j]=n[i+1][j]; n[i+1][j]=0; } } } } for(j=0;j<SIZE;j++) { for(a=0,i=0;i<SIZE;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<SIZE;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<SIZE;a++) m[a]=0; for(i=0;i<SIZE;i++) { for(a=0;a<SIZE;a++) { for(j=0;j<SIZE-1;j++) { if(n[i][j]==0) { n[i][j]=n[i][j+1]; n[i][j+1]=0; } } } } for(i=0;i<SIZE;i++) { for(a=0,j=0;j<SIZE;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<SIZE;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<SIZE;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<SIZE;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; } } }

(0)

相关推荐

  • 给自己做蛋糕小游戏攻略

    给自己做蛋糕小游戏,想吃茶杯蛋糕?别指望外面的有多合你口味了,还是自己试着给自己做一份吧.来试试看. 步骤/方法 01 鼠标点击"play"进入游戏. 02 游戏开始了. 03 把 ...

  • 巧虎做饼干小游戏攻略

    巧虎做饼干小游戏,我们的小巧虎又来咯!这次他会跟妈妈一起学做饼干,小朋友们想不想知道呢?那就快来和巧虎一起做饼干吧. 步骤/方法 01 鼠标点击"开始". 02 游戏看是了,虎妈妈 ...

  • 微信小游戏2048六角消除攻略

    最近在微信小游戏中发现了一款很好玩的游戏--2048六角消除,它既有智慧拼图游戏的特征,还有消消乐游戏的快感,超级棒的小游戏.下面说说:微信小游戏2048六角消除攻略. 操作方法 01 点击" ...

  • 内科医生做手术小游戏攻略

    这是一款很好玩的休闲小游戏,游戏讲述的是现在你是一名内科医生助理,今天你们接到一名叫凯文的男子,他不小心把危险品给吞到了肚子里,现在你要作的就是协助你的主治医生给病人进行一个胃部手术,并且取出危险物品 ...

  • 微信小游戏—2048六角消除怎么玩得高分

    2048六角消除只会计算自己得分,永远不会结束,最终就看自己得分高低,可以和其他玩家进行比较,那么怎么玩这个游戏得分才会高呢,小编手把手教您. 操作方法 01 打开微信进入到小游戏后,首先是看到自己的 ...

  • 微信小游戏如何赚钱

    有朋友问到我,现在互联网那么发达,而且很多社交平台或软件层出不穷,各式各样.如微信软件大家都用的很多,目前很多人或公司也在做一些小游戏.朋友问,微信小游戏在微信里怎么赚钱,这个问题开始还真的问到了我, ...

  • 怎么制作游戏小游戏简单制作教程

    操作方法 01 游戏不是说一两下就可以完成的,当年我也是心血来潮想做一个小游戏,发现一切都不是那么的简单.你要看看你想制作什么样的游戏,是动作类,还是战略类,还是什么.先确定好,再按照一定的程序去制造 ...

  • PowerPoint2003做个迷宫小游戏

    PowerPoint已经成为了各种交流不可缺少的软件.它用于教师上课,用于行业交流等展示手法.而随着时代的不断变化,PPT2003已经被2007等更容易用的软件代替了.但是PPT2003还是很好用的, ...

  • 我的世界 怎样做一个两层楼的简易小别墅

    在我的世界中造房子可以说是一个非常大的乐趣,别墅,乡间小屋,宫殿等等建筑都可以建造出来,那要怎样建造一个两层的简易小别墅呢? 操作方法 01 首先选择一块空旷的地方. 02 然后先盖一层地基. 03 ...