首页 > 代码库 > 2048游戏C语言代码
2048游戏C语言代码
如果程序里面有错误,希望大家能够批评指正!
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<time.h>#define WIN 256 // 可以修改决定游戏输赢的值// 矩阵数组int num[4][4]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};int t[5]={0,0,0,0,0}; // 辅助数组int move=0; // 记录移动步数int score=0; // 记录得分情况int max=0; // max表示游戏输赢,max=WIN时赢int change=1;// 产生一个随机位置和随机数void Srand(){ int i,j; do// 产生一个随机位置,如果产生的位置有数据,就继续随机生成一个新位置 { i=((unsigned)rand())%4; j=((unsigned)rand())%4; }while(num[i][j]!=0); if(((unsigned)rand())%4==0) { // 产生一个随机数,如果该数对4取余=0,则填充为4 num[i][j]=4; } else { num[i][j]=2; } move++;}void Print(){ system("CLS"); printf("*~~~~~~~~2048~~~~~~~*\n"); printf("*author: 亚威 *\n"); printf("*得分: %d 步数: %d \n",score,move); printf("*~~~~~~~~~~~~~~~~~~~*\n"); for(int i=0;i<=3;i++) { for(int j=0;j<=3;j++) { if(num[i][j]==0) printf("* "); else printf("*%4d",num[i][j]); } printf("*\n*~~~~~~~~~~~~~~~~~~~*\n"); }}// 消除t数组中前面和中间出现的0void fun(){ int i,j; for(i=0;i<=3;i++) { if(t[i]==0) { for(j=i+1;j<=3;j++) { if(t[j]!=0) { change=1; break; } } t[i]=t[j]; t[j]=0; } if(j>=3) break; }}// 合并操作void hebing(){ for(int i=0;i<=2;i++) { if((t[i]!=0)&&(t[i]==t[i+1])) { t[i]*=2; score+=t[i]; change=1; t[i+1]=0; } if(max<t[i]) max=t[i]; }}// 合并相邻且相等的两个数void add(){ fun(); // 消除前面的和中间的0 hebing(); // 合并相邻且相等的两个数 fun(); // 再次消0}int main(){ int i,j; int gameover=1; // 产生一个随机位置 srand((unsigned)time(NULL)); max=0; while(gameover&&(max<WIN)) { if(change) { Srand(); // 产生一个随机位置和随机数 } change=0; Print(); // 显示界面 char in=getch(); // 读取操作命令 switch(in) { case ‘w‘: case ‘W‘: for(i=0;i<=3;i++) { // 依次处理第1至第4列 for(j=0;j<=3;j++) { // 把第i列的数据依次赋给辅助数组t t[j]=num[j][i]; } add(); // 核心:合并相邻且相等的两个数 for(j=0;j<=3;j++) { // 把处理后的数据依次放到矩阵对应位置 num[j][i]=t[j]; } } break; case ‘s‘: case ‘S‘: for(i=0;i<=3;i++) { // 依次处理第1至第4列 for(j=0;j<=3;j++) { // 把第i列的数据依次赋给辅助数组t t[3-j]=num[j][i]; } add(); // 核心:合并相邻且相等的两个数 for(j=0;j<=3;j++) { // 把处理后的数据依次放到矩阵对应位置 num[j][i]=t[3-j]; } } break; case ‘a‘: case ‘A‘: for(i=0;i<=3;i++) { // 依次处理第1至第4列 for(j=0;j<=3;j++) { // 把第i列的数据依次赋给辅助数组t t[j]=num[i][j]; } add(); // 核心:合并相邻且相等的两个数 for(j=0;j<=3;j++) { // 把处理后的数据依次放到矩阵对应位置 num[i][j]=t[j]; } } break; case ‘d‘: case ‘D‘: for(i=0;i<=3;i++) { // 依次处理第1至第4列 for(j=0;j<=3;j++) { // 把第i列的数据依次赋给辅助数组t t[3-j]=num[i][j]; } add(); // 核心:合并相邻且相等的两个数 for(j=0;j<=3;j++) { // 把处理后的数据依次放到矩阵对应位置 num[i][j]=t[3-j]; } } break; } gameover=0; for(i=0;i<=3;i++) { for(j=0;j<=3;j++) { if(num[i][j]==0) gameover=1; } } if((gameover==0)&&(change==0)) break; } Print(); if(max>=WIN) { printf("You Win!\n"); printf("你很牛啊!!!\n"); } else { printf("Gameover\n"); printf("努力啊!!!\n"); } system("pause"); return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。