用C语言编写的推箱子小游戏

大一时候的期末大作业,一直没找到,在桌子缝里找到了优盘,现在才把内容放上来,希望能帮到你们。具体内容分为实验报告和程序具体代码。

 

程序设计基础

——期末大作业报告

 

实验设计

1.编写推箱子小游戏

2.使用C语言

3.使用Dev C++编程程序

4.实现小人移动判定

5.实现通关判定

 

实验分析

1.首先了解推箱子游戏的规则

2.使用代码完成基本的功能

3.判断移动是否正确

4.实现关卡之间的连接

5.判断游戏是否结束

6.尽量保证推箱子游戏的操作完整性

 

 

 

实现难点及解决方案

一、小人移动的判定

1. 该方向第一个方格为边界;

2. 该方向第一个方格是箱子,第二个方格是边界;

3.该方向第一个方格是箱子,第二个方格是放好位置的箱子;

4. 该方向第一个方格是箱子,第二个方格是箱子。

以上为小人无法移动的条件。

解决方案:

1. 人物移动时判断人物当前位置是空地还是目的地

2. 人物的移动的方向的前方是空地时可直接交换,

3. 人物的移动的方向的前方是箱子时需要再分几种情形

a. 箱子的前方是墙或箱子则无动作

b. 箱子的前方是空地则三者互换

c. 箱子的前方是目的地时则移动

 

 

 

二、地图的制作

1. 使用二维数组

2. 对游戏中的不同类型物体编号

3. 输出时根据数字不同输出不同形状:

1——墙

2——箱子

3——人物

4——目的地

 

 

部分代码如下:

(完整代码联系博主)

#include<stdio.h>  
#include<stdlib.h>   
#include<string.h>   
#include<conio.h> 
int i=0; 
int map_1[8][8]={
     {0,0,0,0,0,0,0,0},
     {0,1,1,1,1,1,1,0},
     {0,1,4,0,0,0,1,0},
     {0,1,0,2,0,0,1,0},
     {0,1,0,0,3,0,1,0},
     {0,1,0,0,0,0,1,0},
     {0,1,1,1,1,1,1,0},
     {0,0,0,0,0,0,0,0}
 }; 
int map_2[8][8]={
     {0,0,0,0,0,0,0,0},
     {0,0,0,0,1,1,1,0},
     {0,0,0,0,1,4,1,0},
     {0,0,0,0,1,0,1,0},
     {0,1,1,1,1,2,1,0},
     {0,1,3,0,0,0,1,0},
     {0,1,1,1,1,1,1,0},
     {0,0,0,0,0,0,0,0}
 }; 
 int map_3[8][8]={
     {0,0,1,1,1,0,0,0},
     {0,0,1,4,1,0,0,0},
     {0,0,1,2,1,1,1,1},
     {1,1,1,0,0,2,4,1},
     {1,4,0,2,3,1,1,1},
     {1,1,1,1,2,1,0,0},
     {0,0,0,1,4,1,0,0},
     {0,0,0,1,1,1,0,0}
 }; 
 int map_4[8][8]={
     {1,1,1,1,1,1,1,1},
     {1,0,0,4,0,0,0,1},
     {1,0,0,2,0,0,0,1},
     {1,0,0,0,0,2,4,1},
     {1,4,2,0,3,0,0,1},
     {1,0,0,0,2,0,0,1},
     {1,0,0,0,4,0,0,1},
     {1,1,1,1,1,1,1,1}};
 int map_5[8][8]={
     {1,1,1,1,1,1,1,1},
     {1,0,0,0,0,0,0,1},
     {1,1,0,0,0,0,0,1},
     {1,0,4,1,1,2,0,1},
     {1,0,0,1,3,0,0,1},
     {1,0,0,1,0,0,0,1},
     {1,0,0,1,0,0,0,1},
     {1,1,1,1,1,1,1,1}};
int map_6[8][8]={
     {1,1,1,1,1,1,1,1},
     {1,0,0,0,0,0,0,1},
     {1,0,0,4,0,4,0,1},
     {1,0,0,2,0,2,0,1},
     {1,0,0,0,3,0,0,1},
     {1,0,0,2,0,2,0,1},
     {1,0,0,4,0,4,0,1},
     {1,1,1,1,1,1,1,1}}; 
int map_7[8][8]={
     {1,1,1,1,1,1,1,1},
     {1,4,4,4,1,1,1,1},
     {1,0,2,0,1,1,1,1},
     {1,0,3,0,1,1,1,1},
     {1,0,2,2,0,1,1,1},
     {1,0,0,0,1,1,1,1},
     {1,0,0,1,1,1,1,1},
     {1,1,1,1,1,1,1,1}};
int map_8[8][8]={
     {1,1,1,1,1,1,1,1},
     {1,0,0,0,1,1,1,1},
     {1,4,0,2,1,1,1,1},
     {1,4,0,3,0,0,1,1},
     {1,1,2,0,1,0,1,1},
     {1,1,0,0,0,0,1,1},
     {1,1,1,1,1,1,1,1},};
