当前位置:首页 > 通信资讯 > 正文

2048游戏编程详细代码(c语言编程2048游戏)

我是大一新生,在寒假的实训课上老师让我们用c语言分组编程一个小游戏,我们组选的是“2048”。由于我们组上有一个大神,于是我们把大部分的工作交给了大神做,但是实训完成之后我感觉到碌碌无为,什么也没学到,自己对于c语言的理解也仅仅局限于书本之上,想到那些大神们已经基本可以自己编程一些小游戏了,心里就非常着急。于是利用这个寒假,我自己独立完成了“2048”小游戏的编程。

游戏代码我是用Xcode编的,我是IOS小白,有些头文件在Xcode中不能使用而我又找不到可以替代的,所以一些功能就不能实现比如清屏功能和储存数据的功能还有音乐功能,不仅如此还存在数字对不齐的问题。希望可以有大神能够指导我,万分感激!

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 #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; }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_46249780/article/details/104184950

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。