C语言 打砖块2.0 黑窗口版本

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


很高兴回答您的问题,下面是关于使用C语言编写的打砖块游戏的说明: 1. 游戏简介 打砖块游戏是一款经典的街机游戏。玩家需要使用挡板将球反弹回去,打掉所有的砖块,以获得最高分数。本游戏使用C语言编写,可以在终端上运行。 2. 游戏规则 2.1 游戏开始 游戏开始时,玩家需要按下任意键开始游戏。 2.2 游戏操作 玩家使用键盘左右箭头控制挡板的移动,将球反弹回去。如果球没有被挡住,就会掉落,如果掉落到底部,游戏结束。 2.3 打砖块 玩家需要使用球撞击砖块,将砖块打掉。不同颜色的砖块有不同的分数。有些砖块还会掉落奖励,例如增加生命值、减慢球的速度等。 2.4 游戏结束 当所有砖块都被打掉,或者玩家的生命值降为0时,游戏结束。玩家可以输入自己的名字,将自己的得分保存到排行榜中。 3. 程序说明 本游戏使用C语言编写,运行在终端上。需要安装ncurses库,才能在终端上输出彩色字符。使用make命令编译运行。 游戏的主要逻辑在main.c中实现,包括初始化游戏、显示游戏界面、处理游戏事件、更新游戏状态等。 游戏界面使用ASCII字符画实现,包括挡板、球、砖块、分数、生命值等。使用了多线程技术,将球的移动和碰撞检测放在一个线程中,将用户输入和界面更新放在另一个线程中,以保证游戏的流畅性。 4. 程序下载 本游戏的源代码可以在以下链接中下载: [c语言打砖块游戏.doc](http://example.com/c语言打砖块游戏.doc) 希望以上信息能够帮助您了解使用C语言编写的打砖块游戏。如果您有任何疑问或需要进一步的帮助,请随时联系我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值