推箱子游戏

原创 2015年07月07日 15:50:51
大一寒假

1.写代码时我犯了一个很大的错误(不然早就搞定了)把&&与||混淆了;大忌啊
2.这里实现了数字化编码
3.上72 下80 左75 右77     
4.特殊图形可以到QQ拼音符号里获取


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define x 1//人的位置
#define y 5
#define n 10//地图大小




int cont;
void move(int a[][10],int *m,int *g,int i,int j);//移动函数
int huatu(int a[n][n]);//画图

int main(void)
{

	
	int m=x;
    int g=y;

int a[n][n]={
{9,9,9,9,9,9,9,9,9,9},
{9,0,0,0,9,1,0,3,3,9},
{9,0,0,0,9,0,0,0,3,9},
{9,0,2,0,9,9,0,0,0,9},
{9,0,0,0,9,0,9,0,0,9},
{9,0,2,9,0,0,9,0,0,9},
{9,0,0,0,0,0,0,0,0,9},
{9,0,0,0,0,0,0,0,2,9},
{9,0,0,0,9,0,0,0,0,9},
{9,9,9,9,9,9,9,9,9,9}
};

    int ch;

    huatu(a);
    while(1)
    {  


   ch=getch();

      
    switch(ch)
    {
    case 72: move(a,&m,&g,-1,0);break;
    case 80: move(a,&m,&g,1,0);break;
    case 75: move(a,&m,&g,0,-1);break;
    case 77: move(a,&m,&g,0,1);break;
    };
	system("cls");
    cont=huatu(a);

    if(cont==3)
printf("成功\n");};

    return 0;

}

void move(int a[][10],int *m,int *g,int i,int j)
{ int k=0;

    if(a[*m+i][*g+j]==0||a[*m+i][*g+j]==3)//人->无/位
	{
		a[*m][*g]-=1;
		a[*m+i][*g+j]+=1;
		*m+=i;*g+=j;
		return;
	}
    if(a[*m+i][*g+j]==9){printf("撞墙了");return;}  //人->墙
    if(a[*m+i][*g+j]==2||a[*m+i][*g+j]==5)//人->箱
	{
		if(a[*m+2*i][*g+2*j]==2||a[*m+2*i][*g+2*j]==5||a[*m+2*i][*g+2*j]==9)return;//人->箱->箱/墙
		if(a[*m+2*i][*g+2*j]==0||a[*m+2*i][*g+2*j]==3)//人->箱->无/位
		{
			if(a[*m+2*i][*g+2*j]==3)k=3;//人->箱->位
			if(a[*m][*g]==1&&a[*m+i][*g+j]==2)  {a[*m][*g]=0;a[*m+i][*g+j]=1;}//只有人-》只有箱子
			if(a[*m][*g]==1&&a[*m+i][*g+j]==5)  {a[*m][*g]=0;a[*m+i][*g+j]=4;}//只有人-》含有箱子的位置
			if(a[*m][*g]==4&&a[*m+i][*g+j]==2)	{a[*m][*g]=3;a[*m+i][*g+j]=1;}//含有人的位置-》只有箱子
			if(a[*m][*g]==4&&a[*m+i][*g+j]==5)	{a[*m][*g]=3;a[*m+i][*g+j]=4;}//含有人的位置-》含有箱子的位置

			a[*m+2*i][*g+2*j]=2+k;

		   *m+=i;*g+=j;
		}
	}

printf("%d",m);

}



int  huatu(int a[n][n])
{ int count=0;
  int i,j;
    for(i=0;i<n;i++)
    {    for(j=0;j<n;j++)
        {
           if(a[i][j]==5)count++;
          switch (a[i][j])
           {case 9:printf("■");break;
            case 0:printf("  ");break;
            case 2:printf("□");break;
			case 4:
            case 1:printf("㊣");break;
			case 3:printf("※");break;
			case 5:printf("☆");break;
            default: printf("?");
			}
		}
	    printf("\n");  
	}

    printf("\n\n按上下左右");
	return count;
}





#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define n 10//地图大小

    int m=1;
    int g=5;


int cont;
void move(int a[][10],int i,int j);//移动函数
int huatu(int a[n][n]);//画图

int main(void)
{
	
int a[n][n]={
{9,9,9,9,9,9,9,9,9,9},
{9,0,0,0,9,1,0,3,3,9},
{9,0,0,0,9,0,0,0,3,9},
{9,0,2,0,9,9,0,0,0,9},
{9,0,0,0,9,0,9,0,0,9},
{9,0,2,9,0,0,9,0,0,9},
{9,0,0,0,0,0,0,0,0,9},
{9,0,0,0,0,0,0,0,2,9},
{9,0,0,0,9,0,0,0,0,9},
{9,9,9,9,9,9,9,9,9,9}
};

    int ch;

    huatu(a);
    while(1)
    {  


    ch=getch();

      
    switch(ch)
    {
    case 72: move(a,-1,0);break;
    case 80: move(a,1,0);break;
    case 75: move(a,0,-1);break;
    case 77: move(a,0,1);break;
    };
	system("cls");
    cont=huatu(a);

    if(cont==3)
printf("成功\n");};

    return 0;

}

