C语言实现消消乐 | 您所在的位置:网站首页 › 开心消消乐游戏设计报告 › C语言实现消消乐 |
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 实验室设备网 版权所有 |