C++ 小游戏

目录

        飞机大战

        贪吃蛇

        打怪游戏

        俄罗斯方块


飞机大战

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<string>
using namespace std;
 
/*=============== all the structures ===============*/
 
typedef struct Frame
{
	COORD position[2];
	int flag;
}Frame;
 
 
/*=============== all the functions ===============*/
 
void SetPos(COORD a)// set cursor 
{
	HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(out, a);
}
 
void SetPos(int i, int j)// set cursor
{
	COORD pos={i, j};
	SetPos(pos);
}
 
void HideCursor()
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
 
//把第y行,[x1, x2) 之间的坐标填充为 ch
void drawRow(int y, int x1, int x2, char ch)
{
	SetPos(x1,y);
	for(int i = 0; i <= (x2-x1); i++)
		cout<<ch;
}
 
//在a, b 纵坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawRow(COORD a, COORD b, char ch)
{
	if(a.Y == b.Y)
		drawRow(a.Y, a.X, b.X, ch);
	else
	{
		SetPos(0, 25);
		cout<<"error code 01:无法填充行,因为两个坐标的纵坐标(x)不相等";
		system("pause");
	}
}
 
//把第x列,[y1, y2] 之间的坐标填充为 ch
void drawCol(int x, int y1, int y2, char ch)
{
	int y=y1;
	while(y!=y2+1)
	{
		SetPos(x, y);
		cout<<ch;
		y++;
	}
}
 
//在a, b 横坐标相同的前提下,把坐标 [a, b] 之间填充为 ch
void drawCol(COORD a, COORD b, char ch)
{
	if(a.X == b.X)
		drawCol(a.X, a.Y, b.Y, ch);
	else
	{
		SetPos(0, 25);
		cout<<"error code 02:无法填充列,因为两个坐标的横坐标(y)不相等";
		system("pause");
	}
}
 
//左上角坐标、右下角坐标、用row填充行、用col填充列
void drawFrame(COORD a, COORD  b, char row, char col)
{
	drawRow(a.Y, a.X+1, b.X-1, row);
	drawRow(b.Y, a.X+1, b.X-1, row);
	drawCol(a.X, a.Y+1, b.Y-1, col);
	drawCol(b.X, a.Y+1, b.Y-1, col);
}
 
void drawFrame(int x1, int y1, int x2, int y2, char row, char col)
{
	COORD a={x1, y1};
	COORD b={x2, y2};
	drawFrame(a, b, row, col);
}
 
void drawFrame(Frame frame, char row, char col)
{
	COORD a = frame.position[0];
	COORD b = frame.position[1];
	drawFrame(a, b, row, col);
}
 
void drawPlaying()
{
	drawFrame(0, 0, 48, 24, '=', '|');//	draw map frame;
	drawFrame(49, 0, 79, 4, '-', '|');//		draw output frame
	drawFrame(49, 4, 79, 9, '-', '|');//		draw score frame
	drawFrame(49, 9, 79, 20, '-', '|');//	draw operate frame
	drawFrame(49, 20, 79, 24, '-', '|');//	draw other message frame
	SetPos(52, 6);
	cout<<"得分:";
	SetPos(52, 7);
	cout<<"称号:";
	SetPos(52,10);
	cout<<"操作方式:";
	SetPos(52,12);
	cout<<"  a,s,d,w 控制战机移动。";
	SetPos(52,14);
	cout<<"  p 暂停游戏。";
	SetPos(52,16);
	cout<<"  e 退出游戏。";
}
 
//在[a, b)之间产生一个随机整数
int random(int a, int b)
{
	int c=(rand() % (a-b))+ a;
	return c;
}
 
//在两个坐标包括的矩形框内随机产生一个坐标
COORD random(COORD a, COORD b)
{
	int x=random(a.X, b.X);
	int y=random(a.Y, b.Y);
	COORD c={x, y};
	return c;
}
 
bool  judgeCoordInFrame(Frame frame, COORD spot)
{
	if(spot.X>=frame.position[0].X)
		if(spot.X<=frame.position[1].X)
			if(spot.Y>=frame.position[0].Y)
				if(spot.Y<=frame.position[0].Y)
					return true;
	return false;
}
 
void printCoord(COORD a)
{
	cout	<<"( "<<a.X<<" , "<<a.Y<<" )";
}
 
void printFrameCoord(Frame a)
{
	printCoord(a.position[0]);
	cout	<<" - ";
	printCoord(a.position[1]);
}
 
int drawMenu()
{
	SetPos(30, 1);
	cout<<"P l a n e  W a r";
	drawRow(3, 0, 79, '-');
	drawRow(5, 0, 79, '-');
	SetPos(28, 4);
	cout<<"w 和 s 选择, k 确定";
	SetPos(15, 11);
	cout<<"1. 简单的敌人";
	SetPos(15, 13);
	cout<<"2. 冷酷的敌人";
	drawRow(20, 0, 79, '-');
	drawRow(22, 0, 79, '-');
	SetPos(47, 11);
	cout<<"简单的敌人:";
	SetPos(51, 13);
	cout<<"简单敌人有着较慢的移动速度。";
	SetPos(24, 21);
	cout<<"制作:<bits/stdc++.h>";
	int j=11;
	SetPos(12, j);
	cout<<">>";
 
	//drawFrame(45, 9, 79, 17, '=', '|');
 
	while(1)
	{	if( _kbhit() )
		{	
			char x=_getch();
			switch (x)
			{
			case 'w' :
					{	
						if( j == 13)
						{
							SetPos(12, j);
							cout<<" ";
							j = 11;
							SetPos(12, j);
							cout<<">>";
							SetPos(51, 13);
							cout<<"            ";
							SetPos(47, 11);
							cout<<"简单的敌人:";
							SetPos(51, 13);
							cout<<"简单敌人有较慢的移动速度,比较容易对付";
						}
						break;
					}
			case 's' :
					{	
						if( j == 11 )
						{
							SetPos(12, j);
							cout<<" ";		
							j = 13;
							SetPos(12, j);
							cout<<">>";
							SetPos(51, 13);
							cout<<"              ";
							SetPos(47, 11);
							cout<<"冷酷的敌人:";
							SetPos(51, 13);
							cout<<"冷酷的敌人移动速度较快,不是很好对付哟。";
						}
						break;
					}
			case 'k' :
					{	
						if (j == 8)	return 1;
						else return 2;
					}
			}
		}
	}
}
 
