C++打砖块

做的有可能不好。。。

#include <iostream>
#include <windows.h>
#include <conio.h>
#include <math.h>
#define Framelen 80
#define Framedep 25
#define Pi 3.14
double xx = 5,yy = 15;
int x,y,bx = 2,drct = 20,bnum = 40,hp = 8;
bool end = 0;
int brick[5][8] = {{1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1}};
void setpos(int x,int y){
    COORD pos = {x,y};
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut, pos);
}
void drctmove(int speed,int drct){
	//setpos(0,0);
	//printf("%d,%d",xx,yy);
	xx += (cos((Pi/180)*drct))*speed;
	yy -= (sin((Pi/180)*drct))*speed;
	x = int(xx);y = int(yy);
	
}
void drawsq(int x1,int y1,int x2,int y2,char f){
	for(int i = x1;i <= x2;i ++){
		setpos(i,y1);printf("%c",f);
	}
	for(int i = x1;i <= x2;i ++){
		setpos(i,y2);printf("%c",f);
	}
	for(int i = y1;i <= y2;i ++){
		setpos(x1,i);printf("%c",f);
	}
	for(int i = y1;i <= y2;i ++){
		setpos(x2,i);printf("%c",f);
	}
}
void drawbrick(){
	for(int i = 0;i < 5;i ++){
		for(int j = 0;j < 8;j ++){
			if(brick[i][j]){
				for(int k = 1;k <= 8;k ++){
					setpos(j*10+k+1,i*2+2);
					printf("^");
				}
			}
			else{
				for(int k = 1;k <= 8;k ++){
					setpos(j*10+k+1,i*2+2);
					printf(" ");
				}
			}
		}
	}
}
void drawboard(char f){
	for(int i = bx;i <= bx+8;i ++){
		setpos(bx+i,Framedep-2);
		printf("%c",f);
	}
}
void collidetest(){
	bool brk = 0;
	if(x == 2 || x == Framelen-2){
		drct = 180-drct;
	}
	else if(y == 2){
		drct *= -1;
	}
	else if(y == Framedep - 3){
		for(int i = bx-1;i <= bx+9;i ++){
			if(bx+i == x){
				drct *= -1;
				break;
			}
		}
	}
	else if(y == Framedep-1){
		//gameend();
		drct = 20;
		xx = 5;
		yy = 15;
		hp --;
    }
	else if(y == 11){
		for(int i = 0;i < 8;i ++){
			for(int j = 0;j <= 10;j ++){
				if(x == i*10+j && brick[4][i] == 1){
					brick[4][i] = 0;
					drawbrick();
					drct *= -1;
					brk = 1;
					bnum --;
					break;
				}
			}
			if(brk)
				break;
		}
	}
	else if(y == 9){
		for(int i = 0;i < 8;i ++){
			for(int j = 0;j <= 10;j ++){
				if(x == i*10+j && brick[3][i] == 1){
					brick[3][i] = 0;
					drawbrick();
					drct *= -1;
					brk = 1;
					bnum --;
					break;
				}
			}
			if(brk)
				break;
		}
	}
	else if(y == 7){
		for(int i = 0;i < 8;i ++){
			for(int j = 0;j <= 10;j ++){
				if(x == i*10+j && brick[2][i] == 1){
					brick[2][i] = 0;
					drawbrick();
					drct *= -1;
					brk = 1;
					bnum --;
					break;
				}
			}
			if(brk)
				break;
		}
	}
	else if(y == 5){
		for(int i = 0;i < 8;i ++){
			for(int j = 0;j <= 10;j ++){
				if(x == i*10+j && brick[1][i] == 1){
					brick[1][i] = 0;
					drawbrick();
					drct *= -1;
					brk = 1;
					bnum --;
					break;
				}
			}
			if(brk)
				break;
		}
	}
	else if(y == 3){
		for(int i = 0;i < 8;i ++){
			for(int j = 0;j <= 10;j ++){
				if(x == i*10+j && brick[0][i] == 1){
					brick[0][i] = 0;
					drawbrick();
					drct *= -1;
					brk = 1;
					bnum --;
					break;
				}
			}
			if(brk)
				break;
		}
	}
}
int main(){
	system("color 0E");
	setpos(Framelen/2,0);
	printf("按下空格开始游戏!");
	setpos(Framelen/2,2);
	printf("A/D键操控反弹板");
	setpos(Framelen/2,4);
	printf("Maker : XER DAZZLE");
	char key;
	while(1){
		key = getch();
		if(key == ' '){
		system("cls");
		break;
		}
	}
	drawsq(1,1,Framelen,Framedep,'*');
	drawbrick();
	drawboard('-');
	while(1){
		setpos(x,y);printf(" ");
		drctmove(1,drct);
		setpos(x,y);printf("〇");
		collidetest();
		Sleep(20+bnum);
		if(kbhit()){
			key = getch();
			if(key == 'a' || key == 'd'){
				drawboard(' ');
					switch(key){
					case 'a':{
						if(bx >= 2)
							bx --;
						break;
					}
					case 'd':{
						if(bx <= 34)
							bx ++;
						break;
					}
				}
				drawboard('-');
			}
		}
 		if(hp == 0){
 			system("cls");
 			setpos(0,0);
			printf("Failed!");
  			setpos(0,1);
			printf("Maker:XerDazzle");
			return 0;
		}
		if(bnum == 0){
			system("cls");
 			setpos(0,0);
			printf("Success!");
  			setpos(0,1);
			printf("Maker:XerDazzle");
			return 0;
		}
		setpos(0,0);
		printf("HP:%i",hp);
	}
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,但是我无法直接生成完整的代码。不过,我可以为你提供一些提示和指导来帮助你完成这个项目。 首先,你需要在C++中使用graphics.h库来创建窗口和绘制图形。请确保已经正确安装了该库。 以下是一个基本的程序框架,可以帮助你开始: ```cpp #include <graphics.h> int main() { // 初始化图形模式 int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, ""); // 绘制游戏主页面 // 处理用户输入 // 进入游戏循环 // 关闭图形模式 closegraph(); return 0; } ``` 你需要在绘制游戏主页面的部分创建开始、设置、关于和退出选项的圆角矩形,并在选项上方显示照片。你可以使用`rectangle`函数绘制圆角矩形,并使用`readimagefile`函数加载和显示图像。 接下来,你需要实现与用户的交互功能,例如点击开始按钮后弹出对话框输入白砖数量,以及通过增加和减少按钮来改变白砖数量。你可以使用`getch`函数来检测键盘输入,使用`outtextxy`函数来显示文字,使用`dialogbox`函数来创建对话框。 在进入游戏循环后,你需要实现游戏逻辑,包括红砖块的移动和碰撞检测,白砖块的生成和弹开效果,以及分数和时间的更新。你可以使用`mousemsg`函数来检测鼠标输入,使用`circle`函数绘制红砖块,使用`rectangle`函数绘制白砖块。 最后,记得在ESC键按下时返回主页面,并在关于按钮点击时弹出对话框显示相关信息。 至于调色板设置功能,你可以使用`setcolor`函数来改变绘图的颜色。 希望这些提示对你有帮助!祝你成功完成这个打砖块游戏项目!如果你在具体实现过程中有更多问题,欢迎随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值