我是大一新生,在寒假的实训课上老师让我们用c语言分组编程一个小游戏,我们组选的是“2048”。由于我们组上有一个大神,于是我们把大部分的工作交给了大神做,但是实训完成之后我感觉到碌碌无为,什么也没学到,自己对于c语言的理解也仅仅局限于书本之上,想到那些大神们已经基本可以自己编程一些小游戏了,心里就非常着急。于是利用这个寒假,我自己独立完成了“2048”小游戏的编程。
游戏代码我是用Xcode编的,我是IOS小白,有些头文件在Xcode中不能使用而我又找不到可以替代的,所以一些功能就不能实现比如清屏功能和储存数据的功能还有音乐功能,不仅如此还存在数字对不齐的问题。希望可以有大神能够指导我,万分感激!
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<curses.h> /*头文件*/ int i,j,a[4][4]={};/*二维数组a[4][4]全为0*/ void kaishi()/*生成开始界面*/ { printf("Welcome to 2048\n"); printf(" 1).新游戏\n"); printf(" 2).帮助\n"); } int defen(int a[][4])/*计分函数*/ { int max=a[0][0]; int static sum=0; for(i=0;i<4;i++) for(j=0;j<4;j++) if(a[i][j]>max) max=a[i][j]; sum+=max; return sum;/*以最大数的累加作为得分*/ } void jiemian(int a[][4]) { int b[2]={2,4},c[4]={0,1,2,3},sum,n,m; do { srand((int)time(NULL));/*以时间作为随机数种子*/ m=c[rand()%4]; n=c[rand()%4]; /*随机生成坐标*/ if(a[m][n]==0)/*判断是否为空格*/ { a[m][n]=b[rand()%2];/*随机生成2或4*/ break;/*跳出循环*/ } }while(1); printf("%d %d %d\n",m,n,a[m][n]); for(i=0;i<4;i++) { printf("-------------------------\n"); for(j=0;j<4;j++) { if((m==i)&&(n==j)) printf("| %d ",a[m][n]);/*输出随机生成的2或4*/ else { if(a[i][j]>0) printf("| %d ",a[i][j]);/*如果a[i][j]有数字,则输出数字*/ else printf("| ");/*如果a[i][j]无数字则输出空格*/ } } printf("|\n"); } printf("-------------------------\n"); printf(" 得分:%d\n",sum=defen(a)); } void hebingup(int a[][4])/*向上合并*/ { int m; for(j=0;j<4;j++) for(i=0;i<3;i++) if(a[i][j]>0)/*若a[i][j]不为0则进行判断,否则直接跳到下一项*/ if(a[i][j]==a[i+1][j]&&a[i][j]!=0)/*判读相邻两项是否相等*/ { a[i][j]=2*a[i][j];/*上面一项变成两倍*/ if(i==2) a[i+1][j]=0; else for(m=i+1;m<3;m++) { a[m][j]=a[m+1][j]; a[m+1][j]=0; } /*将下面的数整体上移,再循环*/ } } void hebingdown(int a[][4])/*向下合并*/ { int m; for(j=0;j<4;j++) for(i=3;i>0;i--) if(a[i][j]>0) if(a[i][j]==a[i-1][j]) { a[i][j]=2*a[i][j]; if(i==1) a[i-1][j]=0; else for(m=i-1;m>0;m--) { a[m][j]=a[m-1][j]; a[m-1][j]=0; } } } void hebingleft(int a[][4])/*向左合并*/ { int m; for(i=0;i<4;i++) for(j=0;j<3;j++) if(a[i][j]>0) if(a[i][j]==a[i][j+1]) { a[i][j]=2*a[i][j]; if(j==2) a[i][j+1]=0; else for(m=j+1;m<3;m++) { a[i][m]=a[i][m+1]; a[i][m+1]=0; } } } void hebingright(int a[][4])/*向右合并*/ { int m; for(i=0;i<4;i++) for(j=3;j>0;j--) if(a[i][j]>0) if(a[i][j]==a[i][j-1]) { a[i][j]=2*a[i][j]; if(j==1) a[i][j-1]=0; else for(m=j-1;m>0;m--) { a[i][m]=a[i][m-1]; a[i][m-1]=0; } } } void yidong(char b) { int x,m; switch(b) { case 'w' : for(j=0;j<4;j++) for(i=1;i<=3;i++) for(x=i,m=i;x>0;x--,m--)/*x为循环次数,m替代i使循环继续*/ { if(a[m-1][j]>0) break;/*若上一位非0,则跳到下一位*/ else { a[m-1][j]=a[m][j]; a[m][j]=0; } } hebingup(a); break; case 's' : for(j=0;j<4;j++) for(i=2;i>=0;i--) for(x=3-i,m=i;x>0;x--,m++) { if(a[m+1][j]>0) break; else { a[m+1][j]=a[m][j]; a[m][j]=0; } } hebingdown(a); break; case 'a' : for(i=0;i<4;i++) for(j=1;j<=3;j++) for(x=j,m=j;x>0;x--,m--) { if(a[i][m-1]>0) break; else { a[i][m-1]=a[i][m]; a[i][m]=0; } } hebingleft(a); break; case 'd' : for(i=0;i<4;i++) for(j=2;j>=0;j--) for(x=3-j,m=j;x>0;x--,m++) { if(a[i][m+1]>0) break; else { a[i][m+1]=a[i][m]; a[i][m]=0; } } hebingright(a); break; } } int main(int argc,char *argv[]) { int flag=1; char c,k; system("stty -icanon"); outloop:; kaishi(); k=getchar(); printf("\n"); if(k=='1') { while(flag==1) { jiemian(a); c=getchar(); printf("\n"); yidong(c); for(i=0;i<4;i++) for(j=0;j<4;j++) { if(a[i][j]==0) { flag=1; goto end;/*如果棋盘中存在一个空格,则跳出判断,继续生成随机数*/ } else flag=0; } end:; } } if(k=='2') { do { printf("游戏规则:通过点击<w>,<s>,<a>,<d>键来实现数字的上下左右的移动,使相同的数字相加,每个格子中的数的累加将作为得分,当格子填满且无法移动时,游戏结束。\n"); printf(" 3).返回\n"); k=getchar(); }while(k!=3); goto outloop;/*跳到开始界面*/ } printf(" 游戏结束\n"); return 0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍C语言代码实现扫雷小游戏,包括了C语言代码实现扫雷小游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 主页面: 游戏页面: 虽然页面比较low,但我已经尽力了 具体代码实现: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍C语言扫雷游戏的实现代码,包括了C语言扫雷游戏的实现代码的使用技巧和注意事项,需要的朋友参考一下 这是一个用C语言实现的控制台扫雷小游戏,实现了随机布置炸弹、扫描炸弹、标记炸弹、百分百第一次不被炸死等功能。 编译器:vs2015 功能模块图 源代码 Tips:在扫描到周围无炸弹的格子时,要将此格子周围的部分依次打开,直到上下左右都出现炸弹数字为止,这里要用到递归的方法,我的顺序为依次
本文向大家介绍C语言代码实现三子棋游戏,包括了C语言代码实现三子棋游戏的使用技巧和注意事项,需要的朋友参考一下 三子棋小游戏,供大家参考,具体内容如下 一、基本框架 1、初始界面:这个界面是让用户选择玩或者不玩。 2、游戏界面:进入游戏之后,需要显示棋盘。 二、游戏的基本逻辑 首先,用户下一个X。然后判断,是用户赢了,还是电脑赢了,还是平局,还是继续下。然后,电脑下一个O。接着判断,判断形式和用户
本文向大家介绍java实现2048游戏源代码,包括了java实现2048游戏源代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现2048游戏源代码,供大家参考,具体内容如下 一.主要功能: 1、游戏初始化:新建游戏4×4的16宫格画布,随机格子上生成2或者4两个数字 2、格子的移动:先判断能否移动,移动后判断能否合并,合并后改变格子颜色和数字 3、新格子的生成:移动一次
本文向大家介绍200 行python 代码实现 2048 游戏,包括了200 行python 代码实现 2048 游戏的使用技巧和注意事项,需要的朋友参考一下 创建游戏文件 2048.py 首先导入需要的包: 主逻辑 用户行为 所有的有效输入都可以转换为"上,下,左,右,游戏重置,退出"这六种行为,用 actions 表示 有效输入键是最常见的 W(上),A(左),S(下),D(右),R(重置),
本文向大家介绍200行python代码实现2048游戏,包括了200行python代码实现2048游戏的使用技巧和注意事项,需要的朋友参考一下 Python实战系列用于记录实战项目中的思路,代码实现,出现的问题与解决方案以及可行的改进方向 本文为第2篇–200行Python代码实现2048 一、分析与函数设计 1.1 游戏玩法 2048这款游戏的玩法很简单,每次可以选择上下左右滑动,每滑动一次,所