/* 
DWORD WINAPI MusicFun(LPVOID lpParamte)
{
	//DWORD OBJ;
	sndPlaySound(TEXT("bgm.wav"), SND_FILENAME|SND_ASYNC);
	return 0;
}
*/
 
 
/*================== the Game Class ==================*/
 
class Game
{
public:
	COORD position[10];
	COORD bullet[10];
	Frame enemy[8];
	int score;
	int rank;
	int rankf;
	string title;
	int flag_rank;
 
	Game ();
	
	//初始化所有
	void initPlane();
	void initBullet();
	void initEnemy();
 
	//初始化其中一个
	//void initThisBullet( COORD );
	//void initThisEnemy( Frame );
 
	void planeMove(char);
	void bulletMove();
	void enemyMove();
	
	//填充所有
	void drawPlane();
	void drawPlaneToNull();
	void drawBullet();
	void drawBulletToNull();
	void drawEnemy();
	void drawEnemyToNull();
 
	//填充其中一个
	void drawThisBulletToNull( COORD );
	void drawThisEnemyToNull( Frame );
 
	void Pause();
	void Playing();
	void judgePlane();
	void judgeEnemy();
 
	void Shoot();
 
	void GameOver();
	void printScore();
};
 
Game::Game()
{
	initPlane();
	initBullet();
	initEnemy();
	score = 0;
	rank = 25;
	rankf = 0;
	flag_rank = 0;
}
 
void Game::initPlane()
{
	COORD centren={39, 22};
	position[0].X=position[5].X=position[7].X=position[9].X=centren.X;
	position[1].X=centren.X-2;	
	position[2].X=position[6].X=centren.X-1;
	position[3].X=position[8].X=centren.X+1;
	position[4].X=centren.X+2;
	for(int i=0; i<=4; i++)
		position[i].Y=centren.Y;
	for(int i=6; i<=8; i++)
		position[i].Y=centren.Y+1;
	position[5].Y=centren.Y-1;
	position[9].Y=centren.Y-2;
}
 
void Game::drawPlane()
{
	for(int i=0; i<9; i++)
	{
		SetPos(position[i]);
		if(i!=5)
			cout<<"O";
		else if(i==5)
			cout<<"|";		
	}
}
 
void Game::drawPlaneToNull()
{
	for(int i=0; i<9; i++)
	{
		SetPos(position[i]);
		cout<<" ";
	}	
}
 
void Game::initBullet()
{
	for(int i=0; i<10; i++)
		bullet[i].Y = 30;
}
 
void Game::drawBullet()
{
	for(int i=0; i<10; i++)
	{
		if( bullet[i].Y != 30)
		{
			SetPos(bullet[i]);
			cout<<"^";	
		}
	}
}
 
void Game::drawBulletToNull()
{
	for(int i=0; i<10; i++)
		if( bullet[i].Y != 30 )
			{
				COORD pos={bullet[i].X, bullet[i].Y+1};
				SetPos(pos);
				cout<<" ";
			}	
}
 
void Game::initEnemy()
{
	COORD a={1, 1};
	COORD b={45, 15};
	for(int i=0; i<8; i++)
	{
		enemy[i].position[0] = random(a, b);
		enemy[i].position[1].X = enemy[i].position[0].X + 3;
		enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
	}
}
 
void Game::drawEnemy()
{
	for(int i=0; i<8; i++)
		drawFrame(enemy[i].position[0], enemy[i].position[1], '-', '|');
}
 
void Game::drawEnemyToNull()
{
	for(int i=0; i<8; i++)
	{
		drawFrame(enemy[i].position[0], enemy[i].position[1], ' ', ' ');
	}		
}
 
void Game::Pause()
{
	SetPos(61,2);
	cout<<"               ";
	SetPos(61,2);
	cout<<"暂停中...";
	char c=_getch();
	while(c!='p')
		c=_getch();
	SetPos(61,2);
	cout<<"         ";
}
 
void Game::planeMove(char x)
{
	if(x == 'a')
		if(position[1].X != 1)
			for(int i=0; i<=9; i++)
				position[i].X -= 2;
				
	if(x == 's')
		if(position[7].Y != 23)
			for(int i=0; i<=9; i++)
				position[i].Y += 1;
 
	if(x == 'd')
		if(position[4].X != 47)
			for(int i=0; i<=9; i++)
				position[i].X += 2;
 
	if(x == 'w')
		if(position[5].Y != 3)
			for(int i=0; i<=9; i++)
				position[i].Y -= 1;
}
 
void Game::bulletMove()
{
	for(int i=0; i<10; i++)
	{
		if( bullet[i].Y != 30)
		{
			bullet[i].Y -= 1;
			if( bullet[i].Y == 1 )
			{
				COORD pos={bullet[i].X, bullet[i].Y+1};
				drawThisBulletToNull( pos );
				bullet[i].Y=30;
			}
				
		}
	}
}
 
void Game::enemyMove()
{
	for(int i=0; i<8; i++)
	{
		for(int j=0; j<2; j++)
			enemy[i].position[j].Y++;
 
		if(24 == enemy[i].position[1].Y)
		{
			COORD a={1, 1};
			COORD b={45, 3};
			enemy[i].position[0] = random(a, b);
			enemy[i].position[1].X = enemy[i].position[0].X + 3;
			enemy[i].position[1].Y = enemy[i].position[0].Y + 2;
		}
	}
}
 
void Game::judgePlane()
{
	for(int i = 0; i < 8; i++)
		for(int j=0; j<9; j++)
			if(judgeCoordInFrame(enemy[i], position[j]))
			{
				SetPos(62, 1);
				cout<<"坠毁";
				drawFrame(enemy[i], '+', '+');
				Sleep(1000);
				GameOver();
				break;
			}
}
 
void Game::drawThisBulletToNull( COORD c)
{
	SetPos(c);
	cout<<" ";
}
 
void Game::drawThisEnemyToNull( Frame f )
{
	drawFrame(f, ' ', ' ');
}
 
