| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 763 人关注过本帖
标题:[求助]菜鸟的第一次程序求助--游戏程序
只看楼主 加入收藏
jaehe
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-12-21
收藏
 问题点数:0 回复次数:9 
[求助]菜鸟的第一次程序求助--游戏程序

求助,菜鸟编的一个小游戏程序----记忆卡片,但还有一些不顺的地方,请各位高手帮忙一下。
怎么实现图片(程序中用字母代替的)显示和怎么实现随机丢掉卡片(红色字体)。麻烦各位高手看一下,支持一下,有何改进一下。
万分感谢,湿顶叩头。
有何意见或改进程序都可以发到我的邮箱: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;
}
}
}

搜索更多相关主题的帖子: 游戏 
2007-09-09 09:19
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 

标准C中是没有图形库的~~~~~


偶学编程,也许本身就是一个错。。。
2007-09-09 09:22
jaehe
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-12-21
收藏
得分:0 
那知道如何实现吗?
2007-09-09 09:26
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
MFC做界面,更牛点直接用API~~应该还有很多方法

(或者用VB,不过这里不是VB区,这个先不讨论。。。)

偶学编程,也许本身就是一个错。。。
2007-09-09 09:36
jaehe
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-12-21
收藏
得分:0 

不懂,樓上可不可以說清楚點?謝謝.

2007-09-09 09:38
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
其实MFC和API已经是个原子概念了,我已经不知道再怎么解释好了。。。

只能说,要做出你预期的图形界面,只能借助MFC库、API或其他另外的图形库来进行编程。。。

偶学编程,也许本身就是一个错。。。
2007-09-09 09:41
jaehe
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-12-21
收藏
得分:0 
還是不懂...悶.
2007-09-09 10:04
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-09-09 10:15
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
用allegro等图形库

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-09-09 17:59
jaehe
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-12-21
收藏
得分:0 

那隨機的呢??

2007-09-13 12:22
快速回复:[求助]菜鸟的第一次程序求助--游戏程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039649 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved