马里奥(附代码windows)

不好意思让大家久等了

代码如下:

#include <bits/stdc++.h>
#include <conio.h>
#include <windows.h>
#define high 20
#define length 500
using namespace std;
int row=19,line=2,a[high][length]={0};
void get_new(void);//开始新游戏 
void SetTitle(LPCSTR lpTitle) {
	SetConsoleTitle(lpTitle);
}
void all_in_2(void){
	for(int i=1;i<=high;i++) for(int j=1;j<=length;j++) a[i][j]=2;
}
void DrawInMillSecond(int millsecond_of_words,string pll){//逐字输出 
	for(int i=0;i<=pll.size()-1;i++) Sleep(millsecond_of_words),cout<<pll[i];
	cout<<endl;
}
void HideCursor(void){
	CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void color(string pll){
	if(pll=="g") SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
	if(pll=="b") SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE);
	if(pll=="o") SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED |FOREGROUND_BLUE| FOREGROUND_GREEN );
	if(pll=="r") SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
	if(pll=="c") SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |FOREGROUND_BLUE);
	if(pll=="p") SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED |FOREGROUND_BLUE);
}
void clear(int x,int y){
	system("cls");
	/*
	COORD coordScreen = { 0, 0 };
    DWORD cCharsWritten;
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    DWORD dwConSize;
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hConsole, &csbi);
    dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
    FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
    GetConsoleScreenBufferInfo(hConsole, &csbi);
    FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
    SetConsoleCursorPosition(hConsole, coordScreen);*/
}
void rand_map(void){
	all_in_2();
	srand(time(NULL));
	for(int i=16;i<=19;i++)
		for(int j=2;j<=499;j++){
			int s=rand()%8;
			if(s==0) a[i][j]=1;//stop
		}
	for(int i=1;i<=20;i++) for(int j=1;j<=500;j++) if(i==1||j==1||i==20||j==500) a[i][j]=3;//stop
	a[row][line]=4,a[19][499]=5;
}
void draw(void){
	a[row][line]=4;
	for(int i=row-9;i<=row+9;i++){
		for(int j=line-16;j<=line+16;j++){
			if(i>0&&j>0&&i<21&&j<501){
				if(a[i][j]==1||a[i][j]==3) color("r"),cout<<"*",color("o");
				if(a[i][j]==2) cout<<" ";
				if(a[i][j]==4) color("g"),cout<<"*",color("o");
				if(a[i][j]==5) color("b"),cout<<"*",color("o");
			}
		}
		cout<<endl;
	}
}
void drop(void){
	while(a[row+1][line]==2||a[row+1][line]==0) a[row+1][line]=4,a[row][line]=2,row++;
}
void got(void){
	if(_kbhit()){
		char g=getch();
		if(g=='d'){
			if(a[row][line+1]!=1&&a[row][line+1]!=3){
				line++;
				a[row][line-1]=2;
				a[row][line]=4;
				drop();
				clear(0,0);
				draw();
			}
		}
		if(g=='a'){
			if(a[row][line-1]!=1&&a[row][line-1]!=3){
				line--;
				a[row][line+1]=2;
				a[row][line]=4;
				drop();
				clear(0,0);
				draw();
			}
		}
		if(g=='w'){
			clock_t start,finish;
			if(a[row-2][line]!=1&&a[row-2][line]!=3){
				row-=2;
				a[row+2][line]=2;
				a[row][line]=4;
				clear(0,0);
				draw();
				start=clock();
				finish=clock();
				while(finish-start<=200){
					got();
					finish=clock();
				}	
				drop();	
				clear(0,0);
				draw();
			}	
		}
		if(g=='q'){
			clock_t start,finish;
			if(a[row-1][line]!=1&&a[row-1][line]!=3){
				row-=1;
				a[row+1][line]=2;
				a[row][line]=4;
				clear(0,0);
				draw();
				start=clock();
				finish=clock();
				while(finish-start<=200){
					got();
					finish=clock();
				}	
				drop();		
				clear(0,0);
				draw();
			}	
		}
		if(g=='e'){
			clock_t start,finish;
			if(a[row-3][line]!=1&&a[row-3][line]!=3){
				row-=3;
				a[row+3][line]=2;
				a[row][line]=4;
				clear(0,0);
				draw();
				start=clock();
				finish=clock();
				while(finish-start<=200){
					got();
					finish=clock();
				}	
				drop();	
				clear(0,0);
				draw();
			}	
		}
		if(g=='f'){
			if(a[row][line+2]==2){
				a[row][line+2]=4;
				a[row][line]=2;
				line+=2;
				drop(); 
				clear(0,0);
				draw();
			}	
		}
		if(g=='p'){
			row=19,line=2;
			memset(a,0,sizeof(a));
			get_new();
		}
	}		
}
void play(void){
	while(true)
		if(a[19][499]!=5) goto win;
		else got();
	win:
		clear(0,0);
		color("r");
		DrawInMillSecond(150,"win!");
		color("o");
}
void get_new(void){
	clear(0,0);
	HideCursor();
	rand_map();
	draw();
	play();
}
void menu(void){ 
	DrawInMillSecond(100,"欢迎来到马里奥!");
	Sleep(250);
	clear(0,0);
	cout<<"跳过教程?(y/n)"<<endl;
	char skip=getch();
	if(skip=='y'||skip=='Y')
		goto skips;
	clear(0,0);
	DrawInMillSecond(100,"规则:w跳,q小跳,e大跳,a左,d右,p重来,f穿墙。绿色的是你,红色为障碍,蓝色为终点。");
	Sleep(250);
	clear(0,0);
	DrawInMillSecond(100,"开始吧!");
	Sleep(250);
	system("pause"); 
	clear(0,0);
	skips:HideCursor();
}
void change_in_english_wordline(void){
	keybd_event(16,0,0,0);
	keybd_event(16,0,0x2,0);
} 
int main(){
	SetTitle("马里奥");
	change_in_english_wordline();
	menu(); 
	get_new();
}

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值