本文实例为大家分享了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;
}