int map_9[8][8]={
     {1,1,1,1,1,1,1,0},
     {1,0,0,4,2,0,1,0},
     {1,0,1,0,0,0,1,0},
     {1,0,1,0,1,0,1,0},
     {1,0,0,3,1,0,1,0},
     {1,4,2,0,0,0,1,0},
     {1,0,1,1,1,1,1,0},
	 {1,1,1,0,0,0,0,0},};
int map_10[8][8]={
     {0,1,1,1,1,1,0,0},
     {0,1,0,0,1,1,1,0},
     {0,1,0,0,0,0,1,0},
     {1,1,1,3,1,0,1,1},
     {1,4,0,2,0,0,0,1},
     {1,4,2,0,0,1,0,1},
     {1,4,0,0,0,2,0,1},
	 {1,1,1,1,1,1,1,1},};	     
 int x, y;
int map[8][8] = {0};
int shuchu()
 {
     for(x=0; x<8; x++)
     {
         for(y=0; y<8; y++)
         {
             if(map[x][y] == 1)
                 printf("X "); 
             if(map[x][y] == 3)
                 printf("P "); 
             if(map[x][y] == 2)
                 printf("Q "); 
             if(map[x][y] == 4)
                 printf("B ");  
             if(map[x][y] == 0)
                 printf("  "); 
             if(map[x][y] == 5) 
                 printf("V "); 
                 if(map[x][y] == 6) 
                 printf("M "); 
                 
         }
         printf("\n");
     }
     return 0;
 }
 int zhujiemian()
 {
     printf("                           \n"
     		"                           \n"
     		"                           \n"
     		"                           \n"
     		"                           \n"
     		"                           \n"
     		"                           \n"
			"                           \n" 
     		"                           \n"
     		"                           \n"
            "                          welcome!     \n"
            "                           \n"
            "                           \n"
            "                           R : replay              \n"
            "                           WSAD : move    \n"
            "                                   \n"
            "                             \n");
            }
            
 int find()
 {
     for(x=0; x<8; x++)
         for(y=0; y<8; y++)
         {
             if(map[x][y] == 3||map[x][y] == 6)
                 return 0;
         }
         return 0;
 }

 int count1()
 {
     int n=0;
     for(x=0; x<8; x++)
         for(y=0; y<8; y++)
         {
             if(map[x][y] == 4)
                 n++;
         }
    return n;
 }

 int count2()
 {
     int m=0;
     for(x=0; x<8; x++)
         for(y=0; y<8; y++)
         {
             if(map[x][y] == 5)
                 m++;
         }
         return m;
 }
 
 int up()
 {
     if(map[x][y] == 3) 
     {
         if(map[x-1][y] == 0) 
         {
             map[x-1][y] = 3;
             map[x][y] = 0;
         }
         if(map[x-1][y] == 2 && map[x-2][y] == 4) 
         {
             map[x][y] = 0;
             map[x-1][y] = 3;
             map[x-2][y] = 5;
         }
         if(map[x-2][y] == 0 && map[x-1][y] == 2) 
        {
            map[x][y] = 0;
            map[x-1][y] = 3;
            map[x-2][y] = 2;
        }
         else if(map[x-1][y] == 4){
         	 map[x][y] =0;
			  map[x-1][y] = 6; 
		 }
     }
     else if(map[x][y] == 6){
     	 if(map[x-1][y] == 0) 
         {
             map[x-1][y] = 3;
             map[x][y] = 4;
         }
         if(map[x-1][y] == 2 && map[x-2][y] == 4) 
         {
             map[x][y] = 4;
             map[x-1][y] = 3;
             map[x-2][y] = 5;
         }
         if(map[x-2][y] == 0 && map[x-1][y] == 2) 
        {
            map[x][y] = 4;
            map[x-1][y] = 3;
            map[x-2][y] = 2;
        }
         else if(map[x-1][y] == 4){
         	 map[x][y] =4;
			  map[x-1][y] = 6; 
		 }
	 }
     return 0;
 }
 
 int down()
 {
     if(map[x][y] == 3)             
     {
         if(map[x+1][y] == 0)      
         {
            map[x+1][y] = 3;
            map[x][y] = 0;
         }
         if(map[x+1][y] == 2 && map[x+2][y] == 4)  
         {
             map[x][y] = 0;
             map[x+1][y] = 3;
             map[x+2][y] = 5;
         }
         if(map[x+2][y] == 0 && map[x+1][y] == 2) 
        {
            map[x][y] = 0;
            map[x+1][y] = 3;
            map[x+2][y] = 2;
        }
         else if(map[x+1][y] == 4){
         	 map[x][y] =0;
			  map[x+1][y] = 6; 
		 }
         
     }
        else if(map[x][y] == 6){
     	  if(map[x+1][y] == 0)       
         {
            map[x+1][y] = 3;
            map[x][y] = 4;
         }
         if(map[x+1][y] == 2 && map[x+2][y] == 4)  
         {
             map[x][y] = 4;
             map[x+1][y] = 3;
             map[x+2][y] = 5;
         }
         if(map[x+2][y] == 0 && map[x+1][y] == 2) 
        {
            map[x][y] = 4;
            map[x+1][y] = 3;
            map[x+2][y] = 2;
        }
         else if(map[x+1][y] == 4){
         	 map[x][y] =4;
			  map[x+1][y] = 6; 
		 }
         
	 }
     return 0;
 }
 
 

 

 

 

 

  • 18
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值