求助,菜鸟编的一个小游戏程序----记忆卡片,但还有一些不顺的地方,请各位高手帮忙一下。
怎么实现图片(程序中用字母代替的)显示和怎么实现随机丢掉卡片(红色字体)。麻烦各位高手看一下,支持一下,有何改进一下。
万分感谢,湿顶叩头。
有何意见或改进程序都可以发到我的邮箱:jaehe@126.com,或直接留言。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int a[4][4],b[4][4],c[4][4]={0},d[4][4]={0},flag=0,f=0;
/*二维数组a用来存储卡片的正面,b则是辈面,c用于存储卡片的上一个状态,d用于辅助*/
void time(int p) //时间延迟的函数(形参为几则为几秒,由于是我个人计算,可能误差较大)
{
int i,j,k,l;
for(i=0;i<=p;i++)
for(j=0;j<=158;j++)
for(k=0;k<=1000;k++)
for(l=0;l<=1000;)
l++;
}
void js()
{int a;
system("cls");
for(a=5;a>=0;a--)
{
printf("%d",a);
time(1);
system("cls");}
printf("游戏开始.....");
time(2);
}
void zm() //《正面图形的付值,最后要改成随机付值》
{
a[0][0]=5; a[0][1]=3; a[0][2]=5; a[0][3]=3;
a[1][0]=5; a[1][1]=6; a[1][2]=3; a[1][3]=5;
a[2][0]=6; a[2][1]=1; a[2][2]=6; a[2][3]=6;
a[3][0]=6; a[3][1]=3; a[3][2]=5; a[3][3]=3;
/*将以上数据改为随机丢出十六个图形,其中三个图形重复出现5次,一个图形(即鬼牌)只出现一次*/
}
void zm_1() //《正面图形的付值,最后要改成随机付值》
{
a[0][0]=65; a[0][1]=67; a[0][2]=66; a[0][3]=65;
a[1][0]=67; a[1][1]=66; a[1][2]=1; a[1][3]=67;
a[2][0]=66; a[2][1]=67; a[2][2]=66; a[2][3]=65;
a[3][0]=65; a[3][1]=65; a[3][2]=67; a[3][3]=66;
/*将以上数据改为随机丢出十六个图形,其中三个图形重复出现5次,一个图形(即鬼牌)只出现一次*/
}
void zm_2() //《正面图形的付值,最后要改成随机付值》
{
a[0][0]=24; a[0][1]=25; a[0][2]=26; a[0][3]=24;
a[1][0]=25; a[1][1]=24; a[1][2]=24; a[1][3]=25;
a[2][0]=26; a[2][1]=25; a[2][2]=1; a[2][3]=26;
a[3][0]=24; a[3][1]=26; a[3][2]=26; a[3][3]=25;
/*将以上数据改为随机丢出十六个图形,其中三个图形重复出现5次,一个图形(即鬼牌)只出现一次*/
}
void sz() //将正面图形显示出来
{
int i,j;
system("cls");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("--%c",a[i][j]);
printf("\n");
}
}
void fm() //反面
{
int i,j;
system("cls");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
b[i][j]=4;
}
}
void dc(int n) //《丢出一个玩家要翻出的图形,最后也要做成随机丢出》
/*这个函数最后必须改成随机丢出的,所以修改后,里面涉及调用此函数的部分也必须修改*/
{
void sf();
system("cls");
printf("请找出以下图案");
time(1);
system("cls");
printf("%c",n/*将n改为随机丢出的图形*/);
time(1);
sf();
}
void fz(int (*p)[4]) //将所有卡片进行180度大翻转
{
int m;
int i,j,k,l;
for(l=0,k=3;k>1;k--,l++)
for(i=3,j=0;j<4;i--,j++)
{
m=*(p[k]+i);
*(p[k]+i)=*(p[l]+j);
*(p[l]+j)=m;
}
}
void pd(int n) //判断玩家操作结果
{
int i,j,m,l,k=0;
void sf();
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
if(c[i][j]!=b[i][j]&&d[i][j]==1) { k=1; break; }
if(k==1) break;
}
if(i<4)
if(b[i][j]==1)
{
printf("\n\nOH NO");
time(1); system("cls");
zm(); dc(3); fm(); sf();
for(m=0;m<4;m++)
for(l=0;l<4;l++)
c[m][n]=0;
flag=0; f=0;
}
else
if(b[i][j]!=n/*将n改为随机丢出的图形*/)
{
printf("\n\nOH NO");
time(1); system("cls");
b[i][j]=c[i][j];
fz(a); fz(b);
sf();
}
else flag++;
d[i][j]=0;
}
void pd_1(int n) //判断玩家操作结果
{
int i,j,m,l,k=0;
void sf();
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
if(c[i][j]!=b[i][j]&&d[i][j]==1) { k=1; break; }
if(k==1) break;
}
if(i<4)
if(b[i][j]==1)
{
printf("\n\nOH NO");
time(1); system("cls");
zm(); dc(66); fm(); sf();
for(m=0;m<4;m++)
for(l=0;l<4;l++)
c[m][n]=0;
flag=0; f=0;
}
else
if(b[i][j]!=n/*将n改为随机丢出的图形*/)
{
printf("\n\nOH NO");
time(1); system("cls");
b[i][j]=c[i][j];
fz(a); fz(b);
sf();
}
else flag++;
d[i][j]=0;
}
void pd_2(int n) //判断玩家操作结果
{
int i,j,m,l,k=0;
void sf();
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
if(c[i][j]!=b[i][j]&&d[i][j]==1) { k=1; break; }
if(k==1) break;
}
if(i<4)
if(b[i][j]==1)
{
printf("\n\nOH NO");
time(1); system("cls");
zm(); dc(26); fm(); sf();
for(m=0;m<4;m++)
for(l=0;l<4;l++)
c[m][n]=0;
flag=0; f=0;
}
else
if(b[i][j]!=n/*将n改为随机丢出的图形*/)
{
printf("\n\nOH NO");
time(1); system("cls");
b[i][j]=c[i][j];
fz(a); fz(b);
sf();
}
else flag++;
d[i][j]=0;
}
void kz() //玩家的操作指令的接收及效果
{
void sf();
char i;
i=getch();
if(i=='1') { c[0][0]=b[0][0]; b[0][0]=a[0][0]; d[0][0]=1; }
if(i=='2') { c[0][1]=b[0][1]; b[0][1]=a[0][1]; d[0][1]=1; }
if(i=='3') { c[0][2]=b[0][2]; b[0][2]=a[0][2]; d[0][2]=1; }
if(i=='4') { c[0][3]=b[0][3]; b[0][3]=a[0][3]; d[0][3]=1; }
if(i=='q') { c[1][0]=b[1][0]; b[1][0]=a[1][0]; d[1][0]=1; }
if(i=='w') { c[1][1]=b[1][1]; b[1][1]=a[1][1]; d[1][1]=1; }
if(i=='e') { c[1][2]=b[1][2]; b[1][2]=a[1][2]; d[1][2]=1; }
if(i=='r') { c[1][3]=b[1][3]; b[1][3]=a[1][3]; d[1][3]=1; }
if(i=='a') { c[2][0]=b[2][0]; b[2][0]=a[2][0]; d[2][0]=1; }
if(i=='s') { c[2][1]=b[2][1]; b[2][1]=a[2][1]; d[2][1]=1; }
if(i=='d') { c[2][2]=b[2][2]; b[2][2]=a[2][2]; d[2][2]=1; }
if(i=='f') { c[2][3]=b[2][3]; b[2][3]=a[2][3]; d[2][3]=1; }
if(i=='z') { c[3][0]=b[3][0]; b[3][0]=a[3][0]; d[3][0]=1; }
if(i=='x') { c[3][1]=b[3][1]; b[3][1]=a[3][1]; d[3][1]=1; }
if(i=='c') { c[3][2]=b[3][2]; b[3][2]=a[3][2]; d[3][2]=1; }
if(i=='v') { c[3][3]=b[3][3]; b[3][3]=a[3][3]; d[3][3]=1; }
system("cls");
sf();
}
void sf() //对反面的输出,在游戏中也负责输出,但就不只是输出反面了!
{
int i,j;
system("cls");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("--%c",b[i][j]);
printf("\n");
}
}
void jy() //游戏的开头部分
{
printf("第一关\n");
printf("请在20秒内记忆以下图形的形状及位置\n(我目前只设置了10秒给你看)");
time(2);
zm();
sz();
time(10);/*为了调试方便,目前只设置10秒*/
js();
fm();
dc(3);
}
void jy_1() //游戏的开头部分
{
printf("第二关\n");
printf("请在20秒内记忆以下图形的形状及位置\n(我目前只设置了10秒给你看)");
time(2);
zm_1();
sz();
time(10);/*为了调试方便,目前只设置10秒*/
js();
fm();
dc(66);
}
void jy_2() //游戏的开头部分
{
printf("第三关\n");
printf("请在20秒内记忆以下图形的形状及位置\n(我目前只设置了10秒给你看)");
time(2);
zm_2();
sz();
time(10);/*为了调试方便,目前只设置10秒*/
js();
fm();
dc(26);
}
void zy()
{
int i;
jy();
for(i=0;i<80;i++)
{
if(flag==5&&f==0) { dc(5); f++; }/*flag用来标志玩家是否以找出五个同种图形*/
else if(flag==10&&f==1) { dc(6); f++; }/*f的作用非常特别,因为在游戏进行时出现矛盾,于是用f进行修正*/
else if(flag==15) break;
kz();
if(flag<5) pd(3);
else if(flag<10) pd(5);
else if(flag<15) pd(6);
}
if(i<80) printf("\n\nYOU WIN\n");
else printf("\n\nYOU LOSS\n");
flag=0;f=0;
}
void zy_1()
{
int i;
jy_1();
for(i=0;i<80;i++)
{
if(flag==5&&f==0) { dc(65); f++; }/*flag用来标志玩家是否以找出五个同种图形*/
else if(flag==10&&f==1) { dc(67); f++; }/*f的作用非常特别,因为在游戏进行时出现矛盾,于是用f进行修正*/
else if(flag==15) break;
kz();
if(flag<5) pd_1(66);
else if(flag<10) pd(65);
else if(flag<15) pd(67);
}
if(i<80) printf("\n\nYOU WIN\n");
else printf("\n\nYOU LOSS\n");
flag=0;f=0;
}
void zy_2()
{
int i;
jy_2();
for(i=0;i<80;i++)
{
if(flag==5&&f==0) { dc(25); f++; }/*flag用来标志玩家是否以找出五个同种图形*/
else if(flag==10&&f==1) { dc(24); f++; }/*f的作用非常特别,因为在游戏进行时出现矛盾,于是用f进行修正*/
else if(flag==15) break;
kz();
if(flag<5) pd_1(26);
else if(flag<10) pd(25);
else if(flag<15) pd(24);
}
if(i<80) printf("\n\nYOU WIN\n");
else printf("\n\nYOU LOSS\n");
flag=0;f=0;
}
void face()
{
printf("\t===============================================\n");
printf("\t==============翻牌游戏=========================\n");
printf("\t=================网络052-洪生杰,李佳泽,黄庆河==\n");
printf("\t \n");
printf("\t◆ 温馨提示: 输入 1 按enter键进入游戏; ◆\n");
printf("\t◆ 输入 2 游戏说明; 输入 0 退出. ◆\n");
printf("\t◆ 输入后都要按enter键;输错的话按 ← 键再输入◆\n");
printf("\t===============================================\n");
printf("\n");
}
void interface()
{
printf("\t********************************************\n");
printf("\t* ======================= *\n");
printf("\t*============翻牌游戏---菜单===============*\n");
printf("\t* ======================= *\n");
printf("\t* 1. 第一关 *\n");
printf("\t* 2. 第二关 *\n");
printf("\t* 3. 第三关 *\n");
printf("\t* 0. 退出 *\n");
printf("\t* 选择你要进入的界面, *\n");
printf("\t* 输入相应数字,按enter键进入.... *\n");
printf("\t* *\n");
printf("\t********************************************\n");
}
void main()
{
char choice;
while (1)
{
printf("\n-------------------------------------------------------------------\n\n");
face();
/*调用face()函数*/
printf("请输入你的选择:\n");
choice=getchar();
if (choice==10)
choice=getchar();
switch(choice)
{
case '0':
return ; /*在C-free中运行用return (1);在turboC中运行用return ;*/
case '1':
system("cls");
interface();
while (1)
{
printf("请输入你的选择:\n");
choice=getchar();
if (choice==10)
choice=getchar();
switch(choice)
{
case '0':
return ; /*在C-free中运行用return (1);在turboC中运行用return ;*/
case '1':
zy_1();
/*printf("are you continuing?(Y/N)\n");
scanf("%c",&a);
if(a=='Y')
{
system("cls");
zy_1();break;
}
else{ printf("game over!!!");
break;}*/
case '2':
zy();
case '3':
zy_2();
break;
default:
system("cls"); /* 清屏 */
printf("\n-------------------------------------------------------------------\n\n");
printf("输入错误,请重新输入:\n");
break;
}
}
break;
case '2':
system("cls"); /* 清屏 */
printf("\n-------------------------------------------------------------------\n\n");
printf("==游戏说明==\n");
printf("1.给挑战者20秒记忆图片的位置;\n2.盖上所有的牌,要挑战者翻出指定的相同的5张图片来,再继续下一张,\n如果翻错了则全部卡会对调180度,并把翻错的牌盖上,\n但如果翻到的是");
printf("%c",1);
printf("的牌的话就会全部盖上\n");
break;
default:
system("cls"); /* 清屏 */
printf("\n-------------------------------------------------------------------\n\n");
printf("输入错误,请重新输入:\n");
break;
}
}
}