C语言实现消消乐 您所在的位置:网站首页 开心消消乐游戏设计报告 C语言实现消消乐

C语言实现消消乐

2024-07-16 10:37| 来源: 网络整理| 查看: 265

C语言课程设计实现消消乐,用到了数据结构相关知识,代码如下:

#include #include #include #include #include

typedef struct runParm_{     int **matr; //m     int row; // x     int col;//y     int emCount;//n     int exCount;//op     int over1;//GAMEOVER1     int over2;//GAMEOVER2     int score;//int SCORE = 0;//全局变量 总分数 }runParm;

int resetMap(runParm* parmsObj); int  **delValue(runParm* parmsObj); int** copyMatr(int** matr, int inRow, int inCol);

void main(){//主函数入口      srand(time(NULL));     runParm parmsObj;     memset(&parmsObj, 0, sizeof(runParm));     printf("请输入矩阵行数:");     scanf("%d", &parmsObj.row);     printf("请输入矩阵列数:");     scanf("%d", &parmsObj.col);     printf("请输入元素个数:");     scanf("%d", &parmsObj.emCount);     printf("请输入交换次数:");     scanf("%d", &parmsObj.exCount);          printf("打印模拟的消消乐:\r\n");     parmsObj.matr = (int**)malloc(sizeof(int*)* parmsObj.row);//m     for (int i = 0; i < parmsObj.row; i++){         parmsObj.matr[i] = (int*)malloc(sizeof(int)* parmsObj.col);         for (int j = 0; j < parmsObj.col; j++) {             parmsObj.matr[i][j] = 1 + rand() % parmsObj.emCount;             printf("%d ", parmsObj.matr[i][j]);         }         printf("\n");     }     printf("\r\n++++++++++++++++++++++++++++++++++++\r\n");     for (int i = 0; i < parmsObj.exCount; i++) {         parmsObj.matr = delValue(&parmsObj);         if (!parmsObj.matr)             break;         printf("第 %d 次变换后的矩阵如下:\r\n", i + 1);         for (int i2 = 0; i2 < parmsObj.row; i2++) {             for (int i3 = 0; i3 < parmsObj.col; i3++) {                 printf("%d ", parmsObj.matr[i][i3]);             }             printf("\r\n++++++++++++++++++++++++++++++++++++\r\n");         }     }     printf("最终得分:%d\r\n", parmsObj.score); }

int resetMap(runParm* parmsObj){     int sum = 0;     parmsObj->over1 = 0;     for (int i = 0; i < parmsObj->row; i++){         for (int j = 0; j < parmsObj->col; j++){             if (parmsObj->matr[i][j]){                 int tag1 = 1;                 for (int p = j; p < (parmsObj->col - 1);)                 {                     if (parmsObj->matr[i][j] == parmsObj->matr[i][p + 1])                     {                         tag1++;                         p++;                     }                     else                         break;                 }                 if (tag1 > 2 && tag1 < 6)                 {                     for (int k = 0; k < tag1; k++)                         parmsObj->matr[i][j + k] = 0;                     switch (tag1){                     case 3:                         sum = sum + 1; break;                     case 4:                         sum = sum + 4; break;                     default:                         sum = sum + 10;                     }                     parmsObj->over1++;                 }                 int tag2 = 1;                 for (int p = i; p < (parmsObj->row - 1);)                 {                     if (parmsObj->matr[i][j] == parmsObj->matr[p + 1][j])                     {                         tag2++;                         p++;                     }                     else                         break;                 }                 if (tag2 > 2 && tag2 < 6)                 {                     for (int k = 0; k < tag2; k++)                         parmsObj->matr[i + k][j] = 0;                     switch (tag2) {                     case 3:                         sum = sum + 1; break;                     case 4:                         sum = sum + 4; break;                     default:                         sum = sum + 10;                     }                     parmsObj->over1++;                 }             }         }     }     return sum; }

int** copyMatr(int** matr, int inRow, int inCol) {     int **tmpMatr = new int*[inRow];     for (int row = 0; row < inRow; row++) {         tmpMatr[row] = new int[inCol];         for (int col = 0; col < inCol; col++){             tmpMatr[row][col] = matr[row][col];         }     }     return tmpMatr; }

int  **delValue(runParm* parmsObj){     int swapPoint[2][2];     int **tmpMatr, **tmpMaxMatr;     int maxscore = 0;     int i = 0, j = 0, tmp = 0, temp = 0;     parmsObj->over2 = 0;     for (i = 0; i < parmsObj->row; i++){         for (j = 0; jcol - 1; j++){

            tmpMatr = copyMatr(parmsObj->matr, parmsObj->row, parmsObj->col);

            tmp = tmpMatr[i][j];             tmpMatr[i][j] = tmpMatr[i][j + 1];             tmpMatr[i][j + 1] = tmp;

            temp = resetMap(parmsObj);             if (parmsObj->over1 != 0) parmsObj->over2++;             if (maxscorerow, parmsObj->col);

                maxscore = temp;                 swapPoint[0][0] = i;                 swapPoint[0][1] = j;                 swapPoint[1][0] = i;                 swapPoint[1][1] = j + 1;             }         }     }

    for (i = 0; irow - 1; i++){         for (j = 0; jcol; j++){             tmpMatr = copyMatr(parmsObj->matr, parmsObj->row, parmsObj->col);

            tmp = tmpMatr[i][j];             tmpMatr[i][j] = tmpMatr[i + 1][j];             tmpMatr[i + 1][j] = tmp;

            int temp = resetMap(parmsObj);

            if (parmsObj->over1 != 0)                 parmsObj->over2++;

            if (maxscore < temp){                 tmpMaxMatr = copyMatr(tmpMatr, parmsObj->row, parmsObj->col);                 maxscore = temp;                 swapPoint[0][0] = i;//记录最大的那次的交换坐标                  swapPoint[0][1] = j;                 swapPoint[1][0] = i + 1;                 swapPoint[1][1] = j;             }         }     }     if (parmsObj->over2 == 0)     {         printf("消除结束!!!\r\n");         return NULL;     }     printf("把坐标 换为了 \r\n",         swapPoint[0][0], swapPoint[0][1], swapPoint[1][0], swapPoint[1][1]);     printf("当前得分:%d\r\n", maxscore);     parmsObj->score += maxscore;     int t = parmsObj->row;     while (t--){         for (i = parmsObj->row - 2; i >= 0; i--){             for (j = 0; jcol; j++){                 if (tmpMaxMatr[i][j] != 0 && tmpMaxMatr[i + 1][j] == 0){                     int tmp = tmpMaxMatr[i][j];                     tmpMaxMatr[i][j] = tmpMaxMatr[i + 1][j];                     tmpMaxMatr[i + 1][j] = tmp;                 }             }         }     }     return tmpMaxMatr; }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有