void Game::judgeEnemy()
{
	for(int i = 0; i < 8; i++)
		for(int j = 0; j < 10; j++)
			if( judgeCoordInFrame(enemy[i], bullet[j]) )
			{
				score += 5;
				drawThisEnemyToNull( enemy[i] );
				COORD a={1, 1};
				COORD b={45, 3};
				enemy[i].position[0] = random(a, b);
				enemy[i].position[1].X = enemy[i].position[0].X + 3;
				enemy[i].position[1].Y = enemy[i].position[0].Y + 2;					
				drawThisBulletToNull( bullet[j] );
				bullet[j].Y = 30;
			}
}
 
void Game::Shoot()
{
	for(int i=0; i<10; i++)
		if(bullet[i].Y == 30)
		{
			bullet[i].X = position[5].X;
			bullet[i].Y = position[5].Y-1;
			break;
		}
}
 
void Game::printScore()
{
	if(score == 120 && flag_rank == 0)
	{
		rank -= 3;
		flag_rank = 1;
	}
 
	else if( score == 360 && flag_rank == 1)
	{
		rank -= 5;
		flag_rank = 2;
	}
	else if( score == 480 && flag_rank == 2)
	{
		rank -= 5;
		flag_rank = 3;
	}
	int x=rank/5;
	SetPos(60, 6);
	cout<<score;
 
	if( rank!=rankf )
	{
		SetPos(60, 7);
		if( x == 5)
			title="初级飞行员";
		else if( x == 4)
			title="中级飞行员";
		else if( x == 3)
			title="高级飞行员";
		else if( x == 2 )
			title="王牌飞行员";
		cout<<title;
	}
	rankf = rank;
}
 
void Game::Playing()
{
	//HANDLE MFUN;
	//MFUN= CreateThread(NULL, 0, MusicFun, NULL, 0, NULL); 
 
	drawEnemy();
	drawPlane();
 
	int flag_bullet = 0;
	int flag_enemy = 0;
 
	while(1)
	{
		Sleep(8);
		if(_kbhit())
		{
			char x = _getch();
			if ('a' == x || 's' == x || 'd' == x || 'w' == x)
			{
				drawPlaneToNull();
				planeMove(x);
				drawPlane();
				judgePlane();
			}			
			else if ('p' == x)
				Pause();
			else if( 'k' == x)
				Shoot();
			else if( 'e' == x)
			{
				//CloseHandle(MFUN);
				GameOver();
				break;
			}
				
		}
		/* 处理子弹 */
		if( 0 == flag_bullet )
		{
			bulletMove();
			drawBulletToNull();
			drawBullet();
			judgeEnemy();
		}			
		flag_bullet++;
		if( 5 == flag_bullet )
			flag_bullet = 0;
 
		/* 处理敌人 */
		if( 0 == flag_enemy )
		{
			drawEnemyToNull();
			enemyMove();			
			drawEnemy();
			judgePlane();
		}
		flag_enemy++;
		if( flag_enemy >= rank )
			flag_enemy = 0;
 
		/* 输出得分 */
		printScore();
	}
}
 
void Game::GameOver()
{
	system("cls");				
	COORD p1={28,9};
	COORD p2={53,15};
	drawFrame(p1, p2, '=', '|');
	SetPos(36,12);
	string str="Game Over!";
	for(int i=0; i<str.size(); i++)
	{
		Sleep(80);
		cout<<str[i];
	}
	Sleep(1000);
	system("cls");
	drawFrame(p1, p2, '=', '|');
	SetPos(31, 11);
	cout<<"击落敌机:"<<score/5<<" 架";
	SetPos(31, 12);
	cout<<"得  分:"<<score;
	SetPos(31, 13);
	cout<<"获得称号:"<<title;
	SetPos(30, 16);
	Sleep(1000);
	cout<<"继续? 是(y)| 否(n)制作:<bits/stdc++.h>";
as:
	char x=_getch();
	if (x == 'n')
		exit(0);
	else if (x == 'y')
	{
		system("cls");
		Game game;
		int a = drawMenu();
		if(a == 2)
			game.rank = 20;
		system("cls");
		drawPlaying();
		game.Playing();
	}
	else goto as;
}
 
/*================== the main function ==================*/
int main()
{
	//游戏准备
	srand((int)time(0));	//随机种子
	HideCursor();	//隐藏光标
	
	Game game;
	int a = drawMenu();
	if(a == 2)
		game.rank = 20;
	system("cls");
	drawPlaying();
	game.Playing();
}

贪吃蛇

/************************贪吃蛇***********************/


#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <cmath>
#include <windows.h>
using namespace std;

/*** 光标定位 ***/
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;

void locate(int x,int y) {
	coord.X=y;
	coord.Y=x;
	SetConsoleCursorPosition(hout,coord);
};

/*** 隐藏光标 ***/
void hide() {
	CONSOLE_CURSOR_INFO cursor_info= {1,0};
	SetConsoleCursorInfo(hout, &cursor_info);
}

/*** 生成随机数 ***/
double random(double start, double end) {
	return start+(end-start)*rand()/(RAND_MAX + 1.0);
}

/*** 定义地图的长宽,蛇的坐标,长度,方向,食物的位置 ***/
int m,n;

struct node {
	int x,y;
} snake[1000];

int snake_length,dir;
node food;
int direct[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};

/*** 输出墙 ***/
void print_wall() {
	cout << " ";
	for (int i=1; i<=n; i++)
		cout << "-";
	cout << endl;
	for (int j=0; j<=m-1; j++) {
		cout << "|";
		for (int i=1; i<=n; i++) cout << " ";
		cout << "|" << endl;
	}
	cout << " ";
	for (int i=1; i<=n; i++)
		cout << "-";
}

/*** 首次输出蛇,其中snake[0]代表头 ***/
void print_snake() {
	locate(snake[0].x,snake[0].y);
	cout << "@";
	for (int i=1; i<=snake_length-1; i++) {
		locate(snake[i].x,snake[i].y);
		cout << "*";
	}
}

/*** 判断是否撞墙或者自撞 ***/
bool is_correct() {
	if (snake[0].x==0 || snake[0].y==0 || snake[0].x==m+1 || snake[0].y==n+1) return false;
	for (int i=1; i<=snake_length-1; i++) {
		if (snake[0].x==snake[i].x && snake[0].y==snake[i].y) return false;
	}
	return true;
}

/*** 随机生成并输出食物位置 ***/
bool print_food() {
	srand((unsigned)time(0));
	bool e;
	while (1) {
		e=true;
		int i=(int) random(0,m)+1,j=(int) random(0,n)+1;
		food.x=i;
		food.y=j;
		for (int k=0; k<=snake_length-1; k++) {
			if (snake[k].x==food.x && snake[k].y==food.y) {
				e=false;
				break;
			}
		}
		if (e) break;
	}
	locate(food.x,food.y);
	cout << "$";
	return true;
}

/*** 蛇的前进 ***/
bool go_ahead() {
	node temp;
	bool e=false;
	temp=snake[snake_length-1];
	for (int i=snake_length-1; i>=1; i--)
		snake[i]=snake[i-1];
	snake[0].x+=direct[dir][0];
	snake[0].y+=direct[dir][1];
	locate(snake[1].x,snake[1].y);
	cout << "*";
	/*** 吃到了食物 ***/
	if (snake[0].x==food.x && snake[0].y==food.y) {
		snake_length++;
		e=true;
		snake[snake_length-1]=temp;
	}
	/*** 输出此时蛇状态 ***/
	if (!e) {
		locate(temp.x,temp.y);
		cout << " ";
	} else
		print_food();
	locate(snake[0].x,snake[0].y);
	cout << "@";
	/*** 如果自撞 ***/
	if (!is_correct()) {
		system("cls");
		cout << "You lose!" << endl << "Length: " << snake_length << endl;
		return false;
	}
	return true;
}

/*** 主函数 ***/
int main() {
	cout << "--------------------贪吃蛇---------------------" << endl;
	cout << "请先输入两个数,表示地图大小.要求长宽均不小于10." << endl;
	cout << "请注意窗口大小,以免发生错位.建议将窗口调为最大." << endl;
	cout << "再选择难度.请在1-10中输入1个数,1最简单,10则最难" << endl;
	cout << "然后进入游戏画面,以方向键控制方向.祝你游戏愉快!" << endl;
	cout << "-----------------------------------------------" << endl;
	cin >> m >> n;
	if (m<10 || n<10 || m>25 || n>40) {
		cout << "ERROR" << endl;
		system("pause");
		return 0;
	}
	int hard;
	cin >> hard;
	if (hard<=0 || hard>100) {
		cout << "ERROR" << endl;
		system("pause");
		return 0;
	}
	/*** 数据全部初始化,包括蛇长,位置,方向 ***/
	snake_length=5;
	clock_t a,b;
	char ch;
	double hard_len;
	for (int i=0; i<=4; i++) {
		snake[i].x=1;
		snake[i].y=5-i;
	}
	dir=3;
	/*** 输出初始地图,蛇与食物 ***/
	system("cls");
	hide();
	print_wall();
	print_food();
	print_snake();
	locate(m+2,0);
	cout << "Now length: ";
	/*** 开始游戏 ***/
	while (1) {
		/*** 难度随长度增加而提高 ***/
		hard_len=(double)snake_length/(double) (m*n);
		/*** 调节时间,单位是ms ***/
		a=clock();
		while (1) {
			b=clock();
			if (b-a>=(int)(400-30*hard)*(1-sqrt(hard_len))) break;
		}
		/*** 接受键盘输入的上下左右,并以此改变方向 ***/
		if (kbhit()) {
			ch=getch();
			if (ch==-32) {
				ch=getch();
				switch(ch) {
					case 72:
						if (dir==2 || dir==3)
							dir=0;
						break;
					case 80:
						if (dir==2 || dir==3)
							dir=1;
						break;
					case 75:
						if (dir==0 || dir==1)
							dir=2;
						break;
					case 77:
						if (dir==0 || dir==1)
							dir=3;
						break;
				}
			}
		}
		/*** 前进 ***/
		if (!go_ahead()) break;
		/*** 在最后输出此时长度 ***/
		locate(m+2,12);
		cout << snake_length;
	}
	system("pause");
	return 0;
}

打怪游戏

#include<bits/stdc++.h>
#include<conio.h>
#include<windows.h>
using namespace std;
double shanghai[20]= {0.6,1.1,2,3.16,5.5,7,10,20,50,100,146.23,254.13,312,403,601,1023};
double bosshealth[20]= {2,3,4,5.9,8,14,19,32,73,157,200,403,801,1200,3630,20123};
double wj_shanghai=1,wj_health=10,wj_max_health=10,boss,wj_money=0;
void chushihua();
void game();
void gongji();
void goumai();
void shangdian();
void zhujiemian();
void fangyu();
void cend();
void chushou();
void print(char[]);
int bishou=0,caidao=0,jian=0,shenjian=0;
double bishou_1=5,caidao_1=17,jian_1=58,shenjian_1=123.1;
int hat=0,douhui=0,hudun=0,hunjia=0,shendun=0;
double hat_1=7,douhui_1=21,hudun_1=49,hunjia_1=89,shendun_1=210.4;
void cend() {
	system("cls");
	print("GAME OVER");
	exit(1);
}
void game() {
	int k;
	chushihua();
IO:
	printf("请输入对手等级 (0~15)\n");
	scanf("%d",&k);
	if(k>15||k<0) {
		system("cls");
		goto IO;
	}
	boss=bosshealth[k];
	system("cls");
	while(wj_health>=0) {
		srand(time(NULL));
QP:
		printf("1.逃跑 2.进攻\n");
		char s=getch();
		if(s<'1'||s>'2') {
			system("cls");
			goto QP;
		}
		if(s=='1') {
			system("cls");
			zhujiemian();
		}
		system("cls");
		double l=shanghai[k]*((rand()%2)+1)+fabs(double(rand()%100/100-2));
		printf("对手对你造成了%lf点伤害\n",l);
		wj_health-=l;
		printf("你当前剩余血量:%lf\n",wj_health);
		if(wj_health<=0)
			cend();
		double o=wj_shanghai*((rand()%2)+1)+double(rand()%10/10);
		boss-=o;
		printf("你对对手造成了%lf点伤害\n",o);
		printf("对手当前剩余血量:%lf\n\n",boss);
		if(boss<=0) {
			printf("胜利!\n获得%lf金币\n\n当前剩余血量:%lf\n",shanghai[k]+3,wj_health);
			wj_money+=shanghai[k]+3;
			printf("\n余额:%lf\n",wj_money);
			getch();
			if(k==15) {
				printf("恭喜玩家!游戏胜利!\n");
				getch();
				exit(1);
			}
			system("cls");
			zhujiemian();
		}
	}
}
void zhujiemian() {
PO:
	printf("1.商店 2.战斗 3.回血 4.状态\n");
	char k=getch();
	if(k>'4'||k<'1') {
		system("cls");
		goto PO;
	}
	if(k=='1') {
		system("cls");
		shangdian();
		return;
	}
	if(k=='2') {
		system("cls");
		game();
		return;
	}
	if(k=='3') {
		system("cls");
		if(wj_money>0) {
			wj_money=wj_money*4/5-1;
			chushihua();
			wj_health=wj_max_health;
			printf("回血成功!\n");
			getch();
			system("cls");
			goto PO;
		} else {
			printf("余额不足!\n");
			getch();
			system("cls");
			goto PO;
		}
	}
	if(k=='4') {
		chushihua();
		system("cls");
		printf("生命值:%lf\n",wj_health);
		printf("最大生命值:%lf\n",wj_max_health);
		printf("攻击力:%lf\n",wj_shanghai);
		printf("金币:%lf\n",wj_money);
		getch();
		system("cls");
		goto PO;
	}
	if(k=='5') {
		string a;
		system("cls");
		printf("输入密码!\n");
		cin>>a;
		if(a=="songyudashuaibi"||a=="PI") {
			wj_money+=1000;
			printf("外挂生效\n");
			Sleep(1000);
			system("cls");
			goto PO;
		}
		printf("外挂失败\n");
		Sleep(1000);
		system("cls");
		goto PO;
	}
}
void shangdian() {
LK:
	printf("1.购买 2.返回主界面\n");
	char k=getch();
	if(k!='1'&&k!='2') {
		system("cls");
		goto LK;
	}
	if(k=='1') {
		system("cls");
		goumai();
		goto LK;
	}
	if(k=='2') {
		system("cls");
		zhujiemian();
		return;
	}
}
void goumai() {
ML:
	printf("1.攻击 2.防御 3.返回主界面\n");
	char k=getch();
	if(k!='1'&&k!='2'&&k!='3') {
		system("cls");
		goto ML;
	}
	if(k=='1') {
		system("cls");
		gongji();
		goto ML;
	}
	if(k=='3') {
		system("cls");
		zhujiemian();
		return;
	}
	if(k=='2') {
		fangyu();
	}
}
void gongji() {
OP:
	system("cls");
	printf("0.返回上界面\n");
	printf("1.返回主界面\n");
	printf("2.匕首 5金币\n");
	printf("3.菜刀 17金币\n");
	printf("4.剑 68金币\n");
	printf("5.圣剑 210金币\n");
	printf("提醒:金币价格与伤害成正比\n");
	char k=getch();
	if(k<'0'||k>'5') {
		system("cls");
		goto OP;
	}
	if(k=='0') {
		system("cls");
		goumai();
		return;
	}
	if(k=='1') {
		system("cls");
		zhujiemian();
		return;
	}
	if(k=='2') {
		if(wj_money>=bishou_1) {
			chushihua();
			system("cls");
			wj_money-=bishou_1;
			bishou++;
			goto OP;
		}
		system("cls");
		printf("余额不足!\n");
		getch();
		system("cls");
		goto OP;
	}
	if(k=='3') {
		if(wj_money>=caidao_1) {
			chushihua();
			system("cls");
			wj_money-=caidao_1;
			caidao++;
			goto OP;
		}
		system("cls");
		printf("余额不足!\n");
		getch();
		goto OP;
	}
	if(k=='4') {
		if(wj_money>=jian_1) {
			chushihua();
			system("cls");
			wj_money-=jian_1;
			jian++;
			goto OP;
		}
		system("cls");
		printf("余额不足!\n");
		getch();
		goto OP;
	}
	if(k=='5') {
		if(wj_money>=shenjian_1) {
			chushihua();
			system("cls");
			wj_money-=shenjian_1;
			shenjian++;
			goto OP;
		}
		system("cls");
		printf("余额不足!\n");
		getch();
		goto OP;
	}
}
void fangyu() {
OP:
	system("cls");
	printf("0.返回上界面\n");
	printf("1.返回主界面\n");
	printf("2.帽子 7金币\n");
	printf("3.头盔 21金币\n");
	printf("4.护盾 49金币\n");
	printf("5.盔甲 89金币\n");
	printf("6.圣盾 210金币\n");
	printf("提醒:金币价格与伤害成正比\n");
	char k=getch();
	if(k<'0'||k>'6') {
		system("cls");
		goto OP;
	}
	if(k=='0') {
		system("cls");
		goumai();
		return;
	}
	if(k=='1') {
		system("cls");
		zhujiemian();
		return;
	}
	if(k=='2') {
		if(wj_money>=hat_1) {
			chushihua();
			system("cls");
			wj_money-=hat_1;
			hat++;
			goto OP;
		}
		system("cls");
		printf("余额不足!\n");
		getch();
		system("cls");
		goto OP;
	}
	if(k=='3') {
		if(wj_money>=douhui_1) {
			chushihua();
			system("cls");
			wj_money-=douhui_1;
			douhui++;
			goto OP;
		}
		system("cls");
		printf("余额不足!\n");
		getch();
		goto OP;
	}
	if(k=='4') {
		if(wj_money>=hudun_1) {
			chushihua();
			system("cls");
			wj_money-=hudun_1;
			hudun++;
			goto OP;
		}
		system("cls");
		printf("余额不足!\n");
		getch();
		goto OP;
	}
	if(k=='5') {
		chushihua();
		if(wj_money>=hunjia_1) {
			system("cls");
			wj_money-=hunjia_1;
			hunjia++;
			goto OP;
		}
		system("cls");
		printf("余额不足!\n");
		getch();
		goto OP;
	}
	if(k=='6') {
		if(wj_money>=shendun_1) {
			chushihua();
			system("cls");
			wj_money-=shendun_1;
			shendun++;
			goto OP;
		}
		system("cls");
		printf("余额不足!\n");
		getch();
		goto OP;
	}
}
void chushihua() {
	wj_max_health=hat*hat_1+douhui*douhui_1+hudun*hudun_1+hunjia*hunjia_1+shendun*shendun_1+10;
	wj_shanghai=bishou*bishou_1+caidao*caidao_1+jian*jian_1+shenjian*shenjian_1+1;
}
void print(char a[]) {
	int s=strlen(a);
	for(int i=0; i<s; i++) {
		cout<<a[i];
		Sleep(400);
	}
	getch();
	system("cls");
}
int main() {
	system("title game");
	print("打怪小游戏");
	zhujiemian();
	return 0;
}

