为什么函数无法调用
本帖最后由 还差几 于 2017-10-5 15:47 编辑谁能帮帮我? {:10_254:}
三个函数都无法调用{:5_94:}
@丶忘却的年少o
@小甲鱼
代码详细如下:(代码比较长{:5_95:} )
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
//宏定义
#define S 31
#define g(h) h/2
#define da printf
#define gd 23
#define kd 14
#define zuoyi 'a' //左移动
#define youyi 'd'//右移动
#define xiayi 's'//下移动 (加速)
#define bx '-' //变形
#define zt '+' //暂停
//结构体
typedef struct{//坐标结构
int x;
int y;
}zb;
typedef struct{//方块结构
int lx; //他的类型0是田1是T 2是F,3是N,4是条
int x1;//3初始
int y1;//2初始
zb zb; //他的坐标,中心点
const char *p;//指向一个形状地址;
}xz;
//全局变量
char rf="";
const char *ditu;//地图
const char *zhangaiwu ;//障碍物
clock_t jg;
int nd;//设置难度,就是方块下降的速度 间隔时间,微妙
int sfch;//是否重行绘制1绘制0不绘制
int jifen;//当前玩了多少分
xz dqxz; //当前形状 ------
xz xgxz;//下一个形状--------------
xz lsxz; //临时形状----
const char *leixing={ //这里的指针都是指向常量区的,大家可以添加跟多的方块类型
{"■","■","■","■","",""},//方块田比较特殊,旋转就不用旋转
{"■","","■","■","■",""}, //T块
{"■","■","■","","■",""}, //F块
{"","■","■","■","■",""}, //N块
{"■","","■","","■",""}, //条块
};
int fx={-1,0,1,0,1,0};//方向坐标
//函数定义
int dengru(void);
int zhuce(void);
int xoxi(void);
int elsfk(int argc, char *argv[]);
void gotoxy( int x, int y );
void chushi();//初始一些数据
void printf_dy();//打印地图数据
void bianxing(xz*dqxz);//变形 (方块指针,旋转几次)
char jieshou();//接受字符输入,直到接受到字符才返回;
int get_c();//缓冲区获取一个功能键状态,如果获取失败,返回字符-1 (马上返回 )-1失败0左移 1下移动 2右移动 3变型 4暂停
int jiance(int n);//下左右移动检测 OK返回1,失败返回0
void zanting();//暂停
int yidong(int n);//根据方向移动, 到底部,返回-1
int jiaru();//将当前不能下降的方块加入到障碍物数组里面;并消行,返回有多少行消了
void xiaohang(int h);//消行(行坐标)
void shenchan();//生产方块
int naozhong();//闹钟,间隔多久
//主函数
int main(){
int i;
wer:
scanf("%d",&i);
if(i==1)
{
int dengru();
goto wer;
}
else
{
if(i==2)
{
int zhuce();
goto wer;
}
else
{
if(i==3)
{
int xoxi();
goto wer;
}
else{
int elsfk(int argc, char *argv[]);
}
}
}
return 0;
}
//其他函数
int zhuce(){
int jieguo,i;
char a,b,c,g,h;
FILE *fa;
Q3:
printf("请输入您要注册的账号名(30位以内):");
scanf("%s",&a);
Q1:
printf("输入您要注册的账号密码(30位以内):");
for(i=0;i<100;i++){
b=getch();
if(b=='\r')
break;
printf("*");
}
b='\0';
printf("\n");
printf("请您确认要注册的账号密码:");
for(i=0;i<100;i++){
c=getch();
if(c=='\r')
break;
printf("*");
}
c='\0';
printf("\n");
if((strcmp(b,c))!=0){
Q2:
printf("两次密码不相同\n重新输入输0,退出输1:");
scanf("%c",&g);
getchar();
}else{
if((fa=fopen(a,"w"))==NULL){
printf("shibai\n");
}
if((fputs(b,fa))==EOF){
Q4:
printf("注册失败\n退出输入1,重新注册输入0:");
scanf("%c",&h);
getchar();
if(g=='1'){
jieguo=0;
}else if(g=='0'){
goto Q3;
}else{
printf("输入错误\n");
goto Q4;
}
}else{
printf("注册成功\n请牢记您的帐号:%s\n",a);
jieguo==1;
}
fclose(fa);
}
return jieguo;
}
int dengru(){
int jieguo,i,c;
char b,d;
FILE *fa;
Q1:
printf("输入用户名:");
scanf("%s",&rf);
getchar();
printf("输入密码:");
for(i=0;i<100;i++){
b=getch();
if(b=='\r')
break;
printf("*");
}
b='\0';
printf("\n");
if((fa=fopen(rf,"r"))==NULL){
printf("帐号错误\n");
Q2:
printf("如果要重新输入——输入0,如果要退出——输入1\n");
scanf("%d",&c);
getchar();
if(c==0){
goto Q1;
}else if(c==1){
jieguo=0;
}else{
printf("输入错误,请重新输入\n");
goto Q2;
}
}else{
while(!feof(fa)){
fgets(d,S,fa);
}
if((strcmp(b,d))!=0){
printf("您的密码或帐号错误\n请重新输入:");
goto Q1;
}else{
printf("登录成功\n");
jieguo=1;
}
fclose(fa);
}
return jieguo;
}
int xoxi(void){
int ms,jieguo,asdf;
char mnbvcxz,name_1,qd,mm,uy,mm1;
/*双人模式数据*/
int q, w, q1=0, w1=0, ju, se, ty,i;
FILE *fa;
/*单人模式数据*/
int j, r, jq=0, rq=0;
int a, b, c, d, e, f, g, h;
/*单人模式的5个机器人*/
int aa[]={0,1,2,1,1,1,0,1,0,2,2,2,0,0,2,1,1,0,2,1,2,0,1,2,0,1,2,0,1,2,0,0,0,1,2,1,2,1,2,1,2,1,0,1,2,1,2,1,2,0,0,1,0,2,1,2,1,2,0,1,2,1,2,1,2,1,0,0,0,2,1,2,1,2,1,1,1,2,1,2,1,2,2,2,0,1,2,1,1,1,0,1,0,2,2,2,0,0,2,1,1,0,2,1,2,0,1,2,0,1,2,0,1,2,0,0,0,1,2,1,2,1,2,1,2,1,0,1,2,1,2,1,2,0,0,1,0,2,1,2,1,2,0,1,2,1,2,1,2,1,0,0,0,2,1,2,1,2,1,1,1,2,1,2,1,2,2,2};
int bb[]={2,1,2,0,1,2,1,2,1,0,2,1,0,2,1,0,2,1,0,2,1,2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0,2,1,2,0,1,2,1,2,1,0,2,1,0,2,1,0,2,1,0,2,1,2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0};
int cc[]={2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,2,0,1,2,1,2,1,0,2,1,0,2,1,0,2,1,0,2,1,2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,2,0,1,2,1,2,1,0,2,1,0,2,1,0,2,1,0,2,1};
int dd[]={0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,2,1,2,1,2,1,2,1,0,2,0,2,0,2,0,1,1,0,1,2,1,0,2,0,0,1,1,2,2,2,0,0,1,2,0,2,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,2,0,1,2,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,2,1,2,1,2,1,2,1,0,2,0,2,0,2,0,1,1,0,1,2,1,0,2,0,0,1,1,2,2,2,0,0,1,2,0,2,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,0,2,1,2,0,1,2};
int ee[]={1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,1,0,2,0,0,1,1,0,2,1,2,1,1,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,0,1,0,1,2,0,0,1,0,2,1,0,2,0,2,1,0,2,2,1,1,0,1,0,2,1,0,1,2,0,1,2,0,2,1,0,2,1,0,2,0,0,2,1,2,1,2,0,2,0,2,0,0,0,2,1,0,2,0,0};
da("%s:\n你好\n欢迎游玩本游戏\n本游戏是猜拳游戏\n请你选择模式:\n双人模式输入:0\n单人模式输入:1\n请输入:",rf);
CON:
scanf("%d",&ms);
if(ms>1)
{
da("输入错误,请重新选择:");
goto CON;
}
da("确定吗?\n是:y\n不:n\n请输入:");
scanf("%c",&qd);
getchar();
if(qd=='n')
{
da("请选择:");
goto CON;
}
switch(ms)
{
case 0:
/*双人模式*/
printf("玩家1的账号已登录:%s\n玩家2请登录账号(没有账号请输入0注册):",rf);
scanf("%d",&asdf);
if(asdf==0){
zhuce();
goto Q1;
}else{
Q1:
printf("玩家2请输入用户名:");
scanf("%s",&name_1);
printf("玩家2请输入密码:");
for(i=0;i<100;i++){
mm=getch();
if(mm=='\r')
break;
printf("*");
}
mm='\0';
printf("\n");
if((fa=fopen(name_1,"r"))==NULL){
printf("帐号错误\n");
Q2:
printf("如果要重新输入——输入0,如果要退出——输入1\n");
scanf("%d",&ty);
getchar();
if(c==0){
goto Q1;
}else if(ty==1){
return 0;
}else{
printf("输入错误,请重新输入\n");
goto Q2;
}
}else{
while(!feof(fa)){
fgets(mm1,S,fa);
}
if((strcmp(mm1,mm))!=0){
printf("您的密码或帐号错误\n请重新输入:");
goto Q1;
}else{
printf("登录成功\n");
return 0;
}
fclose(fa);
}
}
da("输入要玩几局:");
scanf("%d",&ju);
if(g(ju)==ju-g(ju))
{
se=ju/2;
}
else
{
se=ju/2+1;
}
da("本轮%d局,%d胜\n",ju,se);
for(ty=0;ty<ju;ty++)
{
CON2:
da("0.是石头\n1.是剪刀\n2.是布\n\n请%s出拳:",rf);
scanf("%d",&q);
if(q==0)
{
for(h=0;h<30;h++)
{
da("%s已出拳 ! !!!!!!!!!!!!!\n",rf);
}
}
else
{
if(q==1)
{
for(h=0;h<30;h++)
{
da("%s已出拳!!!!!!!!!!!\n",rf);
}
}
else
{
if(q==2)
{
da("%s已出拳 !!!!!!!!!!!\n",rf);
}
else
{
goto CON2;
}
}
}
CON3:
da("0.是石头\n1.是剪刀\n2.是布\n\n请%s出拳:",name_1);
scanf("%d",&w);
if(q==w)
{
da("s平局s\n目前比分:\n%d:%d\n",q1,w1);
}
else
{
if(q==0)
{
if(w==1)
{
q1++;
da("%s出石头战胜了%s的剪刀\n目前比分:\n%d:%d\n",rf,name_1,q1,w1);
if(q1==se)
{
da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",rf,rf,q1,name_1,w1);
goto CON4;
}
}
else//w==2
{
w1++;
da("%s出布战胜了%s的石头\n目前比分:\n%d:%d\n",name_1,rf,q1,w1);
if(w1==se)
{
da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",name_1,name_1,w1,rf,q1);
goto CON4;
}
}
}
else
{
if(q==1)
{
if(w==0)
{
w1++;
da("%s出石头战胜了%s的剪刀\n目前比分:\n%d:%d\n",name_1,rf,q1,w1);
if(w1==se)
{
da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",name_1,name_1,w1,rf,q1);
goto CON4;
}
}
else//w==2
{
q1++;
da("%s出剪刀战胜了%s的布\n目前比分:\n%d:%d\n",rf,name_1,q1,w1);
if(q1==se)
{
da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",rf,rf,q1,name_1,w1);
goto CON4;
}
}
}
else//q==2
{
if(w==0)
{
q1++;
da("%s出布战胜了%s的石头\n目前比分:\n%d:%d\n",rf,name_1,q1,w1);
if(q1==se)
{
da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",rf,rf,q1,name_1,w1);
goto CON4;
}
}
else
{
if(w==1)
{
w1++;
da("%s出剪刀战胜了%s的布\n目前比分:\n%d:%d\n",name_1,rf,q1,w1);
if(w1==se)
{
da("%s获胜\n%s赢了%d局,而%s只赢%d局\n",name_1,name_1,w1,rf,q1);
goto CON4;
}
}
else
{
goto CON3;
}
}
}
}
}
}
CON4:
da("还想再玩其他的吗?\n想输入:Y\n不想输入:N\n请输入:");
scanf("%c",&mnbvcxz);
scanf("%c",&ms);
if(ms=='Y')
{
da("想玩输入对应数字:\n单人模式:1\n如果想再玩本模式输入:0\n请输入:");
goto CON;
}
break;
case 1:
/*单人模式*/
printf("开始单人猜拳游戏\n请先选择与几号机器人对决\n请输入它们对应编码\n1号机器人:0\n2号机器人:1\n3号机器人:2\n4号机器人:3\n5号机器人:4\n");
CONXIN:
scanf("%d",&a);
if(a<5)
{
b=a+1;
printf("%s想和%d机器人玩几局:",rf,b);
scanf("%d",&c);
if(g(c)==c-g(c))
{
d=c/2;
}
else
{
d=c/2+1;
}
printf("谁先赢%d局谁胜!!!!\n",d);
printf("请输入一个50以下的数:");
scanf("%d",&e);
g=e+c;
f=e;
for(;f<g;f++)
{
if(a==0)
{
j=aa;
}
else
{
if(a==1)
{
j=bb;
}
else
{
if(a==2)
{
j=cc;
}
else
{
if(a==3)
{
j=dd;
}
else
{
j=ee;
}
}
}
}
if(j==0)
{
printf("%d号机器人出了石头\n",b);
}
else
{
if(j==1)
{
printf("%d号机器人出了剪刀\n",b);
}
else
{
printf("%d号机器人出了布\n",b);
}
}
if(j==0)
{
for(h=0;h<30;h++)
{
printf("%d号机器人出了 ! !\n",b);
}
}
else
{
if(j==1)
{
for(h=0;h<30;h++)
{
printf("%d号机器人出了!!\n",b);
}
}
else
{
for(h=0;h<30;h++)
{
printf("%d号机器人出了 !!\n",b);
}
}
}
printf("0.是石头\n1.是剪刀\n2.是布\n\n现在该%s出拳:",rf);
CONXING:
scanf("%d",&r);
if(r<3)
{
if(j==r)
{
printf("s平局s\n");
g++;
printf("目前比分%d:%d\n",jq, rq);
printf("按任意键继续\n");
system("pause");
}
else
{
if(j==0)
{
if(r==1)
{
jq++;
printf("%d号机器出石头战胜了%s的剪刀!\n目前比分%d:%d\n",b,rf,jq, rq);
printf("按任意键继续\n");
system("pause");
if(jq==d)
{
printf("%d号机器人赢了\n赢了%d局\n而%s只赢%d局\n",b,jq,rf,rq);
goto QWE;
}
}
else
{
rq++;
printf("%s出布战胜%d号机器人的石头!\n目前比分%d:%d\n",rf,b,jq, rq);
printf("按任意键继续\n");
system("pause");
if(rq==d)
{
printf("%s赢了\n赢了%d局\n而%d号机器人只赢%d局\n",rf,rq,b,jq);
goto QWE;
}
}
}
else
{
if(j==1)
{
if(r==0)
{
rq++;
printf("%s出石头战胜%d号机器人的剪刀!\n目前比分%d:%d\n",rf,b,jq, rq);
printf("按任意键继续\n");
system("pause");
if(rq==d)
{
printf("%s赢了\n赢了%d局\n而%d号机器人只赢%d局\n",rf,rq,b,jq);
goto QWE;
}
}
else
{
jq++;
printf("%d号机器出剪刀战胜了%s的布!\n目前比分%d:%d\n",b,rf,jq, rq);
printf("按任意键继续\n");
system("pause");
if(jq==d)
{
printf("%d号机器人赢了\n赢了%d局\n而%s只赢%d局\n",b,jq,rf,rq);
goto QWE;
}
}
}
else
{
if(r==0)
{
jq++;
printf("%d号机器出布战胜了%s的石头!\n目前比分%d:%d\n",b,rf,jq, rq);
printf("按任意键继续\n");
system("pause");
if(jq==d)
{
printf("%d号机器人赢了\n赢了%d局\n而%s只赢%d局\n",b,jq,rf,rq);
goto QWE;
}
}
else
{
rq++;
printf("%s出剪刀战胜%d号机器人的布!\n目前比分%d:%d\n",rf,b,jq, rq);
printf("按任意键继续\n");
system("pause");
if(rq==d)
{
printf("%s赢了\n赢了%d局\n而%d号机器人只赢%d局\n",rf,rq,b,jq);
goto QWE;
}
}
}
}
}
}
else
{
printf("请重新输入:");
goto CONXING;
}
}
}
else
{
printf("请重新输入:");
goto CONXIN;
}
QWE:
printf("\n");
da("还想再玩其他的吗?\n想输入:Y\n不想输入:N\n请输入:");
scanf("%c",&mnbvcxz);
scanf("%c",&ms);
if(ms=='Y')
{
da("想玩输入对应数字:\n双人模式:0\n如果想再玩本模式输入:1\n请输入:");
goto CON;
}
break;
}
return 0;
}
int naozhong(){
clock_t njg=clock();
if(njg-jg>=nd){
jg=njg;
return 1;
}else{
return 0;
}
}
void shenchan(){
dqxz.zb =xgxz.zb ;
dqxz.x1 =xgxz.x1;
dqxz.y1 =xgxz.y1;
dqxz.lx =xgxz.lx;
int n;
for(n=0;n<6;n++){
dqxz.p =xgxz.p;
}
//生产一个下一个方块数据
xgxz.lx=rand()%5;
xgxz.x1=3;
xgxz.y1=2;
xgxz.zb .x=(kd-2)/2;
xgxz.zb.y =-1;
for(n=0;n<6;n++){
xgxz.p= leixing;
}
for(n=0;n<rand()%5;n++){
bianxing(&xgxz);
}
}
int jiaru(){//加入障碍物 ,返回有多少行可以消
int x1,y1,x,y,m,n=0;
for(y=0;y<dqxz.x1 ;y++){//打印方块
for(x=0;x<dqxz.y1 ;x++){
if(*(dqxz.p +n)=="■" ){
x1=dqxz.zb .x+x;
y1=dqxz.zb .y+y;
zhangaiwu="■";
}
n++;
}
}
m=0;
for(y1=0;y1<dqxz.x1 ;y1++){
n=0;
for(x=0;x<kd;x++){
y=dqxz.zb .y+y1;
if(zhangaiwu=="■" && y<gd-1) {
n++;
}
}
if(n==kd){
xiaohang(y);
m++;
}
}
return m;
}
void xiaohang(int h){//消行坐标
int x,y,y1;
for(y1=0;y1<h;y1++){
for(x=1;x<kd-1;x++){
y=h-y1;
if(y>0){
zhangaiwu=zhangaiwu;
}else{
zhangaiwu=". ";
}
}
}
}
int yidong(int n){//根据字符控制方块状态,如果到底部,则返回-1
int f=1;
if(jiance(n)==1){
if(n==1){
while(jiance(n)==1){
dqxz.zb .x=dqxz.zb .x+fx;
dqxz.zb .y=dqxz.zb .y+fx;
}
}else{
dqxz.zb .x=dqxz.zb .x+fx;
dqxz.zb .y=dqxz.zb .y+fx;
}
}
if(jiance(1)==0){
f=0;
}
return f;
}
void gotoxy( int x, int y ){
COORD c;
c.X = x - 1; c.Y = y - 1;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), c );
}
void zanting(){//暂停
gotoxy(kd*2+2,gd/2+7);
printf("请安“+”加号键继续!!");
while(jieshou()!='+'){//游戏继续啦
}
gotoxy(kd*2+2,gd/2+7);
printf(" -变形+暂停 ");
}
int jiance(int f){//下左右移动检测 OK返回1,失败返回0
xz lsxz;//零时形状
int x,y,n=0,m=1;
int x1,y1;
lsxz=dqxz;
lsxz.zb .x=lsxz.zb.x +fx;
lsxz.zb .y=lsxz.zb.y +fx;
for(y=0;y<lsxz.x1 ;y++){//打印方块
for(x=0;x<lsxz.y1 ;x++){
if(*(dqxz.p +n)=="■" ){
x1=lsxz.zb .x+x;
y1=lsxz.zb .y+y;
if(x1<1 ||x1>kd-2 ||y1<0 ||y1>gd-2){
m=0;
break;
}else if( zhangaiwu=="■" && y1>0){
m=0;
break;
}
}
n++;
}
}
return m;
}
int get_c(){//缓冲区获取一个功能键状态,如果获取失败,返回字符-1 (马上返回 )-1失败0左移 1下移动 2右移动 3变型 4暂停
char ls;
int n=-1;
if(kbhit()!=0){
ls=getch();
while(kbhit()){
getch();
}
}
switch(ls){
case zuoyi:n=0;break;
case youyi:n=2;break;
case xiayi:n=1;break;
case bx:n=3;break;
case zt:n=4;break;
}
return n;
}
void bianxing(xz*ybxz){//变形 (方块指针,旋转几次)
if(ybxz->lx==0){
return ;
}
int x,y,n,i;
int z={{4,2,0,5,3,1},{3,0,4,1,5,2}};
int z2={{2,3},{3,2},{1,-1}};
lsxz.zb=ybxz->zb ;
if(ybxz->x1==2){
i=1;
}else{
i=0;
}
for(n=0;n<6;n++){//旋转
lsxz.p=ybxz->p];
}
lsxz.zb.y=lsxz.zb.y +z2;//旋转之后的坐标的变换,我这里只简单处理了下,具体的坐标是这么样的没研究出来,考亲们研究啦
lsxz.x1 =z2;
lsxz.y1 =z2;
//---------------------------------
int x1,y1,m=1;
n=0;
for(y=0;y<lsxz.x1;y++){//遍历
for(x=0;x<lsxz.y1;x++){
if(lsxz.p=="■" ){
x1=lsxz.zb .x+x;
y1=lsxz.zb .y+y;
if(x1<1 ||x1>kd-2 ||y1>gd-2){
m=0;
break;
}else if( zhangaiwu=="■" && y1>0){
m=0;
break;
}
}
n++;
}
}
//--------------------------------------------
if(m==1){//如果零时方块和障碍物没有重叠,则把零时方块的信息复制个当前方块
ybxz->zb =lsxz.zb;
ybxz->x1=lsxz.x1 ;
ybxz->y1=lsxz.y1 ;
for(n=0;n<6;n++){
ybxz->p=lsxz.p ;
}
}
}
void chushi(){//初始一些数据
jifen=0;//初始化积分
srand((unsigned int)time(NULL));//初始化随机种子
jg=clock();//初始化时间
nd=300;//初始化难度,毫米级别
//---------初始化下个形状的数据---------------
int n;
xgxz.lx=rand()%5;
xgxz.x1=3;
xgxz.y1=2;
xgxz.zb .x=(kd-2)/2;
xgxz.zb.y =-1;
for(n=0;n<6;n++){
xgxz.p= leixing;
}
shenchan(); //产生一个方块
int x,y;
for(y=0;y<gd;y++){//初始化障碍物
for(x=0;x<kd;x++){
if(x==0||x==kd-1||y==gd-1){
zhangaiwu="■";
}else{
zhangaiwu=". ";
}
}
}
}
void printf_dy(){//打印地图数据
int x,y,n=0;
for(y=0;y<gd;y++){//初始化地图
for(x=0;x<kd;x++){
if(x==0||x==kd-1||y==0||y==gd-1){
ditu="●";
}else{
ditu=zhangaiwu;
}
}
}
// system("cls");
for(y=0;y<dqxz.x1 ;y++){//打印方块
for(x=0;x<dqxz.y1 ;x++){
int x1=dqxz.zb .x+x;
int y1=dqxz.zb .y+y;
if(dqxz.p=="■" && x1>0 &&x<kd-1 && y1>0 && y<gd-1){
ditu=dqxz.p;
}
n++;
}
}
gotoxy(1,1);//将光标移到最上面
for(y=0;y<gd;y++){//打印地图
for(x=0;x<kd;x++){
printf("%s",ditu);
}
printf("\n");
}
gotoxy(kd*2+2,gd/2-4);
printf("---下个方块---");
n=0;
for(x=0;x<3;x++){
gotoxy(kd*2+6,gd/2-2+x);
for(y=0;y<3 ;y++){
if(x<xgxz.x1 && y<xgxz.y1 ){
printf("%s",xgxz.p);
n++;
}else{
printf(" ");
}
}
}
gotoxy(kd*2+2,gd/2+2);
printf("---游戏积分---");
gotoxy(kd*2+2,gd/2+3);
printf(" %d",jifen*10);
gotoxy(kd*2+2,gd/2+5);
printf("---控制按钮---");
gotoxy(kd*2+2,gd/2+6);
printf(" A下 S下 D右 ");
gotoxy(kd*2+2,gd/2+7);
printf(" -变形+暂停 ");
}
char jieshou(){//接受字符输入,直到接受到字符才返回;
while( !kbhit() ){
Sleep(20);
}
char ls=getch();
while(kbhit()){
getch();
}
return ls;
}
int elsfk(int argc, char *argv[]){
chushi();
int jc,n;
while(1){
if(sfch=1){//检测是否重行绘制
printf_dy();
sfch=0;
}
jc=jiance(1);
if(jc==1){//这里检测是否能往下移动
if(sfch=naozhong()){
dqxz.zb .y=dqxz.zb .y+1;
}
}else if(jc==0 && dqxz.zb .y<0){//检测是否到顶部了,到顶部了就结束游戏
system("cls");
printf("游戏失败");//放假了心静不下来,不想搞了,简单处理
break;
}else{ //不能移动了,就说明到底部了,把当前方块加入到障碍物里面
jifen=jiaru()+jifen;
nd=nd*19/20;//放假了心静不下来,不想搞了,简单处理
shenchan();
}
n=get_c();//从键盘区获取一个功能键状态-1失败0左移 1下移动 2右移动 3变型 4暂停
switch(n){
case -1:;break;//非法移动
case 4://暂停
zanting();
break;
case 3:
bianxing(&dqxz);
sfch=1;
break;//变型
default: //移动
yidong(n);
sfch=1;
break;
}
}
return 0;
}
写在主函数后面的函数需要在主函数里面先声明一下的吧 ...{:10_254:} WP叶超 发表于 2017-10-5 16:37
写在主函数后面的函数需要在主函数里面先声明一下的吧 ...
没用
{:5_93:} 如图所示 函数声明的定义不是一回事,调用的时候不需要int 朋友 匹配
页:
[1]