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

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值