用C/C++写小游戏--------推箱子

我们用’ #'来代表墙,‘O’来代表箱子,’ * '代表终点,‘@’代表箱子已经到达终点,‘S来表示人’。
注意:W,A,S,D为方向键,而且要在英文格式下
运行示例:
在这里插入图片描述

以下为完整代码:

/*

推箱子(示例二) 


*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
int main()
{
	char a[12][12]={"##########",
					"##     ###",
                    "##O###   #",
                    "# S O  O #",
                    "# **# O ##",
                    "##**#   ##",
                    "##########",
                   };
    int x=3,y=2;
    int i;
    char ch;
    for(i=0;i<7;i++)
    puts(a[i]);
    
    while(a[4][2]!='@'||a[4][3]!='@'||a[5][2]!='@'||a[5][3]!='@')
    {
    	
		ch=getch();
    	if(ch=='s')
    	{
    	    if(a[x+1][y]!='#'&&a[x+1][y]!='O'&&a[x+1][y]!='@')    //如果只有人,没有箱子 
    		{
    			a[x][y]=' ';
    			x++;
    			a[x][y]='S';
			}
			else if(a[x+2][y]!='#'&&a[x+1][y]=='O'&&a[x+2][y]!='*')            //如果是箱子和人一起走 
			{
				a[x][y]=' ';
				x++;
				a[x][y]='S';
				a[x+1][y]='O';
			}
			else if(a[x+2][y]!='#'&&(a[x+1][y]=='O'||a[x+1][y]=='@')&&a[x+2][y]=='*')   //如果人和箱子一起走,并且前面是终点      
			{
				a[x][y]=' ';
				x++;
				a[x][y]='S'; 
				a[x+1][y]='@';
			}
		}
		
		if(ch=='w')
    	{
    		
    		if(a[x-1][y]!='#'&&a[x-1][y]!='O'&&a[x-1][y]!='@')    //如果只有人,没有箱子 
    		{
    			a[x][y]=' ';
    			x--;
    			a[x][y]='S';
    			
			}
			else if(a[x-2][y]!='#'&&a[x-1][y]=='O'&&a[x-2][y]!='O')            //如果是箱子和人一起走 
			{
				a[x][y]=' ';
				x--;
				a[x][y]='S';
				a[x-1][y]='O';

			}
			else if(a[x-2][y]!='#'&&(a[x-1][y]=='O'||a[x-1][y]=='@')&&a[x-2][y]=='*')   //如果人和箱子一起走,并且前面是终点      
			{
				a[x][y]=' ';
				x--;
				a[x][y]='S'; 
				a[x-1][y]='@';
			}
		}
		if(ch=='a')
    	{
    		
    		if(a[x][y-1]!='#'&&a[x][y-1]!='O'&&a[x][y-1]!='@')    //如果只有人,没有箱子 
    		{
    			a[x][y]=' ';
    			y--;
    			a[x][y]='S';
    			
			}
			else if(a[x][y-2]!='#'&&a[x][y-1]=='O')            //如果是箱子和人一起走 
			{
				a[x][y]=' ';
				y--;
				a[x][y]='S';
				a[x][y-1]='O';
			}
			else if(a[x][y-2]!='#'&&(a[x][y-1]=='O'||a[x][y-1]=='@')&&a[x][y-2]=='*')   //如果人和箱子一起走,并且前面是终点      
			{
				a[x][y]=' ';
				y--;
				a[x][y]='S'; 
				a[x][y-1]='@';
			}
		}
		if(ch=='d')
    	{
    		
    		if(a[x][y+1]!='#'&&a[x][y+1]!='O'&&a[x][y+1]!='@')    //如果只有人,没有箱子 
    		{
    			a[x][y]=' ';
    			y++;
    			a[x][y]='S';
    			
			}
			else if(a[x][y+2]!='#'&&a[x][y+1]=='O'&&a[x][y+2]!='O')            //如果是箱子和人一起走 
			{
				a[x][y]=' ';
				y++;
				a[x][y]='S';
				a[x][y+1]='O';
			}
			else if(a[x][y+2]!='#'&&(a[x][y+1]=='O'||a[x][y+1]=='@')&&a[x][y+2]=='*'&&a[x][y+2]!='O')   //如果人和箱子一起走,并且前面是终点      
			{
				a[x][y]=' ';
				y++;
				a[x][y]='S'; 
				a[x][y+1]='@';
			}
		}
		if(a[4][2]!='@'&&a[4][2]!='S'&&a[4][2]!='*')
    	{
    		a[4][2]='*';
		}
		if(a[4][3]!='@'&&a[4][3]!='S'&&a[4][3]!='*')
    	{
    		a[4][3]='*';
		}
		if(a[5][2]!='@'&&a[5][2]!='S'&&a[5][2]!='*')
    	{
    		a[5][2]='*';
		}
		if(a[5][3]!='@'&&a[5][3]!='S'&&a[5][3]!='*')
    	{
    		a[5][3]='*';
		}
		if(a[1][2]=='O'||a[1][6]=='O'||a[2][8]=='O'||a[3][8]=='O'||a[5][5]=='O'||a[5][7]=='O')              //判断失败的情况 
		{
			break;
		}
		system("cls");
		for(i=0;i<7;i++)
    	puts(a[i]);
	}
	system("cls");
	if(a[4][2]!='@'||a[4][3]!='@'||a[5][2]!='@'||a[5][3]!='@')
    printf("YOU LOSE!");
    else
    printf("YOU WIN!");
    Sleep(3000);
    
	return 0;
}



发布了12 篇原创文章 · 获赞 16 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览