C/C++培训
达内IT学院
400-996-5531
2048风靡的时候,随时随地都会玩,而且这是一个很神奇的游戏,一玩就停不下来,非要玩到2048为止!小编今天介绍的这个项目课程就是教你用C语言自己开发一款2048小游戏。
项目名称:
C语言开发2048小游戏
知识点:
这个项目用到了一点数据结构的知识,还涉及到了 linux 的一些系统调用,有助于我们加深对 linux 下的程序设计的深入理解。此外,还用了一个文本界面的屏幕绘图库 ncurses,编译时需要加上 -lcurses 选项。
源码:
#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]); //主函数 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; } //函数 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; } } }
这个小游戏在培训时会贯穿第一阶段的学习,老师会详细讲解项目的知识点和开发步骤,非常适合练手,有不会的可以按照上面的,代码自己敲一敲哦!
当你敲着自己用C语言开发的游戏,那感觉一定很爽!
免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved