图片配对游戏 [C语言 课程设计]
来源:互联网 发布:银行管理系统java 编辑:程序博客网 时间:2024/06/05 14:50
/**\ 本人简介
*
* \ 昵称 :回车键
* \ QQ号 :1737397473
* \ QQ交流群 :555404957
* \ 新浪微博 :http://weibo.com/u/6069955504
* \ 新浪博客 :http://blog.sina.com.cn/u/6069955504
*
*/
/** \ 题目信息 */
/** \
图片配对游戏
(1)任务描述
在一个N*N的矩阵中,随机分布着若干图片,图片一共10种,每种必成对出现,每
个图片占据矩阵中一个元素的位置。游戏开始时,先将分布好图片的矩阵给玩家看一定
时间,然后将图片扣上,游戏开始并计时。玩家选择相同图片位置,一次只能选择两个,若
正确,则这两个图片翻过来;若不正确,则将这两个图片翻过来给玩家看2秒后,再扣过去。
如此进行,直至矩阵中的图片全部翻过来为止。
(2)功能要求
1 矩阵大小允许玩家设定,最小为6*6,最大为16*16.
2 游戏开始前的图片预览时间长短根据矩阵大小设定,为1*N秒。
3 图片随机分布,每次不一定10种图片全出现。
4 游戏结束时,显示玩家所花时间,并允许玩家选择重新游戏或退出。
5 建立排行榜,同一难度级别保留3位的优越成绩。
*/
/** \ 开发平台
*
* \ 系统 Windows10
* \ 开发环境 Code::Blocks 13.12
* \ 其他C语言开发平台也可以
*
*/
/**< 头文件 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
/**< 宏定义 */
#define MAX 16/**< 矩阵最大大小 */
/**< 全局变量 */
int size = 0;/**< 矩阵尺寸 */
int matrix[MAX][MAX];/**< 矩阵 保存图片信息 */
int picture[MAX*MAX];/**< 图片信息 */
int status[MAX][MAX];/**< 状态 显示/倒扣 */
int rankinglist[6][3];/**< 排行榜 */
int times[18];/**< 时间 */
int duration;/**< 游戏用时 */
/**< 函数申明 */
int initialize();/**< 初始化 */
int print_data();/**< 打印数据 */
int delayed(int n);/**< 延时 */
int menu();/**< 菜单 */
int new_game();/**< 新游戏 */
int ranking_list();/**< 排行榜 */
int photograph(int x,int y);/**< 图片对应表 */
int save();/**< 保存排行榜 */
/**< 初始化 */
int initialize()
{
int i = 0,j = 0,k = 0;/**< 循环变量 */
int t = 0;/**< 图片类型 */
int x = 0;/**< 图片信息表下标 */
/**< 随机数种子 */
srand((unsigned)time(NULL));
/**< 把矩阵数据全部置为-1 */
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
matrix[i][j] = -1;
}
}
/**< 把图片信息数据全部置为-1 */
for(i = 0;i < size * size;i++)
{
picture[i] = -1;
}
/**< 随机生成图片信息表的图片序号 */
for(i = 0;i < size * size;)
{
/**< 生成图片种类 */
t = rand() % 10;
/**< 放入第一个图片 */
while(1)
{
/**< 生成图片信息表下标 */
x = rand() % (size * size);
if(picture[x] == -1)/**< 当前图片信息表没有放入图片 */
{
picture[x] = t;
break;
}
}
i++;
/**< 放入和第一个一样的图片 */
while(1)
{
/**< 生成图片信息表下标 */
x = rand() % (size * size);
if(picture[x] == -1)/**< 当前图片信息表没有放入图片 */
{
picture[x] = t;
break;
}
}
i++;
}
/**< 把图片信息表中的信息填入到矩阵中 */
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
matrix[i][j] = picture[k];
k++;
}
}
/**< 初始化状态表 */
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
status[i][j] = -1;/**< -1状态未定义 */
}
}
return 0;
}
/**< 打印数据 */
int print_data()
{
int i = 0,j = 0;
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
/**< 倒扣状态 */
if(status[i][j] == 0)
{
printf("█");
}
/**< 显示状态 */
else if(status[i][j] == 1)
{
photograph(i,j);/**< 图片对应表 */
}
}
printf("\n");
}
return 0;
}
/**< 延时 */
int delayed(int n)
{
while(n--)
{
Sleep(1000);/**< 延时1000ms即1s */
}
return 0;
}
/**< 菜单 */
int menu()
{
int choice = 0;/**< 临时变量 记录用户选择 */
printf("===欢迎进入图片配对游戏===\n");
printf(" 1 新游戏\n");
printf(" 2 排行榜\n");
printf(" 0 退出\n");
while(1)
{
printf("请选择[0-2]:");
scanf("%d",&choice);
if(choice >= 0 && choice <= 2)
{
break;
}
}
if(choice == 1)
{
new_game();/**< 新游戏 */
}
else if(choice == 2)
{
ranking_list();/**< 排行榜 */
}
else
{
exit(0);/**< 退出游戏 */
}
return 0;
}
/**< 新游戏 */
int new_game()
{
int i = 0,j = 0;/**< 循环变量 */
int x0 = 0,y0 = 0,x1 = 0,y1 = 0;/**< 两次输入图片的位置信息 */
while(1)
{
printf("请输入矩阵尺寸([6-16]之间的偶数):");
scanf("%d",&size);
getchar();
if(size % 2 == 0 && (size >= 2 && size <= 16))
{
break;
}
}
initialize();/**< 初始化 */
/**< 更新状态表 */
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
status[i][j] = 1;/**< 1状态 显示 */
}
}
print_data();/**< 打印数据 */
delayed(size);/**< 延时1*N秒 */
system("cls");/**< 清屏 */
/**< 更新状态表 */
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
status[i][j] = 0;/**< 0状态 倒扣 */
}
}
print_data();/**< 打印数据 */
printf("记忆时间到...\n");
printf("开始游戏...\n");
clock_t start = clock();/**< 记录开始时间 */
for(i = 0;i < size * size;)
{
printf("请输入第一个图片的坐标(x,y):");
scanf("%d %d",&x0,&y0);
getchar();
printf("请输入第二个图片的坐标(x,y):");
scanf("%d %d",&x1,&y1);
/**< 匹配成功 */
if(matrix[x0][y0] == matrix[x1][y1])
{
status[x0][y0] = 1;
status[x1][y1] = 1;
i += 2;/**< 匹配成功 图片数量+2 */
system("cls");/**< 清屏 */
print_data();/**< 打印数据 */
}
/**< 匹配失败 */
else
{
status[x0][y0] = 1;
status[x1][y1] = 1;
system("cls");/**< 清屏 */
print_data();/**< 打印数据 */
delayed(2);/**< 延时2秒 */
status[x0][y0] = 0;
status[x1][y1] = 0;
system("cls");/**< 清屏 */
print_data();/**< 打印数据 */
}
}
clock_t finish = clock();/**< 结束时间 */
duration = (int)(finish - start) / CLOCKS_PER_SEC;
printf("本次游戏用时: %d s\n",duration);
getchar();
save();/**< 保存排行榜 */
system("cls");/**< 清屏 */
menu();/**< 返回菜单 */
return 0;
}
/**< 排行榜 */
int ranking_list()
{
FILE *fp;/**< 文件指针 */
int i = 0,j = 0,k = 0;/**< 循环变量 */
int difficulty = 6;/**< 难度编号 */
int x;
if((fp = fopen("rankinglist.txt","r")) == NULL)/**< 打开文件 */
{
printf("无法打开文件!\n");
exit(1);
}
while(!feof(fp))/**< 文件没有结束 */
{
fscanf(fp,"%d ",&x);/**< 把时间放到数组 */
times[k++] = x;
}
/**< 把文件中的数据放入数组 */
for(i = 0,k = 0;i < 6;i++)
{
for(j = 0;j < 3;j++)
{
rankinglist[i][j] = times[k++];
}
}
fclose(fp);/**< 关闭文件 */
/**< 打印排行榜 */
printf("==图片配对游戏排行榜==\n");
printf("难度 冠军 亚军 季军\n");
for(i = 0,difficulty = 6;i < 6;i++,difficulty += 2)
{
printf("%3d",difficulty);
for(j = 0;j < 3;j++)
{
printf("%5d",rankinglist[i][j] );
}
printf("\n");
}
printf("\n");
return 0;
}
/**< 图片对应表 */
int photograph(int x,int y)
{
if(matrix[x][y] == 0)
{
printf(" ~");
}
else if(matrix[x][y] == 1)
{
printf(" !");
}
else if(matrix[x][y] == 2)
{
printf(" @");
}
else if(matrix[x][y] == 3)
{
printf(" #");
}
else if(matrix[x][y] == 4)
{
printf(" $");
}
else if(matrix[x][y] == 5)
{
printf(" =");
}
else if(matrix[x][y] == 6)
{
printf(" ^");
}
else if(matrix[x][y] == 7)
{
printf(" &");
}
else if(matrix[x][y] == 8)
{
printf(" *");
}
else if(matrix[x][y] == 9)
{
printf(" +");
}
else
{
printf("未定义图片!\n");
}
return 0;
}
/**< 保存排行榜 */
int save()
{
int i = 0,j = 0,k = 0;
int x = 0;
/**< 更新数据 把这次的时间存到相应的位置 */
/**< 遍历难度为size的数据 */
for(i = 0;i < 3;i++)
{
/**< 如果新的数据小于原来的数据 刷新数据 */
if(rankinglist[size / 2 - 3][i] > duration)
{
/**< 把后面的数据向后移动一位 */
for(j = 2;j > i;j++)
{
rankinglist[size / 2 - 3][j] = rankinglist[size / 2 - 3][j - 1];
}
rankinglist[size / 2 - 3][i] = duration;/**< 把新的数据插入 */
}
}
/**< 把排行榜数据放入时间表 */
for(i = 0,k = 0;i < 6;i++)
{
for(j = 0;j < 3;j++)
{
times[k++] = rankinglist[i][j];
}
}
/**< 把更新的数据写入文件 */
FILE *fp1;/**< 文件指针 */
/**< 打开文件 */
fp1 = fopen("rankinglist.txt","w");
/**< 写入文件 */
for(i = 0,k = 0;i < 18;i++)
{
x = times[k++];
fprintf(fp1,"%d ",x);/**< 把时间放到数组 */
}
fclose(fp1);/**< 关闭文件 */
return 0;
}
/**< 主函数 */
int main()
{
/**< 进入菜单 */
menu();
return 0;
}
/** \ 感恩
*
* \ 1 感谢你的阅读 希望对你有所帮助
* \ 2 如果喜欢 欢迎转载 评论 如果不喜欢 欢迎指出bug 不足之处 一定改进
* \ 3 在这里只是抛砖引玉 希望得到各位大神的指点 写出更好的东西 分享给大家
* \ 4 希望大家可以一起愉快的交流 也希望大家都愿意分享美好的东西
*
*
* \ 昵称 :回车键
* \ QQ号 :1737397473
* \ QQ交流群 :555404957
* \ 新浪微博 :http://weibo.com/u/6069955504
* \ 新浪博客 :http://blog.sina.com.cn/u/6069955504
*
*/
/** \ 题目信息 */
/** \
图片配对游戏
(1)任务描述
在一个N*N的矩阵中,随机分布着若干图片,图片一共10种,每种必成对出现,每
个图片占据矩阵中一个元素的位置。游戏开始时,先将分布好图片的矩阵给玩家看一定
时间,然后将图片扣上,游戏开始并计时。玩家选择相同图片位置,一次只能选择两个,若
正确,则这两个图片翻过来;若不正确,则将这两个图片翻过来给玩家看2秒后,再扣过去。
如此进行,直至矩阵中的图片全部翻过来为止。
(2)功能要求
1 矩阵大小允许玩家设定,最小为6*6,最大为16*16.
2 游戏开始前的图片预览时间长短根据矩阵大小设定,为1*N秒。
3 图片随机分布,每次不一定10种图片全出现。
4 游戏结束时,显示玩家所花时间,并允许玩家选择重新游戏或退出。
5 建立排行榜,同一难度级别保留3位的优越成绩。
*/
/** \ 开发平台
*
* \ 系统 Windows10
* \ 开发环境 Code::Blocks 13.12
* \ 其他C语言开发平台也可以
*
*/
/**< 头文件 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
/**< 宏定义 */
#define MAX 16/**< 矩阵最大大小 */
/**< 全局变量 */
int size = 0;/**< 矩阵尺寸 */
int matrix[MAX][MAX];/**< 矩阵 保存图片信息 */
int picture[MAX*MAX];/**< 图片信息 */
int status[MAX][MAX];/**< 状态 显示/倒扣 */
int rankinglist[6][3];/**< 排行榜 */
int times[18];/**< 时间 */
int duration;/**< 游戏用时 */
/**< 函数申明 */
int initialize();/**< 初始化 */
int print_data();/**< 打印数据 */
int delayed(int n);/**< 延时 */
int menu();/**< 菜单 */
int new_game();/**< 新游戏 */
int ranking_list();/**< 排行榜 */
int photograph(int x,int y);/**< 图片对应表 */
int save();/**< 保存排行榜 */
/**< 初始化 */
int initialize()
{
int i = 0,j = 0,k = 0;/**< 循环变量 */
int t = 0;/**< 图片类型 */
int x = 0;/**< 图片信息表下标 */
/**< 随机数种子 */
srand((unsigned)time(NULL));
/**< 把矩阵数据全部置为-1 */
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
matrix[i][j] = -1;
}
}
/**< 把图片信息数据全部置为-1 */
for(i = 0;i < size * size;i++)
{
picture[i] = -1;
}
/**< 随机生成图片信息表的图片序号 */
for(i = 0;i < size * size;)
{
/**< 生成图片种类 */
t = rand() % 10;
/**< 放入第一个图片 */
while(1)
{
/**< 生成图片信息表下标 */
x = rand() % (size * size);
if(picture[x] == -1)/**< 当前图片信息表没有放入图片 */
{
picture[x] = t;
break;
}
}
i++;
/**< 放入和第一个一样的图片 */
while(1)
{
/**< 生成图片信息表下标 */
x = rand() % (size * size);
if(picture[x] == -1)/**< 当前图片信息表没有放入图片 */
{
picture[x] = t;
break;
}
}
i++;
}
/**< 把图片信息表中的信息填入到矩阵中 */
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
matrix[i][j] = picture[k];
k++;
}
}
/**< 初始化状态表 */
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
status[i][j] = -1;/**< -1状态未定义 */
}
}
return 0;
}
/**< 打印数据 */
int print_data()
{
int i = 0,j = 0;
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
/**< 倒扣状态 */
if(status[i][j] == 0)
{
printf("█");
}
/**< 显示状态 */
else if(status[i][j] == 1)
{
photograph(i,j);/**< 图片对应表 */
}
}
printf("\n");
}
return 0;
}
/**< 延时 */
int delayed(int n)
{
while(n--)
{
Sleep(1000);/**< 延时1000ms即1s */
}
return 0;
}
/**< 菜单 */
int menu()
{
int choice = 0;/**< 临时变量 记录用户选择 */
printf("===欢迎进入图片配对游戏===\n");
printf(" 1 新游戏\n");
printf(" 2 排行榜\n");
printf(" 0 退出\n");
while(1)
{
printf("请选择[0-2]:");
scanf("%d",&choice);
if(choice >= 0 && choice <= 2)
{
break;
}
}
if(choice == 1)
{
new_game();/**< 新游戏 */
}
else if(choice == 2)
{
ranking_list();/**< 排行榜 */
}
else
{
exit(0);/**< 退出游戏 */
}
return 0;
}
/**< 新游戏 */
int new_game()
{
int i = 0,j = 0;/**< 循环变量 */
int x0 = 0,y0 = 0,x1 = 0,y1 = 0;/**< 两次输入图片的位置信息 */
while(1)
{
printf("请输入矩阵尺寸([6-16]之间的偶数):");
scanf("%d",&size);
getchar();
if(size % 2 == 0 && (size >= 2 && size <= 16))
{
break;
}
}
initialize();/**< 初始化 */
/**< 更新状态表 */
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
status[i][j] = 1;/**< 1状态 显示 */
}
}
print_data();/**< 打印数据 */
delayed(size);/**< 延时1*N秒 */
system("cls");/**< 清屏 */
/**< 更新状态表 */
for(i = 0;i < size;i++)
{
for(j = 0;j < size;j++)
{
status[i][j] = 0;/**< 0状态 倒扣 */
}
}
print_data();/**< 打印数据 */
printf("记忆时间到...\n");
printf("开始游戏...\n");
clock_t start = clock();/**< 记录开始时间 */
for(i = 0;i < size * size;)
{
printf("请输入第一个图片的坐标(x,y):");
scanf("%d %d",&x0,&y0);
getchar();
printf("请输入第二个图片的坐标(x,y):");
scanf("%d %d",&x1,&y1);
/**< 匹配成功 */
if(matrix[x0][y0] == matrix[x1][y1])
{
status[x0][y0] = 1;
status[x1][y1] = 1;
i += 2;/**< 匹配成功 图片数量+2 */
system("cls");/**< 清屏 */
print_data();/**< 打印数据 */
}
/**< 匹配失败 */
else
{
status[x0][y0] = 1;
status[x1][y1] = 1;
system("cls");/**< 清屏 */
print_data();/**< 打印数据 */
delayed(2);/**< 延时2秒 */
status[x0][y0] = 0;
status[x1][y1] = 0;
system("cls");/**< 清屏 */
print_data();/**< 打印数据 */
}
}
clock_t finish = clock();/**< 结束时间 */
duration = (int)(finish - start) / CLOCKS_PER_SEC;
printf("本次游戏用时: %d s\n",duration);
getchar();
save();/**< 保存排行榜 */
system("cls");/**< 清屏 */
menu();/**< 返回菜单 */
return 0;
}
/**< 排行榜 */
int ranking_list()
{
FILE *fp;/**< 文件指针 */
int i = 0,j = 0,k = 0;/**< 循环变量 */
int difficulty = 6;/**< 难度编号 */
int x;
if((fp = fopen("rankinglist.txt","r")) == NULL)/**< 打开文件 */
{
printf("无法打开文件!\n");
exit(1);
}
while(!feof(fp))/**< 文件没有结束 */
{
fscanf(fp,"%d ",&x);/**< 把时间放到数组 */
times[k++] = x;
}
/**< 把文件中的数据放入数组 */
for(i = 0,k = 0;i < 6;i++)
{
for(j = 0;j < 3;j++)
{
rankinglist[i][j] = times[k++];
}
}
fclose(fp);/**< 关闭文件 */
/**< 打印排行榜 */
printf("==图片配对游戏排行榜==\n");
printf("难度 冠军 亚军 季军\n");
for(i = 0,difficulty = 6;i < 6;i++,difficulty += 2)
{
printf("%3d",difficulty);
for(j = 0;j < 3;j++)
{
printf("%5d",rankinglist[i][j] );
}
printf("\n");
}
printf("\n");
return 0;
}
/**< 图片对应表 */
int photograph(int x,int y)
{
if(matrix[x][y] == 0)
{
printf(" ~");
}
else if(matrix[x][y] == 1)
{
printf(" !");
}
else if(matrix[x][y] == 2)
{
printf(" @");
}
else if(matrix[x][y] == 3)
{
printf(" #");
}
else if(matrix[x][y] == 4)
{
printf(" $");
}
else if(matrix[x][y] == 5)
{
printf(" =");
}
else if(matrix[x][y] == 6)
{
printf(" ^");
}
else if(matrix[x][y] == 7)
{
printf(" &");
}
else if(matrix[x][y] == 8)
{
printf(" *");
}
else if(matrix[x][y] == 9)
{
printf(" +");
}
else
{
printf("未定义图片!\n");
}
return 0;
}
/**< 保存排行榜 */
int save()
{
int i = 0,j = 0,k = 0;
int x = 0;
/**< 更新数据 把这次的时间存到相应的位置 */
/**< 遍历难度为size的数据 */
for(i = 0;i < 3;i++)
{
/**< 如果新的数据小于原来的数据 刷新数据 */
if(rankinglist[size / 2 - 3][i] > duration)
{
/**< 把后面的数据向后移动一位 */
for(j = 2;j > i;j++)
{
rankinglist[size / 2 - 3][j] = rankinglist[size / 2 - 3][j - 1];
}
rankinglist[size / 2 - 3][i] = duration;/**< 把新的数据插入 */
}
}
/**< 把排行榜数据放入时间表 */
for(i = 0,k = 0;i < 6;i++)
{
for(j = 0;j < 3;j++)
{
times[k++] = rankinglist[i][j];
}
}
/**< 把更新的数据写入文件 */
FILE *fp1;/**< 文件指针 */
/**< 打开文件 */
fp1 = fopen("rankinglist.txt","w");
/**< 写入文件 */
for(i = 0,k = 0;i < 18;i++)
{
x = times[k++];
fprintf(fp1,"%d ",x);/**< 把时间放到数组 */
}
fclose(fp1);/**< 关闭文件 */
return 0;
}
/**< 主函数 */
int main()
{
/**< 进入菜单 */
menu();
return 0;
}
/** \ 感恩
*
* \ 1 感谢你的阅读 希望对你有所帮助
* \ 2 如果喜欢 欢迎转载 评论 如果不喜欢 欢迎指出bug 不足之处 一定改进
* \ 3 在这里只是抛砖引玉 希望得到各位大神的指点 写出更好的东西 分享给大家
* \ 4 希望大家可以一起愉快的交流 也希望大家都愿意分享美好的东西
*
*/
运行结果:
阅读全文
1 0
- 图片配对游戏 [C语言 课程设计]
- C语言课程设计任务书
- C语言课程设计
- C语言课程设计
- C语言课程设计
- c语言课程设计
- C语言课程设计---通讯录
- c语言课程设计
- c语言课程设计
- c语言课程设计笔记
- C语言课程设计
- C语言课程设计
- c语言课程设计
- c语言课程设计
- 求助!!!C语言课程设计
- c语言课程设计2
- c语言课程设计1
- C语言课程设计----电子词典
- Java Object中的equals和hashCode
- 转载CV_8UC1,CV_8UC2,CV_8UC3的意思
- Maximum Depth of Binary Tree--LeetCode
- 前端常见的知识点(一)
- HDU 6198 推公式+矩阵快速幂
- 图片配对游戏 [C语言 课程设计]
- 最全Pycharm教程(31)——Pyhcarm实战
- myeclipse找不到Deployment Assembly ,报错
- 初窥nodejs(一)
- java颜色对照表
- SpringMVC: can be found for element 'mvc:annotation-driven'
- Unix—read & write
- ES6--数值的扩展
- RecyclerView的基本用法(第一行代码android学习笔记)