2025年C语言-1024小游戏

C语言-1024小游戏本代码不够完美 没有积分项 希望读者给个意见 怎样做 好了 上代码 include stdio h include stdlib h include string h include time h define time h string h stdlib h stdio h

大家好,我是讯享网,很高兴认识大家。


讯享网

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #define SIZE 4 //1024 小游戏 //输出矩阵 void print_arry(int a[][SIZE]); //填数组 int random_arry(int a[][SIZE]); //读入键盘上下右左 1 2 3 4 int toward_key(); //向上移动 void up_move(int a[][SIZE]); //向下移动 void down_move(int a[][SIZE]); //向右移动 void right_move(int a[][SIZE]); //向左移动 void left_move(int a[][SIZE]); void main() { 
    int a[SIZE][SIZE]={ 
   0},n; random_arry(a); print_arry(a); while(1) { 
    done: n=toward_key(); switch(n) { 
    case 1:up_move(a);break; case 2:down_move(a);break; case 3:right_move(a);break; case 4:left_move(a);break; default:printf("输入错误!\n请重新输入!\n");goto done; } n=random_arry(a); if(!n) { 
    printf("游戏结束!\n"); break; } print_arry(a); } } void print_arry(int a[][SIZE]) { 
    printf("1024小游戏:\n\n"); for(int i=0;i<SIZE;i++) { 
    for(int j=0;j<SIZE;j++) printf("%5d\t",a[i][j]); printf("\n\n"); } printf("\n"); } int random_arry(int a[][SIZE]) { 
    srand(time(0)); //如果空为0,直接结束函数 int t=0; for(int i=0;i<SIZE;i++) for(int j=0;j<SIZE;j++) if(0 == a[i][j]) t++; if(0 == t) { 
    printf("game over!\n"); return 0; } //没有则随机填空 while(1) { 
    t=rand()%(SIZE*SIZE); if(0 == a[t/SIZE][t%SIZE]) //如果该位为空 { 
    a[t/SIZE][t%SIZE]=2; return 1; } } } int toward_key() { 
    char ch[4],t=0; while((ch[t++]=getchar())!='\n'); //最后一个用于装\0或者\n if(ch[0]==27&&ch[1]==91) //确定是方向键 return ch[2]-64; //ch[3]的可能取值 'A' 'B' 'C' 'D' 故才取的第三位 return 0;//否者不是方向键 } void up_move(int a[][SIZE]) { 
    static int b[SIZE][SIZE]; //清除0后放在b中 for(int i=0;i<SIZE;i++) //列号 { 
    for(int j=0,t=0;j<SIZE;j++) //行号 { 
    if(a[j][i] != 0) b[t++][i]=a[j][i]; } } //初始化a 全部赋值为0 为下一步再次重新赋值做准备 for(int i=0;i<SIZE*SIZE;i++) a[i/SIZE][i%SIZE]=0; //相同的加法 for(int i=0;i<SIZE;i++) //列号 { 
    for(int j=0;j<SIZE-1;j++) //行号 { 
    if(b[j][i] == b[j+1][i]) //相加----x2等效 前一个x2后一个变0 { 
    b[j][i]*=2; b[j+1][i]=0; } } } //清除0后放在a中 for(int i=0;i<SIZE;i++) //列号 { 
    for(int j=0,t=0;j<SIZE;j++) //行号 { 
    if(b[j][i] != 0) a[t++][i]=b[j][i]; } } } void down_move(int a[][SIZE]) { 
    static int b[SIZE][SIZE]; for(int i=0;i<SIZE;i++) //列号 { 
    for(int j=SIZE-1,t=SIZE-1;j >= 0;j--) //行号 { 
    if(a[j][i] != 0) b[t--][i]=a[j][i]; } } for(int i=0;i<SIZE*SIZE;i++) a[i/SIZE][i%SIZE]=0; for(int i=0;i<SIZE;i++) //列号 { 
    for(int j=SIZE-1;j > 0;j--) //行号 { 
    if(b[j][i] == b[j-1][i]) { 
    b[j][i]*=2; b[j-1][i]=0; } } } for(int i=0;i<SIZE;i++) //列号 { 
    for(int j=SIZE-1,t=SIZE-1;j >= 0;j--) //行号 { 
    if(b[j][i] != 0) a[t--][i]=b[j][i]; } } } void left_move(int a[][SIZE]) { 
    static int b[SIZE][SIZE]; for(int i=0;i<SIZE;i++) //行号 { 
    for(int j=0,t=0;j<SIZE;j++) //列号 { 
    if(a[i][j] != 0) b[i][t++]=a[i][j]; } } for(int i=0;i<SIZE*SIZE;i++) a[i/SIZE][i%SIZE]=0; for(int i=0;i<SIZE;i++) //行号 { 
    for(int j=0;j<SIZE-1;j++) //列号 { 
    if(b[i][j] == b[i][j+1]) { 
    b[i][j]*=2; b[i][j+1]=0; } } } for(int i=0;i<SIZE;i++) //行号 { 
    for(int j=0,t=0;j<SIZE;j++) //列号 { 
    if(b[i][j] != 0) a[i][t++]=b[i][j]; } } } void right_move(int a[][SIZE]) { 
    static int b[SIZE][SIZE]; for(int i=0;i<SIZE;i++) //行号 { 
    for(int j=SIZE-1,t=SIZE-1;j>=0;j--) //列号 { 
    if(a[i][j] != 0) b[i][t--]=a[i][j]; } } for(int i=0;i<SIZE*SIZE;i++) a[i/SIZE][i%SIZE]=0; for(int i=0;i<SIZE;i++) { 
    for(int j=SIZE-1,t=SIZE-1;j > 0;j--) //列号 { 
    if(b[i][j] == b[i][j-1]) { 
    b[i][j]*=2; b[i][j-1]=0; } } } for(int i=0;i<SIZE;i++) //行号 { 
    for(int j=SIZE-1,t=SIZE-1;j>=0;j--) //列号 { 
    if(b[i][j] != 0) a[i][t--]=b[i][j]; } } } 

讯享网

效果图,由于简单的测试,没有细测试!功能可实现!特点在于,可以识别键盘上的上下左右键!
在这里插入图片描述

小讯
上一篇 2025-02-16 17:02
下一篇 2025-03-07 09:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/67688.html