以下代码与教程一致。
在vs2012进行编译时,出现了以下报错:
1>d:\software data\p\p5\p5\p5.c(272): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
1>d:\software data\p\p5\p5\p5.c(272): warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符
1>d:\software data\p\p5\p5\p5.c(272): error C2059: 语法错误:“)”
1>d:\software data\p\p5\p5\p5.c(273): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\software data\p\p5\p5\p5.c(277): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>d:\software data\p\p5\p5\p5.c(277): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
1>d:\software data\p\p5\p5\p5.c(277): warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符
1>d:\software data\p\p5\p5\p5.c(277): error C2059: 语法错误:“)”
1>d:\software data\p\p5\p5\p5.c(278): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\software data\p\p5\p5\p5.c(283): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>d:\software data\p\p5\p5\p5.c(283): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
1>d:\software data\p\p5\p5\p5.c(283): warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符
1>d:\software data\p\p5\p5\p5.c(283): error C2059: 语法错误:“)”
然而在vs2019中却可以正常运行编译,唯一的问题就是编译时游戏窗口的下边框丢失,其他部分完好。
由于学校作业要求编译软件只能用vs2012(且只能用.c后缀所以无法使用easyx),所以请大神提出解决方案,使它能在vs2012中正常编译,谢谢!
#include<stdio.h> //printf、scanf
#include<Windows.h> //获取控制台上坐标位置、设置字体颜色
#include<conio.h> //接收键盘输入输出(kbhit()、getch())
#include<time.h> //用于获取随机数
#define FrameX 13 //游戏窗口左上角的X轴坐标为13
#define FrameY 3 //游戏窗口左上角的Y轴坐标为3
#define Frame_height 20 //游戏窗口的高度为20
#define Frame_width 18 //游戏窗口的宽度为18
/*******定义全局变量********/
int i,j,Temp,Temp1,Temp2; //temp,temp1,temp2用于记住和转换方块变量的值
//标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无图案;初始化为无图案
int a[80][80]={0};
int b[4]; //标记4个“口”方块:1表示有方块,0表示无方块
struct Tetris //声明俄罗斯方块的结构体
{
int x; //中心方块的x轴坐标
int y; //中心方块的y轴坐标
int flag; //标记方块类型的序号
int next; //下一个俄罗斯方块类型的序号
int speed; //俄罗斯方块移动的速度
int number; //产生俄罗斯方块的个数
int score; //游戏的分数
int level; //游戏的等级
};
HANDLE hOut; //控制台句柄
/******函数声明******/
int color(int c);
void gotoxy(int x,int y); //光标移到指定位置
void DrwaGameframe(); //绘制游戏边框
void Flag(struct Tetris *); //随机产生方块类型的序号
void MakeTetris(struct Tetris *); //制作俄罗斯方块
void PrintTetris(struct Tetris *); //打印俄罗斯方块
void CleanTetris(struct Tetris *); //清除俄罗斯方块的痕迹
int ifMove(struct Tetris *); //判断是否能移动,返回值为1时能移动,否则不能移动
void Del_Fullline(struct Tetris *); //判断是否满行,并删除满行的俄罗斯方块
void Gameplay(); //开始游戏
void regulation(); //游戏规则
void explation(); //按键说明
void welcom(); //欢迎界面
void Replay(struct Tetris * tetris); //重新开始游戏
void title(); //欢迎界面上方的标题
void flower(); //欢迎界面上的字符装饰花
void close(); //关闭游戏
//文字颜色函数
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);//更改文字颜色
return 0;
}
//获取屏幕光标位置
void gotoxy(int x,int y)
{
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
//欢迎界面上方的标题
void title()
{
color(15);//亮白色
gotoxy(24, 3);
printf("趣 味 俄 罗 斯 方 块\n");
color(11);//亮蓝色
gotoxy(18, 5);
printf("■");
gotoxy(18, 6);
printf("■■");
gotoxy(18, 7);
printf("■");
color(14);//黄色
gotoxy(26, 6);
printf("■■");
gotoxy(28, 7);
printf("■■");
color(10);//绿色
gotoxy(36, 6);
printf("■■");
gotoxy(36, 7);
printf("■■");
color(13);//粉色
gotoxy(45, 5);
printf("■");
gotoxy(45, 6);
printf("■");
gotoxy(45, 7);
printf("■");
gotoxy(45, 8);
printf("■");
color(12);//亮红色
gotoxy(56, 6);
printf("■");
gotoxy(52, 7);
printf("■■■");
}
//主函数
int main()
{
title();//欢迎界面上的标题
flower();//打印字符花
welcom();
}
//绘制字符花
void flower()
{
gotoxy(66,11);//确定屏幕上要输出的位置
color(12); //设置颜色
printf("(_)");//红花上边花瓣
gotoxy(64,12);
printf("(_)");//红花左边花瓣
gotoxy(68,12);
printf("(_)");//红花右边花瓣
gotoxy(66,13);
printf("(_)");//红花下边花瓣
gotoxy(67,12);
color(6);
printf("@"); //红色花蕊
gotoxy(72,10);
color(13);
printf("(_)");//粉色左边花瓣
gotoxy(76,10);
printf("(_)");//粉色右边花瓣
gotoxy(74,9);
printf("(_)");//粉色上边花瓣
gotoxy(74,11);
printf("(_)");//粉色下边花瓣
gotoxy(75,10);
color(6);
printf("@"); //粉色花蕊
gotoxy(71,12);
printf("|"); //两朵花之间的连接
gotoxy(72,11);
printf("/"); //两朵花之间的连接
gotoxy(70,13);
printf("\\|");
gotoxy(70,14);
printf("'|/");
gotoxy(70,15);
printf("\\|");
gotoxy(71,16);
printf("| /");
gotoxy(71,17);
printf("|");
gotoxy(67,17);
color(10);
printf("\\\\\\\\");//草地
gotoxy(73,17);
printf("//");
gotoxy(67,18);
color(2);
printf("^^^^^^^^");
gotoxy(65,18);
color(5);
printf("汕 头 大 学");
gotoxy(68,20);
printf("蔡徐坤");
}
//菜单选项边框和字体
void welcom()
{
int n;
int i,j=1;
color(14); //黄色边框
for(i=9;i<=20;i++) //循环y轴坐标,打印输出上下边框===
{
for(j=15;j<=60;j++) //循环x轴坐标,打印输出左右边框||
{
gotoxy(j,i);
if(i==9||i==20)printf("="); //输出上下边框===
else if(j==15||j==59)printf("||");//输出左右边框||
}
}
color(12);//设置字体颜色为红色
gotoxy(25, 12);//设置显示位置
printf("1.开始游戏");//输出文字“1.开始游戏”
gotoxy(40, 12);
printf("2.按键说明");
gotoxy(25, 17);
printf("3.游戏规则");
gotoxy(40, 17);
printf("4.退出");
gotoxy(21, 22);
color(3);
printf("请选择[1 2 3 4]:[]\b\b");
color(14);
scanf_s("%d", &n); //输入选项
switch (n)
{
case 1: //输入1
system("cls"); //清屏
DrwaGameframe();//制作游戏窗口
break;
case 2: //输入2
break;
case 3: //输入3
break;
case 4: //输入4
break;
}
}
//制作游戏窗口
void DrwaGameframe()
{
gotoxy(FrameX + Frame_width - 7, FrameY - 2); //设置游戏名称的显示位置
color(11); //亮蓝色
printf("趣 味 俄 罗 斯 方 块"); //打印游戏名称
gotoxy(FrameX + 2 * Frame_width + 3, FrameY + 7); //设置上边框的显示位置
color(2); //深绿色
printf("**********"); //打印下一个出现方块的上边框
gotoxy(FrameX + 2 * Frame_width + 13, FrameY + 7);
color(3); //深蓝绿色
printf("下一出现方块:");
gotoxy(FrameX + 2 * Frame_width + 3, FrameY + 13);
color(2);
printf("**********"); //打印下一个出现方块的下边框
gotoxy(FrameX + 2 * Frame_width + 3, FrameY + 17);
color(14); //黄色
printf("↑:旋转");
gotoxy(FrameX + 2 * Frame_width + 3, FrameY + 19);
printf("空格:暂停游戏");
gotoxy(FrameX + 2 * Frame_width + 3, FrameY + 15);
printf("Esc:退出游戏");
gotoxy(FrameX,FrameY);
color(12); //红色
printf("╓"); //打印框角
gotoxy(FrameX + 2 * Frame_width - 2, FrameY);
printf("╖");
gotoxy(FrameX, FrameY+Frame_height);
printf("╙");
gotoxy(FrameX + 2 * Frame_width - 2, FrameY+Frame_height);
printf("╜");
a[FrameX][FrameY + Frame_height] = 2;
a[FrameX + 2 * Frame_width - 2][FrameY + Frame_height] = 2;
for(int i=2; i<2*Frame_width-2;i+=2)
{
gotoxy(FrameX+i,FrameY);
printf("═"); //打印上横框
}
for(int i=2;i<2*Frame_width-2;i+=2)
{
gotoxy(FrameX+i,FrameY+Frame_height);
printf("═"); //打印下横框
a[FrameX+i][FrameY+Frame_height]=2; //标记下横框为游戏边框,防止方块出界
}
for(int i=1;i<Frame_height;i++)
{
gotoxy(FrameX,FrameY+i);
printf("║"); //打印左竖框
a[FrameX][FrameY+i]=2; //标记左竖框为游戏边框,防止方块出界
}
for(int i=1;i<Frame_height;i++)
{
gotoxy(FrameX+2*Frame_width-2,FrameY+i);
printf("║"); //打印右竖框
a[FrameX+2*Frame_width-2][FrameY+i]=2; //标记右竖框为游戏边框,防止方块出界
}
}