zoukankan      html  css  js  c++  java
  • C++推箱子-完整版

    前段时间,有个小朋友问可不可以用C++做小游戏呢,于是就有了下面的C++版推箱子。一起来欣赏一下孩子们的推箱子吧!

    //Boxgame 2020.10.12 By ZYX DevCPP 5.9.2 Compile.
    #include<iostream>
    #include<windows.h>
    #include<stdlib.h>
    #include<conio.h>
    
    //0:空地; 1:墙壁 3:箱子的目的地;4:箱子 6:人; 7:箱子和目的地重合; 9:人站在目的地
    //map:此处地图代码已隐藏,可在公众号”智阅荟"回复222下载完整源代码含地图,二维码见本页底部。
    int g_map[10][12]= {
    	{},
    	{},
    	{},
    	{},
    	{},
    	{},
    	{},
    	{},
    	{},
    	{},
    };
    
    //Draw a map
    void Drapmap()
    {
    	for(int i=0; i<10; i++) {
    
    		for(int j=0; j<12; j++) {
    			switch(g_map[i][j]) {
    				case 0:
    					printf("  ");
    					break;
    				case 1:
    					printf("■");
    					break;
    				case 3:
    					printf("☆");
    					break;
    				case 4:
    					printf("※");
    					break;
    				case 6:
    					printf("♀");
    					break;
    				case 7:
    					printf("◎");
    					break;
    				case 9:
    					printf("♂");
    					break;
    			}
    		}
    		printf("
    ");
    	}
    }
    POINT GetGamerPosition()
    {
    	POINT pos= {-1,-1};
    	for(int i=0; i<10; i++) {
    		for(int j=0; j<12; j++) {
    			if(g_map[i][j]==6 || g_map[i][j]==9) {
    				pos.x=i;
    				pos.y=j;
    				return pos;
    			}
    		}
    	}
    	return pos;
    }
    //0:空地; 1:墙壁 3:箱子的目的地;4:箱子 6:人; 7:箱子和目的地重合; 9:人站在目的地
    //keyup
    void up()
    {
    	POINT pos=GetGamerPosition();
    	if(g_map[pos.x-1][pos.y]==0) {
    		g_map[pos.x-1][pos.y]=6;
    
    		if(g_map[pos.x][pos.y]==9)
    			g_map[pos.x][pos.y]=3;
    		else
    			g_map[pos.x][pos.y]=0;
    	}
    	if(g_map[pos.x-1][pos.y]==3) {
    		g_map[pos.x-1][pos.y]=9;
    		if (g_map[pos.x][pos.y]==9)
    			g_map[pos.x][pos.y]=3;
    		else
    			g_map[pos.x][pos.y]=0;
    	}
    
    	if(g_map[pos.x-1][pos.y]==4) {
    		if(g_map[pos.x-2][pos.y]==0) {
    			g_map[pos.x-2][pos.y]=4;
    			g_map[pos.x-1][pos.y]=6;
    			if(g_map[pos.x][pos.y]==9)
    				g_map[pos.x][pos.y]=3;
    			else
    				g_map[pos.x][pos.y]=0;
    		} else {
    			if(g_map[pos.x-2][pos.y]==3) {
    				g_map[pos.x-2][pos.y]=7;
    				g_map[pos.x-1][pos.y]=6;
    				if(g_map[pos.x][pos.y]==9)
    					g_map[pos.x][pos.y]=3;
    				else
    					g_map[pos.x][pos.y]=0;
    
    			}
    
    		}
    
    	}
    	if(g_map[pos.x-1][pos.y]==7) {
    		if(g_map[pos.x-2][pos.y]==0) {
    			g_map[pos.x-2][pos.y]=4;
    			g_map[pos.x-1][pos.y]=9;
    			if(g_map[pos.x][pos.y]==9)
    				g_map[pos.x][pos.y]=3;
    			else
    				g_map[pos.x][pos.y]=0;
    		} else {
    			if(g_map[pos.x-2][pos.y]==3) {
    				g_map[pos.x-2][pos.y]=7;
    				g_map[pos.x-1][pos.y]=9;
    				if(g_map[pos.x][pos.y]==9)
    					g_map[pos.x][pos.y]=3;
    				else
    					g_map[pos.x][pos.y]=0;
    
    			}
    		}
    	}
    }
    //0:空地; 1:墙壁 3:箱子的目的地;4:箱子 6:人; 7:箱子和目的地重合; 9:人站在目的地
    
    //keydown
    void down()
    {
    	POINT pos=GetGamerPosition();
    	if(g_map[pos.x+1][pos.y]==0) {
    		g_map[pos.x+1][pos.y]=6;
    
    		if(g_map[pos.x][pos.y]==9)
    			g_map[pos.x][pos.y]=3;
    		else
    			g_map[pos.x][pos.y]=0;
    	}
    	if(g_map[pos.x+1][pos.y]==3) {
    		g_map[pos.x+1][pos.y]=9;
    		if (g_map[pos.x][pos.y]==9)
    			g_map[pos.x][pos.y]=3;
    		else
    			g_map[pos.x][pos.y]=0;
    	}
    
    	if(g_map[pos.x+1][pos.y]==4) {
    		if(g_map[pos.x+2][pos.y]==0) {
    			g_map[pos.x+2][pos.y]=4;
    			g_map[pos.x+1][pos.y]=6;
    			if(g_map[pos.x][pos.y]==9)
    				g_map[pos.x][pos.y]=3;
    			else
    				g_map[pos.x][pos.y]=0;
    		} else {
    			if(g_map[pos.x+2][pos.y]==3) {
    				g_map[pos.x+2][pos.y]=7;
    				g_map[pos.x+1][pos.y]=6;
    				if(g_map[pos.x][pos.y]==9)
    					g_map[pos.x][pos.y]=3;
    				else
    					g_map[pos.x][pos.y]=0;
    
    			}
    
    		}
    
    	}
    	if(g_map[pos.x+1][pos.y]==7) {
    		if(g_map[pos.x+2][pos.y]==0) {
    			g_map[pos.x+2][pos.y]=4;
    			g_map[pos.x+1][pos.y]=9;
    			if(g_map[pos.x][pos.y]==9)
    				g_map[pos.x][pos.y]=3;
    			else
    				g_map[pos.x][pos.y]=0;
    		} else {
    			if(g_map[pos.x+2][pos.y]==3) {
    				g_map[pos.x+2][pos.y]=7;
    				g_map[pos.x+1][pos.y]=9;
    				if(g_map[pos.x][pos.y]==9)
    					g_map[pos.x][pos.y]=3;
    				else
    					g_map[pos.x][pos.y]=0;
    
    			}
    		}
    	}
    }
    
    //keyleft
    void left()
    {
    
    	POINT pos=GetGamerPosition();
    	if(g_map[pos.x][pos.y-1]==0) {
    		g_map[pos.x][pos.y-1]=6;
    
    		if(g_map[pos.x][pos.y]==9)
    			g_map[pos.x][pos.y]=3;
    		else
    			g_map[pos.x][pos.y]=0;
    	}
    	if(g_map[pos.x][pos.y-1]==3) {
    		g_map[pos.x][pos.y-1]=9;
    		if (g_map[pos.x][pos.y]==9)
    			g_map[pos.x][pos.y]=3;
    		else
    			g_map[pos.x][pos.y]=0;
    	}
    
    	if(g_map[pos.x][pos.y-1]==4) {
    		if(g_map[pos.x][pos.y-2]==0) {
    			g_map[pos.x][pos.y-2]=4;
    			g_map[pos.x][pos.y-1]=6;
    			if(g_map[pos.x][pos.y]==9)
    				g_map[pos.x][pos.y]=3;
    			else
    				g_map[pos.x][pos.y]=0;
    		} else {
    			if(g_map[pos.x][pos.y-2]==3) {
    				g_map[pos.x][pos.y-2]=7;
    				g_map[pos.x][pos.y-1]=6;
    				if(g_map[pos.x][pos.y]==9)
    					g_map[pos.x][pos.y]=3;
    				else
    					g_map[pos.x][pos.y]=0;
    
    			}
    
    		}
    
    	}
    	if(g_map[pos.x][pos.y-1]==7) {
    		if(g_map[pos.x][pos.y-2]==0) {
    			g_map[pos.x][pos.y-2]=4;
    			g_map[pos.x][pos.y-1]=9;
    			if(g_map[pos.x][pos.y]==9)
    				g_map[pos.x][pos.y]=3;
    			else
    				g_map[pos.x][pos.y]=0;
    		} else {
    			if(g_map[pos.x][pos.y-2]==3) {
    				g_map[pos.x][pos.y-2]=7;
    				g_map[pos.x][pos.y-1]=9;
    				if(g_map[pos.x][pos.y]==9)
    					g_map[pos.x][pos.y]=3;
    				else
    					g_map[pos.x][pos.y]=0;
    
    			}
    		}
    	}
    }
    
    //keyright
    void right()
    {
    	POINT pos=GetGamerPosition();
    	if(g_map[pos.x][pos.y+1]==0) {
    		g_map[pos.x][pos.y+1]=6;
    
    		if(g_map[pos.x][pos.y]==9)
    			g_map[pos.x][pos.y]=3;
    		else
    			g_map[pos.x][pos.y]=0;
    	}
    	if(g_map[pos.x][pos.y+1]==3) {
    		g_map[pos.x][pos.y+1]=9;
    		if (g_map[pos.x][pos.y]==9)
    			g_map[pos.x][pos.y]=3;
    		else
    			g_map[pos.x][pos.y]=0;
    	}
    
    	if(g_map[pos.x][pos.y+1]==4) {
    		if(g_map[pos.x][pos.y+2]==0) {
    			g_map[pos.x][pos.y+2]=4;
    			g_map[pos.x][pos.y+1]=6;
    			if(g_map[pos.x][pos.y]==9)
    				g_map[pos.x][pos.y]=3;
    			else
    				g_map[pos.x][pos.y]=0;
    		} else {
    			if(g_map[pos.x][pos.y+2]==3) {
    				g_map[pos.x][pos.y+2]=7;
    				g_map[pos.x][pos.y+1]=6;
    				if(g_map[pos.x][pos.y]==9)
    					g_map[pos.x][pos.y]=3;
    				else
    					g_map[pos.x][pos.y]=0;
    
    			}
    
    		}
    
    	}
    	if(g_map[pos.x][pos.y-1]==7) {
    		if(g_map[pos.x][pos.y+2]==0) {
    			g_map[pos.x][pos.y+2]=4;
    			g_map[pos.x][pos.y+1]=9;
    			if(g_map[pos.x][pos.y]==9)
    				g_map[pos.x][pos.y]=3;
    			else
    				g_map[pos.x][pos.y]=0;
    		} else {
    			if(g_map[pos.x][pos.y+2]==3) {
    				g_map[pos.x][pos.y+2]=7;
    				g_map[pos.x][pos.y+1]=9;
    				if(g_map[pos.x][pos.y]==9)
    					g_map[pos.x][pos.y]=3;
    				else
    					g_map[pos.x][pos.y]=0;
    
    			}
    		}
    	}
    }
    
    //GetRestBox
    int GetRestBox()
    {
    	int CountBox=0;
    	for(int i=0; i<10; i++) {
    		for(int j=0; j<12; j++) {
    			if (g_map[i][j]==4)
    				CountBox++;
    		}
    	}
    	return CountBox;
    }
    //main
    int main()
    {
    
    	SetConsoleTitle("智阅荟推箱子");
    	system("mode con cols=26 lines=12");
    
    
    	while(1) {
    
    		if(GetRestBox()==0) {
    			//MessageBox(NULL,"你成功了!","祝贺你:",MB_OK);
    			//NextLevel++; //开启下一关	未完成,大家可以继续写下一关
    		}
    		system("cls");
    		Drapmap();
    		char ch=getch();
    
    
    		switch(ch) {
    			case 'w' :
    			case 'W' :
    			case 72 :
    				up();
    				break;
    			case 's' :
    			case 'S' :
    			case 80 :
    				down();
    				break;
    			case 'a' :
    			case 'A' :
    			case 75 :
    				left();
    				break;
    			case 'd' :
    			case 'D' :
    			case 77 :
    				right();
    				break;
    		}
    	}
    	return 0;
    }
    

    本文的C++源文件可以在微信号”智阅荟“回复222下载:

    最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

    欢迎关注公众号:「智阅荟」,懂技术,更懂你!

    ↑关注上方公众号回复 222 即可下载源代码↑

      

  • 相关阅读:
    C# 16 进制字符串转 int
    C# 16 进制字符串转 int
    dotnet 设计规范 · 抽象定义
    dotnet 设计规范 · 抽象定义
    C# 从零开始写 SharpDx 应用 控制台创建 Sharpdx 窗口
    C# 从零开始写 SharpDx 应用 控制台创建 Sharpdx 窗口
    C# 判断两条直线距离
    C# 判断两条直线距离
    PHP file() 函数
    PHP fgetss() 函数
  • 原文地址:https://www.cnblogs.com/hbqjzx/p/13802382.html
Copyright © 2011-2022 走看看