共有回帖数 0 个
- 剽窃自 BestAns 的某个帖子(不会介意吧)改写的小游戏,求改善
-
只看楼主
收藏
回复
-
//就是那个打字游戏,只是增加了一些效果,还有很多不足之处
//比如还没有字母下落速度的控制,有待改善
//一次只能落下一个字母,有待改善
//用了较多的goto语句,有待改善
//欢迎界面里难度的选择,难度跟生命值、速度、字母数量相挂钩,有待改善
//下面贴上代码
#includegraphics.h
#includeconio.h
#includetime.h
#define LIVE 10 //设置生命值(1-999)
//**欢迎界面函数*****************************************************
void welcome()
{
cleardevice();//*************************************************清空屏幕
setcolor(GREEN);//***********************************************设置前景色
setfont(64,0,"黑体");//******************************************设置字体格式
outtextxy(165,50,"打字游戏");//**********************************输出文字
setcolor(RED);
setfont(32,0,"宋体");
outtextxy(70,150,"操作方法:");
//*************游戏说明***************************************************
setcolor(WHITE);
setfont(16,0,"黑体");
outtextxy(130,210,"游戏开始时会从屏幕上方落下英文字母");
outtextxy(130,240,"根据你所看到的字母从键盘上敲入相同的字母");
outtextxy(130,270,"如果敲入的字母相同则消去并得一分");
outtextxy(130,300,"如果字母落到屏幕底部则扣掉一生命");
outtextxy(130,330,"生命扣完游戏结束");
outtextxy(130,360,"想提前结束请按ESC退出游戏");
setfont(16,0,"宋体");
//*************实现文字闪烁***********************************************
int c=255;
while(!kbhit())//*************************************************判定按键动作
{
setcolor(RGB(c,0,0));
outtextxy(500,430,"按任意键继续");
c-=8;
if(c=0)
c=255;
Sleep(10);
}
}
//**结束界面函数**********************************************************
void goodbye(char * score)
{
cleardevice();//清空屏幕
//*************打出分数***************************************************
setcolor(LIGHTRED);
setfont(64,0,"Arial");
outtextxy(100,190,"score:");
setcolor(GREEN);
outtextxy(290,195,score);
//********提示按键****************************************************
int c=255;
while(!kbhit())
{
setfont(16,0,"宋体");
setcolor(RGB(0,c,c));
outtextxy(500,400,"按 R 键重玩");
outtextxy(500,430,"按其他键退出");
c-=8;
if(c=0)
c=255;
Sleep(10);
}
}
//**将整形数转换成字符串的函数*********************************************
void change(int x,char * p)
{
int i,j=0;
int num[7];
if(x==0)
{
p[j]=48;
j++;
}
for(i=0;x0;x/=10,i++)
{
num=x%10;
}
for(i--;i=0;i--,j++)
{
p[j]=num+48;
}
p[j]=' ';
}
//**生命值耗完界面函数******************************************
void lose()
{
setcolor(LIGHTRED);
setfont(64,0,"Arial");
outtextxy(185,190,"GAME OVER!");
int c=255;
while(!kbhit())
{
setcolor(RGB(c,0,c));
setfont(16,0,"黑体");
outtextxy(480,350,"按任意键继续");
Sleep(10);
c-=8;
if(c=0)
c=255;
}
}
void main() //主函数
{
//****界面初始化*******************************************************
initgraph(640,480); //初始化图形界面
welcome(); //欢迎界面
replay: //重启点
setfont(32,0,"Arial"); //字体设置
//****变量初始化*******************************************************
srand(time(NULL)); //初始化随机数
char ch[2]=" "; //随机字母接收字符串
char key; //按键接收变量
char live[3]=" "; //输出用生命值字符串
char score[8]="0"; //输出用分数字符串
int liv=LIVE; //生命值
int sco=0; //分数
BeginBatchDraw(); //批量画图开始
//****循环开始*********************************************************
while(true)
{
change(liv,live); //生命值转换成字符串用于输出
again: //遇到正确字母,从此处从新开始
ch[0]=65+rand()%26; //得到随机大写字母
int x=20+rand()%600;//字母落下点的X轴坐标
setcolor(WHITE);
for(int y=0;y414;y++)
{
outtextxy(x,y,ch); //画字母
setcolor(LIGHTGREEN);
line(0,440,640,440);//画底线
outtextxy(500,445,"LIVE:"); //输出LIVE
outtextxy(580,445,live); //输出生命值字符串
setcolor(LIGHTRED);
outtextxy(15,445,"SCORE:"); //输出SCORE
outtextxy(107,445,score); //输出分数值字符串
setcolor(WHITE);
if(liv==0) //判断生命值是否为零
{
EndBatchDraw();//结束批量画图
lose(); //调用GAME OVER界面
BeginBatchDraw();//开始批量画图
getch();//按键继续
goto exit;//转到游戏结束界面
}
if(kbhit())//判断按键字母正确与否
{
key=getch();//捕获按键
if((key==ch[0])||(key==ch[0]+32))
{
sco++;//分数值计数
change(sco,score);//分数值转化分数值字符串
FlushBatchDraw();//批量画图
cleardevice();//清空屏幕
goto again;//按键正确,转去下一个字母
}
else if(key==27)//遇到ESC转去结束界面
goto exit;
}
FlushBatchDraw();//批量画图
Sleep(10);//画面驻留10毫秒
cleardevice();//清空屏幕
}
liv--;//生命值计数
}
exit:
EndBatchDraw(); //结束批量画图
goodbye(score); //结束界面
if(kbhit())
key=getch();
if(key=='r'||key=='R') //按R键重启游戏
goto replay;
else
closegraph(); //关闭图形界面
}
楼主 2015-12-17 16:18 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知