C语言 打砖块

在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/m0_45311187/article/details/120311507