游戏盒子接球最终版

原创 2013年12月02日 16:48:56

有几个小地方做了改进,倒计时调用系统函数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
#define	CMD_LEFT		1
#define	CMD_RIGHT		2
#define	CMD_QUIT		4

int 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;
}


游戏盒子接球

用VC写了一个小小的游戏,有好多小球下落,玩家可以控制一个盒子左右移动(方向键),来接小球,最后会显示接到的小球的数目。就是这么简单,代码如下:/* 盒子接球 copyright: 圣石 date: ...
  • u010084308
  • u010084308
  • 2013年12月01日 11:58
  • 1106

Scratch儿童项目式编程--接球游戏 Scratch children program programming - catching a ball

Scratch儿童项目式编程--接球游戏 Scratch children program programming - catching a ball   作者:韩梦飞沙 Author:han...
  • yue31313
  • yue31313
  • 2017年08月08日 02:44
  • 721

Unity3D官方案例 - 2DGame - 帽子接球

1.创建场景 2.创建Background和Foreground工作层   3.添加静态景物 1.导入静态图片 2.创建静态景物 1.创建sprite:sky 2.设置Position,纹理与层级 ...
  • SGamble
  • SGamble
  • 2016年10月22日 09:02
  • 2646

ACM盒子游戏(博弈论)

盒子游戏 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述     有两个相同的盒子,其中一个装了 n 个球,另一个装了一个球。Alice 和 ...
  • Double2hao
  • Double2hao
  • 2015年11月14日 19:10
  • 946

汇编语言编写的一个“接球游戏”

学习汇编语言一学期了,为了完成期末作业,就花了10多个小时写了个“接球游戏”。游戏虽然很简单,但是完成后很开心,毕竟是自己用汇编语言写的第一个程序。              ...
  • zhouy869
  • zhouy869
  • 2012年01月04日 20:04
  • 1843

游戏之 空中接球。。。。。

感想: 从最先学的球接触面使之反弹的简单小程序(额,,应该是几句代码),再到设计的一个小游戏(额,,其实也就是多了点操作的)。其目的在于两点。一是巩固原学过的东西且在借...
  • ending3
  • ending3
  • 2016年10月27日 00:17
  • 160

快吧游戏盒官方下载2016 v4.0.5.6959 官方最新版

软件名称: 快吧游戏盒官方下载2016 v4.0.5.6959 官方最新版          快吧游戏盒官方下载2016功能介绍:     1.全新体验游戏管理     管理用户电脑中...
  • u011314029
  • u011314029
  • 2016年04月22日 16:25
  • 383

POJ-1390方盒游戏(动态规划)

题意: N个方盒(box)摆成一排,每个方盒有自己的颜色。连续摆放的同颜色方盒构成 一个方盒片段(box segment)。下图中共有四个方盒片段,每个方盒片段分别有 1、4、3、1个方盒 玩...
  • huatian5
  • huatian5
  • 2016年07月26日 10:54
  • 719

打地鼠游戏最终版

var img; var imgs; var tl,jg; var fs=0;//总分数 var dz=0;//打中得...
  • qqABCDYOONA
  • qqABCDYOONA
  • 2017年10月11日 09:41
  • 80

盒子游戏

描述 有两个相同的盒子,其中一个装了n个球,另一个装了一个球。Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作。每次操作时,游戏者先看看哪个盒子里...
  • a997930294
  • a997930294
  • 2013年08月25日 15:19
  • 783
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:游戏盒子接球最终版
举报原因:
原因补充:

(最多只允许输入30个字)