#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<Windows.h>
int score;
int ball_row, ball_col;
int ball_vv, ball_vh;
int area_height, area_width;
int baffle_col, baffle_row, baffle_size;
int brick_col, brick_row;
bool isLose;
void gotoxy(int x, int y) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void HideCursor() {
CONSOLE_CURSOR_INFO cursor_info = { 1,0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void startup()
{
area_height = 20;
area_width = 40;
ball_row = area_height / 2;
ball_col = area_width / 2;
ball_vv = 1;
ball_vh = 1;
baffle_col = area_width / 2;
baffle_row = area_height - 2;
baffle_size = 8;
brick_row = 1;
brick_col = rand() % area_width;
score = 0;
isLose = false;
}
void show()
{
gotoxy(0, 0);
int i, j;
//system("cls");
for (i = 0; i <= area_height; i++)
{
for (j = 0; j <= area_width; j++)
{
if (i == ball_row && j == ball_col)
{
printf("O");
}
else if (i == 0 || i == area_height)
printf("-");
else if (j == 0 || j == area_width)
printf("|");
else if (i == baffle_row && (j >= baffle_col && j <= baffle_col + baffle_size))
printf("=");
else if (i == brick_row && j == brick_col)
printf("#");
else printf(" ");
}
printf("\n");
}
printf("score:%d\n", score);
}
void updateWithhoutInput() {
static int count = 0;
if(count % 5 == 0){
ball_col += ball_vh;
ball_row += ball_vv;
}
if (ball_col == 0 + 1 || ball_col == area_width - 1)//vh changed
ball_vh *= -1;
if (ball_row == 0 + 1 /*|| ball_row == area_height - 1*/)//vv changed
ball_vv *= -1;
if (ball_row == baffle_row - 1 && (ball_col >= baffle_col && ball_col < baffle_col + baffle_size))//?baffle?????????
ball_vv *= -1;
// ????,?,??,?,?????????
if ((ball_row == brick_row + 1 && (ball_col >= brick_col - 1 && ball_col <= brick_col + 1))||(ball_row == brick_row && (ball_col == brick_col - 1 || ball_col==brick_col+1))) {
ball_vv *= -1;
brick_row = -1;
score += 10;
brick_row = 1;
brick_col = rand() % area_width;
}
if (ball_row >= area_height)
isLose = true;
count++;
}
void updateWithInput() {
char input;
if (kbhit()) {
input = getch();
switch (input)
{
case 'a': if (baffle_col > 0 + 1)baffle_col--; break;
case 'w': if (baffle_row > 0 + 1)baffle_row--; break;
case 'd': if (baffle_col < area_width - baffle_size - 1)baffle_col++; break;
case 's': if (baffle_row < area_height - 1)baffle_row++; break;
default:
break;
}
}
}
int Lost(){
if(ball_row > area_height)
return 1;
return 0;
}
int IsFinish() {//??????
if (score == 100) {
system("cls");
printf("congretulations!!!");
score = 0;
_sleep(500);//???????????
system("pause");
return 1;
}
else if (Lost() == 1) {
system("cls");
printf("you have lost!!!");
score = 0;
_sleep(500);
system("pause");
return 1;
}
return 0;
}
int main()
{
HideCursor();
startup();
while (1)
{
show();
updateWithInput();
updateWithhoutInput();
if(IsFinish() == 1){
startup();
continue;
}
}
return 0;
}
02-03
319
11-11