游戏盒子接球最终版

来源:互联网 发布:淘宝商城dnf游戏币 编辑:程序博客网 时间:2024/06/02 21:55

有几个小地方做了改进,倒计时调用系统函数GetTickCount()来进行计算的,更加方便,其他还有一些地方做出了优化,大家可以自己对比了看一下。这里还要感谢杨伟大哥提出的宝贵建议。

代码如下:

///////////////////////////////////////////////////// 程序名称:盒子接球(一个简单的小游戏)// 编译环境:Visual C++ 6.0,EasyX 2013霜降版// 作  者:圣石 <2464847121@qq.com>// 最后修改:2013-12-1// 玩法:按方向键控制盒子移动接住小球,总共有 20s 的游戏时间,倒计时为 0 时游戏结束//#include <graphics.h>#include <conio.h>#include <time.h>#include <stdio.h>// 定义常量#define NUM 10#defineCMD_LEFT1#defineCMD_RIGHT2#defineCMD_QUIT4int box_x = 10;int box_y = 420;// 定义球的结构体struct Ball{int x, y, v;};// 获取用户控制int GetCommand(){int c = 0;if (GetAsyncKeyState(VK_LEFT) & 0x8000)c |= CMD_LEFT;if (GetAsyncKeyState(VK_RIGHT) & 0x8000)c |= CMD_RIGHT;if (GetAsyncKeyState(VK_ESCAPE) & 0x8000)c |= CMD_QUIT;return c;}// 倒计时int Time(int t){char strsec[10];int sec = 20 - (GetTickCount() - t) / 1000;itoa(sec, strsec, 10);outtextxy(570, 110, "      ");outtextxy(570, 110, strcat(strsec, "s"));return sec;}// 介绍void menu(){line(449, 0, 449, 480);char runTime[] = "游戏倒计时     : ",  receiveBallNum[] = "接到的球的数量:", copyRight[] = "版权所有:圣石", finishWorkDate[] = "完成日期:2012年12月1日",  introductiona[] = "按方向键控制盒子移动接住", introductionb[] = "小球,倒计时为0时游戏结束";settextcolor(GREEN);outtextxy(450, 10, introductiona);outtextxy(450, 30, introductionb);outtextxy(450, 110, runTime);outtextxy(450, 210, receiveBallNum);outtextxy(450, 310, copyRight);outtextxy(450, 410, finishWorkDate);}// 产生随机球void ballRandom(Ball ball[], int i){ball[i].x = 16 + 45 * i; ball[i].y = 8 + rand() % 32;ball[i].v = 1 + rand() % 5;}// 画球,并计算得分void calculateScore(Ball ball[], int &score){for(int i = 0; i < NUM; i++){fillcircle(ball[i].x, ball[i].y, 8);if(ball[i].y >= 472){ballRandom(ball, i);continue;}if(box_x + 8 <= ball[i].x && ball[i].x <= box_x + 72 && ball[i].y >= 412){score++;ballRandom(ball, i);}}}// 主函数int main(){// 初始化initgraph(640, 480);srand(time(NULL));BeginBatchDraw();setlinecolor(GREEN);setfillcolor(WHITE);menu();Ball ball[NUM];int dx, i, c, score = 0;bool flag = true;for(i=0; i<NUM; i++){ballRandom(ball, i);}int t = GetTickCount();char strScore[10], str[] = "your score:";// 游戏主循环while(flag){dx = 0;// 显示得分char strScore[10];itoa(score, strScore, 10);outtextxy(570, 210, strScore);// 画球,并计算得分calculateScore(ball, score);// 画盒子fillrectangle(box_x, box_y, box_x+80, box_y+60);FlushBatchDraw();// 获取用户控制命令c = GetCommand();if (c & CMD_LEFT)dx = -10;if (c & CMD_RIGHT)dx = 10;if (c & CMD_QUIT)flag = false;if (!Time(t)) flag = false;// 延时Sleep(25);// 擦除游戏区clearrectangle(0, 0, 448, 480);// 计算球的新坐标for(i = 0; i < NUM; i++){ball[i].y += ball[i].v;}// 移动盒子box_x += dx;if(box_x < 0)   box_x = 0;if(box_x > 368) box_x = 368;}// 清空键盘缓冲区FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));// 输出游戏结果itoa(score, strScore, 10);outtextxy(222, 240, strcat(str, strScore));outtextxy(220, 300, "按任意键退出");EndBatchDraw();// 按任意键退出getch();closegraph();return 0;}


原创粉丝点击