easyx 制作C++计时器

Posted 计算机知识杂谈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了easyx 制作C++计时器相关的知识,希望对你有一定的参考价值。

本文仅在博客园发布,若在其他网站发现均为盗取,请认准原文链接:
https://www.cnblogs.com/jisuanjizhishizatan/p/15521112.html

先上效果:

输入设定时间后,会出现时间。

如果时间结束,则显示time\'s up。

代码的实现很简单,就是每间隔1秒刷新一次时间。间隔1秒可以使用Sleep(1000)实现。
关于输出时间和输入设定时间,我们可以使用easyx的inputbox来实现。
对于时间的60进制,我们可以判断当前的seconds是否为0,如果为0,那么把minutes减去一,然后把seconds重置为59.
代码:

// Timer.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<windows.h>
#include<conio.h>

int main(void){
	initgraph(300,200);
	setbkcolor(WHITE);
	settextcolor(BLACK);
	cleardevice();
	settextstyle(48,0,"Consolas");
	char s[100],t[100];
	InputBox(s,sizeof(s),"输入设定时间:(分钟为单位)","设定时间");
	int minutes=0,seconds=0;
	sscanf(s,"%d",&minutes);
	while(minutes!=0 || seconds!=0){
		if(seconds==0){
			minutes--;seconds=59;
		}
		else seconds--;
		Sleep(1000);
		sprintf(t,"%02d:%02d",minutes,seconds);
		cleardevice();
		outtextxy(50,50,t);
	}
	cleardevice();
	outtextxy(50,50,"Time\'s up!");
	_getch();
	closegraph();
	return 0;
}

注意需要提前把项目设置为使用多字节字符集而不是Unicode,否则会出编译错误。

C++ easyx制作打砖块游戏


#include<graphics.h>
#include<conio.h>
#include<cstdio>
#include<time.h>
#include<cmath>
#include<stdio.h>
#include <string>


#define HEIGHT 700
#define WIDTH 400
int ball_x, ball_y;
int ball_vx, ball_vy;
int radius;
int left, right, top, bottom;
int baffle_x, baffle_y;
int baffle_size;
int baffle_move;
int brick_x, brick_y;
int brick_r;
int score;
int sleep_time;

bool isExit;
bool isLose;

void initBall() {
	left = 0;
	top = 0;
	right = WIDTH;
	bottom = HEIGHT;
	ball_x = (right - left) / 2;
	ball_y = (bottom - top) / 2;
	ball_vx = 1;
	ball_vy = 1;
	radius = 15;
	brick_x = 30;
	brick_y = 30;
	brick_r = 20;
	score = 0;
	sleep_time = 5;
	baffle_move = 8;
	isExit = false;
	isLose = false;
}
void initBaffle() {
	baffle_x = (right - left) / 2;
	baffle_y = bottom - HEIGHT/8;
	baffle_size = WIDTH/2;
}
void drawBall() {

	setfillcolor(RGB(0,255, 0));
	fillcircle(ball_x, ball_y, radius);

}

void drawBrick() {
	if (isExit == true) {
		
		setfillcolor(RGB(255, 255, 0));
		fillcircle(brick_x, brick_y, brick_r);
	}

	if (isExit == false) {
		isExit = 1;
		brick_x = rand() % WIDTH;
		brick_y = rand() % HEIGHT / 2;

	}
	
	printf("score :%d", score);

}
void drawBaffle() {
	setfillcolor(RGB(255,0, 0));
	line(baffle_x, baffle_y, baffle_x + baffle_size, baffle_y);

}
void updataWithInput() {
	//交互
	char input;
	//根据键盘输入判断平台的移动
	if (_kbhit()) {
		input = _getch();
		switch (input)
		{
		case 'a':
			if (baffle_x > 0)
				baffle_x -= baffle_move;
			break;
		/*case 'w':
			if (baffle_y > 0)
				baffle_y -= baffle_move;
			break;
		case 's':
			if (baffle_y < bottom - 1)
				baffle_y += baffle_move;
			break;*/
		case 'd':
			if (baffle_x < right - baffle_size)
				baffle_x += baffle_move;
			break;
		default:
			break;
		}
	}
}
void updateBall() {
	static int count = 0;
	count++;
	if (count == 5) {
		count = 0;
		ball_x += ball_vx;
		ball_y += ball_vy;
	}
	
	if (ball_x <= left + radius || ball_x >= right - radius) {
		ball_vx = -ball_vx;
	}
	if (ball_y <= top + radius) {
		ball_vy = -ball_vy;
	}
	if (ball_y >= bottom - radius) {
		isLose = true;
	}
	if (ball_y == baffle_y - radius && ball_x >= baffle_x && ball_x <= baffle_x + baffle_size) {
		ball_vy = -ball_vy;
	}
	
	if (pow((ball_x - brick_x), 2) + pow((ball_y - brick_y), 2) <= pow((brick_r + radius), 2)) {
		ball_vx = -ball_vx;
		ball_vy = -ball_vy;
		isExit = 0;
		score++;
	}
}
//void print_score() {
//	
//	char a[20] = "score";
//	int t = 1;
//	int tmp = score;
//	while (score > 0) {
//		t*=10;
//		tmp /= 10;
//	}
//	for (int i = 5; i < 15 && t!=0; i++, t /= 10) {
//		a[i] = score%t;
//		t %= 10;
//	}
//	sprintf_s(a, "%d",score);
//	TCHAR s[] = _T("score:");
//	
//	settextcolor(GREEN);
//	const char* ca = a;
//	outtextxy(WIDTH/2,HEIGHT/2,ca);
//	outtextxy(WIDTH / 2, HEIGHT / 2,score);
//}
int main() {
	initgraph(WIDTH, HEIGHT);
	BeginBatchDraw();

	initBall();
	initBaffle();
	while (1)
	{
		if (isLose == true) {
			cleardevice();
			TCHAR s[] = _T("LOSE");
			outtextxy(WIDTH/2,HEIGHT/2, s);
		}
		FlushBatchDraw();
		cleardevice();
		drawBall();
		drawBrick();
		drawBaffle();
		updataWithInput();
		updateBall();
		//print_score();
		//Sleep(sleep_time);
	}
	EndBatchDraw();
	closegraph();
	return 0;
}

以上是关于easyx 制作C++计时器的主要内容,如果未能解决你的问题,请参考以下文章

C++经典绘图工具EasyX

利用easyx制作简易的五子棋项目

利用easyx制作简易的五子棋项目

C++之设置背景图片(Easyx)

使用EasyX和C++写一个消砖块游戏

[A*算法01]C++绘图神器-EasyX