俄罗斯方块

//"俄罗斯方块"V1.0
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <windows.h>
#include <conio.h>
using namespace std;
int block00[4][4] = { { 10,0,0,0 },{ 1,1,1,1 },{ 0,0,0,0 },{ 0,0,0,0 } };
int block01[4][4] = { { 11,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 },{ 0,0,1,0 } };
int block02[4][4] = { { 12,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,1,0,0 } };
int block03[4][4] = { { 13,0,0,0 },{ 0,1,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block04[4][4] = { { 14,0,0,0 },{ 0,0,0,0 },{ 0,1,0,0 },{ 1,1,1,0 } };
int block05[4][4] = { { 15,0,0,0 },{ 0,1,0,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block06[4][4] = { { 16,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 1,0,0,0 } };
int block07[4][4] = { { 17,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block08[4][4] = { { 18,0,0,0 },{ 0,0,0,0 },{ 0,0,1,0 },{ 1,1,1,0 } };
int block09[4][4] = { { 19,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 0,1,1,0 } };
int block10[4][4] = { { 20,0,0,0 },{ 0,0,0,0 },{ 1,1,1,0 },{ 0,0,1,0 } };
int block11[4][4] = { { 21,0,0,0 },{ 0,1,0,0 },{ 0,1,0,0 },{ 1,1,0,0 } };
int block12[4][4] = { { 22,0,0,0 },{ 0,0,0,0 },{ 1,0,0,0 },{ 1,1,1,0 } };
int block13[4][4] = { { 23,0,0,0 },{ 0,1,1,0 },{ 0,1,0,0 },{ 0,1,0,0 } };
int block14[4][4] = { { 24,0,0,0 },{ 0,0,0,0 },{ 0,1,1,0 },{ 1,1,0,0 } };
int block15[4][4] = { { 25,0,0,0 },{ 1,0,0,0 },{ 1,1,0,0 },{ 0,1,0,0 } };
int block16[4][4] = { { 26,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 0,1,1,0 } };
int block17[4][4] = { { 27,0,0,0 },{ 0,0,1,0 },{ 0,1,1,0 },{ 0,1,0,0 } };
int block18[4][4] = { { 28,0,0,0 },{ 0,0,0,0 },{ 1,1,0,0 },{ 1,1,0,0 } };

void initialWindow(HANDLE hOut);//初始化窗口
void initialPrint(HANDLE hOut);//初始化界面
void gotoXY(HANDLE hOut, int x, int y);//移动光标
void roundBlock(HANDLE hOut, int block[4][4]);//随机生成方块并打印到下一个方块位置
bool collisionDetection(int block[4][4], int map[21][12], int x, int y);//检测碰撞
void printBlock(HANDLE hOut, int block[4][4], int x, int y);//打印方块
void clearBlock(HANDLE hOut, int block[4][4], int x, int y);//消除方块
void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//左移
void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//右移
void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y);//顺时针旋转90度
int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y);//加速下落
void myStop(HANDLE hOut, int block[4][4]);//游戏暂停
void gameOver(HANDLE hOut, int block[4][4], int map[21][12]);//游戏结束
void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint);//判断是否能消行并更新分值
int main() {
	int map[21][12];
	int blockA[4][4];//候选区的方块
	int blockB[4][4];//下落中的方块
	int positionX, positionY;//方块左上角的坐标
	bool check;//检查方块还能不能下落
	char key;//用来存储按键
	int val;//用来控制下落速度
	int fraction;//用来存储得分
	int checkpoint;//用来存储关卡
	int times;
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄
	initialWindow(hOut);
initial:
	gotoXY(hOut, 0, 0);
	initialPrint(hOut);
	check = true;
	val = 50;
	fraction = 0;
	checkpoint = 1;
	times = val;
	for (int i = 0; i < 20; ++i) {
		for (int j = 1; j < 11; ++j) {
			map[i][j] = 0;
		}
	}
	for (int i = 0; i < 20; ++i) {
		map[i][0] = map[i][11] = 1;
	}
	for (int i = 0; i < 12; ++i) {
		map[20][i] = 1;
	}

	srand((unsigned)time(NULL));
	roundBlock(hOut, blockA);
	while (true) {
		if (check) {
			eliminateRow(hOut, map, val, fraction, checkpoint);
			check = false;
			positionX = -3;
			positionY = 4;
			if (collisionDetection(blockA, map, positionX, positionY)) {
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						blockB[i][j] = blockA[i][j];
					}
				}
				roundBlock(hOut, blockA);
			} else {
				gameOver(hOut, blockA, map);
				goto initial;
			}
		}
		printBlock(hOut, blockB, positionX, positionY);
		if (_kbhit()) {
			key = _getch();
			switch (key) {
				case 72:
					myUp(hOut, blockB, map, positionX, positionY);
					break;
				case 75:
					myLeft(hOut, blockB, map, positionX, positionY);
					break;
				case 77:
					myRight(hOut, blockB, map, positionX, positionY);
					break;
				case 80:
					switch (myDown(hOut, blockB, map, positionX, positionY)) {
						case 0:
							check = false;
							break;
						case 1:
							check = true;
							break;
						case 2:
							gameOver(hOut, blockB, map);
							goto initial;
						default:
							break;
					}
					break;
				case 32:
					myStop(hOut, blockA);
					break;
				case 27:
					exit(0);
				default:
					break;
			}
		}
		Sleep(20);
		if (0 == --times) {
			switch (myDown(hOut, blockB, map, positionX, positionY)) {
				case 0:
					check = false;
					break;
				case 1:
					check = true;
					break;
				case 2:
					gameOver(hOut, blockB, map);
					goto initial;
				default:
					break;
			}
			times = val;
		}
	}
	cin.get();
	return 0;
}

void initialWindow(HANDLE hOut) {
	SetConsoleTitle("俄罗斯方块");
	COORD size = { 80, 25 };
	SetConsoleScreenBufferSize(hOut, size);
	SMALL_RECT rc = { 0, 0, 79, 24 };
	SetConsoleWindowInfo(hOut, true, &rc);
	CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
	SetConsoleCursorInfo(hOut, &cursor_info);
}

void initialPrint(HANDLE hOut) {
	SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
	for (int i = 0; i < 20; ++i) {
		cout << "■                    ■☆                      ☆" << endl;
	}
	gotoXY(hOut, 26, 0);
	cout << "☆☆☆☆☆☆☆☆☆☆☆";
	gotoXY(hOut, 0, 20);
	cout << "■■■■■■■■■■■■☆☆☆☆☆☆☆☆☆☆☆☆☆";
	gotoXY(hOut, 26, 1);
	cout << "分    数:      ";
	gotoXY(hOut, 26, 2);
	cout << "关    卡:      ";
	gotoXY(hOut, 26, 4);
	cout << "下一方块:";
	gotoXY(hOut, 26, 9);
	cout << "操作方法:";
	gotoXY(hOut, 30, 11);
	cout << "↑:旋转 ↓:速降";
	gotoXY(hOut, 30, 12);
	cout << "→:右移 ←:左移";
	gotoXY(hOut, 30, 13);
	cout << "空格键:开始/暂停";
	gotoXY(hOut, 30, 14);
	cout << "Esc 键:退出";
	gotoXY(hOut, 26, 16);
	cout << "关    于:";
	gotoXY(hOut, 30, 18);
	cout << "俄罗斯方块V1.0";
	gotoXY(hOut, 35, 19);
	cout << "作者:李国良";
}

void gotoXY(HANDLE hOut, int x, int y) {
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(hOut, pos);
}

void roundBlock(HANDLE hOut, int block[4][4]) {
	clearBlock(hOut, block, 5, 15);
	switch (rand() % 19) {
		case 0:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block00[i][j];
				}
			}
			break;
		case 1:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block01[i][j];
				}
			}
			break;
		case 2:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block02[i][j];
				}
			}
			break;
		case 3:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block03[i][j];
				}
			}
			break;
		case 4:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block04[i][j];
				}
			}
			break;
		case 5:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block05[i][j];
				}
			}
			break;
		case 6:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block06[i][j];
				}
			}
			break;
		case 7:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block07[i][j];
				}
			}
			break;
		case 8:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block08[i][j];
				}
			}
			break;
		case 9:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block09[i][j];
				}
			}
			break;
		case 10:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block10[i][j];
				}
			}
			break;
		case 11:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block11[i][j];
				}
			}
			break;
		case 12:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block12[i][j];
				}
			}
			break;
		case 13:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block13[i][j];
				}
			}
			break;
		case 14:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block14[i][j];
				}
			}
			break;
		case 15:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block15[i][j];
				}
			}
			break;
		case 16:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block16[i][j];
				}
			}
			break;
		case 17:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block17[i][j];
				}
			}
			break;
		case 18:
			for (int i = 0; i < 4; ++i) {
				for (int j = 0; j < 4; ++j) {
					block[i][j] = block18[i][j];
				}
			}
			break;
		default:
			break;
	}
	printBlock(hOut, block, 5, 15);
}