void move(int a[][10],int i,int j)
{ int k=0;
    if(a[m+i][g+j]==9)printf("撞墙了");  //人-墙
    if(a[m+i][g+j]==0||a[m+i][g+j]==3)//人-无/位
	{
		a[m][g]-=1;
		a[m+i][g+j]+=1;
		m+=i;g+=j;
		return;
	}
    if(a[m+i][g+j]==2||a[m+i][g+j]==5)//人-箱
	{
		if(a[m+2*i][g+2*j]==2||a[m+2*i][g+2*j]==5||a[m+2*i][g+2*j]==9)return;//人-箱-箱墙
		if(a[m+2*i][g+2*j]==0||a[m+2*i][g+2*j]==3)//人-箱-无/位
		{
			if(a[m+2*i][g+2*j]==3)k=3;
			if(a[m][g]==1&&a[m+i][g+j]==2){a[m][g]=0;a[m+i][g+j]=1;a[m+2*i][g+2*j]=2+k;}
			if(a[m][g]==1&&a[m+i][g+j]==5){a[m][g]=0;a[m+i][g+j]=4;a[m+2*i][g+2*j]=2+k;}
			if(a[m][g]==4&&a[m+i][g+j]==2){a[m][g]=3;a[m+i][g+j]=1;a[m+2*i][g+2*j]=2+k;}
			if(a[m][g]==4&&a[m+i][g+j]==5){a[m][g]=3;a[m+i][g+j]=4;a[m+2*i][g+2*j]=2+k;}
		   m+=i;g+=j;
		}
	}

printf("%d",m);

}



int  huatu(int a[n][n])
{ int count=0;
  int i,j;
    for(i=0;i<n;i++)
    {    for(j=0;j<n;j++)
        {
           if(a[i][j]==5)count++;
            switch (a[i][j])
            {    case 9:printf("■");break;
                case 0:printf("  ");break;
               case 2:printf("□");break;
				   	case 4:
            case 1:printf("㊣");break;
		
            case 3:printf("※");break;
			case 5:printf("☆");break;
            default: printf("?");
			}
		};printf("\n");  
	};
    printf("\n\n按上下左右");
	return count;
}

Unity3D开发的2D游戏---《趣味推箱子》

趁着工作的空闲时候,用Unity3D的自带的2D系统和NGUI做了个推箱子的游戏,目前共30个关卡。   里面加入了类似与愤怒的小鸟的关卡选择系统,时间和炸弹两个道具等内容。对于Window/W...
  • ml3947
  • ml3947
  • 2014年12月11日 17:06
  • 2849

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C#入门学习-----推箱子游戏(WPF技术实现)

欢迎大家提出意见,一起讨论! 转载请标明是引用于 http://blog.csdn.net/chenyujing1234 需要源码请与我联系。    编译平台:VS2008 + .Net Fr...

【面试笔试算法】Program 5 : 推箱子 (网易游戏笔试题)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 推箱子是一款经典游戏。如图所示,灰色格子代表不能通过区域,蓝色方格是箱子,黑色圆形代表玩家,含有圆点的格子代表目...

linux shell脚本游戏之推箱子

#! /bin/sed -nf #r sokoban.sed - 2002-03-15 aur閘io marinho jargas #r ----------- #r motivated by...

基于Android的推箱子小游戏 源码

package com.example.pushbox; import android.os.Bundle; import android.app.Activity; import android...

Android开发入门——推箱子游戏开发实战(十)

本文是系列文章第十篇,讲如何在推箱子游戏程序中实现下述功能:玩家用手指触摸屏幕来指挥搬运工走动。系列文章第九篇“绘制游戏区域”是本文的前提。...

Android开发入门——推箱子游戏开发实战(九)

本文是推箱子游戏开发实战系列文章第九篇,是在第八篇的基础上讲如何绘制游戏区。 本文知识点: 1. 用Java代码(而不是xml格式的布局文件)创建活动的界面。 2. 如何绘制2D图形(如直线、矩形)...

Greenfoot游戏——推箱子

Greenfoot写游戏—— 推箱子作为一个新人,第一次写博客,文章的调理以及结构可能不够清晰,如果有哪里说的不清楚欢迎各位提醒我。本应用内的素材剽窃于此html5 游戏中,写此文前未得到原作者授权允...
  • zpf124
  • zpf124
  • 2016年01月09日 12:03
  • 1810

微信HTML5小游戏之推箱子

经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:推箱子游戏
举报原因:
原因补充:

(最多只允许输入30个字)