bool collisionDetection(int block[4][4], int map[21][12], int x, int y) {
	for (int i = 0; i < 4; ++i) {
		for (int j = 0; j < 4; ++j) {
			if (x + i >= 0 && y + j >= 0 && map[x + i][y + j] == 1 && block[i][j] == 1) {
				return false;
			}
		}
	}
	return true;
}

void printBlock(HANDLE hOut, int block[4][4], int x, int y) {
	switch (block[0][0]) {
		case 10:
		case 11:
			SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
			break;
		case 12:
		case 13:
		case 14:
		case 15:
			SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
			break;
		case 16:
		case 17:
		case 18:
		case 19:
			SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
			break;
		case 20:
		case 21:
		case 22:
		case 23:
			SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
			break;
		case 24:
		case 25:
			SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
			break;
		case 26:
		case 27:
			SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
			break;
		case 28:
			SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
			break;
		default:
			break;
	}
	for (int i = 0; i < 4; ++i) {
		if (i + x >= 0) {
			for (int j = 0; j < 4; ++j) {
				if (block[i][j] == 1) {

					gotoXY(hOut, 2 * (y + j), x + i);
					cout << "■";
				}
			}
		}
	}
}

void clearBlock(HANDLE hOut, int block[4][4], int x, int y) {
	for (int i = 0; i < 4; ++i) {
		if (i + x >= 0) {
			for (int j = 0; j < 4; ++j) {
				if (block[i][j] == 1) {
					gotoXY(hOut, 2 * (y + j), x + i);
					cout << "  ";
				}
			}
		}
	}
}

void gameOver(HANDLE hOut, int block[4][4], int map[21][12]) {
	SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
	gotoXY(hOut, 9, 8);
	cout << "GAME OVER";
	gotoXY(hOut, 8, 9);
	cout << "空格键:重来";
	gotoXY(hOut, 8, 10);
	cout << "ESC键:退出";
	char key;
	while (true) {
		key = _getch();
		if (key == 32) {
			return;
		}
		if (key == 27) {
			exit(0);
		}
	}
}

int myDown(HANDLE hOut, int block[4][4], int map[21][12], int &x, int y) {
	if (collisionDetection(block, map, x + 1, y)) {
		clearBlock(hOut, block, x, y);
		++x;
		return 0;
	}
	if (x < 0) {
		return 2;
	}
	for (int i = 0; i < 4; ++i) {
		for (int j = 0; j < 4; ++j) {
			if (block[i][j] == 1) {
				map[x + i][y + j] = 1;
				SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
				gotoXY(hOut, 2 * (y + j), x + i);
				cout << "■";
			}
		}
	}
	return 1;
}

void myLeft(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) {
	if (collisionDetection(block, map, x, y - 1)) {
		clearBlock(hOut, block, x, y);
		--y;
	}
}

void myRight(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) {
	if (collisionDetection(block, map, x, y + 1)) {
		clearBlock(hOut, block, x, y);
		++y;
	}
}

void myUp(HANDLE hOut, int block[4][4], int map[21][12], int x, int &y) {
	switch (block[0][0]) {
		case 10:
			if (collisionDetection(block01, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block01[i][j];
					}
				}
			}
			break;
		case 11:
			if (collisionDetection(block00, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block00[i][j];
					}
				}
			} else if (collisionDetection(block00, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block00[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block00, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block00[i][j];
					}
				}
				++y;
			} else if (collisionDetection(block00, map, x, y - 2)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block00[i][j];
					}
				}
				y = y - 2;
			} else if (collisionDetection(block00, map, x, y + 2)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block00[i][j];
					}
				}
				y = y + 2;
			}
			break;
		case 12:
			if (collisionDetection(block03, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block03[i][j];
					}
				}
			} else if (collisionDetection(block03, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block03[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block03, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block03[i][j];
					}
				}
				++y;
			}
			break;
		case 13:
			if (collisionDetection(block04, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block04[i][j];
					}
				}
			} else if (collisionDetection(block04, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block04[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block04, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block04[i][j];
					}
				}
				++y;
			}
			break;
		case 14:
			if (collisionDetection(block05, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block05[i][j];
					}
				}
			} else if (collisionDetection(block05, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block05[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block05, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block05[i][j];
					}
				}
				++y;
			}
			break;
		case 15:
			if (collisionDetection(block02, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block02[i][j];
					}
				}
			} else if (collisionDetection(block02, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block02[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block02, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block02[i][j];
					}
				}
				++y;
			}
			break;

		case 16:
			if (collisionDetection(block07, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block07[i][j];
					}
				}
			} else if (collisionDetection(block07, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block07[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block07, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block07[i][j];
					}
				}
				++y;
			}
			break;
		case 17:
			if (collisionDetection(block08, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block08[i][j];
					}
				}
			} else if (collisionDetection(block08, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block08[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block08, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block08[i][j];
					}
				}
				++y;
			}
			break;
		case 18:
			if (collisionDetection(block09, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block09[i][j];
					}
				}
			} else if (collisionDetection(block09, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block09[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block09, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block09[i][j];
					}
				}
				++y;
			}
			break;
		case 19:
			if (collisionDetection(block06, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block06[i][j];
					}
				}
			} else if (collisionDetection(block06, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block06[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block06, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block06[i][j];
					}
				}
				++y;
			}
			break;
		case 20:
			if (collisionDetection(block11, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block11[i][j];
					}
				}
			} else if (collisionDetection(block11, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block11[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block11, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block11[i][j];
					}
				}
				++y;
			}
			break;
		case 21:
			if (collisionDetection(block12, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block12[i][j];
					}
				}
			} else if (collisionDetection(block12, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block12[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block12, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block12[i][j];
					}
				}
				++y;
			}
			break;
		case 22:
			if (collisionDetection(block13, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block13[i][j];
					}
				}
			} else if (collisionDetection(block13, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block13[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block13, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block13[i][j];
					}
				}
				++y;
			}
			break;
		case 23:
			if (collisionDetection(block10, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block10[i][j];
					}
				}
			} else if (collisionDetection(block10, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block10[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block10, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block10[i][j];
					}
				}
				++y;
			}
			break;
		case 24:
			if (collisionDetection(block15, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block15[i][j];
					}
				}
			} else if (collisionDetection(block15, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block15[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block15, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block15[i][j];
					}
				}
				++y;
			}
			break;
		case 25:
			if (collisionDetection(block14, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block14[i][j];
					}
				}
			} else if (collisionDetection(block14, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block14[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block14, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block14[i][j];
					}
				}
				++y;
			}
			break;
		case 26:
			if (collisionDetection(block17, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block17[i][j];
					}
				}
			} else if (collisionDetection(block17, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block17[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block17, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block17[i][j];
					}
				}
				++y;
			}
			break;
		case 27:
			if (collisionDetection(block16, map, x, y)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block16[i][j];
					}
				}
			} else if (collisionDetection(block16, map, x, y - 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block16[i][j];
					}
				}
				--y;
			} else if (collisionDetection(block16, map, x, y + 1)) {
				clearBlock(hOut, block, x, y);
				for (int i = 0; i < 4; ++i) {
					for (int j = 0; j < 4; ++j) {
						block[i][j] = block16[i][j];
					}
				}
				++y;
			}
			break;
		default:
			break;
	}
}

void myStop(HANDLE hOut, int block[4][4]) {
	clearBlock(hOut, block, 5, 15);
	SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
	gotoXY(hOut, 30, 7);
	cout << "游戏暂停";
	char key;
	while (true) {
		key = _getch();
		if (key == 32) {
			gotoXY(hOut, 30, 7);
			cout << "        ";
			printBlock(hOut, block, 5, 15);
			return;
		}
		if (key == 27) {
			exit(0);
		}
	}
}

void eliminateRow(HANDLE hOut, int map[21][12], int &val, int &fraction, int &checkpoint) {
	SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
	for (int i = 19; i >= 0; --i) {
		int x = 0;
		for (int j = 1; j < 11; ++j) {
			x += map[i][j];
		}
		if (x == 10) {
			fraction += 100;
			if (val > 1 && fraction / 1000 + 1 != checkpoint) {
				checkpoint = fraction / 1000 + 1;
				val -= 5;
			}
			for (int m = i; m > 0; --m) {
				for (int n = 1; n < 11; ++n) {
					map[m][n] = map[m - 1][n];
					gotoXY(hOut, 2 * n, m);
					if (map[m][n] == 1) {
						cout << "■";
					} else {
						cout << "  ";
					}
				}
			}
			++i;
		}
	}
	gotoXY(hOut, 36, 1);
	cout << fraction;
	gotoXY(hOut, 36, 2);
	cout << checkpoint;
}

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值